Release v4.5.0
#242 had been open since 2 September with a complete, browser-verified NumberInput, and #264 shipped a smaller implementation for the same issue without noticing it. That is the duplication this resolves: #242's implementation becomes the canonical one, with its commits intact, on top of what has since shipped in 4.3.0 and 4.4.0.
Closes #242.
Added
onCommitreportingblur,enter,pasteandstepafter the matching change (#175)requiredwith native form semantics, with normalization withheld from submission until the controlled owner accepts it (#175)- Step buttons, description and error parts, and
ReactNodeadornments that stay outside the parsed and submitted value (#175) - A
--cratis-number-input-*token contract in its own stylesheet (#175) - Specification coverage for
useGrouping, which had none: a year must render2026and not2 026(#271)
Fixed
- Keep a full-field paste change and its commit in one browser event transaction, so WebKit preserves
onChangebeforeonCommit(#175) - The Storybook verifiers printed hardcoded story and autodocs counts in their summaries while asserting different ones, so a passing run could report a number that was not real. Both now derive the count from the built index (#175)
Removed
- The seven specifications from #264, as redundant — every case they covered is covered here, usually more thoroughly (#175)
Verification
Full Source CI: 1478 tests across 415 files, parts manifest at 56 components and 297 parts, lint, build, story typecheck, renderer contracts and package graph. Storybook index and the complete axe matrix: 4 isolated previews × 295 stories × light and dark = 2360 story/appearance/axe cases, zero exclusions.