{"version":3,"file":"button.mjs","sources":["../../../../../packages/components/button/src/button.vue"],"sourcesContent":["<template>\n  <button\n    :class=\"['vc-button-wrapper', 'vc-button--' + type, customClass, block || size === 'auto' ? 'vc-button--block' : null, disabled ? 'vc-button--disabled' : null]\"\n    :hover-class=\" hoverClass || 'vc-button--hover'\" :style=\"wrapperStyled\" :disabled=\"disabled\" :open-type=\"openType\"\n    @getphonenumber=\"onGetPhoneNumber\" @getuserinfo=\"onGetUserInfo\" @opensetting=\"onOpenSetting\" @tap=\"onClick\">\n    <view\n      :class=\"['vc-button', plain ? 'vc-button--plain' : null, border && !isLinearGradient && !disabled ? 'vc-hairline--surround' : null]\"\n      :style=\"buttonStyled\">\n      <vc-loading v-if=\"loading\" type=\"spinner\" color=\"#fff\"></vc-loading>\n      <template v-else>\n        <slot v-if=\"icon\" name=\"icon\">\n          <vc-icon class=\"vc-button__icon\" :name=\"icon\" :size=\"iconSize\" :color=\"iconColor\" />\n        </slot>\n        <view class=\"vc-button__text\">\n          <slot></slot>\n        </view>\n      </template>\n    </view>\n  </button>\n</template>\n\n<script>\nimport { addUnit } from '../../common/util';\nimport '../style'\n\nexport default {\n  name: 'vc-button',\n  props: {\n    // 按钮类型\n    type: {\n      type: String,\n      default: 'default',\n      validator(value) {\n        return ['default', 'primary', 'info', 'success', 'error', 'text', 'custom'].includes(value);\n      },\n    },\n    // 左侧图标图片链接\n    icon: null,\n    // 左侧图标尺寸\n    iconSize: {\n      type: [Number, String],\n      default: 16\n    },\n    // 左侧图标颜色\n    iconColor: {\n      type: String,\n      default: '#fff'\n    },\n    // 按钮颜色，支持传入linear-gradient渐变色\n    color: null,\n    // 是否为朴素按钮\n    plain: {\n      type: Boolean,\n      default: false,\n    },\n    // default-默认大小  mini-小尺寸 auto-自定义\n    size: {\n      type: String,\n      default: 'default',\n      validator(value) {\n        return ['default', 'mini', 'large', 'auto'].includes(value);\n      }\n    },\n    // 是否为块级元素\n    block: {\n      type: Boolean,\n      default: false,\n    },\n    // 按钮圆角弧度\n    radius: {\n      type: Number,\n      default: 0,\n    },\n    // 是否为圆形按钮\n    round: {\n      type: Boolean,\n      default: false,\n    },\n    // 是否显示边框\n    border: {\n      type: Boolean,\n      default: true,\n    },\n    // 小程序开放能力\n    openType: null,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n    // 加载中状态，防重复点击\n    loading: {\n      type: Boolean,\n      default: false\n    },\n    hoverClass: null,\n    // 自定义组件 class\n    customClass: null,\n    // 自定义组件样式\n    customStyle: null\n  },\n  data() {\n    return {\n      antiRepeatClick: false\n    };\n  },\n  computed: {\n    isLinearGradient() {\n      // 是否自定义渐变色\n      return this.color && /^linear.+/.test(this.color);\n    },\n    wrapperStyled() {\n      let style = '';\n      if (this.type === 'text') {\n        if (this.disabled) {\n          style += 'background: none;';\n        }\n      } else {\n        // 背景色\n        if (this.type === 'custom') {\n          let colorStyle = '';\n          if (this.color) {\n            colorStyle += `background: ${this.color};border-color: ${this.color};color: #fff;`;\n          }\n          if (this.plain) {\n            colorStyle += `color: ${this.color};border-color: ${this.color};`;\n          }\n          style += colorStyle;\n        }\n\n        if (this.plain) {\n          style += 'background: none;';\n        }\n\n        // 圆角\n        if (this.round) {\n          style += 'border-radius: 999px;';\n        } else {\n          style += `border-radius: ${addUnit(this.radius)};`;\n        }\n\n        // 按钮尺寸\n        if (this.size == 'mini') {\n          style += 'height: 72rpx; font-size: 24rpx;';\n        } else if (this.size == 'large') {\n          style += 'height: 104rpx; font-size: 32rpx;';\n        } else if (this.size == 'auto') {\n          style += 'height: 100%; font-size: inherit;';\n        } else {\n          style += 'height: 88rpx; font-size: 32rpx;';\n        }\n      }\n      return style + this.customStyle;\n    },\n    buttonStyled() {\n      let style = '';\n      // 圆角\n      if (this.round) {\n        style += 'border-radius: 999px;';\n      } else {\n        style += `border-radius: ${addUnit(this.radius * (this.plain ? 1 : 2))};`;\n      }\n      return style;\n    },\n    clickable() {\n      return !this.disabled && !this.loading && !this.antiRepeatClick;\n    }\n  },\n  methods: {\n    onClick(e) {\n      if (!this.clickable) return;\n      this.antiRepeatClick = true;\n      this.$emit('click', e);\n      setTimeout(() => {\n        this.antiRepeatClick = false;\n      }, 1000);\n    },\n    onGetPhoneNumber(e) {\n      this.$emit('getphonenumber', e.detail);\n    },\n    onOpenSetting(e) {\n      this.emit('opensetting', e.detail);\n    },\n    onGetUserInfo(e) {\n      this.$emit('getuserinfo', e.detail);\n    }\n  }\n};\n</script>\n"],"names":["__vue2_script","value","style","colorStyle","addUnit"],"mappings":"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"}