WireKit v2.39.0
Minor. One new primitive, one new check in the CSP audit, and a font-loading fix that moved long-form text 35px on every first paint.
Added
<x-wirekit::band>— the strip between two areas of a window. Padding, and one rule on one edge: the search field under a toolbar, the composer under a message list, the action row along the bottom. It was hand-rolled in two dozen places across the blueprint catalog because nothing covered it.edgetakestop,bottom,bothornone;paddingandsurfacesit on the token scales. It renders a plain element with no ARIA role, deliberately — a band is chrome, androle="toolbar"would promise arrow-key navigation between controls that nothing implements. Useas="header"oras="footer"where the strip genuinely is a landmark. See Band.wirekit:csp-auditnow reports an Alpine payload placed inside a<script>block. HTML escaping does not apply in a script context, so a payload containing the closing-tag sequence ends the block and everything after it is parsed as markup. The encoder's documentation has always said it belongs in a directive attribute; the audit now says so at build time, over your templates rather than only ours. See CLI reference.
Fixed
- Text measured in
chno longer reflows when the web font arrives. Achis the advance width of the digit zero in whichever face is rendering, so withfont-display: swapevery box sized in it resized mid-load. The metric-matched fallback did not prevent this: it corrects a frequency-weighted average across many characters, which is what keeps a paragraph the same overall length, whilechreads one glyph. For the default sans face the two differed by about five per cent — roughly 35px on a 65-character measure, visible as long-form text jumping on the first visit to every page. The shipped font stylesheets now carry the measured value and the affected tokens use it. Nothing changes for a developer using their own faces. See Theming.
Documentation
- Events — the complete inventory of what WireKit
dispatches, split by direction: the events you listen for, and the ones you dispatch to
drive a component. It also settles the naming convention for new events
(
wirekit:<component>-<happening>) and marks which existing names sit on older forms. Nothing is renamed — every current name keeps working for the whole of v2.