element-plus
Version:
A Component Library for Vue 3
1 lines • 1.74 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-modal/index.ts"],"sourcesContent":["import { watch } from 'vue'\nimport { isClient, useEventListener } from '@vueuse/core'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { getEventCode } from '@element-plus/utils'\n\nimport type { Ref } from 'vue'\n\ntype ModalInstance = {\n handleClose: () => void\n}\n\nconst modalStack: ModalInstance[] = []\n\nconst closeModal = (e: KeyboardEvent) => {\n if (modalStack.length === 0) return\n const code = getEventCode(e)\n if (code === EVENT_CODE.esc) {\n e.stopPropagation()\n const topModal = modalStack[modalStack.length - 1]\n topModal.handleClose()\n }\n}\n\nexport const useModal = (instance: ModalInstance, visibleRef: Ref<boolean>) => {\n watch(visibleRef, (val) => {\n if (val) {\n modalStack.push(instance)\n } else {\n modalStack.splice(modalStack.indexOf(instance), 1)\n }\n })\n}\n\nif (isClient) useEventListener(document, 'keydown', closeModal)\n"],"names":[],"mappings":";;;;;AAWA,MAAM,aAA8B,EAAC;AAErC,MAAM,UAAA,GAAa,CAAC,CAAA,KAAqB;AACvC,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC7B,EAAA,MAAM,IAAA,GAAO,aAAa,CAAC,CAAA;AAC3B,EAAA,IAAI,IAAA,KAAS,WAAW,GAAA,EAAK;AAC3B,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA;AACjD,IAAA,QAAA,CAAS,WAAA,EAAY;AAAA,EACvB;AACF,CAAA;AAEO,MAAM,QAAA,GAAW,CAAC,QAAA,EAAyB,UAAA,KAA6B;AAC7E,EAAA,KAAA,CAAM,UAAA,EAAY,CAAC,GAAA,KAAQ;AACzB,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,UAAA,CAAW,KAAK,QAAQ,CAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,MAAA,CAAO,UAAA,CAAW,OAAA,CAAQ,QAAQ,GAAG,CAAC,CAAA;AAAA,IACnD;AAAA,EACF,CAAC,CAAA;AACH;AAEA,IAAI,QAAA,EAAU,gBAAA,CAAiB,QAAA,EAAU,SAAA,EAAW,UAAU,CAAA;;;;"}