index.mjs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import { onMounted, onBeforeUnmount } from 'vue';
  2. import { isClient } from '@vueuse/core';
  3. import { getEventCode } from '../../utils/dom/event.mjs';
  4. import { EVENT_CODE } from '../../constants/aria.mjs';
  5. let registeredEscapeHandlers = [];
  6. const cachedHandler = (event) => {
  7. const code = getEventCode(event);
  8. if (code === EVENT_CODE.esc) {
  9. registeredEscapeHandlers.forEach(
  10. (registeredHandler) => registeredHandler(event)
  11. );
  12. }
  13. };
  14. const useEscapeKeydown = (handler) => {
  15. onMounted(() => {
  16. if (registeredEscapeHandlers.length === 0) {
  17. document.addEventListener("keydown", cachedHandler);
  18. }
  19. if (isClient)
  20. registeredEscapeHandlers.push(handler);
  21. });
  22. onBeforeUnmount(() => {
  23. registeredEscapeHandlers = registeredEscapeHandlers.filter(
  24. (registeredHandler) => registeredHandler !== handler
  25. );
  26. if (registeredEscapeHandlers.length === 0) {
  27. if (isClient)
  28. document.removeEventListener("keydown", cachedHandler);
  29. }
  30. });
  31. };
  32. export { useEscapeKeydown };
  33. //# sourceMappingURL=index.mjs.map