From f916344c9bc3af58aa447f1cd368ea420c59d9e3 Mon Sep 17 00:00:00 2001 From: w1n5t0n Date: Wed, 29 Apr 2026 17:00:56 +0300 Subject: [PATCH] feat(playground/modes): all 9 mode bindings + /modes route (meml-yt7) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stream 9 (part 2/2) — concrete mode TSX components + routing. Each firmware mode pairs the generated schema with the appropriate primary input (XYPad for xy_pad schemas, VirtualJoystick for joystick schemas) and feeds the runtime's processedOutputs into the shared SliderBank/OutputDisplay/LossPlot layout. The set: - PAFSynthMode (xy_pad, voice spaces) - ChannelStripMode (joystick) - XIASRIMode (joystick — mic-input wiring deferred to stream 10) - VerbFXMode (joystick, voice spaces) - MEMLCeliumMode (xy_pad, voice spaces) - BreakOrMode (xy_pad) - ElysiamorfMode (xy_pad) - SoundAnalysisMIDIMode (audio_in fallback to joystick; mic capture is a stream-10 task — UI scaffold renders today) - C15Mode (browser-only placeholder; bridge not yet ported) App.tsx adds a /modes route that renders + the active mode's component via Solid . modes/index.ts exposes the registry the switcher consumes. --- playground/src/App.tsx | 70 +++++++++-- playground/src/modes/BreakOrMode.tsx | 64 ++++++++++ playground/src/modes/C15Mode.tsx | 48 ++++++++ playground/src/modes/ChannelStripMode.tsx | 68 +++++++++++ playground/src/modes/ElysiamorfMode.tsx | 64 ++++++++++ playground/src/modes/MEMLCeliumMode.tsx | 68 +++++++++++ playground/src/modes/PAFSynthMode.tsx | 74 +++++++++++ .../src/modes/SoundAnalysisMIDIMode.tsx | 115 ++++++++++++++++++ playground/src/modes/VerbFXMode.tsx | 68 +++++++++++ playground/src/modes/XIASRIMode.tsx | 69 +++++++++++ playground/src/modes/index.ts | 99 +++++++++++++++ 11 files changed, 800 insertions(+), 7 deletions(-) create mode 100644 playground/src/modes/BreakOrMode.tsx create mode 100644 playground/src/modes/C15Mode.tsx create mode 100644 playground/src/modes/ChannelStripMode.tsx create mode 100644 playground/src/modes/ElysiamorfMode.tsx create mode 100644 playground/src/modes/MEMLCeliumMode.tsx create mode 100644 playground/src/modes/PAFSynthMode.tsx create mode 100644 playground/src/modes/SoundAnalysisMIDIMode.tsx create mode 100644 playground/src/modes/VerbFXMode.tsx create mode 100644 playground/src/modes/XIASRIMode.tsx create mode 100644 playground/src/modes/index.ts diff --git a/playground/src/App.tsx b/playground/src/App.tsx index bce2877..49cc522 100644 --- a/playground/src/App.tsx +++ b/playground/src/App.tsx @@ -1,11 +1,16 @@ -import { Component, createSignal, lazy, onCleanup, Show } from 'solid-js'; +import { Component, createMemo, createSignal, lazy, onCleanup, Show } from 'solid-js'; +import { Dynamic } from 'solid-js/web'; +import { modeStore } from './stores/mode-store'; +import { MODE_REGISTRY, getModeById } from './modes'; +import { ModeSwitcher } from './modes/ModeSwitcher'; import styles from './App.module.css'; -type Route = 'home' | 'primitives' | 'unknown'; +type Route = 'home' | 'primitives' | 'modes' | 'unknown'; function parseRoute(path: string): Route { if (path === '' || path === '/' || path === '/index.html') return 'home'; if (path === '/dev/primitives' || path === '/dev/primitives/') return 'primitives'; + if (path === '/modes' || path === '/modes/' || path.startsWith('/modes/')) return 'modes'; return 'unknown'; } @@ -39,6 +44,13 @@ const App: Component = () => { > home +