- Delete old Vite+Svelte frontend - Initialize new SvelteKit project with TypeScript - Configure Tailwind CSS v4 + DaisyUI - Implement JWT authentication with auto-refresh - Create login page with form validation (Zod) - Add protected route guards - Update Docker configuration for single-stage build - Add E2E tests with Playwright (6/11 passing) - Fix Svelte 5 reactivity with $state() runes Known issues: - 5 E2E tests failing (timing/async issues) - Token refresh implementation needs debugging - Validation error display timing
80 lines
2.4 KiB
Svelte
80 lines
2.4 KiB
Svelte
<!-- This file is generated by @sveltejs/kit — do not edit it! -->
|
|
<svelte:options runes={true} />
|
|
<script>
|
|
import { setContext, onMount, tick } from 'svelte';
|
|
import { browser } from '$app/environment';
|
|
|
|
// stores
|
|
let { stores, page, constructors, components = [], form, data_0 = null, data_1 = null, data_2 = null } = $props();
|
|
|
|
if (!browser) {
|
|
// svelte-ignore state_referenced_locally
|
|
setContext('__svelte__', stores);
|
|
}
|
|
|
|
if (browser) {
|
|
$effect.pre(() => stores.page.set(page));
|
|
} else {
|
|
// svelte-ignore state_referenced_locally
|
|
stores.page.set(page);
|
|
}
|
|
$effect(() => {
|
|
stores;page;constructors;components;form;data_0;data_1;data_2;
|
|
stores.page.notify();
|
|
});
|
|
|
|
let mounted = $state(false);
|
|
let navigated = $state(false);
|
|
let title = $state(null);
|
|
|
|
onMount(() => {
|
|
const unsubscribe = stores.page.subscribe(() => {
|
|
if (mounted) {
|
|
navigated = true;
|
|
tick().then(() => {
|
|
title = document.title || 'untitled page';
|
|
});
|
|
}
|
|
});
|
|
|
|
mounted = true;
|
|
return unsubscribe;
|
|
});
|
|
|
|
const Pyramid_2=$derived(constructors[2])
|
|
</script>
|
|
|
|
{#if constructors[1]}
|
|
{@const Pyramid_0 = constructors[0]}
|
|
<!-- svelte-ignore binding_property_non_reactive -->
|
|
<Pyramid_0 bind:this={components[0]} data={data_0} {form} params={page.params}>
|
|
{#if constructors[2]}
|
|
{@const Pyramid_1 = constructors[1]}
|
|
<!-- svelte-ignore binding_property_non_reactive -->
|
|
<Pyramid_1 bind:this={components[1]} data={data_1} {form} params={page.params}>
|
|
<!-- svelte-ignore binding_property_non_reactive -->
|
|
<Pyramid_2 bind:this={components[2]} data={data_2} {form} params={page.params} />
|
|
</Pyramid_1>
|
|
|
|
{:else}
|
|
{@const Pyramid_1 = constructors[1]}
|
|
<!-- svelte-ignore binding_property_non_reactive -->
|
|
<Pyramid_1 bind:this={components[1]} data={data_1} {form} params={page.params} />
|
|
|
|
{/if}
|
|
</Pyramid_0>
|
|
|
|
{:else}
|
|
{@const Pyramid_0 = constructors[0]}
|
|
<!-- svelte-ignore binding_property_non_reactive -->
|
|
<Pyramid_0 bind:this={components[0]} data={data_0} {form} params={page.params} />
|
|
|
|
{/if}
|
|
|
|
{#if mounted}
|
|
<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px">
|
|
{#if navigated}
|
|
{title}
|
|
{/if}
|
|
</div>
|
|
{/if} |