{"version":3,"file":"hooks.mjs","sources":["../../src/dialog/hooks.tsx"],"sourcesContent":["import { getCurrentInstance } from 'vue';\nimport isString from 'lodash/isString';\nimport isObject from 'lodash/isObject';\nimport omit from 'lodash/omit';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport TButton, { ButtonProps } from '../button';\nimport { PopconfirmConfig, DialogConfig, DrawerConfig } from '../config-provider';\nimport type { ClassName } from '../common';\nimport type { TdDialogProps } from './type';\n\nexport interface MixinsConfirmBtn {\n  theme?: MixinsThemeType;\n  className?: ClassName;\n  confirmBtn: TdDialogProps['confirmBtn'];\n  globalConfirm: PopconfirmConfig['confirm'] | DrawerConfig['confirm'] | DialogConfig['confirm'];\n  globalConfirmBtnTheme?: PopconfirmConfig['confirmBtnTheme'] | DialogConfig['confirmBtnTheme'];\n  size?: ButtonProps['size'];\n}\n\nexport interface MixinsCancelBtn {\n  className?: ClassName;\n  cancelBtn: TdDialogProps['cancelBtn'];\n  globalCancel: PopconfirmConfig['cancel'] | DrawerConfig['cancel'] | DialogConfig['cancel'];\n  size?: ButtonProps['size'];\n}\n\nexport type MixinsThemeType = keyof (PopconfirmConfig['confirmBtnTheme'] & DialogConfig['confirmBtnTheme']);\n\nexport interface BtnAction {\n  confirmBtnAction: (e: MouseEvent) => void;\n  cancelBtnAction: (e: MouseEvent) => void;\n}\n\nexport function useAction(action: BtnAction) {\n  const instance = getCurrentInstance();\n  const renderTNodeJSX = useTNodeJSX();\n  // 全局配置属性综合\n  const getDefaultConfirmBtnProps = (options: MixinsConfirmBtn): ButtonProps => {\n    const { globalConfirm, theme, globalConfirmBtnTheme } = options;\n    const defaultTheme = omit(globalConfirmBtnTheme, ['info'])?.[theme] || 'primary';\n    let props: ButtonProps = {\n      theme: defaultTheme,\n      size: options.size,\n      onClick: (e) => {\n        action.confirmBtnAction(e);\n      },\n    };\n    if (isString(globalConfirm)) {\n      props.content = globalConfirm;\n    } else if (isObject(globalConfirm)) {\n      props = { ...props, ...globalConfirm };\n    }\n    return props;\n  };\n  // 全局配置属性综合\n  const getDefaultCancelBtnProps = (options: MixinsCancelBtn): ButtonProps => {\n    const { globalCancel } = options;\n    let props: ButtonProps = {\n      theme: 'default',\n      size: options.size,\n      onClick: (e) => {\n        action.cancelBtnAction(e);\n      },\n    };\n    if (isString(globalCancel)) {\n      props.content = globalCancel;\n    } else if (isObject(globalCancel)) {\n      props = { ...props, ...globalCancel };\n    }\n    return props;\n  };\n  const getButtonByProps = (button: string | ButtonProps, defaultButton: ButtonProps, className?: ClassName) => {\n    let newOptions = defaultButton;\n    if (isString(button)) {\n      newOptions.content = button;\n    } else if (isObject(button)) {\n      newOptions = { ...newOptions, ...button };\n    }\n    return <TButton class={className} {...newOptions} />;\n  };\n  const getConfirmBtn = (options: MixinsConfirmBtn) => {\n    const { confirmBtn, className } = options;\n    if (confirmBtn === null) return null;\n    if (confirmBtn && instance.slots.confirmBtn) {\n      console.warn('Both $props.confirmBtn and $scopedSlots.confirmBtn exist, $props.confirmBtn is preferred.');\n    }\n    const defaultButtonProps = getDefaultConfirmBtnProps(options);\n    // 属性和插槽都不存在，就返回全局默认配置\n    if (!confirmBtn && !instance.slots.confirmBtn) {\n      return <TButton class={className} {...defaultButtonProps} />;\n    }\n    // 如果属性存在，优先返回属性配置\n    if (confirmBtn && ['string', 'object'].includes(typeof confirmBtn)) {\n      return getButtonByProps(confirmBtn as string | ButtonProps, defaultButtonProps, className);\n    }\n    // 渲染插槽 或 function 类型的 confirmBtn，属性优先级更高\n    return renderTNodeJSX('confirmBtn');\n  };\n  const getCancelBtn = (options: MixinsCancelBtn) => {\n    const { cancelBtn, className } = options;\n    if (cancelBtn === null) return null;\n    if (cancelBtn && instance.slots.cancelBtn) {\n      console.warn('Both $props.cancelBtn and $scopedSlots.cancelBtn exist, $props.cancelBtn is preferred.');\n    }\n    const defaultButtonProps: ButtonProps = getDefaultCancelBtnProps(options);\n    // 属性和插槽都不存在，就返回全局默认配置\n    if (!cancelBtn && !instance.slots.cancelBtn) {\n      return <TButton class={className} {...defaultButtonProps} />;\n    }\n    // 如果属性存在，优先返回属性配置\n    if (cancelBtn && ['string', 'object'].includes(typeof cancelBtn)) {\n      return getButtonByProps(cancelBtn as string | ButtonProps, defaultButtonProps);\n    }\n    // 渲染插槽 或 function 类型的 confirmBtn，属性优先级更高\n    return renderTNodeJSX('cancelBtn');\n  };\n  return { getConfirmBtn, getCancelBtn };\n}\n\nexport function useSameTarget(handleClick?: (e: MouseEvent) => void) {\n  // 判断 click 事件的起点和落点所在元素是否一致\n  let MOUSEDOWN_TARGET = false;\n  let MOUSEUP_TARGET = false;\n\n  const onClick = (e: MouseEvent) => {\n    if (MOUSEDOWN_TARGET && MOUSEUP_TARGET) {\n      handleClick(e);\n    }\n    MOUSEDOWN_TARGET = false;\n    MOUSEUP_TARGET = false;\n  };\n\n  const onMousedown = (e: MouseEvent) => {\n    MOUSEDOWN_TARGET = e.target === e.currentTarget;\n  };\n  const onMouseup = (e: MouseEvent) => {\n    MOUSEUP_TARGET = e.target === e.currentTarget;\n  };\n\n  return { onClick, onMousedown, onMouseup };\n}\n"],"names":["theme","onClick","action","isString","isObject","_createVNode","TButton","_mergeProps","console","getConfirmBtn","getCancelBtn","MOUSEDOWN_TARGET","MOUSEUP_TARGET","onMousedown","onMouseup"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCO,SAAA,SAAA,CAAA,MAAA,EAAA;AACL,EAAA,IAAA,QAAA,GAAA,kBAAA,EAAA,CAAA;AACA,EAAA,IAAA,cAAA,GAAA,WAAA,EAAA,CAAA;AAEM,EAAA,IAAA,yBAAA,GAAA,SAAA,yBAAA,CAAA,OAAA,EAAA;AAAwE,IAAA,IAAA,KAAA,CAAA;AAC5E,IAAA,IAAA,aAAA,GAAA,OAAA,CAAA,aAAA;;;;AAEA,IAAA,IAAA,KAAA,GAAA;AACEA,MAAAA,KAAAA,EAAAA,YAAAA;;AAEAC,MAAAA,OAAAA,EAAAA,SAAAA,OAAAA,CAAAA,CAAAA,EAAAA;AACEC,QAAAA,MAAAA,CAAAA,gBAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACF,OAAA;;AAEE,IAAA,IAAAC,UAAA,CAAA,aAAA,CAAA,EAAA;;AAEJ,KAAA,MAAA,IAAAC,UAAA,CAAA,aAAA,CAAA,EAAA;;AAEA,KAAA;AACO,IAAA,OAAA,KAAA,CAAA;;AAGH,EAAA,IAAA,wBAAA,GAAA,SAAA,wBAAA,CAAA,OAAA,EAAA;AACE,IAAA,IAAA,YAAA,GAAA,OAAA,CAAA,YAAA,CAAA;AACN,IAAA,IAAA,KAAA,GAAA;AACEJ,MAAAA,KAAAA,EAAAA,SAAAA;;AAEAC,MAAAA,OAAAA,EAAAA,SAAAA,OAAAA,CAAAA,CAAAA,EAAAA;AACEC,QAAAA,MAAAA,CAAAA,eAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACF,OAAA;;AAEE,IAAA,IAAAC,UAAA,CAAA,YAAA,CAAA,EAAA;;AAEJ,KAAA,MAAA,IAAAC,UAAA,CAAA,YAAA,CAAA,EAAA;;AAEA,KAAA;AACO,IAAA,OAAA,KAAA,CAAA;;;;AAIH,IAAA,IAAAD,UAAA,CAAA,MAAA,CAAA,EAAA;;AAEJ,KAAA,MAAA,IAAAC,UAAA,CAAA,MAAA,CAAA,EAAA;;AAEA,KAAA;AACA,IAAA,OAAAC,WAAA,CAAAC,MAAA,EAAAC,UAAA,CAAA;;AAAuB,KAAA,EAAA,UAAA,CAAA,EAAA,IAAA,CAAA,CAAA;;AAEnB,EAAA,IAAA,aAAA,GAAA,SAAA,aAAA,CAAA,OAAA,EAAA;AACE,IAAA,IAAA,UAAA,GAAA,OAAA,CAAA,UAAA;;AACN,IAAA,IAAA,UAAA,KAAA,IAAA,EAAA,OAAA,IAAA,CAAA;AACI,IAAA,IAAA,UAAA,IAAA,QAAA,CAAA,KAAA,CAAA,UAAA,EAAA;AACFC,MAAAA,OAAAA,CAAAA,IAAAA,CAAAA,2FAAAA,CAAAA,CAAAA;AACF,KAAA;AACM,IAAA,IAAA,kBAAA,GAAA,yBAAA,CAAA,OAAA,CAAA,CAAA;;AAGJ,MAAA,OAAAH,WAAA,CAAAC,MAAA,EAAAC,UAAA,CAAA;;AAAuB,OAAA,EAAA,kBAAA,CAAA,EAAA,IAAA,CAAA,CAAA;AACzB,KAAA;AAEI,IAAA,IAAA,UAAA,IAAA,CAAA,QAAA,EAAA,QAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,UAAA,CAAA,CAAA,EAAA;AACK,MAAA,OAAA,gBAAA,CAAA,UAAA,EAAA,kBAAA,EAAA,SAAA,CAAA,CAAA;AACT,KAAA;;;AAII,EAAA,IAAA,YAAA,GAAA,SAAA,YAAA,CAAA,OAAA,EAAA;AACE,IAAA,IAAA,SAAA,GAAA,OAAA,CAAA,SAAA;;AACN,IAAA,IAAA,SAAA,KAAA,IAAA,EAAA,OAAA,IAAA,CAAA;AACI,IAAA,IAAA,SAAA,IAAA,QAAA,CAAA,KAAA,CAAA,SAAA,EAAA;AACFC,MAAAA,OAAAA,CAAAA,IAAAA,CAAAA,wFAAAA,CAAAA,CAAAA;AACF,KAAA;AACM,IAAA,IAAA,kBAAA,GAAA,wBAAA,CAAA,OAAA,CAAA,CAAA;;AAGJ,MAAA,OAAAH,WAAA,CAAAC,MAAA,EAAAC,UAAA,CAAA;;AAAuB,OAAA,EAAA,kBAAA,CAAA,EAAA,IAAA,CAAA,CAAA;AACzB,KAAA;AAEI,IAAA,IAAA,SAAA,IAAA,CAAA,QAAA,EAAA,QAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,EAAA;AACK,MAAA,OAAA,gBAAA,CAAA,SAAA,EAAA,kBAAA,CAAA,CAAA;AACT,KAAA;;;;AAIOE,IAAAA,aAAAA,EAAAA,aAAAA;AAAeC,IAAAA,YAAAA,EAAAA,YAAAA;;AAC1B,CAAA;AAEO,SAAA,aAAA,CAAA,WAAA,EAAA;;;AAKC,EAAA,IAAA,OAAA,GAAA,SAAA,OAAA,CAAA,CAAA,EAAA;;;AAGJ,KAAA;AACmBC,IAAAA,gBAAAA,GAAAA,KAAAA,CAAAA;AACFC,IAAAA,cAAAA,GAAAA,KAAAA,CAAAA;;AAGb,EAAA,IAAA,WAAA,GAAA,SAAA,WAAA,CAAA,CAAA,EAAA;AACeD,IAAAA,gBAAAA,GAAAA,CAAAA,CAAAA,MAAAA,KAAAA,CAAAA,CAAAA,aAAAA,CAAAA;;AAEf,EAAA,IAAA,SAAA,GAAA,SAAA,SAAA,CAAA,CAAA,EAAA;AACaC,IAAAA,cAAAA,GAAAA,CAAAA,CAAAA,MAAAA,KAAAA,CAAAA,CAAAA,aAAAA,CAAAA;;;AAGVX,IAAAA,OAAAA,EAAAA,OAAAA;AAASY,IAAAA,WAAAA,EAAAA,WAAAA;AAAaC,IAAAA,SAAAA,EAAAA,SAAAA;;AACjC;;;;"}