Files
2026-05-27 23:29:53 +01:00

55 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OpenSpec Change: enterprise-react-audio-components
- **Change ID**: enterprise-react-audio-components
- **Package**: `@suaveplan/react-audio`
- **Category**: react
- **Target path**: `packages/react/react-audio`
- **Status**: PROPOSED — Phase 2 of 3
- **Date**: 2026-05-19
- **Spec delta**: `./specs/react-audio/spec.md`
> Phase 2 of the decomposed `enterprise-react-audio` rollout. Phase 1 (`enterprise-react-audio-foundation`) shipped at commit `c3460248`. Ships ONLY the components the spec hard-mandates; the composed-plugin UIs ship in a sibling change `enterprise-react-audio-components-extras`.
## Summary
Add the four spec-mandated components plus their primitives to `@suaveplan/react-audio`:
1. `<PluginSlot>` — generic renderer for any `AudioFxPlugin`, parameterised by `slotRenderers` for specialised overrides (spec req 1).
2. `<PluginChainView>` — drag/drop + keyboard reorder + IO-validation toast (spec req 2).
3. `<PluginParameterKnob>` + `<PluginParameterSlider>` — keyboard + ARIA per the accessibility requirement (spec req 3).
4. `<PresetManager>` — `ChainSnapshot` save/restore via the provider's preset store (spec req 4).
Plus the cross-cutting infrastructure:
- Storybook coverage CI gate enforcing default + interactive + edge-case stories per component (spec req 5).
- `./components` + `./components/<name>` subpath exports (spec req 6).
These six requirements are the package's external contract for Phase 2. Every requirement has explicit `**Verified by:**` test names in the spec delta.
## Deferred to `enterprise-react-audio-components-extras`
The following components were listed in the original umbrella proposal but are NOT load-bearing for Phase 2's spec contract — they ship in a sibling change after Phase 2 archives:
- `<TransportControls>`, `<TrackList>` + `<TrackRow>`, `<MasterMeter>`
- `<Mixer>` (over `@suaveplan/audio-fx-plugin-mixer`)
- `<AudioVisualizer>` (waveform / spectrum / level modes)
- `<AudioPlayer>` + `<BasicPlayer>` + `<PremiumPlayer>` (over `@suaveplan/audio-fx-plugin-audio-player`)
- `<MicrophoneControls>` (over `@suaveplan/audio-fx-plugin-microphone`)
- `<GLaDOSControls>` (over `@suaveplan/audio-fx-plugin-glados`)
- `<PluginLoader>` — dynamic registration UI over `PluginRegistry.list()`
These are composed-plugin UIs whose value depends on the four core primitives shipping first. Splitting them out keeps Phase 2 to a scope a single agent dispatch has consistently shipped successfully across this migration (audio-controllers, audio-engine-browser, audio-fx-plugin-base — each in the 17–40 src-file range).
## Out of scope
- Provider/hook/store surface (Phase 1, shipped at `c3460248`).
- `<MidiControllerSetup>` learn-mode panel + `useMidiController` hook (Phase 3, `enterprise-react-audio-midi`).
- The deferred composed-plugin UIs above (`enterprise-react-audio-components-extras`).
## Impact
### Affected dependents
- `@suaveplan/react-audio-fingerprint`, `@suaveplan/react-audio-player`, `@suaveplan/react-audio-stream`, `@suaveplan/r3f-audio` — all currently `–` in STATUS.md; each composes against the core primitives once Phase 2 lands; full migration also requires the extras + Phase 3.
After Phase 2 archives, STATUS row `@suaveplan/react-audio` description updates to "Phase 2 of 3 shipped: foundation + 4 spec-mandated components; remaining UIs in `enterprise-react-audio-components-extras`; MIDI Phase 3".