mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-11-04 06:23:17 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			176 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
  <button :type="type" :class="btnClass" :disabled="disabled" @click="handleClick">
 | 
						|
    <font-awesome-icon v-if="icon && !loading && !rightIcon" :class="iconClass" :icon="icon" class="vue-icon icon-left" />
 | 
						|
    <font-awesome-icon v-if="loading" :class="iconClass" icon="spinner" class="fa-spin"/>
 | 
						|
    <slot />
 | 
						|
    <font-awesome-icon v-if="icon && !loading && rightIcon" :class="iconClass" :icon="icon" class="vue-icon icon-right" />
 | 
						|
  </button>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
 | 
						|
export default {
 | 
						|
  props: {
 | 
						|
    icon: {
 | 
						|
      type: String,
 | 
						|
      required: false,
 | 
						|
      default: ''
 | 
						|
    },
 | 
						|
    color: {
 | 
						|
      type: String,
 | 
						|
      required: false,
 | 
						|
      default: ''
 | 
						|
    },
 | 
						|
    round: {
 | 
						|
      type: Boolean,
 | 
						|
      required: false,
 | 
						|
      default: false
 | 
						|
    },
 | 
						|
    outline: {
 | 
						|
      type: Boolean,
 | 
						|
      required: false,
 | 
						|
      default: false
 | 
						|
    },
 | 
						|
    size: {
 | 
						|
      type: String,
 | 
						|
      required: false,
 | 
						|
      default: 'default'
 | 
						|
    },
 | 
						|
    loading: {
 | 
						|
      type: Boolean,
 | 
						|
      required: false,
 | 
						|
      default: false
 | 
						|
    },
 | 
						|
    block: {
 | 
						|
      type: Boolean,
 | 
						|
      required: false,
 | 
						|
      default: false
 | 
						|
    },
 | 
						|
    iconButton: {
 | 
						|
      type: Boolean,
 | 
						|
      required: false,
 | 
						|
      default: false
 | 
						|
    },
 | 
						|
    disabled: {
 | 
						|
      type: Boolean,
 | 
						|
      required: false,
 | 
						|
      default: false
 | 
						|
    },
 | 
						|
    rightIcon: {
 | 
						|
      type: Boolean,
 | 
						|
      required: false,
 | 
						|
      default: false
 | 
						|
    },
 | 
						|
    type: {
 | 
						|
      type: String,
 | 
						|
      required: false,
 | 
						|
      default: 'button'
 | 
						|
    }
 | 
						|
  },
 | 
						|
  computed: {
 | 
						|
    btnClass () {
 | 
						|
      if (this.isCustomStyle) {
 | 
						|
        return ''
 | 
						|
      }
 | 
						|
 | 
						|
      let btnClass = 'base-button '
 | 
						|
 | 
						|
      switch (this.color) {
 | 
						|
        case 'success':
 | 
						|
          if (this.outline) {
 | 
						|
            btnClass += `btn btn-outline-success `
 | 
						|
          } else {
 | 
						|
            btnClass += `btn btn-success `
 | 
						|
          }
 | 
						|
          break
 | 
						|
 | 
						|
        case 'danger':
 | 
						|
          if (this.outline) {
 | 
						|
            btnClass += `btn btn-outline-danger `
 | 
						|
          } else {
 | 
						|
            btnClass += `btn btn-danger `
 | 
						|
          }
 | 
						|
          break
 | 
						|
 | 
						|
        case 'warning':
 | 
						|
          if (this.outline) {
 | 
						|
            btnClass += `btn btn-outline-warning `
 | 
						|
          } else {
 | 
						|
            btnClass += `btn btn-warning `
 | 
						|
          }
 | 
						|
          break
 | 
						|
 | 
						|
        case 'info':
 | 
						|
          if (this.outline) {
 | 
						|
            btnClass += `btn btn-outline-info `
 | 
						|
          } else {
 | 
						|
            btnClass += `btn btn-info `
 | 
						|
          }
 | 
						|
          break
 | 
						|
 | 
						|
        case 'theme':
 | 
						|
          if (this.outline) {
 | 
						|
            btnClass += `btn btn-outline-primary `
 | 
						|
          } else {
 | 
						|
            btnClass += `btn btn-primary `
 | 
						|
          }
 | 
						|
          break
 | 
						|
 | 
						|
        case 'theme-light':
 | 
						|
          if (this.outline) {
 | 
						|
            btnClass += `btn btn-outline-light `
 | 
						|
          } else {
 | 
						|
            btnClass += `btn btn-light `
 | 
						|
          }
 | 
						|
          break
 | 
						|
 | 
						|
        default:
 | 
						|
          if (this.outline) {
 | 
						|
            btnClass += `btn btn-outline-dark `
 | 
						|
          } else {
 | 
						|
            btnClass += `btn btn-dark `
 | 
						|
          }
 | 
						|
          break
 | 
						|
      }
 | 
						|
 | 
						|
      switch (this.size) {
 | 
						|
        case 'large':
 | 
						|
          btnClass += 'btn-lg '
 | 
						|
          break
 | 
						|
 | 
						|
        case 'small':
 | 
						|
          btnClass += 'btn-sm '
 | 
						|
          break
 | 
						|
 | 
						|
        default:
 | 
						|
          btnClass += 'default-size '
 | 
						|
      }
 | 
						|
 | 
						|
      if (this.block) {
 | 
						|
        btnClass += 'btn-block '
 | 
						|
      }
 | 
						|
 | 
						|
      if (this.disabled) {
 | 
						|
        btnClass += ' btn-cursor-not-allowed'
 | 
						|
      }
 | 
						|
 | 
						|
      return btnClass
 | 
						|
    },
 | 
						|
    iconClass () {
 | 
						|
      if (this.loading || !this.iconButton) {
 | 
						|
        if (this.rightIcon) {
 | 
						|
          return 'ml-2'
 | 
						|
        }
 | 
						|
        return 'mr-2'
 | 
						|
      }
 | 
						|
      return 'icon-button'
 | 
						|
    }
 | 
						|
  },
 | 
						|
  methods: {
 | 
						|
    handleClick (e) {
 | 
						|
      this.$emit('click')
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
</script>
 |