# Changelog ## 1.1.0 — 2026-07-13 Integration-feedback release — everything in here came from wiring dreamknob into a real product. ### New components - `IndicatorLamp` — pressable LED lamp (`role="switch"`), toggle/momentary, `blink` (reduced-motion aware), `readOnly` status-light mode - `SegmentSwitch` — hardware-styled segmented selector (radiogroup, roving focus, arrow/Home/End keys, LED tick) - `ScrubField` — After-Effects-style numeric field: label scrubbing (Shift = fine), draft typing (Enter commits, Esc reverts), arrow steps, wheel; `role="spinbutton"` - `MeterBridge` — labeled multi-strip meter block with per-channel peak-hold text - `PushButton` gains `led="dot"` — corner-dot LED that scales down for small icon-only toggles (`led` now `boolean | 'strip' | 'dot'`) ### New capabilities - `commitMode="release"` — drags preview visually but emit a single `onChange` on pointer-up; Esc discards the preview (expensive parameters) - `Meter` accepts `value={[l, r, ...]}` for multi-channel bars with a shared clip LED - Theme gains `zoneGood` / `zoneWarn` / `zoneHot`; `Meter`, `MeterBridge` and `LEDFader` default their zones from the theme - `XYPad` axes accept `invert` and per-axis `detents`; arrow keys follow the visual direction on inverted axes - `Fader` gains `valuePosition: 'top' | 'end' | 'none'` — `'end'` renders one-line inspector rows with a stable readout width - `LEDKnob` / `LEDFader` / `Meter` gain `unit`; `displayDecimals` is no longer capped - Skins without visible readouts now default `aria-valuetext` from `format`/`unit` (`SteppedKnob` announces position names) ### Fixes - `Meter` clamps geometry below `breadth` 14 — no negative-dimension SVG rects on thin strips - `mixColors` falls back to CSS `color-mix()` for non-hex inputs, so theme tokens can be `var(--x)` / `oklch()` without breaking gradients and glows - Type-in editing now fires a proper edit gesture: `onChangeStart` → `onChange` → `onChangeEnd` with `source: 'edit'` (was a bare `'api'` set with no gesture events) - The `ChangeMeta.source` contract is documented (docs + `types.ts`): every user gesture brackets exactly one Start/End pair; `'api'` fires neither - Disabled controls set `data-disabled` on the wrapper (including labels/readouts) and dim uniformly ## 1.0.0 — 2026-07-12 Initial release. ### Controls - Rotary knob skins: `FlatKnob`, `MetalKnob`, `RubberKnob`, `VintageKnob`, `LEDKnob`, `NeonKnob`, `SteppedKnob`, `ImageKnob` (film-strip sprites) - Linear: `Fader` (custom cap color/length), `LEDFader` (meter-zone segments) - Displays: `Meter` (peak hold + latching clip LED with `clipValue` peak detection), `SegmentDisplay` (7-seg incl. letters/hex), `AlphaDisplay` (14-seg alphanumeric) - `XYPad` (two-parameter pad), `PushButton` (toggle/momentary with LED) - Composable `` + primitives (`Arc` with gradients, `Pointer`, `Ticks`, `TickLabels`, `Face`, `KnobValue`, `KnobLabel`, `GlowFilter`) and fully headless `useKnob` ### Interaction core - Rotary (absolute / relative / pickup), relative vertical/horizontal, absolute track modes; drag acceleration; cursor hiding; magnetic detents; endless `wrap` mode - Wheel with trackpad delta accumulation, `wheelStep`, focus-gated capture - Full keyboard support, Escape drag-cancel, double-click reset, type-in editing (`editable`, `"1.2k"` parsing), Shift fine control - Value model: any range, decimal steps with float-safe rounding, discrete `values`, detent `steps`, linear/log/pow/custom tapers, bipolar `origin` - `onChange`/`onChangeStart`/`onChangeEnd` with gesture `meta.source`; gesture-scoped undo friendly - `animateChanges` tween for programmatic changes (reduced-motion aware), `valueBubble` ### Integration - Theming via `DreamknobProvider` (dark/light bases, per-instance override) - Keyboard-only focus rings, `role="slider"`/`role="meter"` semantics, `aria-orientation`, `data-*` state attributes, `data-part` CSS hooks - `forwardRef` on all interactive components, hidden form inputs via `name`, touch via pointer capture (mobile verified), SSR-safe rendering