Skip to content

Version Packages - #1417

Merged
tenphi merged 1 commit into
mainfrom
changeset-release/main
Sep 22, 2026
Merged

tenphi merged 1 commit into
mainfrom
changeset-release/main

Conversation

@tenphi

@tenphi tenphi commented Sep 22, 2026

Copy link
Copy Markdown
Member

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@cube-dev/ui-kit@0.182.0

Minor Changes

  • #1416 cf3e03b9 Thanks @tenphi! - Button emits aria-pressed from isSelected, which its documentation has always promised and which every call site using isSelected for a real toggle had to hand-set alongside it. It is skipped where the attribute would be wrong: on a button rendered as a link (to), and on one the call site has given its own role — a selected tab or option wants aria-selected / aria-current, and only the call site knows which. An explicit aria-pressed still wins. Note that isSelected={false} now renders aria-pressed="false" rather than nothing, since that is what makes an unpressed toggle announce as a toggle.

    isClearable's built-in ✕ on Select, Picker and FilterPicker now has an accessible name. It was an icon-only ItemAction with neither aria-label nor tooltip, and ItemAction derives its name from exactly those two and warns for neither, so it reached a screen reader unnamed. The default is localized in all twelve locales; override it per call site with the new clearLabel prop.

  • #1416 cf3e03b9 Thanks @tenphi! - ButtonSplit forwards the DOM and ARIA props it used to discard. It destructured its own props and passed only five things to the element, so aria-label, aria-labelledby, aria-describedby, id, role, raw data-* attributes and event handlers were dropped — which meant a split group could not be labelled at all, and that matters most in custom mode, where the children are typically icon-only buttons with no visible group label. Its sibling ButtonGroup has always forwarded everything, so the two were not interchangeable despite reading as alternatives. Custom mode also defaults to role="group" now, so a label has something to name; pass your own role (including presentation) to override it. The wrapper no longer emits a stray tag="div" attribute.

  • #1416 cf3e03b9 Thanks @tenphi! - CommandTextArea now tells a consumer where a pick landed and what the field is doing. onCommand's item carries start and end — the range the inserted text occupies in the value passed to onChange, with end excluding any trailing space — which commit already computed to place the caret and then discarded; a consumer that anchors its own record to a pick no longer has to re-derive the offset by searching the new value, a search that silently mis-anchors when one option's text is a token-boundary prefix of another's. Two new callbacks report state the component already holds: onOpenChange(isOpen) for the suggestion popover, so a field with its own Enter behaviour can tell "pick the focused option" from "submit" without reading aria-expanded off the DOM, and onActiveTokenChange(token) for the component's own caret-aware scan result, so nobody has to run a second approximate copy of it. Neither fires for the closed / no-token state a field mounts in.

Patch Changes

  • #1416 cf3e03b9 Thanks @tenphi! - Four places where a style or a size did not do what it said.

    Dialog, Modal and Tray fit viewports narrower than ~352px. $min-dialog-size was computed from 100vw - 2x while the components' own max-width uses 100dvw - 8x; CSS resolves min-width after max-width, so below the crossover the floor beat the ceiling and every dialog rendered wider than the viewport it sat in — in a 300px pane, 288px inside a 236px box. The token now measures the same box as the max-width, so the two can no longer cross. Apps that overrode the token to order the clamp themselves can drop the override. Dialog's gutter custom properties ($dialog-padding-h, $dialog-content-padding-v and the header/footer pair) are now documented as a supported contract, for the case where one child should span the full dialog width while its siblings keep the gutter.

    A standalone Checkbox honours styles and can wrap its label. Outside a CheckboxGroup the extracted container styles were computed and then never forwarded, so <Checkbox styles={{ … }}> was a silent no-op, and children were forced through <Text nowrap>white-space: nowrap inherits, so a label of more than a few words could not wrap at all. Both branches now render the label through the same element, so the preset and the validation colour match in and out of a group.

    Item gains $prefix-gap and $suffix-gap tokens for the space between those slots and the label. The grid contributes no gap and Label drops its own inline padding for any start or end content, so a prefix or suffix renders flush — right for a checkbox, kbd chip or badge, which already carry their own presence, and wrong for a bare glyph, which is the case that looks unspaced next to the same glyph in the icon slot. Both tokens default to 0, so nothing moves until a call site opts in with styles={{ '$prefix-gap': '1x' }}. Prefer them over overriding Prefix / Suffix padding, which silently replaces the state maps that drop the outer gutter next to an icon or an actions run.

    DatePicker, DateRangePicker and DateRangeSeparatedPicker apply the container style props and styles their types advertise. All three extracted them and dropped the result, forwarding only wrapperStyles, so width="100%" type-checked, reviewed clean and did nothing. wrapperStyles remains the most specific of the three and still wins.

@vercel

vercel Bot commented Sep 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
cube-ui-kit Ready Ready Preview Sep 22, 2026 12:33pm UTC

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

🧪 Storybook is successfully deployed!

@github-actions

Copy link
Copy Markdown
Contributor

🏋️ Size limit report

Name Size Passed?
All 513.98 KB (0% 🟰) Yes 🎉
Tree shaking (just a Button) 116.88 KB (0% 🟰) Yes 🎉

Compared against main at cf3e03brun 35727323615, 2026-09-22T12:27:51Z.

To see which modules changed, download the size-limit-statoscope-report artifact from this run and open report.html.

@tenphi
tenphi merged commit 78a3a07 into main Sep 22, 2026
17 checks passed
@tenphi
tenphi deleted the changeset-release/main branch September 22, 2026 12:41

This branch was successfully deployed

2 active deployments
Preview 9d0aa6a7 Deployed Sep 22, 2026 by vercel[bot]
Chromatic staging 9d0aa6a7 Deployed Sep 22, 2026 by tenphi via Prepare Storybook for review & tests #3840
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant