144 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
| <template>
 | |
|   <div
 | |
|     class="md-button"
 | |
|     :class="[type, size, disabled ? 'disabled' : '', icon ? 'with-icon' : '']"
 | |
|     @click="$_onBtnClick"
 | |
|   >
 | |
|     <div class="md-button-inner">
 | |
|       <template v-if="icon">
 | |
|         <md-icon :name="icon"></md-icon>
 | |
|       </template>
 | |
|       <slot></slot>
 | |
|     </div>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import Icon from '../icon'
 | |
| export default {
 | |
|   name: 'md-button',
 | |
| 
 | |
|   components: {
 | |
|     [Icon.name]: Icon,
 | |
|   },
 | |
| 
 | |
|   props: {
 | |
|     type: {
 | |
|       type: String,
 | |
|       default: 'primary',
 | |
|     },
 | |
|     size: {
 | |
|       type: String,
 | |
|       default: 'large',
 | |
|     },
 | |
|     icon: {
 | |
|       type: String,
 | |
|       default: '',
 | |
|     },
 | |
|     disabled: {
 | |
|       type: Boolean,
 | |
|       default: false,
 | |
|     },
 | |
|   },
 | |
| 
 | |
|   methods: {
 | |
|     $_onBtnClick(event) {
 | |
|       if (this.disabled) {
 | |
|         event.stopImmediatePropagation()
 | |
|       }
 | |
|     },
 | |
|   },
 | |
| }
 | |
| 
 | |
| </script>
 | |
| 
 | |
| <style lang="stylus">
 | |
| .md-button
 | |
|   -webkit-user-select none
 | |
|   -webkit-tap-highlight-color transparent
 | |
|   position relative
 | |
|   text-align center
 | |
|   border-radius radius-normal
 | |
|   box-sizing border-box
 | |
|   overflow visible
 | |
|   // &.disabled
 | |
|   //   pointer-events none
 | |
|   &::before
 | |
|     absolute-pos()
 | |
|     display none
 | |
|     content ''
 | |
|     position absolute
 | |
|     box-sizing border-box
 | |
|   &:active::before
 | |
|     display block
 | |
|   .md-button-inner
 | |
|     width 100%
 | |
|     height 100%
 | |
|     overflow hidden
 | |
|     text-overflow ellipsis
 | |
|     word-break break-word
 | |
|     white-space nowrap
 | |
| 
 | |
|   // type
 | |
|   &.primary
 | |
|     background-color button-primary-fill
 | |
|     color color-text-base-inverse
 | |
|     &:active::before
 | |
|       background-color button-primary-fill-tap
 | |
|     &.disabled
 | |
|       background-color button-primary-fill-disabled
 | |
|     &.large, &.small
 | |
|       width button-primary-width
 | |
|       height button-primary-height
 | |
|       line-height button-primary-height
 | |
|       font-size button-primary-font-size
 | |
|       font-weight font-weight-medium
 | |
| 
 | |
|   &.ghost
 | |
|     color button-ghost-color
 | |
|     hairline(all, button-ghost-color, true)
 | |
|     &:active::before
 | |
|       background-color button-ghost-fill-tap
 | |
|   &.ghost-primary
 | |
|     color button-ghost-primary-color
 | |
|     hairline(all, button-ghost-primary-color, true)
 | |
|     &:active::before
 | |
|       background-color button-ghost-primary-fill-tap
 | |
|   &.ghost, &.ghost-primary
 | |
|     &.disabled
 | |
|       opacity opacity-disabled
 | |
|     &.large
 | |
|       width button-ghost-width
 | |
|       height button-ghost-height
 | |
|       line-height button-ghost-height
 | |
|       font-size button-ghost-font-size
 | |
|     &.small
 | |
|       width button-ghost-width-sm
 | |
|       height button-ghost-height-sm
 | |
|       line-height button-ghost-height-sm
 | |
|       font-size button-ghost-font-size
 | |
|   
 | |
|   &.link
 | |
|     background-color button-link-fill
 | |
|     color button-link-color
 | |
|     .md-button-inner
 | |
|       hairline(top, color-border-base)
 | |
|       hairline(bottom, color-border-base)
 | |
|       display flex
 | |
|       align-items center
 | |
|       justify-content center
 | |
|     &:active::before
 | |
|       background-color button-link-fill-tap
 | |
|     &.disabled
 | |
|       opacity opacity-disabled
 | |
|     &.large, &.small
 | |
|       width button-link-width
 | |
|       height button-link-height
 | |
|       font-size font-heading-normal
 | |
|     &.with-icon  
 | |
|       .md-icon
 | |
|         display flex
 | |
|         align-items center
 | |
|         justify-content center
 | |
|         margin-right h-gap-sm
 | |
| 
 | |
| </style>
 |