Version Packages - #1320
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
🧪 Storybook is successfully deployed!
|
Contributor
🏋️ Size limit report
Click here if you want to find out what is changed in this build |
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 17, 2026 10:59
49caf21 to
db5030d
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 17, 2026 11:57
db5030d to
cbeaaf3
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 17, 2026 13:19
cbeaaf3 to
e895364
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 17, 2026 13:35
e895364 to
88877b2
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 17, 2026 16:46
88877b2 to
37e7c0b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.163.0
Minor Changes
#1323
82616524Thanks @tenphi! -Radio/Radio.Button: a button- or tabs-type radio now accepts the full content API of theItemit renders, matchingItemButton. Newly forwarded:descriptionPlacement,descriptionProps,keyboardShortcutProps,isLoading,loadingSlot,highlight,highlightCaseSensitive,highlightStyles,levelandlabelRef.descriptionnow has a grid area to land in, so it renders in bothinlineandblockplacement, and container style props (padding,gap,fill,preset, …) apply to button-type radios instead of being dropped. A loading button radio is also disabled, so it no longer takes clicks or arrow-key selection — pass an explicitisDisabled={false}to opt out.#1319
2a8d0b4aThanks @tenphi! - Lint ui-kit's own source with theno-redundant-default-proprule it ships, and fix four registry entries that autofixing would have broken.The plugin was never applied to this repo. Two things prevented it, and the second was silent: nothing loaded the plugin, and provenance is gated on the import specifier literally matching
@cube-dev/ui-kit, which no file insrc/uses — every component import here is relative, across 210 distinct specifiers that share no usable prefix. So even once loaded, the rule reported nothing.relativeImportsrule option, which also accepts relative specifiers as ui-kit provenance. It exists for linting this repository and must not be enabled in a consumer project, where a relative import is the consumer's own component. Shadowing still bails either way — resolution requires anImportBinding, so a localconst Badge = tasty({})is never matched.configs.recommendednow sets stories and.docs.mdxtowarninstead ofoff. Stories are the code people copy, so redundant props there travel outward and are worth surfacing; a deliberate side-by-side contrast still has a real reason to name a default, so it warns rather than failing a build.Four props were classified as plain defaults when they are actually inherited overrides, so the rule would have offered — and
--fixwould have taken — an autofix that changed behaviour. Each is nowskip: 'context':ItemActionisDisabledandtype.<Item isDisabled>renders itsactionsinsideItemActionProvider, andisDisabled = isDisabledProp ?? contextIsDisabled, so<ItemAction isDisabled={false}>is the documented way to keep one action live inside a disabled item. Stripping it silently disabled that action.ItemBadgetypeandtheme, which read the same context and had no conditions on their fixture at all.DialogisDismissable, resolved ascontextProps.isDismissablewith no literal fallback whileDialogContainerandDialogTriggerdefault that context value totrue, so a nested<Dialog isDismissable={false}>is an override. Three call sites in shipped source relied on it.The cause is general: a prop resolved as
prop ?? context ?? literalprobes as a plain default in a bare tree, because the literal wins when nothing supplies the context. OnlyItemAction'sthemewas classified correctly, and only because it happened to be the one prop with a matching condition. The fixtures now supply a differing value for each such prop, so the prover derives these skips itself and the sync guard re-proves them on every test run rather than trusting a hand-written note. A repo-wide audit for the pattern found no other affected component.Patch Changes
#1323
82616524Thanks @tenphi! -Itemthemes: a disabled item now keeps showing whether it is selected. Thedisabledentry in everyoutline,outline-2andclearvariant used to overrideselectedoutright, so a disabled segmented control —RadioGroup type="button"most visibly — rendered every option identically with no sign of which one was active. Each of those variants gains aselected & disabledstate that paints the brand-tintedaccent-disabled-surfacechip and its paired label instead of the neutral one, across all six themes (specialandcurrentstay in their own white-alpha /currentcolorregisters).type="item"rows are unchanged — they already keep brand identity in their disabled label and pair selection with a checkmark.#1322
b56c0073Thanks @tenphi! - Makeno-redundant-default-propfire on compound aliases such as<Radio.Group>, which it silently ignored.The registry is keyed on the name each render fixture carries — the flat
RadioGroup— while the rule resolves a JSX tag to its dotted path,Radio.Group. The lookup missed, so the entry only ever fired on the form nobody writes: every example inRadioGroup.docs.mdxuses<Radio.Group>/<Radio.Tabs>, and two genuinely redundant props inRadioGroup.stories.tsxwent unreported.Button.Split,Item.Action,Menu.TriggerandInputhad the same gap.DefaultsRegistrynow carries analiasesmap from alias path to canonical key, generated by walking the package exports and recording every path whose value is the same object as a covered component. Fixtures still name one export each; the 27 alias paths are derived, so adding a fixture needs no alias bookkeeping.Identity, not name shape, is what makes this safe.
Radio.GroupisRadioGroupitself and cannot behave differently, butRadio.ButtonGroupistasty(RadioGroup, { type: 'button' })andRadio.Tabsistasty(RadioGroup, { type: 'tabs' })— different objects with a different effectivetypedefault. A rule that normalised the dotted path by concatenating it would hand those two RadioGroup's entry and offer to strip atypethat is not their default; identity skips them. Each alias is re-checked against the live exports on every test run, so a refactor that turns an alias into a wrapper fails instead of shipping a wrong entry.This is a missed-cleanup fix, not a correctness one — the rule was silent, never wrong. Unrelated to
VerifiedDefault.aliases, which lists alternate spellings of a prop value and stays hand-curated.#1319
2a8d0b4aThanks @tenphi! - FixRadioGroup's documentedsizedefault, which was wrong in a way the lint rule acted on.RadioGroup.docs.mdxcontradicted both itself and the implementation: the## Propertiesbullet said(default: xsmall)while its own prose saidmedium, andRadio.tsxresolvessize ?? contextSize ?? 'medium'. The default ismedium.That annotation is what seeds the
no-redundant-default-propregistry, so the shipped rule claimed<RadioGroup size="xsmall">was redundant and offered to delete it — which silently resized the radios tomedium. The prover could not catch the drift becausesizeonly reaches the DOM through the radios and a plaintype="radio"radio renders identically at every size, so any documented value verified. The fixture now probes undertype="button"andtype="tabs"as well, which is what makes a wrongsizevalue fail: restoringxsmallunder the new conditions correctly downgrades the prop toskip: 'conditional'instead of passing as a verified default.Also corrects the tabs-mode size mapping table. It claimed
xlargemaps tolargeand listedxsmallas passing through, butRadio.tsxmaps onlylarge, funnelling every other size throughRADIO_SIZE_MAP.medium— soxsmall,small,mediumandxlargeall collapse toxsmall.Note
Low Risk
Mechanical version and changelog update with no runtime code changes in this PR; publish risk is limited to whether the already-merged feature PRs are release-ready.
Overview
Release packaging only — bumps
@cube-dev/ui-kitfrom 0.162.0 to 0.163.0, folds five consumed changesets into CHANGELOG.md, and removes the corresponding.changeset/*.mdfiles. There is no application or library source in this diff; merging publishes what already landed onmain.Shipped in 0.163.0 (from the new changelog): button/tabs Radio gains Item-parity props and loading/disabled behavior; Item outline/clear variants show selected when disabled; RadioGroup docs/fixtures correct
sizedefault and tabs mapping;no-redundant-default-proplint improvements (compound aliases, self-lint viarelativeImports, context-aware registry skips, stories/docs warnings).Reviewed by Cursor Bugbot for commit 37e7c0b. Bugbot is set up for automated code reviews on this repo. Configure here.