{"version":3,"file":"button.mjs","sources":["../../src/button/button.tsx"],"sourcesContent":["import { computed, defineComponent, h, withDirectives } from 'vue';\nimport TLoading from '../loading';\nimport { Hover } from '../shared';\nimport ButtonProps from './props';\nimport { useFormDisabled } from '../form/hooks';\nimport { TdButtonProps } from './type';\nimport { usePrefixClass } from '../hooks/useClass';\nimport { useContent, useTNodeJSX } from '../hooks/tnode';\n\nexport default defineComponent({\n  name: 'TButton',\n  directives: { Hover },\n  props: ButtonProps,\n  setup(props, { attrs }) {\n    const buttonClass = usePrefixClass('button');\n    const renderTNodeJSX = useTNodeJSX();\n    const renderTNodeContent = useContent();\n    const isDisabled = useFormDisabled();\n\n    const hoverDisabled = computed(() => isDisabled.value || props.loading);\n\n    const buttonClasses = computed(() => [\n      `${buttonClass.value}`,\n      `${buttonClass.value}--size-${props.size}`,\n      `${buttonClass.value}--${props.variant}`,\n      {\n        [`${buttonClass.value}--${props.theme}`]: props.theme,\n        [`${buttonClass.value}--${props.shape}`]: props.shape,\n        [`${buttonClass.value}--ghost`]: props.ghost,\n        [`${buttonClass.value}--block`]: props.block,\n        [`${buttonClass.value}--disabled`]: isDisabled.value,\n        [`${buttonClass.value}--loading`]: props.loading,\n      },\n    ]);\n\n    const renderTag = computed(() => (!props.tag && props.href ? 'a' : props.tag || 'button'));\n    const isNativeButton = computed(() => renderTag.value === 'button');\n    const isAriaDisabled = computed(() => props.loading || (!isNativeButton.value && isDisabled.value));\n    const shouldInterceptClick = computed(() => props.loading || (!isNativeButton.value && isDisabled.value));\n\n    const tabIndex = computed(() => {\n      if (!isDisabled.value) return '0';\n      return isNativeButton.value ? undefined : '-1';\n    });\n\n    const handleDisabledClick = (event: MouseEvent) => {\n      event.preventDefault();\n      event.stopPropagation();\n    };\n\n    const renderIcon = () => {\n      if (props.loading) {\n        return <TLoading inherit-color {...(props.loadingProps as TdButtonProps['loadingProps'])} />;\n      }\n\n      return renderTNodeJSX('icon');\n    };\n\n    const renderContent = () => {\n      const content = renderTNodeContent('default', 'content');\n      return <span class={`${buttonClass.value}__content`}>{content}</span>;\n    };\n\n    return () => {\n      const suffix = renderTNodeJSX('suffix');\n\n      return withDirectives(\n        h(\n          renderTag.value,\n          {\n            ...attrs,\n            class: buttonClasses.value,\n            role: isNativeButton.value ? undefined : 'button',\n            type: isNativeButton.value ? props.type : undefined,\n            disabled: isNativeButton.value ? isDisabled.value : undefined,\n            'aria-disabled': isAriaDisabled.value || undefined,\n            href: props.href || undefined,\n            tabindex: tabIndex.value,\n            form: isNativeButton.value ? props.form : undefined,\n            onClick: shouldInterceptClick.value ? handleDisabledClick : props.onClick,\n          },\n          [renderIcon(), renderContent(), suffix],\n        ),\n        [[Hover, { className: `${buttonClass.value}--hover`, disabledHover: hoverDisabled.value }]],\n      );\n    };\n  },\n});\n"],"names":["defineComponent","name","directives","Hover","props","ButtonProps","setup","_ref","attrs","buttonClass","usePrefixClass","renderTNodeJSX","useTNodeJSX","renderTNodeContent","useContent","isDisabled","useFormDisabled","hoverDisabled","computed","value","loading","buttonClasses","concat","size","variant","_defineProperty","theme","shape","ghost","block","renderTag","tag","href","isNativeButton","isAriaDisabled","shouldInterceptClick","tabIndex","handleDisabledClick","event","preventDefault","stopPropagation","renderIcon","_createVNode","TLoading","_mergeProps","loadingProps","renderContent","content","suffix","withDirectives","h","_objectSpread","class","role","type","disabled","tabindex","form","onClick","className","disabledHover"],"mappings":"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"}