DreamKnob/packages/dreamknob/CHANGELOG.md
Dreamodus d8b7b55505 v1.1.0: integration-feedback release
Bugs from real-product integration:
- Meter/LEDFader clamp geometry below breadth 14 (no negative SVG rects)
- mixColors falls back to CSS color-mix() so theme tokens can be var()/oklch()
- type-in editing fires a real edit gesture (Start/onChange/End, source 'edit')
- ScrubField Enter/Escape no longer double-commit or commit-on-revert via blur
- disabled dims the whole control uniformly, data-disabled on the wrapper

New capabilities:
- commitMode 'release': drags preview, emit once on pointer-up, Esc discards
- Meter accepts value=[l, r, ...]; theme zoneGood/zoneWarn/zoneHot defaults
- XYPad per-axis invert + detents; Fader valuePosition top|end|none
- LED skins: unit labels, uncapped displayDecimals, aria-valuetext defaults

New components: IndicatorLamp, SegmentSwitch, ScrubField, MeterBridge,
PushButton led='dot'. Docs: change-contract table, recipes, gallery cards.
2026-07-13 12:07:52 -07:00

4 KiB

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: onChangeStartonChangeonChangeEnd 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 <Knob> + 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