+20
src/components/Popup.svelte
+20
src/components/Popup.svelte
···
30
30
const handleKeydown = (event: KeyboardEvent) => {
31
31
if (event.key === 'Escape') onClose();
32
32
};
33
+
34
+
let popupElement: HTMLDivElement | undefined = $state();
35
+
36
+
$effect(() => {
37
+
if (!isOpen) return;
38
+
39
+
const preventDefault = (e: Event) => {
40
+
if (popupElement && popupElement.contains(e.target as Node)) return;
41
+
e.preventDefault();
42
+
};
43
+
44
+
document.addEventListener('wheel', preventDefault, { passive: false });
45
+
document.addEventListener('touchmove', preventDefault, { passive: false });
46
+
47
+
return () => {
48
+
document.removeEventListener('wheel', preventDefault);
49
+
document.removeEventListener('touchmove', preventDefault);
50
+
};
51
+
});
33
52
</script>
34
53
35
54
{#if isOpen}
···
43
62
<!-- svelte-ignore a11y_interactive_supports_focus -->
44
63
<!-- svelte-ignore a11y_click_events_have_key_events -->
45
64
<div
65
+
bind:this={popupElement}
46
66
class="flex {height === 'auto'
47
67
? ''
48
68
: 'h-[' +