Skip to content

Commit d3c82f7

Browse files
feat: migrate svelte v5
1 parent 15c38ca commit d3c82f7

File tree

10 files changed

+80
-47
lines changed

10 files changed

+80
-47
lines changed

templates/sveltekit-example/src/app.d.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ declare global {
77
// interface PageData {}
88
// interface Platform {}
99
}
10+
}
1011

11-
/* eslint-disable */
12+
/* eslint-disable */
1213

13-
declare namespace svelteHTML {
14-
interface HTMLAttributes<T> {
15-
'on:junoSignOutAuthTimer'?: (event: CustomEvent<any>) => void;
16-
'on:exampleReload'?: (event: CustomEvent<any>) => void;
17-
}
14+
declare namespace svelteHTML {
15+
interface HTMLAttributes<T> {
16+
onjunoSignOutAuthTimer?: (event: CustomEvent<any>) => void;
17+
onexampleReload?: (event: CustomEvent<any>) => void;
1818
}
19-
20-
/* eslint-enable */
2119
}
2220

21+
/* eslint-enable */
22+
2323
export {};

templates/sveltekit-example/src/lib/components/Auth.svelte

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
<script lang="ts">
2-
import { onDestroy, onMount } from 'svelte';
2+
import { onDestroy, onMount, type Snippet } from 'svelte';
33
import { authSubscribe } from '@junobuild/core-peer';
44
import { userStore } from '$lib/stores/user.store';
55
import { userSignedIn } from '$lib/derived/user.derived';
66
import Logout from '$lib/components/Logout.svelte';
77
import Login from '$lib/components/Login.svelte';
88
9+
interface Props {
10+
children: Snippet;
11+
}
12+
13+
let { children }: Props = $props();
14+
915
let unsubscribe: (() => void) | undefined = undefined;
1016
1117
onMount(() => (unsubscribe = authSubscribe((user) => userStore.set(user))));
@@ -15,11 +21,11 @@
1521
onDestroy(() => unsubscribe?.());
1622
</script>
1723

18-
<svelte:window on:junoSignOutAuthTimer={automaticSignOut} />
24+
<svelte:window onjunoSignOutAuthTimer={automaticSignOut} />
1925

2026
{#if $userSignedIn}
2127
<div>
22-
<slot />
28+
{@render children()}
2329

2430
<Logout />
2531
</div>

templates/sveltekit-example/src/lib/components/Backdrop.svelte

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
<script lang="ts">
2-
export let spinner = false;
2+
interface Props {
3+
spinner?: boolean;
4+
}
5+
6+
let { spinner = false }: Props = $props();
37
</script>
48

59
<div
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
<script lang="ts">
2-
export let disabled: boolean | undefined = undefined;
2+
import type { Snippet } from 'svelte';
3+
4+
interface Props {
5+
disabled?: boolean | undefined;
6+
children: Snippet;
7+
onclick: () => Promise<void>;
8+
}
9+
10+
let { disabled = undefined, children, onclick }: Props = $props();
311
</script>
412

513
<button
6-
on:click
14+
{onclick}
715
{disabled}
816
class={`flex items-center gap-2 border-black dark:border-lavender-blue-500 border-[3px] transition-all rounded-sm py-1 px-8 my-2 font-semibold text-white bg-lavender-blue-500 dark:bg-black shadow-[5px_5px_0px_rgba(0,0,0,1)] dark:shadow-[5px_5px_0px_#7888ff] ${disabled === true ? 'opacity-25' : 'hover:bg-lavender-blue-600 dark:hover:bg-lavender-blue-300 dark:hover:text-black active:bg-lavender-blue-400 dark:active:bg-lavender-blue-500 active:shadow-none active:translate-x-[5px] active:translate-y-[5px]'}`}
917
>
10-
<slot />
18+
{@render children()}
1119
</button>

templates/sveltekit-example/src/lib/components/Delete.svelte

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
<script lang="ts">
2-
import { createEventDispatcher } from 'svelte';
32
import type { Note } from '$lib/types/note';
43
import { deleteAsset, deleteDoc, type Doc } from '@junobuild/core-peer';
54
import Backdrop from '$lib/components/Backdrop.svelte';
65
7-
export let doc: Doc<Note>;
6+
interface Props {
7+
doc: Doc<Note>;
8+
ondeleted: () => Promise<void>;
9+
}
810
9-
const dispatch = createEventDispatcher();
11+
let { doc, ondeleted }: Props = $props();
1012
11-
let progress = false;
13+
let progress = $state(false);
1214
1315
const delItem = async () => {
1416
progress = true;
@@ -32,7 +34,7 @@
3234
doc
3335
});
3436
35-
dispatch('deleted');
37+
await ondeleted();
3638
} catch (err) {
3739
console.error(err);
3840
}
@@ -42,9 +44,10 @@
4244
</script>
4345

4446
<button
47+
aria-label="Delete document"
4548
role="cell"
4649
class="hover:text-lavender-blue-500 active:text-lavender-blue-400"
47-
on:click={delItem}
50+
onclick={delItem}
4851
>
4952
<svg width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 29 29" fill="currentColor">
5053
<g>

templates/sveltekit-example/src/lib/components/Login.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77
};
88
</script>
99

10-
<Button on:click={login}>Sign in</Button>
10+
<Button onclick={login}>Sign in</Button>

templates/sveltekit-example/src/lib/components/Logout.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<button
66
type="button"
7-
on:click={signOut}
7+
onclick={signOut}
88
class="dark:text-white flex items-center gap-2 mt-24 hover:text-lavender-blue-500 active:text-lavender-blue-400"
99
>
1010
<svg

templates/sveltekit-example/src/lib/components/Modal.svelte

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,16 @@
77
import type { Note } from '$lib/types/note';
88
import { userStore } from '$lib/stores/user.store';
99
10-
let showModal = false;
10+
let showModal = $state(false);
1111
12-
let inputText = '';
13-
let file: File | undefined = undefined;
12+
let inputText = $state('');
13+
let file: File | undefined = $state(undefined);
1414
15-
let inputFile: HTMLInputElement | null = null;
15+
let inputFile: HTMLInputElement | null = $state(null);
1616
17-
let progress = false;
17+
let progress = $state(false);
1818
19-
let valid = false;
20-
$: valid = inputText !== '' && $userSignedIn;
19+
let valid = $derived(inputText !== '' && $userSignedIn);
2120
2221
const reload = () => {
2322
const event = new CustomEvent('exampleReload');
@@ -74,9 +73,13 @@
7473
(file = ($event as unknown as { target: EventTarget & HTMLInputElement }).target?.files?.[0]);
7574
7675
const openSelectFile = () => inputFile?.click();
76+
77+
const openModal = async () => {
78+
showModal = true;
79+
};
7780
</script>
7881

79-
<Button on:click={() => (showModal = true)}>
82+
<Button onclick={openModal}>
8083
Add an entry
8184
<svg
8285
xmlns="http://www.w3.org/2000/svg"
@@ -105,7 +108,7 @@
105108
<button
106109
aria-label="Attach a file to the entry"
107110
class="flex gap-2 items-center hover:text-lavender-blue-600 active:text-lavender-blue-400"
108-
on:click={openSelectFile}
111+
onclick={openSelectFile}
109112
>
110113
<svg
111114
width="20"
@@ -128,7 +131,7 @@
128131
<input
129132
type="file"
130133
class="fixed right-0 -bottom-24 opacity-0"
131-
on:change={onChangeFile}
134+
onchange={onChangeFile}
132135
disabled={progress}
133136
bind:this={inputFile}
134137
/>
@@ -147,12 +150,12 @@
147150
<button
148151
class="py-1 px-8 hover:text-lavender-blue-600 active:text-lavender-blue-400"
149152
type="button"
150-
on:click={() => (showModal = false)}
153+
onclick={() => (showModal = false)}
151154
>
152155
Close
153156
</button>
154157

155-
<Button on:click={add} disabled={!valid}>Submit</Button>
158+
<Button onclick={add} disabled={!valid}>Submit</Button>
156159
</div>
157160
{/if}
158161
</div>

templates/sveltekit-example/src/lib/components/Table.svelte

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
import type { Note } from '$lib/types/note';
33
import { type Doc, listDocs } from '@junobuild/core-peer';
44
import Delete from '$lib/components/Delete.svelte';
5-
import { userNotSignedIn, userSignedIn } from '$lib/derived/user.derived';
5+
import { userNotSignedIn } from '$lib/derived/user.derived';
66
7-
let items: Doc<Note>[] = [];
7+
let items: Doc<Note>[] = $state([]);
88
9-
const list = async () => {
10-
if ($userNotSignedIn) {
9+
const list = async (userNotSignedIn: boolean) => {
10+
if (userNotSignedIn) {
1111
items = [];
1212
return;
1313
}
@@ -20,10 +20,12 @@
2020
items = data;
2121
};
2222
23-
$: $userSignedIn, (async () => await list())();
23+
$effect(() => {
24+
list($userNotSignedIn);
25+
});
2426
</script>
2527

26-
<svelte:window on:exampleReload={list} />
28+
<svelte:window onexampleReload={list} />
2729

2830
<div class="w-full max-w-2xl mt-8 dark:text-white" role="table">
2931
<div role="row">
@@ -65,7 +67,7 @@
6567
</a>
6668
{/if}
6769

68-
<Delete doc={item} on:deleted={list} />
70+
<Delete doc={item} ondeleted={list} />
6971
</div>
7072
</div>
7173
{/each}

templates/sveltekit-example/src/routes/+layout.svelte

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
<script lang="ts">
2-
import { onMount } from 'svelte';
2+
import type { Snippet } from 'svelte';
33
import { initSatellite } from '@junobuild/core-peer';
44
import Footer from '$lib/components/Footer.svelte';
55
import Background from '$lib/components/Background.svelte';
66
import '../app.css';
77
import Auth from '$lib/components/Auth.svelte';
88
9-
onMount(
10-
async () =>
9+
interface Props {
10+
children: Snippet;
11+
}
12+
13+
let { children }: Props = $props();
14+
15+
$effect(
16+
(async () => {
1117
await initSatellite({
1218
workers: {
1319
auth: true
1420
}
15-
})
21+
});
22+
})()
1623
);
1724
</script>
1825

@@ -29,7 +36,7 @@
2936
</p>
3037

3138
<Auth>
32-
<slot />
39+
{@render children()}
3340
</Auth>
3441
</main>
3542

0 commit comments

Comments
 (0)