WireKit v2.16.0
Minor release. Two new components plus a broad set of accessibility, internationalization, and composition improvements, and a new form-control border token that meets WCAG non-text contrast. Everything here is additive and backward-compatible.
Added
- Status Tiles. N entities as colored status tiles read at a glance — a fleet light, with an optional count-per-intent legend. Status never rides on color alone: every tile carries a distinct icon shape and a screen-reader status word, and an
hrefmakes a tile a keyboard-operable link. - Stream. A primitive for streaming text output over Server-Sent Events, with the hard parts handled once — a single live region announces that a response is generating and then the result (never re-read on every token),
prefers-reduced-motionreveals the buffered text at once, and a dropped connection or an explicit stop resolves to a defined terminal state. Asimulatemode types a fixed string out from a local timer for a demo or typewriter effect with no endpoint. - Badge
wrap. A long label can now wrap across lines: the pill grows with the text instead of the second line spilling below its surface. - Image Gallery per-item overlays. An
itemOverlayrender-callback layers a control — a badge, a report button, a required content label — over each thumbnail as a sibling of the zoom trigger, so the thumbnail still opens the lightbox while the overlay stays interactive. - Command Palette server-side search. The palette now emits a debounced query event on every keystroke, so you can drive a server-backed search — feed the query to a Livewire property and re-render the results — instead of only filtering a fixed list.
- Slider
valueTextMap. The spokenaria-valuetextcan now be decoupled from the visual tick labels — show numeric ticks yet announce semantic meaning (1 => 'Low'). - Countdown completion event. The countdown now dispatches an event when it expires and exposes its
donestate, so it can drive a sibling control without running a second clock. - Sidebar item badge.
sidebar.itemgained abadgeprop for a trailing unread counter — the common notifications / inbox nav pattern. - Table row headers.
table.thgained aheaderScopeprop so a per-row header cell can bescope="row", previously reachable only as a column header. - Tooltip
focusable. A tooltip on a non-interactive trigger — an icon, a text span — can now be reached by keyboard instead of being hover-only.Trigger - Design tokens. The
--gap-wk-*scale is now the fullxs…2xlladder — the same rung labels as--space-wk-*, with its own tighter values, and a new--color-wk-border-strongtoken gives form controls a contrast-compliant resting border. See design tokens. - Error-announcement config default. A new
wirekit.config key lets an app that runs its own live region opt every form control out of the built-in error announcement in one place, instead of per control.a11y. announce_ error
Fixed
- Form-control borders now meet WCAG non-text contrast (1.4.11). Input, select, textarea and checkbox drew their resting edge at 1.29:1 in the light theme — effectively invisible against the field fill. They now use the dedicated
--color-wk-border-strongtoken (≥3:1 in both themes); the decorative border on cards and dividers is unchanged. - Fonts no longer fall back to system fonts silently in production. A configured but unpublished bundled font now leaves a visible signal in every environment plus a throttled server-side warning, instead of vanishing to system fonts with no trace outside local development.
- Editor binding and custom toolbar.
wire:modelon the editor now binds the textarea — it previously landed on the wrapper and lost input — and a customtoolbarslot now renders instead of being overridden by the default set. - Notification Center announcements. New notifications are now announced to screen readers through a polite live region.
- Pagination nested-route 404. The component now emits absolute hrefs, so a paginator under a nested Livewire route no longer 404s; and every user-visible string — body text and aria-labels — is now translatable.
- Combobox attribute forwarding. Every caller attribute now reaches the
role="combobox"input rather than a roleless wrapper. - Translatable strings. The "opens in new tab" screen-reader hint on the link component and its siblings, the threshold band labels and reset-cadence notes on the usage meter, and the copy-confirmation text on the clipboard button, are now translatable instead of hardcoded English.
- Checkbox description association. A caller
aria-describedbyis now merged with the checkbox's own hint / error target instead of being silently dropped. - Table sort headers. A sortable column in Livewire sort mode no longer shows a pointer cursor across the whole cell when only the button is the click target.
- Contrast helper parses
rgb().WcagContrast::now understandsparse To Linear Rgb() rgb()/rgba()color strings, not only#hexandoklch().