diff --git a/frontend/src/lib/components/traits/SoundPadGrid.svelte b/frontend/src/lib/components/traits/SoundPadGrid.svelte index a074bcb..1d56c7b 100644 --- a/frontend/src/lib/components/traits/SoundPadGrid.svelte +++ b/frontend/src/lib/components/traits/SoundPadGrid.svelte @@ -40,6 +40,7 @@ let loadingPads = $state(new Set()); let playingPads = $state(new Set()); let configMode = $state(false); + let playingTimeouts: Map> = new Map(); // Edit state for config mode let editLabel = $state(''); @@ -78,6 +79,9 @@ return () => { unloadAllPads(); + // Clear visual feedback timeouts + for (const t of playingTimeouts.values()) clearTimeout(t); + playingTimeouts.clear(); }; }); @@ -122,13 +126,16 @@ ensureAudioContext(); playPad(padId); - // Visual feedback + // Visual feedback — track timeout for cleanup on destroy playingPads = new Set([...playingPads, index]); - setTimeout(() => { + const prev = playingTimeouts.get(index); + if (prev) clearTimeout(prev); + playingTimeouts.set(index, setTimeout(() => { const next = new Set(playingPads); next.delete(index); playingPads = next; - }, 300); + playingTimeouts.delete(index); + }, 300)); } async function handlePadPress(index: number) { diff --git a/frontend/src/routes/admin/usage/+page.svelte b/frontend/src/routes/admin/usage/+page.svelte index 7723757..0640155 100644 --- a/frontend/src/routes/admin/usage/+page.svelte +++ b/frontend/src/routes/admin/usage/+page.svelte @@ -176,7 +176,7 @@ { value: 7, label: '7 dager' }, { value: 30, label: '30 dager' }, { value: 90, label: '90 dager' }, - { value: 365, label: '1 ar' } + { value: 365, label: '1 år' } ]; diff --git a/tasks.md b/tasks.md index 9d420eb..041738d 100644 --- a/tasks.md +++ b/tasks.md @@ -301,8 +301,7 @@ med spesifikasjon for det som trenger en dedikert sesjon. - [x] 23.4 Valider fase 9–10 (visninger + AI): kanban drag-and-drop, kalender, dagbok, kunnskapsgraf, LiteLLM-ruting, AI-foreslåtte edges, oppsummering, TTS. - [x] 23.5 Valider fase 11 (produksjon): LiveKit-oppsett, sanntidslyd, pruning-logikk, podcast-RSS. - [x] 23.6 Valider fase 13–14 (traits + publisering): trait-validering, pakkevelger, Tera-templates, HTML-rendering, forside, slot-håndtering, redaksjonell flyt, planlagt publisering, A/B-testing. -- [~] 23.7 Valider fase 15–16 (admin + lydmixer): systemvarsler, graceful shutdown, jobbkø-oversikt, ressursstyring, serverhelse, Web Audio mixer, delt kontroll, sound pads, EQ, stemmeeffekter. - > Påbegynt: 2026-03-18T15:30 +- [x] 23.7 Valider fase 15–16 (admin + lydmixer): systemvarsler, graceful shutdown, jobbkø-oversikt, ressursstyring, serverhelse, Web Audio mixer, delt kontroll, sound pads, EQ, stemmeeffekter. - [ ] 23.8 Valider fase 17–18 (lydstudio-utbedring + AI-verktøy): responsivt layout, FFmpeg-validering, fade/silence, AI-presets, direction-logikk, drag-and-drop integrasjon. - [ ] 23.9 Valider fase 19–20 (arbeidsflaten + universell overføring): canvas pan/zoom, BlockShell, layout-persistering, snarveier, transfer service, alle panelreworks (chat, kanban, kalender, editor, studio). - [ ] 23.10 Valider fase 21 (CLI-verktøy): kjør hvert synops-*-verktøy, verifiser --help, --payload-json, output-format, feilhåndtering, synops-common integrasjon.