layout-view.svelte (1416B)
1 <script lang="ts"> 2 import { nav_blur, ph_blur, tabs_blur } from "$lib/stores/app"; 3 import { fmt_cl, type IBasisOpt, type IClOpt } from "@radroots/apps-lib"; 4 import { onDestroy, onMount, type Snippet } from "svelte"; 5 6 let { 7 basis = undefined, 8 el = $bindable(null), 9 children, 10 }: { 11 el?: HTMLDivElement | null; 12 basis?: IBasisOpt<IClOpt & { fade?: boolean }>; 13 children: Snippet; 14 } = $props(); 15 16 onMount(async () => { 17 try { 18 el?.addEventListener("scroll", on_scroll_change); 19 } catch (e) { 20 } finally { 21 } 22 }); 23 24 onDestroy(async () => { 25 try { 26 el?.removeEventListener("scroll", on_scroll_change); 27 } catch (e) { 28 } finally { 29 } 30 }); 31 32 const on_scroll_change = (): void => { 33 if (Math.max(el?.scrollTop || 0, 0) > 10) nav_blur.set(true); 34 else nav_blur.set(false); 35 if (Math.max(el?.scrollTop || 0, 0) > 10) tabs_blur.set(true); 36 else tabs_blur.set(false); 37 if (Math.max(el?.scrollTop || 0, 0) > 30) ph_blur.set(true); 38 else ph_blur.set(false); 39 }; 40 </script> 41 42 <div 43 bind:this={el} 44 class={`${fmt_cl( 45 basis?.classes, 46 )} absolute top-0 left-0 flex flex-col h-[100vh] w-full justify-start items-center scroll-hide overflow-auto`} 47 class:fade-in={basis?.fade} 48 > 49 {@render children()} 50 </div>