Monorepo for Tangled tangled.org
1

Configure Feed

Select the types of activity you want to include in your feed.

core / web / src / routes / +layout.svelte
1.9 kB 62 lines
1<script lang="ts"> 2 import { page } from "$app/state"; 3 import { createAuth, AUTH_KEY } from "$lib/auth.svelte"; 4 import Footer from "$lib/components/shell/Footer.svelte"; 5 import Topbar from "$lib/components/shell/Topbar.svelte"; 6 import { onMount, setContext, untrack } from "svelte"; 7 import "../app.css"; 8 9 let { children, data } = $props(); 10 11 const auth = createAuth( 12 data.publicConfig.bobbinUrl, 13 untrack(() => data.auth) 14 ); 15 setContext(AUTH_KEY, auth); 16 17 onMount(() => { 18 if (page.url.pathname !== "/oauth/callback") void auth.refresh(); 19 }); 20 21 const signedIn = $derived(Boolean(auth.currentUser)); 22 const isAuthShell = $derived(page.url.pathname === "/login"); 23 const isMarketingShell = $derived( 24 !signedIn && (page.url.pathname === "/about" || page.url.pathname === "/") 25 ); 26 const topbarVariant = $derived(isMarketingShell ? "marketing" : "app"); 27</script> 28 29<svelte:head> 30 <title>Tangled</title> 31</svelte:head> 32 33<div 34 class={isAuthShell 35 ? "flex min-h-screen flex-col bg-background-default text-foreground-default" 36 : isMarketingShell 37 ? "flex min-h-screen flex-col bg-gradient-to-b from-background-default to-background-canvas text-foreground-default" 38 : "flex min-h-screen flex-col bg-background-canvas text-foreground-default"} 39> 40 {#if !isAuthShell} 41 <header 42 class={isMarketingShell 43 ? "z-20 w-full bg-transparent pt-[env(safe-area-inset-top)]" 44 : "sticky top-0 z-20 w-full bg-background-default pt-[env(safe-area-inset-top)]"} 45 > 46 <Topbar 47 user={auth.currentUser} 48 variant={topbarVariant} 49 loading={auth.authenticating || auth.profileLoading} 50 onSignOut={auth.signOut} 51 /> 52 </header> 53 {/if} 54 55 <main class={isAuthShell ? "flex flex-grow items-center justify-center px-7" : "flex-grow"}> 56 {@render children()} 57 </main> 58 59 {#if !isAuthShell} 60 <Footer variant={isMarketingShell ? "full" : "minimal"} /> 61 {/if} 62</div>