{"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-ultra/shared'\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  if (e.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(\n        modalStack.findIndex((modal) => modal === instance),\n        1\n      )\n    }\n  })\n}\n\nif (isClient) useEventListener(document, 'keydown', closeModal)\n"],"names":[],"mappings":";;;;;AAUA,MAAM,aAA8B,EAAC,CAAA;AAErC,MAAM,UAAA,GAAa,CAAC,CAAqB,KAAA;AACvC,EAAA,IAAI,WAAW,MAAW,KAAA,CAAA;AAAG,IAAA,OAAA;AAC7B,EAAI,IAAA,CAAA,CAAE,IAAS,KAAA,UAAA,CAAW,GAAK,EAAA;AAC7B,IAAA,CAAA,CAAE,eAAgB,EAAA,CAAA;AAClB,IAAA,MAAM,QAAW,GAAA,UAAA,CAAW,UAAW,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACjD,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,MAAW,UAAA,CAAA,MAAA;AAAA,QACT,UAAW,CAAA,SAAA,CAAU,CAAC,KAAA,KAAU,UAAU,QAAQ,CAAA;AAAA,QAClD,CAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AACH,EAAA;AAEA,IAAI,QAAA;AAAU,EAAiB,gBAAA,CAAA,QAAA,EAAU,WAAW,UAAU,CAAA;;;;"}