{"version":3,"file":"tooltip.mjs","sources":["../../../../../../packages/components/tooltip/src/tooltip.tsx"],"sourcesContent":["import {\n  defineComponent,\n  render,\n  createVNode,\n  ref,\n  computed,\n  nextTick,\n  watch,\n  onUnmounted,\n  onMounted,\n  toRefs\n} from 'vue'\nimport type { VNode, CSSProperties } from 'vue'\n\nimport { getComponentNamespace } from '../../../utils/global-config'\nimport { mergeFirstChild, getFirstElement } from '../../../utils/vue-utils'\nimport { getPopupStyle, getElementScrollRect, getArrowStyle } from '../../trigger/src/utils'\nimport usePopupManager from '../../../hooks/use-popup-manager'\nimport { getElement, setStyle } from '../../../utils/dom'\nimport { useResizeObserver } from '../../../hooks/use-resize-observer'\nimport Popup from './popup.vue'\nimport { tooltipProps } from './props'\n\nexport default defineComponent({\n  name: getComponentNamespace('Tooltip'),\n  props: tooltipProps,\n  emits: ['update:modelValue', 'change'],\n  setup(props, { slots, emit }) {\n    const innerVisible = ref(false)\n\n    const visible = computed(() => {\n      return props.modelValue ?? innerVisible.value\n    })\n\n    let defaultSlot: VNode[] | undefined\n    let timer: any = -1\n    let popupTarget: HTMLElement | null\n    let vm: VNode | null\n\n    const renderTo = computed(() => getElement(props.renderTo || document.body))\n\n    const { zIndex } = usePopupManager('popup', { visible })\n\n    const container = document.createElement('div')\n\n    const changeVisible = (visible: boolean) => {\n      vm && (vm.component?.proxy as any).changeVisible(visible)\n    }\n\n    const updatePopupStyle = async () => {\n      if (!popupTarget || !defaultSlot) return\n      const triggerTarget = getFirstElement(defaultSlot) as HTMLElement\n      const containerRect = renderTo.value!.getBoundingClientRect()\n      const triggerScrollRect = getElementScrollRect(triggerTarget, containerRect)\n      const getPopupScrollRect = () =>\n        getElementScrollRect(popupTarget as HTMLElement, containerRect)\n      const { style, position } = getPopupStyle(\n        props.position,\n        containerRect,\n        triggerScrollRect,\n        getPopupScrollRect(),\n        {\n          translate: [0, 0],\n          autoFitPosition: true,\n          offset: {\n            mini: 7,\n            default: 10\n          }[props.size ?? 'default']\n        }\n      )\n      const popupTargetStyle: CSSProperties = {\n        ...style,\n        position: 'absolute',\n        'z-index': zIndex.value\n      }\n      // 设置弹出层样式\n      setStyle(popupTarget, popupTargetStyle)\n\n      // 把弹出层放入body中，等弹出层更新完样式后才可以更新arrow样式。\n      await nextTick()\n      const arrowStyle = getArrowStyle(position, triggerScrollRect, getPopupScrollRect(), {\n        customStyle: {\n          position: 'absolute',\n          'border-width': {\n            mini: '4px',\n            default: '6px'\n          }[props.size ?? 'default'],\n          'border-style': 'solid',\n          zIndex: 0\n        }\n      })\n      const arrowNode = getElement('.arrow', popupTarget) as HTMLElement\n      // 设置弹出层箭头样式\n      setStyle(arrowNode, arrowStyle)\n    }\n\n    // 为了确保这些属性是响应式\n    const { content, effect, backgroundColor, popupClass, position, size } = toRefs(props)\n\n    // 创建tooltip\n    const createTooltip = () => {\n      if (popupTarget) return\n      emit('change', true)\n      vm = createVNode(\n        Popup,\n        {\n          content,\n          effect,\n          backgroundColor,\n          position,\n          popupClass,\n          size,\n          onMouseenter: () => clearTimeout(timer),\n          onMouseleave: () => beforeClose(),\n          onClose: () => {\n            // Trap!!! 不能在这里更改状态。因为动画有延迟时间，如果在这个时机恰好多次创建tooltip的话就会有bug，状态就会锁死。只能在动画执行结束后才能更改状态。\n            // 状态统一用状态控制器来控制。不论是受控状态还是非受控状态。\n          },\n          onDestroy: () => {\n            destroyTooltip()\n          }\n        },\n        {\n          content: slots.content ?? null\n        }\n      )\n      render(vm, container)\n\n      popupTarget = container.firstChild! as HTMLElement\n      renderTo.value!.appendChild(popupTarget)\n      updatePopupStyle()\n    }\n\n    // 销毁tooltip\n    const destroyTooltip = () => {\n      if (container) {\n        render(null, container)\n        popupTarget = null\n        vm = null\n\n        // 内部状态\n        innerVisible.value = false\n        // 外部状态\n        emit('update:modelValue', false)\n        emit('change', false)\n      }\n    }\n\n    const handleMouseEnter = () => {\n      if (timer) clearTimeout(timer)\n      innerVisible.value = true\n      emit('update:modelValue', true)\n    }\n\n    const beforeClose = () => {\n      if (timer) clearTimeout(timer)\n      timer = setTimeout(() => {\n        changeVisible(false)\n      }, 100)\n    }\n\n    const handleResize = () => {\n      updatePopupStyle()\n    }\n\n    const { createResizeObserver, destroyResizeObserver } = useResizeObserver({\n      elementRef: renderTo,\n      onResize: handleResize\n    })\n\n    // 监听器控制tooltip显示\n    watch(\n      () => visible.value,\n      (val) => {\n        if (props.disabled) return\n        if (val) {\n          nextTick(createTooltip)\n        } else {\n          changeVisible(false)\n        }\n      },\n      {\n        immediate: true\n      }\n    )\n\n    onMounted(() => {\n      createResizeObserver()\n    })\n\n    onUnmounted(() => {\n      changeVisible(false)\n      destroyResizeObserver()\n    })\n\n    return () => {\n      defaultSlot = slots.default?.()\n      mergeFirstChild(defaultSlot, {\n        onMouseenter: handleMouseEnter,\n        onMouseleave: beforeClose,\n        style: {\n          cursor: props.disabled ? 'not-allowed' : 'pointer'\n        },\n        disabled: props.disabled\n      })\n      return defaultSlot\n    }\n  }\n})\n"],"names":["name","getComponentNamespace","props","tooltipProps","emits","setup","slots","emit","innerVisible","ref","visible","computed","modelValue","value","defaultSlot","timer","popupTarget","vm","renderTo","getElement","document","body","zIndex","usePopupManager","container","createElement","changeVisible","component","proxy","updatePopupStyle","triggerTarget","getFirstElement","containerRect","getBoundingClientRect","triggerScrollRect","getElementScrollRect","getPopupScrollRect","style","position","getPopupStyle","translate","autoFitPosition","offset","mini","default","size","popupTargetStyle","setStyle","nextTick","arrowStyle","getArrowStyle","customStyle","arrowNode","content","effect","backgroundColor","popupClass","toRefs","createTooltip","createVNode","Popup","onMouseenter","clearTimeout","onMouseleave","beforeClose","onClose","onDestroy","destroyTooltip","render","firstChild","appendChild","handleMouseEnter","setTimeout","handleResize","createResizeObserver","destroyResizeObserver","useResizeObserver","elementRef","onResize","watch","val","disabled","immediate","onMounted","onUnmounted","mergeFirstChild","cursor"],"mappings":";;;;;;;;;;AAuBA,+BAA+B,eAAA,CAAA;AAAA,EAC7BA,IAAAA,EAAMC,sBAAsB,SAAS,CAAA;AAAA,EACrCC,KAAOC,EAAAA,YAAAA;AAAAA,EACPC,KAAAA,EAAO,CAAC,mBAAA,EAAqB,QAAQ,CAAA;AAAA,EACrCC,MAAMH,KAAO,EAAA;AAAA,IAAEI,KAAAA;AAAAA,IAAOC,IAAAA;AAAAA,GAAQ,EAAA;AAC5B,IAAMC,MAAAA,YAAAA,GAAeC,IAAI,KAAK,CAAA,CAAA;AAE9B,IAAMC,MAAAA,OAAAA,GAAUC,SAAS,MAAM;AA9BnC,MAAA,IAAA,EAAA,CAAA;AA+BM,MAAOT,OAAAA,CAAAA,EAAAA,GAAAA,KAAAA,CAAMU,UAANV,KAAAA,IAAAA,GAAAA,EAAAA,GAAoBM,YAAaK,CAAAA,KAAAA,CAAAA;AAAAA,KACzC,CAAA,CAAA;AAED,IAAIC,IAAAA,WAAAA,CAAAA;AACJ,IAAA,IAAIC,KAAa,GAAA,CAAA,CAAA,CAAA;AACjB,IAAIC,IAAAA,WAAAA,CAAAA;AACJ,IAAIC,IAAAA,EAAAA,CAAAA;AAEJ,IAAMC,MAAAA,QAAAA,GAAWP,SAAS,MAAMQ,UAAAA,CAAWjB,MAAMgB,QAAYE,IAAAA,QAAAA,CAASC,IAAI,CAAC,CAAA,CAAA;AAE3E,IAAM,MAAA;AAAA,MAAEC,MAAAA;AAAAA,KAAO,GAAIC,gBAAgB,OAAS,EAAA;AAAA,MAAEb,OAAAA;AAAAA,KAAS,CAAA,CAAA;AAEvD,IAAMc,MAAAA,SAAAA,GAAYJ,QAASK,CAAAA,aAAAA,CAAc,KAAK,CAAA,CAAA;AAE9C,IAAMC,MAAAA,aAAAA,GAAiBhB,CAAAA,QAAqB,KAAA;AA7ChD,MAAA,IAAA,EAAA,CAAA;AA8CMO,MAAAA,EAAAA,IAAAA,CAAAA,CAAOA,EAAGU,GAAAA,EAAAA,CAAAA,SAAAA,KAAHV,IAAcW,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,KAAAA,EAAcF,cAAchB,QAAO,CAAA,CAAA;AAAA,KAC1D,CAAA;AAEA,IAAA,MAAMmB,mBAAmB,YAAY;AAjDzC,MAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAkDM,MAAI,IAAA,CAACb,eAAe,CAACF,WAAAA;AAAa,QAAA,OAAA;AAClC,MAAMgB,MAAAA,aAAAA,GAAgBC,gBAAgBjB,WAAW,CAAA,CAAA;AACjD,MAAMkB,MAAAA,aAAAA,GAAgBd,QAASL,CAAAA,KAAAA,CAAOoB,qBAAsB,EAAA,CAAA;AAC5D,MAAMC,MAAAA,iBAAAA,GAAoBC,oBAAqBL,CAAAA,aAAAA,EAAeE,aAAa,CAAA,CAAA;AAC3E,MAAA,MAAMI,kBAAqBA,GAAAA,MACzBD,oBAAqBnB,CAAAA,WAAAA,EAA4BgB,aAAa,CAAA,CAAA;AAChE,MAAM,MAAA;AAAA,QAAEK,KAAAA;AAAAA,QAAOC,QAAAA,EAAAA,SAAAA;AAAAA,UAAaC,aAC1BrC,CAAAA,KAAAA,CAAMoC,UACNN,aACAE,EAAAA,iBAAAA,EACAE,oBACA,EAAA;AAAA,QACEI,SAAAA,EAAW,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,QAChBC,eAAiB,EAAA,IAAA;AAAA,QACjBC,MAAQ,EAAA;AAAA,UACNC,IAAM,EAAA,CAAA;AAAA,UACNC,OAAS,EAAA,EAAA;AAAA,SACT1C,CAAAA,CAAAA,EAAAA,GAAAA,KAAAA,CAAM2C,IAAN3C,KAAAA,IAAAA,GAAAA,EAAAA,GAAc,SAAS,CAAA;AAAA,OAE7B,CAAA,CAAA;AACA,MAAA,MAAM4C,gBAAkC,GAAA;AAAA,QACtC,GAAGT,KAAAA;AAAAA,QACHC,QAAU,EAAA,UAAA;AAAA,QACV,WAAWhB,MAAOT,CAAAA,KAAAA;AAAAA,OACpB,CAAA;AAEAkC,MAAAA,QAAAA,CAAS/B,aAAa8B,gBAAgB,CAAA,CAAA;AAGtC,MAAA,MAAME,QAAS,EAAA,CAAA;AACf,MAAA,MAAMC,UAAaC,GAAAA,aAAAA,CAAcZ,SAAUJ,EAAAA,iBAAAA,EAAmBE,oBAAsB,EAAA;AAAA,QAClFe,WAAa,EAAA;AAAA,UACXb,QAAU,EAAA,UAAA;AAAA,UACV,cAAgB,EAAA;AAAA,YACdK,IAAM,EAAA,KAAA;AAAA,YACNC,OAAS,EAAA,KAAA;AAAA,WACT1C,CAAAA,CAAAA,EAAAA,GAAAA,KAAAA,CAAM2C,IAAN3C,KAAAA,IAAAA,GAAAA,EAAAA,GAAc,SAAS,CAAA;AAAA,UACzB,cAAgB,EAAA,OAAA;AAAA,UAChBoB,MAAQ,EAAA,CAAA;AAAA,SACV;AAAA,OACD,CAAA,CAAA;AACD,MAAM8B,MAAAA,SAAAA,GAAYjC,UAAW,CAAA,QAAA,EAAUH,WAAW,CAAA,CAAA;AAElD+B,MAAAA,QAAAA,CAASK,WAAWH,UAAU,CAAA,CAAA;AAAA,KAChC,CAAA;AAGA,IAAM,MAAA;AAAA,MAAEI,OAAAA;AAAAA,MAASC,MAAAA;AAAAA,MAAQC,eAAAA;AAAAA,MAAiBC,UAAAA;AAAAA,MAAYlB,QAAAA;AAAAA,MAAUO,IAAAA;AAAAA,KAAK,GAAIY,OAAOvD,KAAK,CAAA,CAAA;AAGrF,IAAA,MAAMwD,gBAAgBA,MAAM;AApGhC,MAAA,IAAA,EAAA,CAAA;AAqGM,MAAI1C,IAAAA,WAAAA;AAAa,QAAA,OAAA;AACjBT,MAAAA,IAAAA,CAAK,UAAU,IAAI,CAAA,CAAA;AACnBU,MAAAA,EAAAA,GAAK0C,YACHC,KACA,EAAA;AAAA,QACEP,OAAAA;AAAAA,QACAC,MAAAA;AAAAA,QACAC,eAAAA;AAAAA,QACAjB,QAAAA;AAAAA,QACAkB,UAAAA;AAAAA,QACAX,IAAAA;AAAAA,QACAgB,YAAAA,EAAcA,MAAMC,YAAAA,CAAa/C,KAAK,CAAA;AAAA,QACtCgD,YAAAA,EAAcA,MAAMC,WAAY,EAAA;AAAA,QAChCC,SAASA,MAAM;AAAA,SAEb;AAAA,QAEFC,WAAWA,MAAM;AACfC,UAAe,cAAA,EAAA,CAAA;AAAA,SACjB;AAAA,OAEF,EAAA;AAAA,QACEd,OAAAA,EAAAA,CAAS/C,EAAM+C,GAAAA,KAAAA,CAAAA,OAAAA,KAAN/C,IAAiB,GAAA,EAAA,GAAA,IAAA;AAAA,OAE9B,CAAA,CAAA;AACA8D,MAAAA,MAAAA,CAAOnD,IAAIO,SAAS,CAAA,CAAA;AAEpBR,MAAAA,WAAAA,GAAcQ,SAAU6C,CAAAA,UAAAA,CAAAA;AACxBnD,MAASL,QAAAA,CAAAA,KAAAA,CAAOyD,YAAYtD,WAAW,CAAA,CAAA;AACvCa,MAAiB,gBAAA,EAAA,CAAA;AAAA,KACnB,CAAA;AAGA,IAAA,MAAMsC,iBAAiBA,MAAM;AAC3B,MAAA,IAAI3C,SAAW,EAAA;AACb4C,QAAAA,MAAAA,CAAO,MAAM5C,SAAS,CAAA,CAAA;AACtBR,QAAc,WAAA,GAAA,IAAA,CAAA;AACdC,QAAK,EAAA,GAAA,IAAA,CAAA;AAGLT,QAAAA,YAAAA,CAAaK,KAAQ,GAAA,KAAA,CAAA;AAErBN,QAAAA,IAAAA,CAAK,qBAAqB,KAAK,CAAA,CAAA;AAC/BA,QAAAA,IAAAA,CAAK,UAAU,KAAK,CAAA,CAAA;AAAA,OACtB;AAAA,KACF,CAAA;AAEA,IAAA,MAAMgE,mBAAmBA,MAAM;AAC7B,MAAIxD,IAAAA,KAAAA;AAAO+C,QAAAA,YAAAA,CAAa/C,KAAK,CAAA,CAAA;AAC7BP,MAAAA,YAAAA,CAAaK,KAAQ,GAAA,IAAA,CAAA;AACrBN,MAAAA,IAAAA,CAAK,qBAAqB,IAAI,CAAA,CAAA;AAAA,KAChC,CAAA;AAEA,IAAA,MAAMyD,cAAcA,MAAM;AACxB,MAAIjD,IAAAA,KAAAA;AAAO+C,QAAAA,YAAAA,CAAa/C,KAAK,CAAA,CAAA;AAC7BA,MAAAA,KAAAA,GAAQyD,WAAW,MAAM;AACvB9C,QAAAA,aAAAA,CAAc,KAAK,CAAA,CAAA;AAAA,SAClB,GAAG,CAAA,CAAA;AAAA,KACR,CAAA;AAEA,IAAA,MAAM+C,eAAeA,MAAM;AACzB5C,MAAiB,gBAAA,EAAA,CAAA;AAAA,KACnB,CAAA;AAEA,IAAM,MAAA;AAAA,MAAE6C,oBAAAA;AAAAA,MAAsBC,qBAAAA;AAAAA,QAA0BC,iBAAkB,CAAA;AAAA,MACxEC,UAAY3D,EAAAA,QAAAA;AAAAA,MACZ4D,QAAUL,EAAAA,YAAAA;AAAAA,KACX,CAAA,CAAA;AAGDM,IACE,KAAA,CAAA,MAAMrE,OAAQG,CAAAA,KAAAA,EACbmE,CAAQ,GAAA,KAAA;AACP,MAAA,IAAI9E,KAAM+E,CAAAA,QAAAA;AAAU,QAAA,OAAA;AACpB,MAAA,IAAID,GAAK,EAAA;AACPhC,QAAAA,QAAAA,CAASU,aAAa,CAAA,CAAA;AAAA,OACjB,MAAA;AACLhC,QAAAA,aAAAA,CAAc,KAAK,CAAA,CAAA;AAAA,OACrB;AAAA,KAEF,EAAA;AAAA,MACEwD,SAAW,EAAA,IAAA;AAAA,KAEf,CAAA,CAAA;AAEAC,IAAAA,SAAAA,CAAU,MAAM;AACdT,MAAqB,oBAAA,EAAA,CAAA;AAAA,KACtB,CAAA,CAAA;AAEDU,IAAAA,WAAAA,CAAY,MAAM;AAChB1D,MAAAA,aAAAA,CAAc,KAAK,CAAA,CAAA;AACnBiD,MAAsB,qBAAA,EAAA,CAAA;AAAA,KACvB,CAAA,CAAA;AAED,IAAA,OAAO,MAAM;AAnMjB,MAAA,IAAA,EAAA,CAAA;AAoMM7D,MAAAA,WAAAA,GAAAA,CAAcR,WAAMsC,OAANtC,KAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACd+E,MAAAA,eAAAA,CAAgBvE,WAAa,EAAA;AAAA,QAC3B+C,YAAcU,EAAAA,gBAAAA;AAAAA,QACdR,YAAcC,EAAAA,WAAAA;AAAAA,QACd3B,KAAO,EAAA;AAAA,UACLiD,MAAAA,EAAQpF,KAAM+E,CAAAA,QAAAA,GAAW,aAAgB,GAAA,SAAA;AAAA,SAC3C;AAAA,QACAA,UAAU/E,KAAM+E,CAAAA,QAAAA;AAAAA,OACjB,CAAA,CAAA;AACD,MAAOnE,OAAAA,WAAAA,CAAAA;AAAAA,KACT,CAAA;AAAA,GACF;AACF,CAAC,CAAA;;;;"}