index.mjs 1.0 KB

1234567891011121314151617181920212223242526
  1. import { EVENT_CODE } from "../../constants/aria.mjs";
  2. import { isClient } from "../../utils/browser.mjs";
  3. import { getEventCode } from "../../utils/dom/event.mjs";
  4. import { onBeforeUnmount, onMounted } from "vue";
  5. //#region ../../packages/hooks/use-escape-keydown/index.ts
  6. let registeredEscapeHandlers = [];
  7. const cachedHandler = (event) => {
  8. if (getEventCode(event) === EVENT_CODE.esc) registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event));
  9. };
  10. const useEscapeKeydown = (handler) => {
  11. onMounted(() => {
  12. if (registeredEscapeHandlers.length === 0) document.addEventListener("keydown", cachedHandler);
  13. if (isClient) registeredEscapeHandlers.push(handler);
  14. });
  15. onBeforeUnmount(() => {
  16. registeredEscapeHandlers = registeredEscapeHandlers.filter((registeredHandler) => registeredHandler !== handler);
  17. if (registeredEscapeHandlers.length === 0) {
  18. if (isClient) document.removeEventListener("keydown", cachedHandler);
  19. }
  20. });
  21. };
  22. //#endregion
  23. export { useEscapeKeydown };
  24. //# sourceMappingURL=index.mjs.map