{"version":3,"file":"button2.mjs","sources":["../../../../../../packages/components/button/src/button.vue"],"sourcesContent":["<template>\n  <button\n    ref=\"_ref\"\n    :class=\"[\n      ns.b(),\n      ns.m(_type),\n      ns.m(_size),\n      ns.is('disabled', _disabled),\n      ns.is('loading', loading),\n      ns.is('plain', plain),\n      ns.is('round', round),\n      ns.is('circle', circle),\n    ]\"\n    :disabled=\"_disabled || loading\"\n    :autofocus=\"autofocus\"\n    :type=\"nativeType\"\n    :style=\"buttonStyle\"\n    @click=\"handleClick\"\n  >\n    <template v-if=\"loading\">\n      <slot v-if=\"$slots.loading\" name=\"loading\" />\n      <el-icon v-else :class=\"ns.is('loading')\">\n        <component :is=\"loadingIcon\" />\n      </el-icon>\n    </template>\n    <el-icon v-else-if=\"icon || $slots.icon\">\n      <component :is=\"icon\" v-if=\"icon\" />\n      <slot v-else name=\"icon\" />\n    </el-icon>\n    <span\n      v-if=\"$slots.default\"\n      :class=\"{ [ns.em('text', 'expand')]: shouldAddSpace }\"\n    >\n      <slot />\n    </span>\n  </button>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, Text, ref, useSlots } from 'vue'\nimport { TinyColor } from '@ctrl/tinycolor'\nimport { ElIcon } from '@element-plus/components/icon'\nimport {\n  useDisabled,\n  useFormItem,\n  useGlobalConfig,\n  useNamespace,\n  useSize,\n} from '@element-plus/hooks'\nimport { buttonGroupContextKey } from '@element-plus/tokens'\nimport { buttonEmits, buttonProps } from './button'\n\ndefineOptions({\n  name: 'ElButton',\n})\n\nconst props = defineProps(buttonProps)\nconst emit = defineEmits(buttonEmits)\nconst slots = useSlots()\n\nconst buttonGroupContext = inject(buttonGroupContextKey, undefined)\nconst globalConfig = useGlobalConfig('button')\nconst ns = useNamespace('button')\nconst { form } = useFormItem()\nconst _size = useSize(computed(() => buttonGroupContext?.size))\nconst _disabled = useDisabled()\nconst _ref = ref<HTMLButtonElement>()\n\nconst _type = computed(() => props.type || buttonGroupContext?.type || '')\nconst autoInsertSpace = computed(\n  () => props.autoInsertSpace ?? globalConfig.value?.autoInsertSpace ?? false\n)\n\n// add space between two characters in Chinese\nconst shouldAddSpace = computed(() => {\n  const defaultSlot = slots.default?.()\n  if (autoInsertSpace.value && defaultSlot?.length === 1) {\n    const slot = defaultSlot[0]\n    if (slot?.type === Text) {\n      const text = slot.children as string\n      return /^\\p{Unified_Ideograph}{2}$/u.test(text.trim())\n    }\n  }\n  return false\n})\n\n// calculate hover & active color by custom color\n// only work when custom color\nconst buttonStyle = computed(() => {\n  let styles: Record<string, string> = {}\n\n  const buttonColor = props.color\n\n  if (buttonColor) {\n    const color = new TinyColor(buttonColor)\n    const shadeBgColor = color.shade(20).toString()\n    if (props.plain) {\n      styles = {\n        '--el-button-bg-color': color.tint(90).toString(),\n        '--el-button-text-color': buttonColor,\n        '--el-button-hover-text-color': 'var(--el-color-white)',\n        '--el-button-hover-bg-color': buttonColor,\n        '--el-button-hover-border-color': buttonColor,\n        '--el-button-active-bg-color': shadeBgColor,\n        '--el-button-active-text-color': 'var(--el-color-white)',\n        '--el-button-active-border-color': shadeBgColor,\n      }\n    } else {\n      const tintBgColor = color.tint(30).toString()\n      styles = {\n        '--el-button-bg-color': buttonColor,\n        '--el-button-border-color': buttonColor,\n        '--el-button-hover-bg-color': tintBgColor,\n        '--el-button-hover-border-color': tintBgColor,\n        '--el-button-active-bg-color': shadeBgColor,\n        '--el-button-active-border-color': shadeBgColor,\n      }\n    }\n\n    if (_disabled.value) {\n      const disabledButtonColor = color.tint(50).toString()\n      styles['--el-button-disabled-bg-color'] = disabledButtonColor\n      styles['--el-button-disabled-border-color'] = disabledButtonColor\n    }\n  }\n\n  return styles\n})\n\nconst handleClick = (evt: MouseEvent) => {\n  if (props.nativeType === 'reset') {\n    form?.resetFields()\n  }\n  emit('click', evt)\n}\n\ndefineExpose({\n  /** @description button html element */\n  ref: _ref,\n  /** @description button size */\n  size: _size,\n  /** @description button type */\n  type: _type,\n  /** @description button disabled */\n  disabled: _disabled,\n  /** @description whether adding space */\n  shouldAddSpace,\n})\n</script>\n"],"names":[],"mappings":"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"}