59c216185176724f53745bdf9b143b164d61c1a344d10994dc3814d93bc90a00b436d49893ece3ecc2fcc8c360ecddaaadd3e72ee7439b25f55897d8ddcb08 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { defineComponent, inject, watch, onBeforeUnmount, openBlock, createBlock, unref, withCtx, renderSlot, createElementBlock, mergeProps } from 'vue';
  2. import { tooltipV2RootKey } from './constants.mjs';
  3. import ForwardRef from './forward-ref.mjs';
  4. import { tooltipV2TriggerProps } from './trigger.mjs';
  5. import { tooltipV2CommonProps } from './common.mjs';
  6. import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';
  7. import { composeEventHandlers } from '../../../utils/dom/event.mjs';
  8. const __default__ = defineComponent({
  9. name: "ElTooltipV2Trigger"
  10. });
  11. const _sfc_main = /* @__PURE__ */ defineComponent({
  12. ...__default__,
  13. props: {
  14. ...tooltipV2CommonProps,
  15. ...tooltipV2TriggerProps
  16. },
  17. setup(__props) {
  18. const props = __props;
  19. const { onClose, onOpen, onDelayOpen, triggerRef, contentId } = inject(tooltipV2RootKey);
  20. let isMousedown = false;
  21. const setTriggerRef = (el) => {
  22. triggerRef.value = el;
  23. };
  24. const onMouseup = () => {
  25. isMousedown = false;
  26. };
  27. const onMouseenter = composeEventHandlers(props.onMouseEnter, onDelayOpen);
  28. const onMouseleave = composeEventHandlers(props.onMouseLeave, onClose);
  29. const onMousedown = composeEventHandlers(props.onMouseDown, () => {
  30. onClose();
  31. isMousedown = true;
  32. document.addEventListener("mouseup", onMouseup, { once: true });
  33. });
  34. const onFocus = composeEventHandlers(props.onFocus, () => {
  35. if (!isMousedown)
  36. onOpen();
  37. });
  38. const onBlur = composeEventHandlers(props.onBlur, onClose);
  39. const onClick = composeEventHandlers(props.onClick, (e) => {
  40. if (e.detail === 0)
  41. onClose();
  42. });
  43. const events = {
  44. blur: onBlur,
  45. click: onClick,
  46. focus: onFocus,
  47. mousedown: onMousedown,
  48. mouseenter: onMouseenter,
  49. mouseleave: onMouseleave
  50. };
  51. const setEvents = (el, events2, type) => {
  52. if (el) {
  53. Object.entries(events2).forEach(([name, handler]) => {
  54. el[type](name, handler);
  55. });
  56. }
  57. };
  58. watch(triggerRef, (triggerEl, previousTriggerEl) => {
  59. setEvents(triggerEl, events, "addEventListener");
  60. setEvents(previousTriggerEl, events, "removeEventListener");
  61. if (triggerEl) {
  62. triggerEl.setAttribute("aria-describedby", contentId.value);
  63. }
  64. });
  65. onBeforeUnmount(() => {
  66. setEvents(triggerRef.value, events, "removeEventListener");
  67. document.removeEventListener("mouseup", onMouseup);
  68. });
  69. return (_ctx, _cache) => {
  70. return _ctx.nowrap ? (openBlock(), createBlock(unref(ForwardRef), {
  71. key: 0,
  72. "set-ref": setTriggerRef,
  73. "only-child": ""
  74. }, {
  75. default: withCtx(() => [
  76. renderSlot(_ctx.$slots, "default")
  77. ]),
  78. _: 3
  79. })) : (openBlock(), createElementBlock("button", mergeProps({
  80. key: 1,
  81. ref_key: "triggerRef",
  82. ref: triggerRef
  83. }, _ctx.$attrs), [
  84. renderSlot(_ctx.$slots, "default")
  85. ], 16));
  86. };
  87. }
  88. });
  89. var TooltipV2Trigger = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "trigger.vue"]]);
  90. export { TooltipV2Trigger as default };
  91. //# sourceMappingURL=trigger2.mjs.map