1 |
|
2 | const activeKeyListeners: Set<HTMLElement> = new Set(); |
3 |
|
4 | export function escapeKey(node: HTMLElement, callback: (event: KeyboardEvent) => void) { |
5 | function handleKeydown(event: KeyboardEvent) { |
6 | if (event.key === 'Escape') { |
7 | |
8 | const elements = Array.from(activeKeyListeners); |
9 | const topmostElement = elements[elements.length - 1]; |
10 | if (node === topmostElement) callback(event); |
11 | } |
12 | } |
13 |
|
14 | $effect(() => { |
15 | activeKeyListeners.add(node); |
16 | document.addEventListener('keydown', handleKeydown); |
17 |
|
18 | return () => { |
19 | activeKeyListeners.delete(node); |
20 | document.removeEventListener('keydown', handleKeydown); |
21 | }; |
22 | }); |
23 | } |
24 |
|