atproto explorer pdsls.dev
atproto tool
at main 1.2 kB view raw
1import { createSignal, JSX, onCleanup, onMount } from "solid-js"; 2 3export const StickyOverlay = (props: { children?: JSX.Element }) => { 4 const [filterStuck, setFilterStuck] = createSignal(false); 5 6 return ( 7 <> 8 <div 9 ref={(trigger) => { 10 onMount(() => { 11 const observer = new IntersectionObserver( 12 ([entry]) => setFilterStuck(!entry.isIntersecting), 13 { 14 rootMargin: "-8px 0px 0px 0px", 15 threshold: 0, 16 }, 17 ); 18 19 observer.observe(trigger); 20 21 onCleanup(() => { 22 observer.unobserve(trigger); 23 observer.disconnect(); 24 }); 25 }); 26 }} 27 class="pointer-events-none h-0" 28 aria-hidden="true" 29 /> 30 31 <div 32 class="sticky top-2 z-10 flex w-full flex-col items-center justify-center gap-2 rounded-lg p-3 transition-colors" 33 classList={{ 34 "bg-neutral-50 dark:bg-dark-300 border-[0.5px] border-neutral-300 dark:border-neutral-700 shadow-md": 35 filterStuck(), 36 "bg-transparent border-transparent shadow-none": !filterStuck(), 37 }} 38 > 39 {props.children} 40 </div> 41 </> 42 ); 43};