2.3 KiB
Architecture
Waveform Analysis uses a functional architecture around Vue Composition API. Vue composables own reactive orchestration and DOM resources, while pure functions own stateless calculations and state transitions.
Boundaries
useWaveformChartControlleris the facade for the chart. It composes composables and exposes the existing reactive controller surface; it owns no independent copy of component props.useWaveformViewportkeeps refs, computed values, pointer events, DOM capture, D3 coordinates, and emitted events.transitionViewportInteractionandreduceViewportInteractionare pure reducer functions for the legalbegin,move,finish,cancel, andresettransitions. The composable'sselectionshallow ref is the only interaction state source; SVG overlays and pointer capture remain DOM resources local to the composable.RenderablePointSelectionStrategyis a function type defining the replaceable rendering algorithm boundary.completePointSelectionStrategypreserves the complete visible source range andpeakPreservingPointSelectionStrategypreserves first/minimum/maximum/last points per bucket.resolveRenderablePointSelectionStrategyselects the function from rendering options. The existingselectRenderablePointsfunction remains the compatibility facade used by rendering.normalizeWaveformDataandnormalizeWaveformSeriesare functional adapters from public data shapes to the internal series model.buildTrackLayoutsremains a functional builder because layout construction is a stateless calculation, not a long-lived object.
Vue Integration
The viewport selection is stored in a shallow ref and updated only with reducer transitions. SVG
overlay elements remain in the composable as DOM resources. Presentation mode, annotation editing,
scales, domains, ticks, formatting, and other stateless calculations stay in their existing
computed/composable or function boundaries.
Constraints
Do not create classes solely to wrap Composition API refs, props, lifecycle hooks, D3 selections, or pure mathematical helpers. Do not add strategy factories, inheritance trees, global event buses, service locators, or duplicate prop state. Keep pure algorithms and reducer transitions as side-effect-free functions with isolated tests.