Phase 1: scaffold + metronome engine + R1
Svelte 5 + Vite static SPA with absolute base and History-API path routing. Core lookahead-scheduler metronome (no drift), AudioContext unlock-on-gesture, synthesized 3-voice clicks, rAF-synced beat highlight. StrumGrid renderer and R1 wired end-to-end with variants, BPM/variant persistence, query overrides, and keyboard shortcuts (space, arrow up/down). Dark amp-light theme tokens. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
<script lang="ts">
|
||||
import { getDrill } from '../drills'
|
||||
import NotFound from './NotFound.svelte'
|
||||
import StrumView from '../components/views/StrumView.svelte'
|
||||
|
||||
interface Props {
|
||||
code: string
|
||||
params: URLSearchParams
|
||||
}
|
||||
|
||||
let { code, params }: Props = $props()
|
||||
let drill = $derived(getDrill(code))
|
||||
</script>
|
||||
|
||||
{#if !drill}
|
||||
<NotFound {code} />
|
||||
{:else if drill.kind === 'strum'}
|
||||
{#key drill.code}
|
||||
<StrumView {drill} {params} />
|
||||
{/key}
|
||||
{:else}
|
||||
<NotFound {code} />
|
||||
{/if}
|
||||
Reference in New Issue
Block a user