personal web client for Bluesky
typescript
solidjs
bluesky
atcute
1import { createEffect } from 'solid-js';
2
3import { createEventListener } from './event-listener';
4
5export const useEscape = (callback: () => void, enabled: () => boolean) => {
6 createEffect(() => {
7 if (!enabled()) {
8 return;
9 }
10
11 createEventListener(window, 'keydown', (ev) => {
12 if (ev.key === 'Escape' && !ev.defaultPrevented) {
13 ev.preventDefault();
14
15 const focused = document.activeElement;
16 if (focused !== null && focused !== document.body) {
17 (focused as any).blur();
18 }
19
20 callback();
21 }
22 });
23 });
24};