Claude Code sessions create their worktrees under .claude/worktrees/ in whichever
repo they are working in, so the directory showed up as untracked in every
git status. punktfunk already ignores it; this brings the other repos in line.
Three defects, all of the same shape: a token that happens to look right on THIS
library's own palette and wrong on a consumer's.
Select trigger
- `border-main` and `focus-visible:ring-main/50` resolve to --main, which is the
FOREGROUND. On the Punktfunk console theme that is a near-white border and a 3px
near-white focus ring — reported from the field as "a really bright outline".
- `data-placeholder:text-secondary` and the chevron's `text-secondary`: --secondary is
a SURFACE colour there, so the chevron and placeholder were painted in a background
tone at 50% opacity and all but vanished. That is what made the control stop reading
as a select at all.
- Retuned to InputText's vocabulary — border-input, ring-ring at ring-1, rounded-md,
px-3 — because a select sits beside text inputs in every form we ship and the two
must not look like different widgets. The chevron now carries its own colour and no
opacity knock-down.
InputNumber
- The spinner arrows are drawn by the BROWSER. With no declared color-scheme the UA
paints them for a light UI: near-black arrows on a near-black field, i.e. invisible.
Declared via arbitrary properties rather than Tailwind's scheme-* so it holds
whatever Tailwind version a consumer builds with.
Why none of this was caught here: src/styles/theme.css has NO dark palette — 134 lines,
zero dark tokens — so every story in this Storybook renders light, and all three failures
need a dark consumer palette to appear. Components already use `dark:` variants for a
palette this workbench cannot show. Worth fixing separately; it is the actual root cause.
Also adds the stories these three never had (Select, InputNumber, InputText). form/Select
→ "In a form row" and form/InputText → "With a button" are the ones that make a height or
ring mismatch obvious on sight.
0.9.1 rather than 0.9.0: the 0.9.0 tarball was published from a pre-relicense
tree; 0.9.1 is the canonical release including the MIT license metadata.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- badge: cva variants default/secondary/outline/success/warn/error as
bg-<tone>/15 text-<tone> tints, sm|default sizes, dot/pulse props
- spinner: the lens spinner graduated from the punktfunk console,
genericized to var(--brand)/var(--brand-light); reduced-motion honored
- skeleton: Skeleton + SkeletonText pulse placeholders
- form/switch: radix Switch with motion layout-spring thumb,
useSound("toggle"), useControllableState, material-aware track
(new switch key in MaterialTheme)
- table: Table/TableHeader/TableBody/TableRow/TableHead/TableCell
graduated from the console (muted tokens mapped to
neutral-accent/secondary, which exist in this theme)
- empty-state: dashed-border centered column, error variant, icon
entrance via new emptyStateIcon animation token + 0.08 stagger
- code-block: mono pre with optional clipboard copy button (Copy→Check)
- theme.css/globals.css: new --warn and --brand-light tones
(+ --color-warn/--color-brand-light Tailwind mappings)
- CSF3 stories for every new primitive; subpath exports for all of them
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Importing any sound-aware component (e.g. @unom/ui/button) statically
reached src/sound/defaults.ts via the provider, pulling ~6.7MB of wav/mp3
URL references into every consumer build even with no SoundProvider mounted.
- new src/sound/silent.ts: asset-free silentSoundTheme, now the context default
- SoundTheme.tokens is Partial<> so sparse themes typecheck; merge/resolve
are null-safe over missing tokens
- SoundProvider: theme prop now optional; new loadTheme prop resolves a
theme chunk lazily after mount and merges it over theme
- defaults.ts renamed to default-theme.ts, no longer re-exported from
sound/index.ts; published as the @unom/ui/sound/default-theme subpath
(the ONLY module referencing the audio assets)
- Storybook preview passes defaultSoundTheme explicitly via the new subpath
Verified: after build, grep -rl "assets/sounds" dist/ lists only
dist/sound/default-theme.js.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pure formatting churn (tabs, import order, line wrapping) produced by
`bunx biome check --write` under the currently-pinned biome version.
No behavior changes.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Relicense from unspecified to MIT and add the LICENSE file. A dependency audit
confirmed no copyleft (GPL/LGPL/AGPL) deps and no vendored copyleft source, so
the relicense is valid. Patch version bumped for the registry.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copy of the played-ui component library, rebranded to the @unom scope
for publishing as @unom/ui.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>