element-plus
Version:
A Component Library for Vue 3
1 lines • 1.79 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,CAAA;AAErC,MAAM,UAAA,GAAa,CAAC,CAAqB,KAAA;AACvC,EAAA,IAAI,WAAW,MAAW,KAAA,CAAA;AAAG,IAAA,OAAA;AAC7B,EAAM,MAAA,IAAA,GAAO,aAAa,CAAC,CAAA,CAAA;AAC3B,EAAI,IAAA,IAAA,KAAS,WAAW,GAAK,EAAA;AAC3B,IAAA,CAAA,CAAE,eAAgB,EAAA,CAAA;AAClB,IAAM,MAAA,QAAA,GAAW,UAAW,CAAA,UAAA,CAAW,MAAS,GAAA,CAAA,CAAA,CAAA;AAChD,IAAA,QAAA,CAAS,WAAY,EAAA,CAAA;AAAA,GACvB;AACF,CAAA,CAAA;AAEa,MAAA,QAAA,GAAW,CAAC,QAAA,EAAyB,UAA6B,KAAA;AAC7E,EAAM,KAAA,CAAA,UAAA,EAAY,CAAC,GAAQ,KAAA;AACzB,IAAA,IAAI,GAAK,EAAA;AACP,MAAA,UAAA,CAAW,KAAK,QAAQ,CAAA,CAAA;AAAA,KACnB,MAAA;AACL,MAAA,UAAA,CAAW,MAAO,CAAA,UAAA,CAAW,OAAQ,CAAA,QAAQ,GAAG,CAAC,CAAA,CAAA;AAAA,KACnD;AAAA,GACD,CAAA,CAAA;AACH,EAAA;AAEA,IAAI,QAAA;AAAU,EAAiB,gBAAA,CAAA,QAAA,EAAU,WAAW,UAAU,CAAA;;;;"}