diff --git a/.gitignore b/.gitignore index 9e2c18b..9dcad9a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules/ dist/ +*.tgz *.local .DS_Store *.tsbuildinfo diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d62be5c --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Dreamodus Software Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 40376d0..6f2e8c4 100644 --- a/README.md +++ b/README.md @@ -42,3 +42,27 @@ import { MetalKnob, LEDKnob, Fader, logTaper } from 'dreamknob' `useKnob`. See `packages/dreamknob/README.md` and the docs app for the full API. + +## Using it in another app (without publishing) + +The package builds to `packages/dreamknob/dist` (ESM + CJS + types). Three options: + +```bash +# 1. Tarball (most robust — behaves exactly like an npm install) +cd packages/dreamknob && pnpm build && pnpm pack +# then in your app: +pnpm add /path/to/dreamknob-1.0.0.tgz + +# 2. File dependency (picks up rebuilds on reinstall) +pnpm add file:../dreamknob/packages/dreamknob + +# 3. Link for active development against your app +cd packages/dreamknob && pnpm link --global +cd your-app && pnpm link --global dreamknob +``` + +Peer deps: `react >= 18`, `react-dom >= 18`. No CSS import needed. + +## License + +MIT © Dreamodus Software Inc. — see [LICENSE](LICENSE). diff --git a/apps/docs/src/App.tsx b/apps/docs/src/App.tsx index 4610a69..09bca6d 100644 --- a/apps/docs/src/App.tsx +++ b/apps/docs/src/App.tsx @@ -43,7 +43,8 @@ export const App: React.FC = () => ( diff --git a/packages/dreamknob/CHANGELOG.md b/packages/dreamknob/CHANGELOG.md new file mode 100644 index 0000000..a8bfe8b --- /dev/null +++ b/packages/dreamknob/CHANGELOG.md @@ -0,0 +1,35 @@ +# Changelog + +## 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 diff --git a/packages/dreamknob/LICENSE b/packages/dreamknob/LICENSE new file mode 100644 index 0000000..d62be5c --- /dev/null +++ b/packages/dreamknob/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Dreamodus Software Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/dreamknob/README.md b/packages/dreamknob/README.md index 588b786..b95c980 100644 --- a/packages/dreamknob/README.md +++ b/packages/dreamknob/README.md @@ -155,4 +155,6 @@ const { value, normalized, angle, isDragging, bind, setValue } = useKnob({ return
…your own rendering…
``` -MIT +## License + +MIT © Dreamodus Software Inc. diff --git a/packages/dreamknob/package.json b/packages/dreamknob/package.json index f487b2d..0741bc1 100644 --- a/packages/dreamknob/package.json +++ b/packages/dreamknob/package.json @@ -1,8 +1,9 @@ { "name": "dreamknob", - "version": "0.1.0", + "version": "1.0.0", "description": "A feature-full, studio-grade React knob & fader library. Rotary, linear, 2D, 3D, digital and analog styles with a headless core.", "license": "MIT", + "author": "Dreamodus Software Inc.", "type": "module", "sideEffects": false, "main": "./dist/index.cjs", @@ -16,7 +17,10 @@ } }, "files": [ - "dist" + "dist", + "LICENSE", + "README.md", + "CHANGELOG.md" ], "scripts": { "build": "tsup src/index.ts --format esm,cjs --dts --sourcemap --clean",