WireKit v1.5.0
Minor release with eight developer-facing improvements: a code-block screen-reader announcement fix, a wirekit:doctor post-build CSS sanity check, a hero-row xl size on <x-wirekit::, a counter-animation animate prop on <x-wirekit::, an asideWidth ratio refinement on <x-wirekit::, eight new marketing-copy semantic aliases on heroicons-marketing, plus the syntax-highlighter contract documented in docs/theming.md.
No breaking changes — fully backward-compatible with v1.4.0.
Added
<x-wirekit::— opt-in counter-animation prop. When set, the value text wraps in an Alpinestat animate> wirekitdata handler that animates 0 → target over 1.2s (ease-out cubic) once the stat scrolls 40% into view (Stat Animate Intersection). RespectsObserver prefers-reduced-motion: reduce— the value snaps to target with no animation if the OS-level setting is enabled. Static value remains visible inside the<span x-text="value">fallback so search engines, no-JS browsers, and Alpine-pre-init paint all see the real number. Defaultfalsepreserves v1.4.x output. Numeric prefixes / suffixes ($,%, etc.) are preserved through the animation;toformats the in-flight value with locale-aware thousand-separators.Locale String() <x-wirekit::— opt-in copy:aside ratio refinement underhero asideWidth> layout="balanced". Five values:1/3(aside ⅓),2/5(aside ⅖),1/2(50/50, matches default),3/5(aside ⅗),2/3(aside ⅔). Under any non-balanced layout (lead/centered/stacked)asideWidththrows viaWireKit::in debug mode and is silently ignored in production. DefaultvalidateProp nullpreserves v1.4.x balanced 50/50.<x-wirekit::— fourth chip-size value for hero-row features. Renders a 64×64 chip with a 32×32 inner icon. Existingfeature size="xl"> sm/md/lgvalues keep their semantics;mdremains the default.- Eight semantic copy aliases on the
heroicons-marketingpreset —live(signal),pulse(arrow-path-rounded-square),a11y(finger-print),sparkle(sparkles),security(lock-closed),speed(bolt),open-source(code-bracket),ai(cpu-chip). Names map to landing-page bullet copy rather than to the underlying icon name. Anti-collision verified by existing test suite — none of these shadow a base orheroicons-appalias. - Post-build CSS sanity check on
wirekit:doctor/wirekit:verify— final check after the existing source-side@sourceverification. Ifpublic/exists, the doctor walks every CSS file in the manifest and looks for anybuild/ manifest. json --color-wk-*token reference. Fails with a "runnpm run build" hint if no CSS bundle in the manifest references WireKit tokens — catches the silent-failure mode where a developer adds the@sourceline toapp.cssbut forgets to rebuild. Skips silently in environments without a manifest (dev / pre-build / package-test scenarios). docs/theming.md"Syntax-highlighter contract" subsection — under Accessibility & Contrast. Tells developers wiring their ownhighlight.js/ Prism / Shiki theme that token-level contrast must hit ≥4.5:1 against the active--color-wk-bg-elevated, in BOTH light and dark mode, across every theme preset. Documents the two foot-guns (unscoped WCAG overrides bleeding cross-mode; per-themebg-elevatedvariations breaking single-pair audits) with a sketch of a Playwright contrast-audit recipe.
Fixed
<x-wirekit::symmetric screen-reader announcements. The polite live region (code-block copy> <span role="status" aria-live="polite">) was already in DOM but only spoke on success; the error path was silent (clipboard.writeText() rejection on non-secure-context or denied-permission cases threw an unhandled rejection and the user heard nothing). Click handler now wraps the clipboard write in.then()/.catch()so success AND failure each set a distinct, polite SR-only string: "Code copied to clipboard" / "Copy failed". WCAG 2.2 SC 4.1.3 (Status Messages) — both code paths now satisfy.