{"version":3,"file":"trigger2.mjs","sources":["../../../../../../packages/components/popper/src/trigger.vue"],"sourcesContent":["<template>\n  <hl-only-child\n    v-if=\"!virtualTriggering\"\n    v-bind=\"$attrs\"\n    :aria-controls=\"ariaControls\"\n    :aria-describedby=\"ariaDescribedby\"\n    :aria-expanded=\"ariaExpanded\"\n    :aria-haspopup=\"ariaHaspopup\"\n  >\n    <slot></slot>\n  </hl-only-child>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, onBeforeUnmount, onMounted, watch } from 'vue'\nimport { isNil } from 'lodash-unified'\nimport { unrefElement } from '@vueuse/core'\nimport { HlOnlyChild } from '@hongluan-ui/components/slot'\nimport { useForwardRef } from '@hongluan-ui/hooks'\nimport { POPPER_INJECTION_KEY } from '@hongluan-ui/tokens'\nimport { isElement } from '@hongluan-ui/utils'\nimport { popperTriggerProps } from './trigger'\n\nimport type { WatchStopHandle } from 'vue'\n\ndefineOptions({\n  name: 'PopperTrigger',\n  inheritAttrs: false,\n})\n\nconst props = defineProps(popperTriggerProps)\n\nconst { role, triggerRef } = inject(POPPER_INJECTION_KEY, undefined)!\n\nuseForwardRef(triggerRef)\n\nconst ariaControls = computed<string | undefined>(() => {\n  return ariaHaspopup.value ? props.id : undefined\n})\n\nconst ariaDescribedby = computed<string | undefined>(() => {\n  if (role && role.value === 'tooltip') {\n    return props.open && props.id ? props.id : undefined\n  }\n  return undefined\n})\n\nconst ariaHaspopup = computed<string | undefined>(() => {\n  if (role && role.value !== 'tooltip') {\n    return role.value\n  }\n  return undefined\n})\n\nconst ariaExpanded = computed<string | undefined>(() => {\n  return ariaHaspopup.value ? `${props.open}` : undefined\n})\n\nlet virtualTriggerAriaStopWatch: WatchStopHandle | undefined = undefined\n\nconst TRIGGER_ELE_EVENTS = [\n  'onMouseenter',\n  'onMouseleave',\n  'onClick',\n  'onKeydown',\n  'onFocus',\n  'onBlur',\n  'onContextmenu',\n] as const\n\nonMounted(() => {\n  watch(\n    () => props.virtualRef,\n    virtualEl => {\n      if (virtualEl) {\n        triggerRef.value = unrefElement(virtualEl as HTMLElement)\n      }\n    },\n    {\n      immediate: true,\n    },\n  )\n\n  watch(\n    triggerRef,\n    (el, prevEl) => {\n      virtualTriggerAriaStopWatch?.()\n      virtualTriggerAriaStopWatch = undefined\n      if (isElement(el)) {\n        TRIGGER_ELE_EVENTS.forEach(eventName => {\n          const handler = props[eventName]\n          if (handler) {\n            (el as HTMLElement).addEventListener(\n              eventName.slice(2).toLowerCase(),\n              handler,\n            )\n            ;(prevEl as HTMLElement)?.removeEventListener?.(\n              eventName.slice(2).toLowerCase(),\n              handler,\n            )\n          }\n        })\n        virtualTriggerAriaStopWatch = watch(\n          [ariaControls, ariaDescribedby, ariaHaspopup, ariaExpanded],\n          watches => {\n            [\n              'aria-controls',\n              'aria-describedby',\n              'aria-haspopup',\n              'aria-expanded',\n            ].forEach((key, idx) => {\n              isNil(watches[idx])\n                ? el.removeAttribute(key)\n                : el.setAttribute(key, watches[idx]!)\n            })\n          },\n          { immediate: true },\n        )\n      }\n      if (isElement(prevEl)) {\n        [\n          'aria-controls',\n          'aria-describedby',\n          'aria-haspopup',\n          'aria-expanded',\n        ].forEach(key => prevEl.removeAttribute(key))\n      }\n    },\n    {\n      immediate: true,\n    },\n  )\n})\n\nonBeforeUnmount(() => {\n  virtualTriggerAriaStopWatch?.()\n  virtualTriggerAriaStopWatch = undefined\n  if (triggerRef.value && isElement(triggerRef.value)) {\n    const el = triggerRef.value as HTMLElement\n    TRIGGER_ELE_EVENTS.forEach(eventName => {\n      const handler = props[eventName]\n      if (handler) {\n        el.removeEventListener(eventName.slice(2).toLowerCase(), handler)\n      }\n    })\n    triggerRef.value = undefined\n  }\n})\n\ndefineExpose({\n  /**\n   * @description trigger element\n   */\n  triggerRef,\n})\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;oCAyBc;AAAA,EACZ,MAAM;AAAA,EACN,cAAc;AAChB;;;;;;AAIA,UAAM,EAAE,MAAM,eAAe,OAAO,sBAAsB,MAAS;AAEnE,kBAAc,UAAU;AAExB,UAAM,eAAe,SAA6B,MAAM;AACtD,aAAO,aAAa,QAAQ,MAAM,KAAK;AAAA,KACxC;AAED,UAAM,kBAAkB,SAA6B,MAAM;AACzD,UAAI,QAAQ,KAAK,UAAU,WAAW;AACpC,eAAO,MAAM,QAAQ,MAAM,KAAK,MAAM,KAAK;AAAA;AAE7C,aAAO;AAAA,KACR;AAED,UAAM,eAAe,SAA6B,MAAM;AACtD,UAAI,QAAQ,KAAK,UAAU,WAAW;AACpC,eAAO,KAAK;AAAA;AAEd,aAAO;AAAA,KACR;AAED,UAAM,eAAe,SAA6B,MAAM;AACtD,aAAO,aAAa,QAAQ,GAAG,MAAM,SAAS;AAAA,KAC/C;AAED,QAAI,8BAA2D;AAE/D,UAAM,qBAAqB;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAGF,cAAU,MAAM;AACd,YACE,MAAM,MAAM,YACZ,eAAa;AACX,YAAI,WAAW;AACb,qBAAW,QAAQ,aAAa,SAAwB;AAAA;AAC1D,SAEF;AAAA,QACE,WAAW;AAAA,OAEf;AAEA,YACE,YACA,CAAC,IAAI,WAAW;AACd;AACA,sCAA8B;AAC9B,YAAI,UAAU,EAAE,GAAG;AACjB,6BAAmB,QAAQ,eAAa;AACtC,kBAAM;AACN,yBAAa;AACX;AAIC,cAAC,8BACA,+BAA+B;AAEjC;AACF;AAEF;AAGI;AAAA;AACE,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AACA,4BAAc,QACV;AACkC;AACvC,aAEH,EAAE;AACJ;AAEF;AACE;AAAA;AACE,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAA0C;AAC9C,SAEF;AAAA;AACa;AAEf;AAGF;AACE;AACA;AACA;AACE,8BAAsB;AACtB,mCAA2B;AACzB,0BAAgB;AAChB,uBAAa;AACX;AAAgE;AAClE;AAEF;AAAmB;AACrB;AAGF;AAAa;AAIX;;;;;;;;;;;;;;;;;;;;"}