From 8b462dfb83ebe48968c8881822c5e7c67fc12e4f Mon Sep 17 00:00:00 2001 From: Dreamodus Date: Tue, 14 Jul 2026 13:06:16 -0700 Subject: [PATCH] v1.1.4: light-theme support (LED wells, panel buttons, readouts) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The controls whose chrome was hardcoded dark now adapt to a light base — previously they rendered as dark chips/holes on light themes. (Flat knobs and faders already adapted: their face is the `face` token.) - `ledWell` theme token — the recessed screen behind LED segments (LEDKnob, LEDFader, Meter) and the default well of SegmentDisplay / AlphaDisplay now comes from the theme. Dark base keeps #0b0d0e; light base is `transparent`, so LED controls and readouts render as clean flat rings / bars / digits on the light panel. faceColor / background props still override. - `scheme` theme token ('dark' | 'light', set by base) + a shared panelButtonChrome() helper drive the raised gradient/border/shadow of PushButton (and Button), TransportButton and SegmentSwitch — light raised buttons on light themes instead of dark chips; unlit LED pips flip to a faint dark so they still read. - Docs: a "Light theme" gallery card showing the panel family under base="light"; ledWell/scheme documented; install URLs bumped to v1.1.4. Library + docs typecheck and build; 46 tests pass. --- README.md | 2 +- apps/docs/src/sections/ApiDocs.tsx | 1 + apps/docs/src/sections/Gallery.tsx | 40 ++++++++++++++ apps/docs/src/sections/GettingStarted.tsx | 4 +- apps/docs/src/sections/Hero.tsx | 4 +- packages/dreamknob/CHANGELOG.md | 24 +++++++++ packages/dreamknob/README.md | 6 ++- packages/dreamknob/package.json | 2 +- packages/dreamknob/src/core/theme.tsx | 52 +++++++++++++++++++ .../dreamknob/src/digital/AlphaDisplay.tsx | 5 +- .../dreamknob/src/digital/SegmentDisplay.tsx | 5 +- packages/dreamknob/src/skins/LEDFader.tsx | 3 +- packages/dreamknob/src/skins/LEDKnob.tsx | 3 +- packages/dreamknob/src/skins/Meter.tsx | 3 +- packages/dreamknob/src/skins/PushButton.tsx | 23 ++++---- .../dreamknob/src/skins/SegmentSwitch.tsx | 28 +++++++--- .../dreamknob/src/skins/TransportButton.tsx | 19 +++---- 17 files changed, 180 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index efeb404..17c3eed 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ See `packages/dreamknob/README.md` and the docs app for the full API. The easiest way is the published release on our Forgejo: ```bash -pnpm add https://git.dreamodus.software/Dreamodus/DreamKnob/releases/download/v1.1.3/dreamknob-1.1.3.tgz +pnpm add https://git.dreamodus.software/Dreamodus/DreamKnob/releases/download/v1.1.4/dreamknob-1.1.4.tgz ``` Or build locally — the package builds to `packages/dreamknob/dist` (ESM + CJS + types): diff --git a/apps/docs/src/sections/ApiDocs.tsx b/apps/docs/src/sections/ApiDocs.tsx index 5df8acb..3cffec2 100644 --- a/apps/docs/src/sections/ApiDocs.tsx +++ b/apps/docs/src/sections/ApiDocs.tsx @@ -195,6 +195,7 @@ export const ApiDocs: React.FC = () => ( ledGreen: '#3df2ad', // SegmentDisplay default lit color ledAmber: '#ffb84d', // AlphaDisplay default lit color panel: 'rgba(255,255,255,0.03)', // Rack / panel chrome + ledWell: '#0b0d0e', // LED display well (LEDKnob/LEDFader/Meter) }} > diff --git a/apps/docs/src/sections/Gallery.tsx b/apps/docs/src/sections/Gallery.tsx index aefbe68..2158ee2 100644 --- a/apps/docs/src/sections/Gallery.tsx +++ b/apps/docs/src/sections/Gallery.tsx @@ -352,6 +352,42 @@ const PanDemo: React.FC = () => ( ); +const LightThemeDemo: React.FC = () => { + const [play, setPlay] = React.useState(false); + const [mute, setMute] = React.useState(true); + return ( + +
+
+ + + +
+
+ + Mute + + + setPlay(p => !p)} size={32} /> + +
+
+
+ ); +}; + const ImageKnobDemo: React.FC = () => { const src = useGeneratedStrip(); if (!src) return null; @@ -565,6 +601,10 @@ export const Gallery: React.FC = () => ( + + + + diff --git a/apps/docs/src/sections/GettingStarted.tsx b/apps/docs/src/sections/GettingStarted.tsx index 526962c..32dbbc9 100644 --- a/apps/docs/src/sections/GettingStarted.tsx +++ b/apps/docs/src/sections/GettingStarted.tsx @@ -30,12 +30,12 @@ export const GettingStarted: React.FC = () => ( ) · peer deps: react >= 18, react-dom >= 18`} + code={`pnpm add https://git.dreamodus.software/Dreamodus/DreamKnob/releases/download/v1.1.4/dreamknob-1.1.4.tgz\n# (or npm install ) · peer deps: react >= 18, react-dom >= 18`} />

Installs straight from the{' '} - v1.1.3 release + v1.1.4 release {' '} on our Forgejo. Zero runtime dependencies, ESM + CJS, full TypeScript types. No CSS file to import — everything is SVG and inline styles. diff --git a/apps/docs/src/sections/Hero.tsx b/apps/docs/src/sections/Hero.tsx index 2808d9c..4669d40 100644 --- a/apps/docs/src/sections/Hero.tsx +++ b/apps/docs/src/sections/Hero.tsx @@ -25,10 +25,10 @@ export const Hero: React.FC = () => { range, any decimal precision, and colors you fully control.

- pnpm add https://git.dreamodus.software/Dreamodus/DreamKnob/releases/download/v1.1.3/dreamknob-1.1.3.tgz + pnpm add https://git.dreamodus.software/Dreamodus/DreamKnob/releases/download/v1.1.4/dreamknob-1.1.4.tgz