WireKit v2.20.0
Minor release — sidebar and app-shell layout controls, a floating action button, two form-field affordances, and a run of accessibility and correctness fixes. Everything here is additive or a fix; existing code renders identically.
Added
- A single-action floating action button —
<x-wirekit::. A circular, screen-corner button for the one primary action a screen offers (compose, add, feedback). It follows the writing direction, keeps clear of the iOS home indicator and a landscape notch via safe-area insets, and announces to assistive tech what it opens.fab. button> - Sidebar sections fold and remember their state.
<x-wirekit::turns a section heading into a disclosure that folds its items;sidebar. group collapsible> <x-wirekit::gains the same, asidebar. collapsible> persist="key"that remembers the open state across reloads, and avariant="heading"that styles its trigger as a small uppercase section label instead of a nav row. - App shell gains a
viewportmode.<x-wirekit::pins the shell to the viewport height so the sidebar and main region scroll internally — brand at the top, account menu at the bottom — instead of the page growing past the fold. The default keeps the document-scroll behavior.app-shell viewport> - Input gains a
monovariant and leading/trailing icon slots.monorenders the field value in the monospace font (codes, SKUs, hashes);<x-slot:leading>/<x-slot:trailing>place an icon or addon inside the field frame. - Checkbox gains a
hideLabelprop — a checkbox with no visible label that keeps its accessible name, closing an API gap with the other form controls. - File upload's remove button gains a translatable, overridable
removeLabel(defaultRemove :name), so its accessible name is no longer hardcoded English.
Changed
- Dropdown, popover, menubar, multi-select and color-picker panels follow their trigger on scroll and resize. An open panel used to stay at its opening coordinates while the page scrolled; it now re-anchors to its trigger and tears its listeners down on close.
Fixed
- Form controls that share a
nameon one page now each get a unique DOMid. Input, textarea, select and the other name-derived controls emitted the sameidtwice when two fields shared aname(a create-and-edit form, a filter bar plus a modal), leaving every field after the first without an accessible name. Each instance now derives a page-unique id, solabel[for]andaria-describedbyresolve to the right field. Opt out withwirekit..a11y. dedupe_ ids - File upload's remove button now meets the 44px touch-target size. Its clickable area was ~18px; it now fills a 44×44 target while the visible chip stays small.
- Sidebar sections no longer disappear in the collapsed icon rail. A
<x-wirekit::hid all its items when the sidebar folded to the icon rail; its child icons now stay reachable as a flat list, like a static group.sidebar. collapsible> - A retinted active sidebar item keeps its color on hover. The base hover style is now scoped to non-active items, so a themed active state is not overridden while the pointer is over it.
- Tooltip honors a
delayoroffsetof0instead of swallowing the zero and applying the default. - Unbound
prop="false"reads as off across the remaining tri-state props that still treated the unbound string"false"as truthy. - Config class overrides now reach dotted sub-components.
wirekit.(and every othercomponents. sidebar. item. classes.* parent.childsub-component) applied only to top-level components before; the override now resolves for sub-components too. php artisan wirekit:publish-fontsre-publishes fonts when the bundled files change, andwirekit:doctorreports stale published fonts, instead of silently leaving an old copy in place.
Documentation
- Alert dialog and field docs clarify the action-button count and where a validation error's accessible ownership lives.