30 lines
		
	
	
		
			951 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			951 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { onMounted, onBeforeUnmount } from 'vue';
 | 
						|
import { isClient } from '@vueuse/core';
 | 
						|
import { EVENT_CODE } from '../../constants/aria.mjs';
 | 
						|
 | 
						|
let registeredEscapeHandlers = [];
 | 
						|
const cachedHandler = (event) => {
 | 
						|
  if (event.code === EVENT_CODE.esc) {
 | 
						|
    registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event));
 | 
						|
  }
 | 
						|
};
 | 
						|
const useEscapeKeydown = (handler) => {
 | 
						|
  onMounted(() => {
 | 
						|
    if (registeredEscapeHandlers.length === 0) {
 | 
						|
      document.addEventListener("keydown", cachedHandler);
 | 
						|
    }
 | 
						|
    if (isClient)
 | 
						|
      registeredEscapeHandlers.push(handler);
 | 
						|
  });
 | 
						|
  onBeforeUnmount(() => {
 | 
						|
    registeredEscapeHandlers = registeredEscapeHandlers.filter((registeredHandler) => registeredHandler !== handler);
 | 
						|
    if (registeredEscapeHandlers.length === 0) {
 | 
						|
      if (isClient)
 | 
						|
        document.removeEventListener("keydown", cachedHandler);
 | 
						|
    }
 | 
						|
  });
 | 
						|
};
 | 
						|
 | 
						|
export { useEscapeKeydown };
 | 
						|
//# sourceMappingURL=index.mjs.map
 |