diff options
| author | Fuwn <[email protected]> | 2026-01-23 17:47:27 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-01-23 17:47:27 -0800 |
| commit | 64f03b7019889b9ded37865680f47a81edea41e8 (patch) | |
| tree | 2b3a2d2fce1f56cae5b9e912bf428c78f593c288 | |
| parent | feat(MediaRoulette): Add CommandPalette-like fade in/out (diff) | |
| download | due.moe-64f03b7019889b9ded37865680f47a81edea41e8.tar.xz due.moe-64f03b7019889b9ded37865680f47a81edea41e8.zip | |
refactor(MediaRoulette): Use Svelte 5 syntax
| -rw-r--r-- | src/lib/List/MediaRoulette.svelte | 28 |
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(); }; |