replies timeline only, appview-less bluesky client

fix: prevent bg from being scrolled when popup is open

ptr.pet 40023019 6981b810

verified
Changed files
+20
src
components
+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-[' +