Redesign
- Shared field foundation rules (duplicated across 15 form components and
emitted globally) are now identical everywhere, so later copies no longer
silently override earlier redesigns.
- Drawn checkbox and radio controls, white switch thumbs (the thumb was the
text colour, a black blob in light mode), recessed field wells, keycap
actions in Modal, Drawer, Popover, Toaster, Pagination, Stepper, DataTable.
- Menus (Dropdown, ContextMenu, Popover, Select dropdown, Navbar panels) share
one flat raised panel with neutral hover rows and mono section labels.
- Alerts with an accent rail and icon chip; card headers without the grey
band; accordion, collapse, list, list group, timeline, stats, metrics,
chat, skeleton, avatar group, clipboard, splitter, section, sidebar,
navbar and upload progress restyled.
- Chart rebuilt: nice y-axis ticks, gridlines, rounded bars, line and area
modes, hover tooltips, hidden series leave the scale.
Fixes
- Checkbox and radio labels toggle their input again (empty for="" broke it).
- TimePicker kept every clicked time pressed; only the chosen hour and
minute are pressed now, and nothing is pressed before a value exists.
- ColorPicker hex readout now follows the picked colour.
- Disabled FileInput no longer shows the native file-input text.
- Date and time panels float instead of pushing content.
- ContextMenu opened at the pointer closes on scroll.
- Drawer left/top/bottom placements slide from their own edge again.
- Image-only Card no longer renders an empty body strip.
- Timeline supports item.time, current/upcoming states, sizes and
compact/alternate variants; showcase demos use distinct variants.
- ChatBubble: delivery receipts (sending/sent/delivered/read/failed/error)
and meta aligned to its bubble.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Visual-only redesign ("instrument panel"): cool graphite neutrals for light
and dark, layered hairline elevation, larger radii, a mono token for
eyebrows/data, keycap-style solid and secondary buttons, recessed input
wells and tab tracks, a stronger dialog, and a theme-driven focus outline.
No props, outputs or behaviour change.
Also records the already-published csr 0.8.42, styles 0.8.25 and ui 0.8.85
changes (optional chaining/nullish in the reactive runtime, shared
theme/accent cookie sync, BackToTop hidden attribute).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both drew small text in the raw accent, which misses the contrast floor on
a dark surface. They now blend the accent toward the text colour, as the
unselected tab already does.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A Button rendered as a link emitted aria-pressed="", which is not allowed
on a link and fails an accessibility check on every page that uses one
for a secondary action. A link has no pressed state, so the attribute is
gone from that branch; a real button still carries it.
An unselected tab used the muted text colour, which does not reach 4.5:1
against the tab strip at this size. It now blends back toward the text
colour, and the selected tab still reads as selected through its surface,
accent and shadow.
The visual contract manifest is regenerated to match.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Published to the private registry: auth 0.8.32, cli 0.8.70, compiler
0.8.29, core 0.8.15, csr 0.8.40, dev-server 0.8.65, payment 0.8.8, pwa
0.8.11, ssr 0.8.11, styles 0.8.22, test 0.8.15, ui 0.8.80 and viewer
0.8.12.
This records the version bumps and the lockfile. The package sources are
staged from the working tree, so the tarballs also carry source changes
that are still uncommitted here.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A component that renders a list, such as FeatureGrid, passes each item
into a child: title={item.title || item.label || "Feature"}. The
compiler decided whether that attribute needed a client binding by
searching the expression for each prop name, so `item.label` matched the
grid's own `label` prop and a binding was emitted.
On hydration the binding is re-evaluated where the loop item is out of
scope, so the expression fell through to its default and replaced the
server's value: every card's title became "Feature". A name after a dot
belongs to whatever precedes it, so it no longer counts as a reference.
Timeline headings follow the same idea: its items were always h4, which
skipped a level and broke the heading order of a page that gives the
timeline no title of its own. They now take h3 in that case.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Carries the rollback refusal in db and the matching CLI message, together
with the auth, captcha, csr, dev-server, dev-toolbar, ui and validation
changes that were already in the working tree, since publishing stages
from it and those files would otherwise ship without being recorded here.
@wrnexus/auth 0.8.28 -> 0.8.29
@wrnexus/captcha 0.8.15 -> 0.8.16
@wrnexus/cli 0.8.64 -> 0.8.65
@wrnexus/csr 0.8.37 -> 0.8.38
@wrnexus/db 0.8.20 -> 0.8.21
@wrnexus/dev-server 0.8.60 -> 0.8.61
@wrnexus/dev-toolbar 0.8.17 -> 0.8.18
@wrnexus/ui 0.8.75 -> 0.8.76
@wrnexus/validation 0.8.12 -> 0.8.13
Also declares Event among the browser globals captcha's client asset
already lists, which was the last lint failure, and reformats four files.
typecheck, lint, 1998 tests and format:check all pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>