{"version":3,"file":"tooltip.mjs","sources":["../../src/tooltip/tooltip.tsx"],"sourcesContent":["import { computed, defineComponent, onMounted, ref, toRefs, watch, getCurrentInstance } from 'vue';\nimport isFunction from 'lodash/isFunction';\nimport omit from 'lodash/omit';\nimport props from './props';\nimport popupProps from '../popup/props';\nimport Popup, { PopupVisibleChangeContext } from '../popup';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport { useTNodeJSX, useContent } from '../hooks/tnode';\nimport { useMouse } from './util';\nimport useVModel from '../hooks/useVModel';\n\nexport default defineComponent({\n  name: 'XTooltip',\n  props: {\n    ...popupProps,\n    ...props,\n  },\n  setup(props, ctx) {\n    const timer = ref(null);\n    const popupRef = ref(null);\n\n    const { visible, modelValue } = toRefs(props);\n    const [innerVisible, setInnerVisible] = useVModel(\n      visible,\n      modelValue,\n      props.defaultVisible,\n      props.onVisibleChange,\n      'visible',\n    );\n    const vm = getCurrentInstance();\n    const innerTooltipVisible = ref(props.visible || props.defaultVisible);\n    const classPrefix = usePrefixClass();\n    const renderTNodeJSX = useTNodeJSX();\n    const renderContent = useContent();\n    const { x } = useMouse();\n    const offsetX = ref(x.value);\n\n    onMounted(() => {\n      if (props.duration && innerTooltipVisible.value) {\n        timer.value = setTimeout(() => {\n          setInnerVisible(false, {});\n          clearTimeout(timer.value);\n          timer.value = null;\n        }, props.duration);\n      }\n    });\n\n    const onTipVisibleChange = (val: boolean, ctx?: PopupVisibleChangeContext) => {\n      // 因 props={this.getPopupProps()} 已经透传 onVisibleChange props，此处不再需要使用 emitEvent\n      if (timer.value && ctx?.trigger !== 'document') return;\n      if (val) {\n        offsetX.value = x.value;\n      }\n      setInnerVisible(val, ctx);\n    };\n\n    const tooltipOverlayClassName = computed(() => {\n      return [\n        `${classPrefix.value}-tooltip`,\n        { [`${classPrefix.value}-tooltip--${props.theme}`]: props.theme },\n        props.overlayClassName,\n      ];\n    });\n\n    const popupProps = computed(() => ({\n      ...(vm?.vnode.props || {}),\n      placement: props.placement === 'mouse' ? 'bottom-left' : props.placement,\n      showArrow: props.placement === 'mouse' ? false : props.showArrow,\n      overlayClassName: tooltipOverlayClassName.value,\n      onVisibleChange: onTipVisibleChange,\n      disabled: props.disabled,\n    }));\n\n    const overlayInnerStyle = computed(() => {\n      if (props.placement !== 'mouse' || offsetX.value === 0) {\n        return props.overlayInnerStyle;\n      }\n      const offsetStyle = (triggerEl: HTMLElement) => ({\n        transform: `translateX(${offsetX.value - triggerEl.getBoundingClientRect().left}px)`,\n      });\n      if (props.overlayInnerStyle) {\n        return (triggerEl: HTMLElement, popupEl: HTMLElement) => ({\n          ...offsetStyle(triggerEl),\n          ...(isFunction(props.overlayInnerStyle)\n            ? props.overlayInnerStyle(triggerEl, popupEl)\n            : props.overlayInnerStyle),\n        });\n      }\n      return offsetStyle;\n    });\n\n    watch(\n      () => innerTooltipVisible.value,\n      () => {\n        if (timer.value && !innerTooltipVisible.value) {\n          clearTimeout(timer.value);\n          timer.value = null;\n        }\n      },\n    );\n\n    const onPopupUpdate = () => {\n      popupRef.value?.update?.();\n    };\n\n    /**\n     * 透传更新popup实例方法，供外部调用\n     */\n    ctx.expose({\n      updatePopper: onPopupUpdate,\n    });\n    return () => {\n      const content = renderTNodeJSX('content');\n      if (!content && !props.content) {\n        return renderContent('default', 'triggerElement');\n      }\n      return (\n        <Popup\n          {...omit(popupProps.value, ['content', 'default'])}\n          ref={popupRef}\n          overlayInnerStyle={overlayInnerStyle.value}\n          visible={innerVisible.value}\n          v-slots={{\n            content: () => content,\n          }}\n        >\n          {renderContent('default', 'triggerElement')}\n        </Popup>\n      );\n    };\n  },\n});\n"],"names":["name","setup","innerVisible","setInnerVisible","onMounted","props","timer","clearTimeout","offsetX","onVisibleChange","transform","watch","updatePopper","_createVNode","_mergeProps","omit"],"mappings":"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"}