You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
1.0 KiB

1 month ago
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var core = require('@vueuse/core');
  5. var aria = require('../../constants/aria.js');
  6. let registeredEscapeHandlers = [];
  7. const cachedHandler = (event) => {
  8. if (event.code === aria.EVENT_CODE.esc) {
  9. registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event));
  10. }
  11. };
  12. const useEscapeKeydown = (handler) => {
  13. vue.onMounted(() => {
  14. if (registeredEscapeHandlers.length === 0) {
  15. document.addEventListener("keydown", cachedHandler);
  16. }
  17. if (core.isClient)
  18. registeredEscapeHandlers.push(handler);
  19. });
  20. vue.onBeforeUnmount(() => {
  21. registeredEscapeHandlers = registeredEscapeHandlers.filter((registeredHandler) => registeredHandler !== handler);
  22. if (registeredEscapeHandlers.length === 0) {
  23. if (core.isClient)
  24. document.removeEventListener("keydown", cachedHandler);
  25. }
  26. });
  27. };
  28. exports.useEscapeKeydown = useEscapeKeydown;
  29. //# sourceMappingURL=index.js.map