+20
src/components/Popup.svelte
+20
src/components/Popup.svelte
···
30
const handleKeydown = (event: KeyboardEvent) => {
31
if (event.key === 'Escape') onClose();
32
};
33
</script>
34
35
{#if isOpen}
···
43
<!-- svelte-ignore a11y_interactive_supports_focus -->
44
<!-- svelte-ignore a11y_click_events_have_key_events -->
45
<div
46
class="flex {height === 'auto'
47
? ''
48
: 'h-[' +
···
30
const handleKeydown = (event: KeyboardEvent) => {
31
if (event.key === 'Escape') onClose();
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
+
});
52
</script>
53
54
{#if isOpen}
···
62
<!-- svelte-ignore a11y_interactive_supports_focus -->
63
<!-- svelte-ignore a11y_click_events_have_key_events -->
64
<div
65
+
bind:this={popupElement}
66
class="flex {height === 'auto'
67
? ''
68
: 'h-[' +