element-plus
Version:
A Component Library for Vue 3
1 lines • 3 kB
Source Map (JSON)
{"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;;;;"}