baa927d61f9a00b75fb9169a50b1c33caee88a34f56f316ae04d753fb4959b626c44553f26a01d30c17f3c4bd0b096f1fd2fb10e5755da9fbc40cf8fa626f8 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { defineComponent, ref, computed, watch, onMounted, onBeforeUnmount, provide, renderSlot, unref } from 'vue';
  2. import { useTimeoutFn } from '@vueuse/core';
  3. import { TOOLTIP_V2_OPEN, tooltipV2RootKey } from './constants.mjs';
  4. import { tooltipV2RootProps } from './root.mjs';
  5. import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';
  6. import { isPropAbsent, isNumber } from '../../../utils/types.mjs';
  7. import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
  8. import { useId } from '../../../hooks/use-id/index.mjs';
  9. const __default__ = defineComponent({
  10. name: "ElTooltipV2Root"
  11. });
  12. const _sfc_main = /* @__PURE__ */ defineComponent({
  13. ...__default__,
  14. props: tooltipV2RootProps,
  15. setup(__props, { expose }) {
  16. const props = __props;
  17. const _open = ref(props.defaultOpen);
  18. const triggerRef = ref(null);
  19. const open = computed({
  20. get: () => isPropAbsent(props.open) ? _open.value : props.open,
  21. set: (open2) => {
  22. var _a;
  23. _open.value = open2;
  24. (_a = props["onUpdate:open"]) == null ? void 0 : _a.call(props, open2);
  25. }
  26. });
  27. const isOpenDelayed = computed(() => isNumber(props.delayDuration) && props.delayDuration > 0);
  28. const { start: onDelayedOpen, stop: clearTimer } = useTimeoutFn(() => {
  29. open.value = true;
  30. }, computed(() => props.delayDuration), {
  31. immediate: false
  32. });
  33. const ns = useNamespace("tooltip-v2");
  34. const contentId = useId();
  35. const onNormalOpen = () => {
  36. clearTimer();
  37. open.value = true;
  38. };
  39. const onDelayOpen = () => {
  40. unref(isOpenDelayed) ? onDelayedOpen() : onNormalOpen();
  41. };
  42. const onOpen = onNormalOpen;
  43. const onClose = () => {
  44. clearTimer();
  45. open.value = false;
  46. };
  47. const onChange = (open2) => {
  48. var _a;
  49. if (open2) {
  50. document.dispatchEvent(new CustomEvent(TOOLTIP_V2_OPEN));
  51. onOpen();
  52. }
  53. (_a = props.onOpenChange) == null ? void 0 : _a.call(props, open2);
  54. };
  55. watch(open, onChange);
  56. onMounted(() => {
  57. document.addEventListener(TOOLTIP_V2_OPEN, onClose);
  58. });
  59. onBeforeUnmount(() => {
  60. clearTimer();
  61. document.removeEventListener(TOOLTIP_V2_OPEN, onClose);
  62. });
  63. provide(tooltipV2RootKey, {
  64. contentId,
  65. triggerRef,
  66. ns,
  67. onClose,
  68. onDelayOpen,
  69. onOpen
  70. });
  71. expose({
  72. onOpen,
  73. onClose
  74. });
  75. return (_ctx, _cache) => {
  76. return renderSlot(_ctx.$slots, "default", { open: unref(open) });
  77. };
  78. }
  79. });
  80. var TooltipV2Root = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "root.vue"]]);
  81. export { TooltipV2Root as default };
  82. //# sourceMappingURL=root2.mjs.map