Skip to main content

WireKit v2.16.0

Minor release

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 href makes 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-motion reveals the buffered text at once, and a dropped connection or an explicit stop resolves to a defined terminal state. A simulate mode 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 itemOverlay render-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 spoken aria-valuetext can 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 done state, so it can drive a sibling control without running a second clock.
  • Sidebar item badge. sidebar.item gained a badge prop for a trailing unread counter — the common notifications / inbox nav pattern.
  • Table row headers. table.th gained a headerScope prop so a per-row header cell can be scope="row", previously reachable only as a column header.
  • Tooltip focusableTrigger. A tooltip on a non-interactive trigger — an icon, a text span — can now be reached by keyboard instead of being hover-only.
  • Design tokens. The --gap-wk-* scale is now the full xs…2xl ladder — the same rung labels as --space-wk-*, with its own tighter values, and a new --color-wk-border-strong token gives form controls a contrast-compliant resting border. See design tokens.
  • Error-announcement config default. A new wirekit.a11y.announce_error 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.

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-strong token (≥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:model on the editor now binds the textarea — it previously landed on the wrapper and lost input — and a custom toolbar slot 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-describedby is 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::parseToLinearRgb() now understands rgb() / rgba() color strings, not only #hex and oklch().