diff --git a/packages/frontend/src/lib/components/image-viewer/image-viewer.svelte b/packages/frontend/src/lib/components/image-viewer/image-viewer.svelte index 03dbcb5..1c206b7 100644 --- a/packages/frontend/src/lib/components/image-viewer/image-viewer.svelte +++ b/packages/frontend/src/lib/components/image-viewer/image-viewer.svelte @@ -145,7 +145,7 @@ {#if isViewerOpen}
-
+
diff --git a/packages/frontend/src/lib/components/ui/file-drop-zone/file-drop-zone.svelte b/packages/frontend/src/lib/components/ui/file-drop-zone/file-drop-zone.svelte index 041e82a..5494508 100644 --- a/packages/frontend/src/lib/components/ui/file-drop-zone/file-drop-zone.svelte +++ b/packages/frontend/src/lib/components/ui/file-drop-zone/file-drop-zone.svelte @@ -23,11 +23,13 @@ ...rest }: FileDropZoneProps = $props(); - if (maxFiles !== undefined && fileCount === undefined) { - console.warn( - "Make sure to provide FileDropZone with `fileCount` when using the `maxFiles` prompt", - ); - } + $effect(() => { + if (maxFiles !== undefined && fileCount === undefined) { + console.warn( + "Make sure to provide FileDropZone with `fileCount` when using the `maxFiles` prompt", + ); + } + }); let uploading = $state(false); diff --git a/packages/frontend/src/routes/about/+page.svelte b/packages/frontend/src/routes/about/+page.svelte index b1c1b59..2648db3 100644 --- a/packages/frontend/src/routes/about/+page.svelte +++ b/packages/frontend/src/routes/about/+page.svelte @@ -7,7 +7,7 @@ const { data } = $props(); - const stats = [ + const stats = $derived([ { icon: "icon-[ri--user-heart-line]", value: data.stats.viewers_count, @@ -28,7 +28,7 @@ value: $_("about.stats.yearsFormatted", { values: { years: 5 } }), label: $_("about.stats.experience"), }, - ]; + ]); const team = [ { diff --git a/packages/frontend/src/routes/admin/videos/[id]/+page.svelte b/packages/frontend/src/routes/admin/videos/[id]/+page.svelte index 1086572..ead40b9 100644 --- a/packages/frontend/src/routes/admin/videos/[id]/+page.svelte +++ b/packages/frontend/src/routes/admin/videos/[id]/+page.svelte @@ -154,7 +154,9 @@ poster={imageId ? (getAssetUrl(imageId, "preview") ?? undefined) : undefined} controls class="w-full rounded-lg bg-black max-h-72 mb-2" - > + > + + {/if}
diff --git a/packages/frontend/src/routes/magazine/+page.svelte b/packages/frontend/src/routes/magazine/+page.svelte index 0504f83..728e85f 100644 --- a/packages/frontend/src/routes/magazine/+page.svelte +++ b/packages/frontend/src/routes/magazine/+page.svelte @@ -22,8 +22,9 @@ $effect(() => { searchValue = data.search ?? ""; }); let searchTimeout: ReturnType; - const featuredArticle = - data.page === 1 && !data.search && !data.category ? data.items.find((a) => a.featured) : null; + const featuredArticle = $derived( + data.page === 1 && !data.search && !data.category ? data.items.find((a) => a.featured) : null, + ); function debounceSearch(value: string) { clearTimeout(searchTimeout); diff --git a/packages/frontend/src/routes/play/+page.svelte b/packages/frontend/src/routes/play/+page.svelte index 1ec1564..19a9c0b 100644 --- a/packages/frontend/src/routes/play/+page.svelte +++ b/packages/frontend/src/routes/play/+page.svelte @@ -480,12 +480,22 @@ .padStart(2, "0")}
{ const rect = e.currentTarget.getBoundingClientRect(); const percentage = ((e.clientX - rect.left) / rect.width) * 100; seek(percentage); }} + onkeydown={(e) => { + if (e.key === "ArrowRight") seek(((playbackProgress + 1) / data.recording.duration) * 100); + else if (e.key === "ArrowLeft") seek(((playbackProgress - 1) / data.recording.duration) * 100); + }} >
connected device - let mappings = new SvelteMap(); + let mappings = $state(new SvelteMap()); // Check if a connected device is compatible with a recorded device function isCompatible(recordedDevice: DeviceInfo, connectedDevice: BluetoothDevice): boolean {