aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-01-23 17:47:27 -0800
committerFuwn <[email protected]>2026-01-23 17:47:27 -0800
commit64f03b7019889b9ded37865680f47a81edea41e8 (patch)
tree2b3a2d2fce1f56cae5b9e912bf428c78f593c288
parentfeat(MediaRoulette): Add CommandPalette-like fade in/out (diff)
downloaddue.moe-64f03b7019889b9ded37865680f47a81edea41e8.tar.xz
due.moe-64f03b7019889b9ded37865680f47a81edea41e8.zip
refactor(MediaRoulette): Use Svelte 5 syntax
-rw-r--r--src/lib/List/MediaRoulette.svelte28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/lib/List/MediaRoulette.svelte b/src/lib/List/MediaRoulette.svelte
index d4323476..4b498d4f 100644
--- a/src/lib/List/MediaRoulette.svelte
+++ b/src/lib/List/MediaRoulette.svelte
@@ -5,17 +5,21 @@
import settings from '$stores/settings';
import { mediaTitle } from './mediaTitle';
- export let media: Media[];
- export let type: 'anime' | 'manga';
- export let onClose: () => void;
- export let spinDuration = 2;
-
- let isSpinning = false;
- let selectedIndex = 0;
- let displayIndex = 0;
- let spinTimeout: ReturnType<typeof setTimeout> | null = null;
- let showResult = false;
- let isClosing = false;
+ interface Props {
+ media: Media[];
+ type: 'anime' | 'manga';
+ onClose: () => void;
+ spinDuration?: number;
+ }
+
+ let { media, type, onClose, spinDuration = 2 }: Props = $props();
+ let isSpinning = $state(false);
+ let selectedIndex = $state(0);
+ let displayIndex = $state(0);
+ let spinTimeout: ReturnType<typeof setTimeout> | null = $state(null);
+ let showResult = $state(false);
+ let isClosing = $state(false);
+ let currentMedia = $derived(media[displayIndex]);
const startRoulette = () => {
if (media.length === 0 || isSpinning) return;
@@ -73,8 +77,6 @@
setTimeout(() => onClose(), 200);
};
- $: currentMedia = media[displayIndex];
-
const handleOverlayClick = (e: MouseEvent) => {
if (e.target === e.currentTarget) handleClose();
};