your personal website on atproto - mirror
blento.app
1<script lang="ts">
2 import '../app.css';
3
4 import { Tooltip } from 'bits-ui';
5 import { ThemeToggle, Toaster, toast } from '@foxui/core';
6 import { onMount } from 'svelte';
7 import { initClient } from '$lib/atproto';
8 import YoutubeVideoPlayer, { videoPlayer } from '$lib/components/YoutubeVideoPlayer.svelte';
9 import { page } from '$app/state';
10 import { goto } from '$app/navigation';
11 import { AtprotoLoginModal } from '@foxui/social';
12 import { login, signup } from '$lib/atproto';
13 import type { ActorIdentifier } from '@atcute/lexicons';
14
15 let { children, data } = $props();
16 let showThemeToggle = $derived(
17 !/(?:\/card\/[^/]+|\/embed\/type\/[^/]+)$/.test(page.url.pathname)
18 );
19
20 const errorMessages: Record<string, (params: URLSearchParams) => string> = {
21 handle_not_found: (p) => `Handle ${p.get('handle') ?? ''} not found!`
22 };
23
24 onMount(() => {
25 initClient({ customDomain: data.customDomain });
26 });
27</script>
28
29<Tooltip.Provider delayDuration={300}>
30 {@render children()}
31</Tooltip.Provider>
32
33{#if showThemeToggle}
34 <ThemeToggle class="fixed top-2 left-2 z-10" />
35{/if}
36
37<Toaster />
38
39{#if videoPlayer.id}
40 <YoutubeVideoPlayer />
41{/if}
42
43<AtprotoLoginModal
44 login={async (handle) => {
45 await login(handle as ActorIdentifier);
46 return true;
47 }}
48 signup={async () => {
49 await signup();
50 return true;
51 }}
52/>