{"version":3,"file":"use-target-events.mjs","sources":["../../../../../packages/hooks/use-popper/use-target-events.ts"],"sourcesContent":["import { computed, getCurrentInstance } from 'vue'\nimport { isArray } from '@element-plus/utils/util'\n\nexport type TriggerType = 'click' | 'hover' | 'focus' | 'manual'\nexport type Trigger = TriggerType | TriggerType[]\n\nexport interface PopperEvents {\n  onClick?: (e: Event) => void\n  onMouseenter?: (e: Event) => void\n  onMouseleave?: (e: Event) => void\n  onFocus?: (e: Event) => void\n  onBlur?: (e: Event) => void\n}\n\nexport const DEFAULT_TRIGGER = 'hover'\n\ntype Handler = () => void\n\nexport const useTargetEvents = (\n  onShow: Handler,\n  onHide: Handler,\n  onToggle: Handler\n) => {\n  const { props } = getCurrentInstance()!\n\n  let triggerFocused = false\n\n  const popperEventsHandler = (e: Event) => {\n    e.stopPropagation()\n    switch (e.type) {\n      case 'click': {\n        if (triggerFocused) {\n          // reset previous focus event\n          triggerFocused = false\n        } else {\n          onToggle()\n        }\n        break\n      }\n      case 'mouseenter': {\n        onShow()\n        break\n      }\n      case 'mouseleave': {\n        onHide()\n        break\n      }\n      case 'focus': {\n        triggerFocused = true\n        onShow()\n        break\n      }\n      case 'blur': {\n        triggerFocused = false\n        onHide()\n        break\n      }\n    }\n  }\n\n  const triggerEventsMap: Partial<Record<TriggerType, (keyof PopperEvents)[]>> =\n    {\n      click: ['onClick'],\n      hover: ['onMouseenter', 'onMouseleave'],\n      focus: ['onFocus', 'onBlur'],\n    }\n\n  const mapEvents = (t: TriggerType) => {\n    const events = {} as PopperEvents\n    triggerEventsMap[t]?.forEach((event) => {\n      events[event] = popperEventsHandler\n    })\n\n    return events\n  }\n\n  return computed(() => {\n    if (isArray(props.trigger)) {\n      return Object.values(props.trigger).reduce((pre, t) => {\n        return {\n          ...pre,\n          ...mapEvents(t),\n        }\n      }, {})\n    } else {\n      return mapEvents(props.trigger as TriggerType)\n    }\n  })\n}\n"],"names":[],"mappings":";;;;MAca,kBAAkB;MAIlB,kBAAkB,CAC7B,QACA,QACA,aACG;AACH,QAAM,EAAE,UAAU;AAElB,MAAI,iBAAiB;AAErB,QAAM,sBAAsB,CAAC,MAAa;AACxC,MAAE;AACF,YAAQ,EAAE;AAAA,WACH,SAAS;AACZ,YAAI,gBAAgB;AAElB,2BAAiB;AAAA,eACZ;AACL;AAAA;AAEF;AAAA;AAAA,WAEG,cAAc;AACjB;AACA;AAAA;AAAA,WAEG,cAAc;AACjB;AACA;AAAA;AAAA,WAEG,SAAS;AACZ,yBAAiB;AACjB;AACA;AAAA;AAAA,WAEG,QAAQ;AACX,yBAAiB;AACjB;AACA;AAAA;AAAA;AAAA;AAKN,QAAM,mBACJ;AAAA,IACE,OAAO,CAAC;AAAA,IACR,OAAO,CAAC,gBAAgB;AAAA,IACxB,OAAO,CAAC,WAAW;AAAA;AAGvB,QAAM,YAAY,CAAC,MAAmB;AAnExC;AAoEI,UAAM,SAAS;AACf,2BAAiB,OAAjB,mBAAqB,QAAQ,CAAC,UAAU;AACtC,aAAO,SAAS;AAAA;AAGlB,WAAO;AAAA;AAGT,SAAO,SAAS,MAAM;AACpB,QAAI,QAAQ,MAAM,UAAU;AAC1B,aAAO,OAAO,OAAO,MAAM,SAAS,OAAO,CAAC,KAAK,MAAM;AACrD,eAAO;AAAA,aACF;AAAA,aACA,UAAU;AAAA;AAAA,SAEd;AAAA,WACE;AACL,aAAO,UAAU,MAAM;AAAA;AAAA;AAAA;;;;"}