Release v4.6.0
One body of work: what a product needs to own its numeric and entity-picking fields on Components without touching React Aria internals. The first commit fixes the number input's restyling contract; the second adds the picker the catalog lacked. Both were motivated by the same consumer, which restyles NumberInput on root and had hand-rolled its customer, contact and company pickers with no roles and no keyboard path.
Added
ComboBoxunder@cratis/components/Common: the input owns thecomboboxrole witharia-expanded/aria-controls/aria-activedescendant; options render in alistboxpopover; ArrowUp/Down move, Enter selects, Escape closes, typing filters (contains,startsWith, ornonefor consumer-side search viaonInputChange);openOnFocus;loading/loadingMessageas a busystatusregion,failureas analertreplacing the options,emptyMessage; anactionfooter row after the options that receives the typed text; options withlabel, optionaldescription(inlineorstacked) anddisabled;description/errorMessageassociated througharia-describedby/aria-errormessage(#279)- Fourteen stable
ComboBoxparts with canonical states in the generated manifest; no new tokens (#279) groupis a stable part onNumberInputandNumberInputField(data-cratis-part="group", statesdisabled/invalid/readonly), so a product that owns the box onrootremoves the built-in one throughpt.group(#277)showSteppers(defaulttrue) onNumberInputremoves the decrement/increment buttons entirely; keyboard stepping still commits with theStepreason; the field forwards it (#277)- Documentation for both, seven stories (one
ComboBoxkeyboard play, one product-ownedNumberInputbox), and specs — theComboBoxones drive the real React Aria popover in jsdom (#277, #279)
Changed
- The Styling cascade contract explains that a product declaring its own
@layerorder first must name thecratis-*layers in that statement, between its reset and its utilities — declaring them after the Components import ranks a component stylesheet above every product utility (#277) - The duplicated narrow-width
.cratis-number-input__stepsblock inNumberInput.cssis merged into one rule (same declarations, same media query). - The packed stylesheet's raw ceiling moves from 204 KiB to 205 KiB against the new measurement (raw 209017, gzip 32022, 1170 blocks). The gzip ceiling — the size a consumer transfers — is not raised and keeps 746 bytes of headroom; the comment records that the next stylesheet has to come with a reduction. Flagged for your judgement.
Dropdown is unchanged; existing NumberInput consumers render the same DOM and CSS with the defaults.
Verification
- 50 specs across
for_ComboBox,for_NumberInputandfor_NumberInputField; parts manifest (57 components, 313 parts); TSDoc coverage; story index attestation (302 stories / 70 modules); packed archive within budget; story × axe matrix: 4 renderers × 302 stories × 2 appearances = 2,416 cases, zero violations.
Supersedes #278 and #282, which carried these two commits separately.
Proposed release intent: minor.