0f3740fe4e8e358db8ef1a53900ae7720a89ef366e98a375fecda595f1a7dfde0de66d60e3a3edf775b14426b19ef6daa5fce3acd1791b9403a5519bd32d9d 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { defineComponent, inject, ref, toRef, openBlock, createBlock, unref, normalizeClass, withCtx, renderSlot, nextTick } from 'vue';
  2. import '../../popper/index.mjs';
  3. import { TOOLTIP_INJECTION_KEY } from './constants.mjs';
  4. import { useTooltipTriggerProps } from './trigger.mjs';
  5. import { whenTrigger } from './utils.mjs';
  6. import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';
  7. import ElPopperTrigger from '../../popper/src/trigger2.mjs';
  8. import { composeEventHandlers } from '../../../utils/dom/event.mjs';
  9. import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
  10. import { focusElement } from '../../../utils/dom/aria.mjs';
  11. const __default__ = defineComponent({
  12. name: "ElTooltipTrigger"
  13. });
  14. const _sfc_main = /* @__PURE__ */ defineComponent({
  15. ...__default__,
  16. props: useTooltipTriggerProps,
  17. setup(__props, { expose }) {
  18. const props = __props;
  19. const ns = useNamespace("tooltip");
  20. const { controlled, id, open, onOpen, onClose, onToggle } = inject(TOOLTIP_INJECTION_KEY, void 0);
  21. const triggerRef = ref(null);
  22. const stopWhenControlledOrDisabled = () => {
  23. if (unref(controlled) || props.disabled) {
  24. return true;
  25. }
  26. };
  27. const trigger = toRef(props, "trigger");
  28. const onMouseenter = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", (e) => {
  29. onOpen(e);
  30. if (props.focusOnTarget && e.target) {
  31. nextTick(() => {
  32. focusElement(e.target, { preventScroll: true });
  33. });
  34. }
  35. }));
  36. const onMouseleave = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", onClose));
  37. const onClick = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "click", (e) => {
  38. if (e.button === 0) {
  39. onToggle(e);
  40. }
  41. }));
  42. const onFocus = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onOpen));
  43. const onBlur = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onClose));
  44. const onContextMenu = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "contextmenu", (e) => {
  45. e.preventDefault();
  46. onToggle(e);
  47. }));
  48. const onKeydown = composeEventHandlers(stopWhenControlledOrDisabled, (e) => {
  49. const { code } = e;
  50. if (props.triggerKeys.includes(code)) {
  51. e.preventDefault();
  52. onToggle(e);
  53. }
  54. });
  55. expose({
  56. triggerRef
  57. });
  58. return (_ctx, _cache) => {
  59. return openBlock(), createBlock(unref(ElPopperTrigger), {
  60. id: unref(id),
  61. "virtual-ref": _ctx.virtualRef,
  62. open: unref(open),
  63. "virtual-triggering": _ctx.virtualTriggering,
  64. class: normalizeClass(unref(ns).e("trigger")),
  65. onBlur: unref(onBlur),
  66. onClick: unref(onClick),
  67. onContextmenu: unref(onContextMenu),
  68. onFocus: unref(onFocus),
  69. onMouseenter: unref(onMouseenter),
  70. onMouseleave: unref(onMouseleave),
  71. onKeydown: unref(onKeydown)
  72. }, {
  73. default: withCtx(() => [
  74. renderSlot(_ctx.$slots, "default")
  75. ]),
  76. _: 3
  77. }, 8, ["id", "virtual-ref", "open", "virtual-triggering", "class", "onBlur", "onClick", "onContextmenu", "onFocus", "onMouseenter", "onMouseleave", "onKeydown"]);
  78. };
  79. }
  80. });
  81. var ElTooltipTrigger = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "trigger.vue"]]);
  82. export { ElTooltipTrigger as default };
  83. //# sourceMappingURL=trigger2.mjs.map