Once versions are published, this page is generated from the release notes. Until then, changes are recorded by hand.
28 October 2026
Section titled “28 October 2026”Breaking
appearanceis removed in favour ofvariant(primary,secondary,tertiary) andtone(neutral,danger). Migrateappearance="subtle"tovariant="tertiary"andappearance="danger"totone="danger".- Loading no longer sets
aria-busy. The Button keeps its label as its name; when loading starts, a polite status region next to it announcesloadingLabelonce, or “Loading” without it. startIconandendIconnow take an element (ReactElement).
Added
- Press motion (
motion.press): scales to 97 % while pressed and springs back on release; colours change in 110 ms. successandsuccessLabel: a check mark that grows once over the label when the action finishes, and “Done” (ui.button.success) announced once.tone="danger"works with the secondary and tertiary variants, backed by the newcolor-action-danger-subtle-*andcolor-action-on-danger-subtle-defaulttokens.Provider, which sets the language of the library’s own strings, and thedata-component="button"attribute.size="xs": 24 px height for in-cell actions; thebutton-height-xs,button-padding-inline-xsandbutton-icon-size-xstokens.variant="glass"andvariant="glass-prominent".
Changed
- Heights are 32, 36 and 40 px; the default
mdis 36 px, 40 px on a touch screen. Corner radius is 10 px. - Focus shows as a 2 px outer focus outline with a 2 px gap (
focus-outline). - The
secondarylook gets a small shadow. - On a coarse pointer (touch), the medium size is 44 px tall and the large size 48 px.
Fixed
- With both
loadinganddisabled, loading wins: the Button stays focusable, hasaria-disabledand draws no disabled fill.
26 October 2026
Section titled “26 October 2026”Added
- First version: four appearances (
primary,secondary,subtle,danger), three sizes, full width. - Built on the Base UI Button;
type="button"by default. - Colours, sizes and the focus ring come from tokens; light and dark mode and brand switching need no extra setup.