Repository navigation
fix(bulma-ui): name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby - #497
Conversation
…inner inputs The label prop on both components rendered an unassociated Field label, and a user-supplied id landed on the wrapper div instead of the labellable input. Both now run through useAutoLabelId: the inner input gets your id or a generated one, the label gets a matching htmlFor, and an explicit labelProps.htmlFor still wins. Behavior notes: a user id now applies to the inner text input rather than the wrapper div (nothing in the repo or docs relied on the old placement); Taginput's hardcoded aria-label="Add tag" becomes a fallback so a wired visible label names the input, and at maxTags (no input rendered) the label stays unwired rather than pointing at nothing.
…bels via aria-labelledby Group inputs can't take a single htmlFor, so the new useAutoLabelledBy hook gives the rendered Field label an id (yours via labelProps.id, or a generated one) and points the group container at it: Checkboxes gains role="group", Radios gains role="radiogroup", and Rate's existing radiogroup drops its hardcoded aria-label="Rating" in favor of the wired label (the hardcoded name remains as the unlabeled fallback). The merged labelProps carry htmlFor: undefined so group labels are never wired control-style. A caller-supplied role or aria-labelledby still wins via the rest spread.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (11)
🚧 Files skipped from review as they are similar to previous changes (11)
WalkthroughCheckboxes, Radios, and Rate now support accessible group labels through ChangesAccessible form group labeling
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant GroupComponent as Checkboxes/Radios/Rate
participant LabelHook as useAutoLabelledBy
participant Field
participant GroupContainer as group container
GroupComponent->>LabelHook: resolve label ID and field label props
GroupComponent->>Field: pass normalized label props
GroupComponent->>GroupContainer: set role and aria-labelledby
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Deep review — 0 blocking · 2 advisory
| # | Severity | Area | Finding | Location |
|---|---|---|---|---|
| 1 | 🔵 Advisory | Accessibility | <Field label><Radios/Checkboxes/Rate/></Field> composition still leaves the group unnamed (Rate announces the hardcoded "Rating", not the visible label) — the deliberate #494→#495 hand-off, on the record. |
Rate.tsx:521 |
| 2 | 🔵 Advisory | Coverage | Horizontal-layout label association (horizontal nests the label in FieldLabel) is not exercised by a test; it works by construction since the <label> still receives the id. |
Field.tsx:224 |
Overall: The change is sound and lands cleanly. useAutoLabelledBy is a faithful group-style sibling of useAutoLabelId — same active = !!label && rendersLabel gate, same labelProps.id ?? generated resolution, same htmlFor: undefined merge — and the active gate keeps aria-labelledby and the Field's if (label) render gate in lockstep, so there is never a dangling id reference. I verified end-to-end: typecheck clean, all 1419 form tests green including the three new #494 blocks, and the role queries resolve the name from the label prop. The riskiest part is purely the accepted residual (row 1); the human should confirm they are comfortable shipping the Field-composed gap as documented and picking it up in #495.
Residual risk: the ways an unassociated-group-label (#494) can still occur:
- Field-composed usage — refuted as a known, deliberate deferral: the PR body,
skills/bestax-form, and the component TSDoc all state the group only self-associates when it renders its ownField; #495 is next in the stack. Row 1 records it. - Unlabeled group —
<Radios>/<Checkboxes>with nolabelnow render an unnamedrole="radiogroup"/"group". Not a regression (naming was absent before too) and an unnamed group role is valid; the explicit role is a net semantic improvement over the prior role-less div. - User override collision — checked:
role/aria-labelledbyliterals sit before{...rest}, so a caller value wins (tested for Checkboxes; Rate spreadsrestlast over its explicit attrs). Whenlabel+ a restaria-labelcoexist on Rate the element carries both, butaria-labelledbywins in AT — harmless.
🏄 Clean set, dude — this one just points the group at its own label sign and paddles out. No gnarly wipeouts in the impl; the only ripple left is the Field-composed break they already promised to catch on the next wave (#495). Good to go.
… its input Review round on #496: the aria-label suppression keyed off "a label is rendered" rather than "the wired label names this input", so label plus a labelProps.htmlFor pointing elsewhere (with no id) produced a nameless control. The condition now requires the rendered label's htmlFor to equal the input's id. Also corrects the documented ref types to React.Ref<HTMLInputElement>.
Review round on #497: the horizontal branch nests the label in FieldLabel; it worked by construction but had no test. Locks it for Radios.
…belledby # Conflicts: # bulma-ui/src/form/fieldProps.ts # skills/bestax-form/SKILL.md
Preview DeploymentPreview URL: https://d0c28e6e.bestax.pages.dev |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@bulma-ui/src/form/useAutoLabelId.ts`:
- Around line 77-80: Prevent active group labels from restoring single-control
labeling by spreading labelProps before the active overrides in useAutoLabelId,
ensuring htmlFor remains undefined and id is labelId. In
bulma-ui/src/form/__tests__/Checkboxes.test.tsx lines 212-276, add a regression
test supplying labelProps.htmlFor and assert the rendered label has no for
attribute.
In `@skills/bestax-form/SKILL.md`:
- Around line 128-131: Update the checklist near the group-input accessibility
guidance to remove manual htmlFor wiring requirements for the Checkboxes,
Radios, and Rate convenience components, which automatically associate their
label props. Retain manual wiring guidance only for controls composed from Field
plus base inputs, and preserve the existing distinction for maxTags.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: a579906f-0c8b-43ec-841d-62cccd688d89
📒 Files selected for processing (12)
bulma-ui/src/form/Checkboxes.tsxbulma-ui/src/form/Radios.tsxbulma-ui/src/form/Rate.tsxbulma-ui/src/form/__tests__/Checkboxes.test.tsxbulma-ui/src/form/__tests__/Radios.test.tsxbulma-ui/src/form/__tests__/Rate.test.tsxbulma-ui/src/form/fieldProps.tsbulma-ui/src/form/useAutoLabelId.tsdocs/docs/api/form/checkboxes.mddocs/docs/api/form/radios.mddocs/docs/api/form/rate.mdskills/bestax-form/SKILL.md
There was a problem hiding this comment.
Pull request overview
Adds accessible group labeling for Checkboxes, Radios, and Rate using aria-labelledby.
Changes:
- Adds group roles and automatic label IDs.
- Preserves Rate’s fallback accessible name.
- Updates tests, documentation, and form skill guidance.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
skills/bestax-form/SKILL.md |
Documents group label association. |
docs/docs/api/form/rate.md |
Documents Rate accessibility behavior. |
docs/docs/api/form/radios.md |
Documents Radios group semantics. |
docs/docs/api/form/checkboxes.md |
Documents Checkboxes group semantics. |
bulma-ui/src/form/useAutoLabelId.ts |
Adds the group-labeling hook. |
bulma-ui/src/form/Rate.tsx |
Associates labels with the rating group. |
bulma-ui/src/form/Radios.tsx |
Adds radiogroup labeling. |
bulma-ui/src/form/fieldProps.ts |
Updates association guidance. |
bulma-ui/src/form/Checkboxes.tsx |
Adds checkbox-group labeling. |
bulma-ui/src/form/__tests__/Rate.test.tsx |
Tests Rate label association. |
bulma-ui/src/form/__tests__/Radios.test.tsx |
Tests Radios label association. |
bulma-ui/src/form/__tests__/Checkboxes.test.tsx |
Tests Checkboxes label association. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
…ontrol Review round on #497: labelProps was spread after the htmlFor: undefined merge, so a caller-provided htmlFor restored a for attribute on the group label, naming the group after one control. The hook now strips htmlFor after the spread; TSDoc on the three group components states it, tests lock it, and the skill checklist stops instructing manual wiring for group inputs.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 12 out of 12 changed files in this pull request and generated no new comments.
Suppressed comments (2)
bulma-ui/src/form/Checkboxes.tsx:130
{...rest}can only make a caller-supplied role win at runtime, butCheckboxesPropsdoes not exposerole(or div attributes), so TypeScript consumers cannot use the override promised by this change. Add a typedrole?: React.AriaRoleor extend the appropriateHTMLAttributes<HTMLDivElement>subset, then regenerate the props documentation.
role="group"
bulma-ui/src/form/Radios.tsx:132
{...rest}can only make a caller-supplied role win at runtime, butRadiosPropsdoes not exposerole(or div attributes), so TypeScript consumers cannot use the override promised by this change. Add a typedrole?: React.AriaRoleor extend the appropriateHTMLAttributes<HTMLDivElement>subset, then regenerate the props documentation.
role="radiogroup"
Preview DeploymentPreview URL: https://0db3a4b7.bestax.pages.dev |
## [5.8.4](https://github.com/allxsmith/bestax/compare/@allxsmith/bestax-bulma@5.8.3...@allxsmith/bestax-bulma@5.8.4) (2026-08-09) ### Bug Fixes * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([#497](#497)) ([5c4222e](5c4222e))
|
🎉 This PR is included in version 5.8.4 🎉 The release is available on: Your semantic-release bot 📦🚀 |
|
🎉 This PR is included in version 5.9.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
## [4.0.2](https://github.com/allxsmith/bestax/compare/create-bestax@4.0.1...create-bestax@4.0.2) (2026-08-11) ### Bug Fixes * **bestax-mcp:** derive the near-miss guidance from the skill, and only when it helps ([1141cca](1141cca)) * **bestax-mcp:** do not split a helper-prop table cell on an escaped pipe ([bdac820](bdac820)) * **bestax-mcp:** lead get_helper_props with the inline-style prohibition ([ffc627a](ffc627a)) * **bestax-mcp:** make list_components point at the next step ([8ddb2fd](8ddb2fd)) * **bestax-mcp:** make tests and cached builds work from a clean checkout ([6e63820](6e63820)), closes [bestax-mcp#build](https://github.com/bestax-mcp/issues/build) * **bestax-mcp:** name list_components as the entry point, not search_bestax ([206380b](206380b)) * **bestax-mcp:** name the three near-miss components in the list_components footer ([1c7af67](1c7af67)) * **bestax-mcp:** route helper questions to the tool that answers them ([cd6ce12](cd6ce12)) * **bestax-mcp:** validate the one input that is not ours, and bound the rest ([3e1adc9](3e1adc9)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([7ae37d4](7ae37d4)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([384bd38](384bd38)) * **bulma-ui:** associate the form label prop with its control via a generated id ([e6686af](e6686af)) * **bulma-ui:** cover horizontal-layout group label association ([ef3ca9f](ef3ca9f)) * **bulma-ui:** deprecate CSS-less color values, warn in dev, fix has-text fall-through ([fb111eb](fb111eb)) * **bulma-ui:** fail closed on missing process and scope color guidance to real props ([117c0c0](117c0c0)) * **bulma-ui:** honor the htmlFor opt-out in the convenience hook and tighten the association docs ([92aa622](92aa622)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([73cec33](73cec33)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([ca5996a](ca5996a)) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([dce0ee7](dce0ee7)) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([#497](#497)) ([5c4222e](5c4222e)) * **bulma-ui:** name the three near-miss components in AGENTS.md ([c63f491](c63f491)), closes [#344](#344) * **bulma-ui:** never let labelProps.htmlFor wire a group label to a control ([3b3aaaf](3b3aaaf)) * **create-bestax:** put the near-miss guidance where every session sees it ([6db49f3](6db49f3)) * **create-bestax:** shrink the near-miss block and pin the copies together ([d582da5](d582da5)) * **create-bestax:** stop the skills teaching a Theme call that does not compile ([2935bb2](2935bb2)) * **create-bestax:** teach the skills the three components Bulma hides ([22dcff7](22dcff7)) * **docs:** give every batch run its own port — slot reuse was corrupting runs ([6ef1755](6ef1755)) * **docs:** make the eval batch resumable after a container restart ([d56229e](d56229e)) ### Features * **bestax-mcp:** serve component docs, props, examples and skills over MCP ([c2abcc4](c2abcc4)) * **bulma-ui:** associate Field's label with a composed base control ([219f631](219f631)) * **docs:** aggregate-runs.mjs — distribution stats across a runs directory ([5de9c07](5de9c07)) * **docs:** batch runner for the eval harness, with the concurrency fixes it needed ([f8e268c](f8e268c)) * **docs:** rubric v2 and a brief that demands the components beyond Bulma ([e6047be](e6047be)) * **docs:** show all posts in the blog sidebar ([d29e9c6](d29e9c6)) ### Performance Improvements * **bestax-mcp:** stop get_helper_props costing half the session ([b865651](b865651))
|
🎉 This PR is included in version 4.0.2 🎉 The release is available on: Your semantic-release bot 📦🚀 |
# 1.0.0 (2026-08-12) * feat(bulma-ui)!: remove bestax-bulma-prefixed CSS variant ([94baa34](94baa34)) * feat(create-bestax)!: require Node.js 18+ and align with bestax-bulma v2 ([#118](#118)) ([b22f183](b22f183)) ### Bug Fixes * add comprehensive rules to prevent bulma-ui versioning on non-bulma-ui commits ([#122](#122)) ([525ccfa](525ccfa)), closes [#119](#119) * **bestax-mcp:** derive the near-miss guidance from the skill, and only when it helps ([1141cca](1141cca)) * **bestax-mcp:** do not split a helper-prop table cell on an escaped pipe ([bdac820](bdac820)) * **bestax-mcp:** lead get_helper_props with the inline-style prohibition ([ffc627a](ffc627a)) * **bestax-mcp:** make list_components point at the next step ([8ddb2fd](8ddb2fd)) * **bestax-mcp:** make tests and cached builds work from a clean checkout ([6e63820](6e63820)), closes [bestax-mcp#build](https://github.com/bestax-mcp/issues/build) * **bestax-mcp:** name list_components as the entry point, not search_bestax ([206380b](206380b)) * **bestax-mcp:** name the three near-miss components in the list_components footer ([1c7af67](1c7af67)) * **bestax-mcp:** route helper questions to the tool that answers them ([cd6ce12](cd6ce12)) * **bestax-mcp:** validate the one input that is not ours, and bound the rest ([3e1adc9](3e1adc9)) * **bestax-migrate:** give the kitchen-sink e2e a per-process scratch dir ([2211ea5](2211ea5)) * **bestax-migrate:** reject pnpm's workspace alias form instead of unwrapping it ([de6a900](de6a900)) * **bestax-migrate:** require the pack script to exist, not just be named ([5315efe](5315efe)) * **bestax-migrate:** resolve bare workspace: and guard the catalog: protocol ([7fda9db](7fda9db)), closes [#417](#417) [#412](#412) * **bestax-migrate:** resolve workspace: specifiers before publishing ([782829a](782829a)), closes [bestax-migrate#test](https://github.com/bestax-migrate/issues/test) [#412](#412) * **bestax-migrate:** stop the pack hooks excusing a catalog: devDependency ([4127ead](4127ead)), closes [#412-shaped](#412) * **bulma-ui:** a11y + case-insensitive Taginput matching from PR review ([d576829](d576829)) * **bulma-ui:** accept router props like `to` on Navbar.Item without casts ([#311](#311)) ([b78856b](b78856b)), closes [#306](#306) * **bulma-ui:** Add build step to publish in ci.yml ([e3707fc](e3707fc)) * **bulma-ui:** add fontawesome-free as explicit devDependency ([a4a5389](a4a5389)) * **bulma-ui:** add missing exports ([0d16633](0d16633)) * **bulma-ui:** Add Skeleton to exports ([e481599](e481599)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([cc3a3e2](cc3a3e2)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([314bc39](314bc39)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([c930693](c930693)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([7ae37d4](7ae37d4)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([384bd38](384bd38)) * **bulma-ui:** associate the form label prop with its control via a generated id ([e6686af](e6686af)) * **bulma-ui:** complete domain migration and fix semantic-release configuration ([#64](#64)) ([f4cd71d](f4cd71d)) * **bulma-ui:** correct blog post examples and add Modal compound components ([#81](#81)) ([559c2e3](559c2e3)) * **bulma-ui:** correct NPM_TOKEN env variable in ci.yml ([94b48b4](94b48b4)) * **bulma-ui:** cover horizontal-layout group label association ([ef3ca9f](ef3ca9f)) * **bulma-ui:** deprecate CSS-less color values, warn in dev, fix has-text fall-through ([fb111eb](fb111eb)) * **bulma-ui:** fail closed on missing process and scope color guidance to real props ([117c0c0](117c0c0)) * **bulma-ui:** Fix release.config.js to include package-lock.json ([390da59](390da59)) * **bulma-ui:** fix standalone Badge pointer-events, pulse halo, and falsy content ([#295](#295)) ([a9db031](a9db031)), closes [#264](#264) * **bulma-ui:** full classPrefix support across layout/grid + prefix utils ([4ce0b53](4ce0b53)) * **bulma-ui:** honor the htmlFor opt-out in the convenience hook and tighten the association docs ([92aa622](92aa622)) * **bulma-ui:** improve npm package discoverability with optimized keywords and badges ([#72](#72)) ([8c7a696](8c7a696)) * **bulma-ui:** Initial semantic release changes ([b78d785](b78d785)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([73cec33](73cec33)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([ca5996a](ca5996a)) * **bulma-ui:** migrate domain from bestax.cc to bestax.io ([#64](#64)) ([4870b1e](4870b1e)) * **bulma-ui:** migrate ionicons to v8 to unblock publish and Storybook ([927a55b](927a55b)), closes [#142](#142) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([dce0ee7](dce0ee7)) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([#497](#497)) ([5c4222e](5c4222e)) * **bulma-ui:** name the three near-miss components in AGENTS.md ([c63f491](c63f491)), closes [#344](#344) * **bulma-ui:** never let labelProps.htmlFor wire a group label to a control ([3b3aaaf](3b3aaaf)) * **bulma-ui:** publish rewritten README to npm ([9810081](9810081)) * **bulma-ui:** publish with npm provenance attestation ([172da62](172da62)), closes [#180](#180) * **bulma-ui:** reference llms docs from README and package.json ([#198](#198)) ([db8aab3](db8aab3)) * **bulma-ui:** reject predicate-blocked values during manual entry ([a8f6e28](a8f6e28)) * **bulma-ui:** resolve flex item properties and Card compound component issues ([#55](#55)) ([e774da3](e774da3)) * **bulma-ui:** resolve flex item properties and Card compound component issues ([#55](#55)) ([7641a53](7641a53)) * **bulma-ui:** resolve react-hooks v7 and [@eslint-react](https://github.com/eslint-react) findings ([14caaaf](14caaaf)) * **bulma-ui:** resolve security vulnerabilities and update dependencies ([#128](#128)) ([112f6e4](112f6e4)), closes [#127](#127) * **bulma-ui:** restrict semantic-release to bulma-ui scoped commits only ([2d67bf9](2d67bf9)), closes [#62](#62) * **bulma-ui:** retry failed Avatar src, flatten Fragment children in Avatars, RTL-safe overlap ([#297](#297)) ([c00b9db](c00b9db)) * **bulma-ui:** route every hardcoded class through the prefix helpers; add classPrefix sweep test ([#301](#301)) ([a50b134](a50b134)), closes [#286](#286) * **bulma-ui:** setup gpg signing with semantic-release ([3e24722](3e24722)) * **bulma-ui:** strip redundant library prefix from Icon name ([#242](#242)) ([dbe3622](dbe3622)), closes [#189](#189) * **bulma-ui:** trigger release to publish via OIDC trusted publishing ([e2d09c5](e2d09c5)) * **bulma-ui:** update bundle size claims to accurate 21KB gzipped ([#66](#66)) ([6e381bd](6e381bd)) * **bulma-ui:** update package-lock.json ([853d585](853d585)) * **bulma-ui:** update package.json for better seo, exports, types, engines, funding, etc ([98cbc56](98cbc56)) * **bulma-ui:** use createRequire for ESM compatibility in Storybook 10 ([#130](#130)) ([b27e60e](b27e60e)), closes [#129](#129) * **ci:** collect screenshots as artifacts and commit in single batch to avoid conflicts ([27b259d](27b259d)) * **ci:** ensure npm install uses fresh downloads with --prefer-online ([1f2e15d](1f2e15d)) * **ci:** properly extract base path for recursive file search ([e0330ff](e0330ff)) * **ci:** use find command instead of glob module in verified-commit action ([0e2d159](0e2d159)) * **ci:** use npm ci for scaffolded app dependencies ([35652c8](35652c8)) * **create-bestax:** concrete inline-style → helper-prop mapping for the never-inline rule ([#357](#357)) ([5f72a90](5f72a90)), closes [#350](#350) [#350](#350) * **create-bestax:** correct browser title to prioritize Bestax branding ([#106](#106)) ([23aa535](23aa535)), closes [#105](#105) * **create-bestax:** correct template path resolution from ../../ to ../ ([65b4493](65b4493)), closes [#78](#78) * **create-bestax:** dark-mode contrast rules in theming/layout skills and docs ([#303](#303)) ([490bf21](490bf21)), closes [#194](#194) [#195](#195) * **create-bestax:** exclude templates directory from linting and typecheck ([18fec0b](18fec0b)) * **create-bestax:** fail fast with guidance instead of hanging when stdin is not a TTY ([#293](#293)) ([46a172d](46a172d)), closes [#192](#192) * **create-bestax:** move templates into package directory and update docs ([195bf01](195bf01)), closes [#78](#78) * **create-bestax:** point scaffolded CLAUDE.md at llms docs; document skills ([#198](#198)) ([b2e0514](b2e0514)) * **create-bestax:** publish with npm provenance attestation ([21ffe8f](21ffe8f)), closes [#180](#180) * **create-bestax:** put the near-miss guidance where every session sees it ([6db49f3](6db49f3)) * **create-bestax:** read version from package.json instead of hardcoded value ([#109](#109)) ([8605699](8605699)) * **create-bestax:** refresh README and bump scaffolded bestax-bulma to ^5 ([4e19e86](4e19e86)) * **create-bestax:** reject dot-only project names, pin icon versions, bundle bestax-icons skill ([#310](#310)) ([ddff8e5](ddff8e5)) * **create-bestax:** scaffold @allxsmith/bestax-bulma ^4.0.0 ([1d3b802](1d3b802)) * **create-bestax:** scaffold bundled bestax CSS flavors, not stock Bulma ([43621dc](43621dc)) * **create-bestax:** ship improved bundled skills + component catalog ([#199](#199)) ([a1515c2](a1515c2)) * **create-bestax:** shrink the near-miss block and pin the copies together ([d582da5](d582da5)) * **create-bestax:** skills-sync conformance gate + theming skill reference backfill ([#326](#326)) ([9584133](9584133)), closes [#285](#285) * **create-bestax:** stop the skills teaching a Theme call that does not compile ([2935bb2](2935bb2)) * **create-bestax:** synchronize version with bestax-bulma to 2.4.0 ([623ee79](623ee79)), closes [#96](#96) * **create-bestax:** teach the skills the three components Bulma hides ([22dcff7](22dcff7)) * **create-bestax:** update template dependency to ^2.4.0 ([200971d](200971d)) * **create-bestax:** use scenario-specific screenshot directories to prevent overwrites ([#108](#108)) ([c675957](c675957)), closes [#107](#107) * **create-bestax:** validate at submit in the bestax-form signup example ([0b9518f](0b9518f)) * **create-bestax:** wire labeled controls in the skill showcase story ([af49a16](af49a16)) * **docs:** announce the hero copy, and stop remounting the icons ([98e2cb0](98e2cb0)), closes [#434](#434) * **docs:** correct Content Signals syntax in robots.txt ([#134](#134)) ([85dd9de](85dd9de)) * **docs:** correct the frozen-install translation and reject leaked fences ([1883de3](1883de3)) * **docs:** drop dead nomodule ionicons fallback ([82be3e4](82be3e4)) * **docs:** emit per-page markdown so llms.txt links resolve ([#200](#200)) ([7877083](7877083)) * **docs:** escape apostrophe in QuickStart notification text ([25d6d72](25d6d72)) * **docs:** generate llms.txt so the advertised homepage link resolves ([9fae464](9fae464)), closes [#177](#177) * **docs:** give every batch run its own port — slot reuse was corrupting runs ([6ef1755](6ef1755)) * **docs:** harden PackageManagerTabs and document how to author it ([5b0d3e6](5b0d3e6)), closes [#434](#434) * **docs:** harden the hero copy button and share the tab storage key ([9e16cd7](9e16cd7)) * **docs:** improve homepage hero layout and button spacing ([5f7a5a7](5f7a5a7)) * **docs:** make the eval batch resumable after a container restart ([d56229e](d56229e)) * **docs:** make the hero package-manager switcher a real radiogroup ([aa14ff2](aa14ff2)), closes [#434](#434) * **docs:** move robots.txt to correct deployment location ([#90](#90)) ([1e2aeee](1e2aeee)) * **docs:** rebrand and reorganize Storybook ([#83](#83)) ([dfb9937](dfb9937)) * **docs:** remove Google Analytics and add robots.txt ([94776f7](94776f7)) * **docs:** stop cssnano stripping Font Awesome [@font-face](https://github.com/font-face), add [#3](#3) CSS framework blog post ([#401](#401)) ([5d114e1](5d114e1)), closes [#400](#400) * **docs:** update Storybook logo path to /img/logo.svg for deployed site ([bf59758](bf59758)) * **e2e:** correct notification CSS selectors to use contains instead of ends-with ([182acc1](182acc1)) * implement independent package versioning strategy ([#111](#111)) ([7819c73](7819c73)), closes [#110](#110) * prevent bulma-ui from versioning on create-bestax commits ([#120](#120)) ([4dfaf9c](4dfaf9c)), closes [#119](#119) * resolve React Hooks violations and ESLint configuration issues ([32d2931](32d2931)) * upgrade Turbo, Storybook, and Docusaurus dependencies ([5b4ebdd](5b4ebdd)), closes [#98](#98) ### chore * **deps:** consolidate the dependabot backlog, require Node 22 in both CLIs ([#447](#447)) ([e68148c](e68148c)), closes [#427](#427) [#428](#428) [#431](#431) [#432](#432) [#440](#440) [#393](#393) ### Documentation * fix stale versioning and coverage docs; drop CLAUDE.md stale-docs flags ([71c4583](71c4583)) ### Features * add theme system and config provider with comprehensive test coverage ([f3ca7f0](f3ca7f0)) * **bestax-mcp:** serve component docs, props, examples and skills over MCP ([c2abcc4](c2abcc4)) * **bestax-migrate:** react-bulma-components → bestax-bulma codemod CLI, skill, and docs ([#333](#333)) ([e04a12b](e04a12b)), closes [#1e6b99](https://github.com/allxsmith/bestax/issues/1e6b99) * **bestax-migrate:** require Node 22 and take chalk 6 ([#449](#449)) ([4c0e1e2](4c0e1e2)), closes [#447](#447) * **bulma-ui:** add Avatar, Avatars, and Badge components ([#257](#257)) ([0817018](0817018)), closes [#256](#256) * **bulma-ui:** add colorMode dark-mode prop to Theme ([4acc41e](4acc41e)), closes [#174](#174) * **bulma-ui:** add consistent gap prop to Columns, aliasing gapSize ([#300](#300)) ([6c36455](6c36455)), closes [#282](#282) * **bulma-ui:** add cursor helper, closeDelay prop, and polish Tooltip stories ([37945b5](37945b5)) * **bulma-ui:** add extra components, form elements, and SCSS styles ([59daf28](59daf28)) * **bulma-ui:** add HTML element wrapper components ([#135](#135)) ([#136](#136)) ([20fb16d](20fb16d)) * **bulma-ui:** add manual-entry stories for format, bounds, and blocked-value variations ([e93d51c](e93d51c)) * **bulma-ui:** add Reveal component for scroll-triggered animations ([#255](#255)) ([a89c574](a89c574)) * **bulma-ui:** Add skeletons ([6c46e4b](6c46e4b)) * **bulma-ui:** add themed Checkbox/Radio, convenience Field components, and Autocomplete cleanup ([3c57a5a](3c57a5a)) * **bulma-ui:** add typing-first story variants for all picker property variations ([078433f](078433f)) * **bulma-ui:** associate Field's label with a composed base control ([219f631](219f631)) * **bulma-ui:** avatar/badge a11y batch — decorative alt, accessible names, live region, button type, surplus i18n, focus ring ([#298](#298)) ([508477f](508477f)), closes [#266](#266) [#266](#266) * **bulma-ui:** change the default primary color to [#1](#1 ([8872620](8872620)), closes [#1e6b99](https://github.com/allxsmith/bestax/issues/1e6b99) [#1e6b99](https://github.com/allxsmith/bestax/issues/1e6b99) * **bulma-ui:** compound (dot-notation) sub-components for all parent/child families via shared withSubComponents helper ([#331](#331)) ([07516c5](07516c5)) * **bulma-ui:** dim and blur the calendar behind the Datetimepicker time wheels ([3d90619](3d90619)) * **bulma-ui:** finalize the 3.0 component set ([87ccc0e](87ccc0e)) * **bulma-ui:** make Button and Link as prop polymorphic (React.ElementType) ([#238](#238)) ([ce90304](ce90304)), closes [#188](#188) * **bulma-ui:** require React 18 as the minimum supported version ([c7251b0](c7251b0)) * **bulma-ui:** ship agent-discovery files in the npm tarball ([#345](#345)) ([4b58739](4b58739)), closes [#344](#344) [#344](#344) [#344](#344) * **ci:** add verified-commit action for GPG-signed commits ([d078dfa](d078dfa)) * **create-bestax:** add bestax-optimize skill for shrinking built CSS ([#329](#329)) ([f597b9f](f597b9f)) * **create-bestax:** add CLI tool with Vite templates and automated publishing ([9748c3d](9748c3d)) * **create-bestax:** add controlled-Burger Navbar to the landing archetype ([#355](#355)) ([36d4d09](36d4d09)), closes [#348](#348) * **create-bestax:** add cross-platform emoji support with figures ([#103](#103)) ([15567d9](15567d9)) * **create-bestax:** add README with templates location note ([8ddc73d](8ddc73d)) * **create-bestax:** add visual regression testing and synchronized versioning ([17e1e22](17e1e22)), closes [#94](#94) * **create-bestax:** agent-validated guidance for skills, scaffold CLAUDE.md, and catalog ([#365](#365)) ([6fd06ae](6fd06ae)), closes [#2](#2) * **create-bestax:** bestax-icons skill — teach agents the icon system ([#302](#302)) ([61c8ef2](61c8ef2)), closes [#287](#287) * **create-bestax:** improve favicon visibility and add distinct branding ([621590d](621590d)), closes [#100](#100) * **create-bestax:** modernize templates (Vite 8, ESLint 10, TS 6) + add working lint config ([4537629](4537629)), closes [#167](#167) * **create-bestax:** offer to install the bestax AI skills when scaffolding ([625b7bf](625b7bf)), closes [#174](#174) * **create-bestax:** require Node 22 and take chalk 6 ([#448](#448)) ([90fced2](90fced2)), closes [#447](#447) * **create-bestax:** scaffold .claude/launch.json with the AI skills opt-in ([#343](#343)) ([189135a](189135a)) * **create-bestax:** scaffold-aware CLAUDE.md with setup facts and house style ([#271](#271)) ([c1681b0](c1681b0)) * **create-bestax:** set scaffolded index.html title to the project name ([#356](#356)) ([3bfbea3](3bfbea3)), closes [#349](#349) [#349](#349) * **docs:** add Google Analytics tracking for usage insights ([#68](#68)) ([90ab951](90ab951)) * **docs:** add package-manager switches to the homepage hero ([374caf8](374caf8)) * **docs:** add PackageManagerTabs and register it globally ([23c9989](23c9989)) * **docs:** add pronunciation guide and dark mode support ([#58](#58)) ([48a8916](48a8916)) * **docs:** aggregate-runs.mjs — distribution stats across a runs directory ([5de9c07](5de9c07)) * **docs:** batch runner for the eval harness, with the concurrency fixes it needed ([f8e268c](f8e268c)) * **docs:** migrate from GitHub Pages to Cloudflare Pages ([#132](#132)) ([2154672](2154672)), closes [#131](#131) * **docs:** rubric v2 and a brief that demands the components beyond Bulma ([e6047be](e6047be)) * **docs:** show all posts in the blog sidebar ([d29e9c6](d29e9c6)) * **form:** add Datepicker, Timepicker, and Datetimepicker components ([c6684e6](c6684e6)) ### Performance Improvements * **bestax-mcp:** stop get_helper_props costing half the session ([b865651](b865651)) * **docs:** defer live previews until they scroll into view ([d6bf87b](d6bf87b)) * **docs:** share one parsed stylesheet set across every live preview ([feb993a](feb993a)) ### BREAKING CHANGES * **bestax-migrate:** bestax-migrate now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. This applies to the runtime the codemod executes on, not to the app being migrated. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * **create-bestax:** create-bestax now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * **deps:** create-bestax now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * feat(bestax-migrate): require Node 22 and take chalk 6 chalk 6 drops support for Node below 22. The API surface this package uses is unchanged, so no calling code changes. The version guard in src/index.ts moves ahead of every import and no longer depends on anything: import declarations are hoisted and evaluated before any statement in the module, and chalk 6 itself requires Node >= 22, so a static import would fail to load on exactly the runtimes the guard exists to catch. ./cli.js is now imported dynamically for the same reason. @babel/parser deliberately stays on 7.x. Babel 8 removes the `deprecatedImportAssert` plugin with no replacement, and this package parses the legacy `import x from 'y' assert { type: 'json' }` form on purpose — a codemod that migrates older codebases must not crash on the syntax those codebases still contain. There is a regression test for it ("parses the legacy import-assert syntax"), which Babel 8 fails outright. jscodeshift 17 bundles its own Babel 7 regardless, so staying on 7 also keeps a single parser in the tree rather than two. * **deps:** bestax-migrate now requires Node.js 22 or newer. Node 18 and 20 are both past end-of-life. Running it on an older runtime prints an explicit upgrade message and exits 1. Claude-Session: https://claude.ai/code/session_01TGA6sFTUGsJ6oXhfpjKEnh * footer requirement, and the commitlint scope rule - CONTRIBUTING.md: replace the type-less commit example with a commitlint-valid conventional format (verified against commitlint); correct all four coverage mentions to the real jest thresholds (bulma-ui 99%, create-bestax 95%/78% branches); fix the npm package name (@allxsmith/bestax-bulma, plus create-bestax) and link VERSIONING.md - CLAUDE.md: remove the stale-docs warning and asides now that the underlying docs are correct; point at VERSIONING.md again Closes #206. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0131uD6QKmAij7Byk3SByyLh * the @allxsmith/bestax-bulma/versions/bestax-bulma-prefixed.css export is removed. Use versions/bestax-prefixed.css with classPrefix="bestax-". * **bulma-ui:** React 16 and 17 are no longer supported; the minimum supported React version is now 18. * **bulma-ui:** Snackbar has been removed and merged into Toast; use Toast with its positioning and queue props instead. * **bulma-ui:** form controls now auto-wrap in Field/Control, and Checkbox and Radio ship new themed visuals. See the 2.x -> 3.x migration guide. * This version requires Node.js 18.0.0 or higher. The CLI now enforces this requirement and will exit with an error message if running on older Node.js versions. This aligns create-bestax with the bestax-bulma v2.x ecosystem. * fix(create-bestax): correct Prettier formatting in index.ts * None - all changes are additive and backward compatible
|
🎉 This PR is included in version 1.0.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
## [2.0.1](https://github.com/allxsmith/bestax/compare/bestax-migrate@2.0.0...bestax-migrate@2.0.1) (2026-08-19) ### Bug Fixes * **bestax-mcp:** derive the near-miss guidance from the skill, and only when it helps ([1141cca](1141cca)) * **bestax-mcp:** do not split a helper-prop table cell on an escaped pipe ([bdac820](bdac820)) * **bestax-mcp:** lead get_helper_props with the inline-style prohibition ([ffc627a](ffc627a)) * **bestax-mcp:** make list_components point at the next step ([8ddb2fd](8ddb2fd)) * **bestax-mcp:** make tests and cached builds work from a clean checkout ([6e63820](6e63820)), closes [bestax-mcp#build](https://github.com/bestax-mcp/issues/build) * **bestax-mcp:** name list_components as the entry point, not search_bestax ([206380b](206380b)) * **bestax-mcp:** name the three near-miss components in the list_components footer ([1c7af67](1c7af67)) * **bestax-mcp:** route helper questions to the tool that answers them ([cd6ce12](cd6ce12)) * **bestax-mcp:** validate the one input that is not ours, and bound the rest ([3e1adc9](3e1adc9)) * **bestax-migrate:** close two false-exemption paths in the publish classifier ([e76c592](e76c592)), closes [#412](#412) [#412](#412) * **bestax-migrate:** colocate the shell-quoting contract and narrow the exemption ([de4a299](de4a299)), closes [#435](#435) * **bestax-migrate:** guard prepack, which npm pack runs and prepublishOnly does not ([830c621](830c621)), closes [#412](#412) [pre-#436](https://github.com/pre-/issues/436) * **bestax-migrate:** key the publish guard on the packer, not on an inherited agent ([cf49058](cf49058)), closes [#412](#412) * **bestax-migrate:** recognise every plugin shape semantic-release accepts ([37ba3ea](37ba3ea)), closes [#436](#436) * **bestax-migrate:** refuse a publish that is not pnpm's ([bf27cd4](bf27cd4)) * **bestax-migrate:** refuse only packers we can name, not everything unfamiliar ([0b12a94](0b12a94)) * **bestax-migrate:** restore the npm link in the release success comment ([64b7a8a](64b7a8a)) * **bestax-migrate:** stop the release-info tail from being able to fail a release ([f9048cf](f9048cf)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([7ae37d4](7ae37d4)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([384bd38](384bd38)) * **bulma-ui:** associate the form label prop with its control via a generated id ([e6686af](e6686af)) * **bulma-ui:** cover horizontal-layout group label association ([ef3ca9f](ef3ca9f)) * **bulma-ui:** deprecate CSS-less color values, warn in dev, fix has-text fall-through ([fb111eb](fb111eb)) * **bulma-ui:** enumerate string size literals so the docs extractor keeps concrete type values ([00bfff3](00bfff3)) * **bulma-ui:** fail closed on missing process and scope color guidance to real props ([117c0c0](117c0c0)) * **bulma-ui:** honor the htmlFor opt-out in the convenience hook and tighten the association docs ([92aa622](92aa622)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([73cec33](73cec33)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([ca5996a](ca5996a)) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([dce0ee7](dce0ee7)) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([#497](#497)) ([5c4222e](5c4222e)) * **bulma-ui:** name the three near-miss components in AGENTS.md ([c63f491](c63f491)), closes [#344](#344) * **bulma-ui:** never let labelProps.htmlFor wire a group label to a control ([3b3aaaf](3b3aaaf)) * **bulma-ui:** surface supply-chain posture in agent pointer files ([#519](#519)) ([51573e9](51573e9)), closes [#413](#413) * **create-bestax:** document strictPort port-collision recovery in generated CLAUDE.md ([7ba0756](7ba0756)), closes [#371](#371) * **create-bestax:** put the near-miss guidance where every session sees it ([6db49f3](6db49f3)) * **create-bestax:** scope the strictPort recovery kill to the TCP listener ([5fe5397](5fe5397)), closes [#371](#371) * **create-bestax:** ship scaffold .gitignore via rename-on-copy and ignore *.tsbuildinfo ([2094086](2094086)), closes [#371](#371) * **create-bestax:** shrink the near-miss block and pin the copies together ([d582da5](d582da5)) * **create-bestax:** stop the skills teaching a Theme call that does not compile ([2935bb2](2935bb2)) * **create-bestax:** teach the skills the three components Bulma hides ([22dcff7](22dcff7)) * **create-bestax:** validate at submit in the bestax-form signup example ([0b9518f](0b9518f)) * **create-bestax:** wire labeled controls in the skill showcase story ([af49a16](af49a16)) * **docs:** announce the hero copy, and stop remounting the icons ([98e2cb0](98e2cb0)), closes [#434](#434) * **docs:** correct the frozen-install translation and reject leaked fences ([1883de3](1883de3)) * **docs:** drop dead nomodule ionicons fallback ([82be3e4](82be3e4)) * **docs:** give every batch run its own port — slot reuse was corrupting runs ([6ef1755](6ef1755)) * **docs:** harden PackageManagerTabs and document how to author it ([5b0d3e6](5b0d3e6)), closes [#434](#434) * **docs:** harden the hero copy button and share the tab storage key ([9e16cd7](9e16cd7)) * **docs:** make the eval batch resumable after a container restart ([d56229e](d56229e)) * **docs:** make the hero package-manager switcher a real radiogroup ([aa14ff2](aa14ff2)), closes [#434](#434) * **docs:** make the preview deploy include dotfiles, and validate offset dates ([6162fec](6162fec)) ### Features * **bestax-mcp:** serve component docs, props, examples and skills over MCP ([c2abcc4](c2abcc4)) * **bulma-ui:** accept Bulma helper props on Card.* sub-parts ([39eb6a0](39eb6a0)) * **bulma-ui:** accept isFullwidth on every full-width component, deprecate divergent casings ([8ae7d4c](8ae7d4c)) * **bulma-ui:** accept string sizes on Column and numeric sizes on Title and SubTitle ([6d02f67](6d02f67)) * **bulma-ui:** add deprecated NumberInput and TagInput alias exports ([9b320de](9b320de)) * **bulma-ui:** add isLight to Tag ([46e446a](46e446a)) * **bulma-ui:** allow --bulma-scheme-* overrides in Theme bulmaVars ([1b0c573](1b0c573)) * **bulma-ui:** associate Field's label with a composed base control ([219f631](219f631)) * **bulma-ui:** scheme-aware bgColor values via new bulmaHelperStyles channel ([7e317d4](7e317d4)) * **create-bestax:** print next steps for the invoking package manager ([935ff82](935ff82)), closes [#371](#371) * **docs:** add package-manager switches to the homepage hero ([374caf8](374caf8)) * **docs:** add PackageManagerTabs and register it globally ([23c9989](23c9989)) * **docs:** aggregate-runs.mjs — distribution stats across a runs directory ([5de9c07](5de9c07)) * **docs:** batch runner for the eval harness, with the concurrency fixes it needed ([f8e268c](f8e268c)) * **docs:** publish security.txt with a scheduled renewal reminder ([21dca27](21dca27)), closes [#391](#391) * **docs:** rubric v2 and a brief that demands the components beyond Bulma ([e6047be](e6047be)) * **docs:** show all posts in the blog sidebar ([d29e9c6](d29e9c6)) ### Performance Improvements * **bestax-mcp:** stop get_helper_props costing half the session ([b865651](b865651)) * **docs:** defer live previews until they scroll into view ([d6bf87b](d6bf87b)) * **docs:** share one parsed stylesheet set across every live preview ([feb993a](feb993a))
|
🎉 This PR is included in version 2.0.1 🎉 The release is available on: Your semantic-release bot 📦🚀 |
# 1.0.0 (2026-09-20) * feat(bulma-ui)!: remove bestax-bulma-prefixed CSS variant ([94baa34](https://github.com/allxsmith/bestax/commit/94baa3489ac54587e6026a8bece9f86816af9372)) * feat(create-bestax)!: require Node.js 18+ and align with bestax-bulma v2 ([#118](https://github.com/allxsmith/bestax/issues/118)) ([b22f183](https://github.com/allxsmith/bestax/commit/b22f183acfa2f0fa6e50b9cd399ca7cd9ac67f94)) ### Bug Fixes * add comprehensive rules to prevent bulma-ui versioning on non-bulma-ui commits ([#122](https://github.com/allxsmith/bestax/issues/122)) ([525ccfa](https://github.com/allxsmith/bestax/commit/525ccfa7beff0e46fdbc5c2e25603e562baabd67)), closes [#119](https://github.com/allxsmith/bestax/issues/119) * **bestax-mcp:** add the README badge block and regenerate the index ([58d4974](https://github.com/allxsmith/bestax/commit/58d4974c4f7949bc303afef27d678c6e54882a1a)) * **bestax-mcp:** carry each CSS variable's declaring scope in the index ([79a5b2c](https://github.com/allxsmith/bestax/commit/79a5b2c9e9eccfd34e54a6d53375972f4b15021c)) * **bestax-mcp:** declare @allxsmith/bestax-bulma as a dependency ([#649](https://github.com/allxsmith/bestax/issues/649)) ([04076c3](https://github.com/allxsmith/bestax/commit/04076c34596bb4285955b96e7ef2e06dcad3deb9)), closes [#537](https://github.com/allxsmith/bestax/issues/537) [#644](https://github.com/allxsmith/bestax/issues/644) * **bestax-mcp:** derive the near-miss guidance from the skill, and only when it helps ([1141cca](https://github.com/allxsmith/bestax/commit/1141ccad60459038485b13b4841fb125f904be6b)) * **bestax-mcp:** do not split a helper-prop table cell on an escaped pipe ([bdac820](https://github.com/allxsmith/bestax/commit/bdac8207db46f2402ad6b765500be8a3af066095)) * **bestax-mcp:** keep URL fragments when attributing docs links ([1ef43ce](https://github.com/allxsmith/bestax/commit/1ef43ce5c11e30eee4eb6e8dab65058baa4f8c59)) * **bestax-mcp:** lead get_helper_props with the inline-style prohibition ([ffc627a](https://github.com/allxsmith/bestax/commit/ffc627a9ddc3f32bc823bfbc875558d1e2e18291)) * **bestax-mcp:** make list_components point at the next step ([8ddb2fd](https://github.com/allxsmith/bestax/commit/8ddb2fdacd94e45c8e97adbbe7f5844bf98b4b46)) * **bestax-mcp:** make tests and cached builds work from a clean checkout ([6e63820](https://github.com/allxsmith/bestax/commit/6e6382007dadce9964c86ba8d29deedb11ae2777)), closes [bestax-mcp#build](https://github.com/bestax-mcp/issues/build) * **bestax-mcp:** name list_components as the entry point, not search_bestax ([206380b](https://github.com/allxsmith/bestax/commit/206380b209a0d5d89b25477ff2fab6806f55ac70)) * **bestax-mcp:** name the three near-miss components in the list_components footer ([1c7af67](https://github.com/allxsmith/bestax/commit/1c7af673cf9ba3cbd48fb6bd1cb979f80e940ba4)) * **bestax-mcp:** note source order beside matched-specificity advice ([e8d960f](https://github.com/allxsmith/bestax/commit/e8d960f5b151c6b94d3b9069126ef1665ee20f02)) * **bestax-mcp:** regenerate data index for Theme shadow vars change ([bc631b9](https://github.com/allxsmith/bestax/commit/bc631b904160fe017541247391291c6707b7b5fb)) * **bestax-mcp:** release the index carrying the background-click correction ([673adcd](https://github.com/allxsmith/bestax/commit/673adcd149b4dbf67b3b2ea32f2116dcc0899dcb)) * **bestax-mcp:** release the index carrying the corrected examples ([51a5828](https://github.com/allxsmith/bestax/commit/51a5828b285d3a9685a280b241338f503d553963)) * **bestax-mcp:** release the index carrying the corrected Modal guidance ([5c7eb18](https://github.com/allxsmith/bestax/commit/5c7eb188d6ab3377ff263428d97b8aa3e83a5e70)) * **bestax-mcp:** release the index carrying the corrected rbc Modal guidance ([6903aa3](https://github.com/allxsmith/bestax/commit/6903aa3ed92a75f515feea8ed48a80ef475c2e19)) * **bestax-mcp:** release the index carrying the corrected ref guidance ([6722933](https://github.com/allxsmith/bestax/commit/67229333e0e8b8793609e93b927aa7e7ff3245d4)) * **bestax-mcp:** release the index carrying the Modal.Container ref mapping ([6e0d3da](https://github.com/allxsmith/bestax/commit/6e0d3dac2e7f03b5454b4f30cad2b6cb5e11cec4)) * **bestax-mcp:** release the index carrying the ref docs and corrected guidance ([fcf0c95](https://github.com/allxsmith/bestax/commit/fcf0c95be0c31ce04fffc46e6e3d5b07cc9b7b00)) * **bestax-mcp:** release the regenerated index carrying the new ref definitions ([9845b53](https://github.com/allxsmith/bestax/commit/9845b53dbefba8eb65b193da9309cc79e1fc19be)) * **bestax-mcp:** restamp the index after the valid-values docs edit ([ff4512a](https://github.com/allxsmith/bestax/commit/ff4512a8d50cda3cab53d6b1877b5cf2eec472c1)), closes [#521](https://github.com/allxsmith/bestax/issues/521) * **bestax-mcp:** route helper questions to the tool that answers them ([cd6ce12](https://github.com/allxsmith/bestax/commit/cd6ce124a1ab856896579d9b00965cbe295523ed)) * **bestax-mcp:** validate the one input that is not ours, and bound the rest ([3e1adc9](https://github.com/allxsmith/bestax/commit/3e1adc9bb0c9d1064d66cf55e55dd75f90158c39)) * **bestax-migrate:** a spread hides the element, not the component ([7f88614](https://github.com/allxsmith/bestax/commit/7f88614df21ad40d0ec28a4458070e777f181051)) * **bestax-migrate:** add the OpenSSF Best Practices badge to the README ([0f35c2e](https://github.com/allxsmith/bestax/commit/0f35c2e6cece9b76a274023224b87fb2d903da0e)) * **bestax-migrate:** address the PR [#613](https://github.com/allxsmith/bestax/issues/613) review round ([7faf2d8](https://github.com/allxsmith/bestax/commit/7faf2d86ee564e92e17c1cacd51f685471e517f9)) * **bestax-migrate:** address the second review round on PR [#613](https://github.com/allxsmith/bestax/issues/613) ([df222c3](https://github.com/allxsmith/bestax/commit/df222c3ea924900842d209e8165c3071c2f8b110)) * **bestax-migrate:** address the third review round on PR [#613](https://github.com/allxsmith/bestax/issues/613) ([92fc2a0](https://github.com/allxsmith/bestax/commit/92fc2a04b55d6b2c1c2083b3cf951300c41bbfcb)) * **bestax-migrate:** align the modal docblock with the advisory it explains ([f9130fe](https://github.com/allxsmith/bestax/commit/f9130fe7eeda31b22d6464d11b481d1876204cdc)) * **bestax-migrate:** align the rbx fixture and e2e comments with the advisory ([1f71d4e](https://github.com/allxsmith/bestax/commit/1f71d4ee4f2c1317c65eb59935b0226e5800c0f4)) * **bestax-migrate:** an anchor cannot wrap an element whose parent is fixed ([1e2e78b](https://github.com/allxsmith/bestax/commit/1e2e78b0508ba9b825411b5a070a188aba74b4a6)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** an anchor may not wrap interactive content either ([5637976](https://github.com/allxsmith/bestax/commit/5637976a9f734f98e62ea45a7ea1089630eb92e8)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** announce the one removal that was still silent ([9f2e3ac](https://github.com/allxsmith/bestax/commit/9f2e3acd544b22e84faf89754be7e8822451cff1)) * **bestax-migrate:** apply the nested-anchor rule on the plain-markup path too ([ba27e3a](https://github.com/allxsmith/bestax/commit/ba27e3a9108fc673f147a37312e8a15d06a46449)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** bound the link attributes by the component too, not just the element ([ca54273](https://github.com/allxsmith/bestax/commit/ca54273b148ea763c7d0e7ba2cb184bd807f122f)) * **bestax-migrate:** close seven defects found reviewing the rbx source ([c2147d9](https://github.com/allxsmith/bestax/commit/c2147d9935e45c8a59344ed2a95fc390fa2e94f9)) * **bestax-migrate:** close two false-exemption paths in the publish classifier ([e76c592](https://github.com/allxsmith/bestax/commit/e76c592abc03587ead58f84c5954d23ea407581a)), closes [#412](https://github.com/allxsmith/bestax/issues/412) [#412](https://github.com/allxsmith/bestax/issues/412) * **bestax-migrate:** colocate the shell-quoting contract and narrow the exemption ([de4a299](https://github.com/allxsmith/bestax/commit/de4a299422ed281b924086e01613e46fb61c2e1d)), closes [#435](https://github.com/allxsmith/bestax/issues/435) * **bestax-migrate:** correct the forwardRefAs TODO's list of ref-forwarding components ([76d6d6a](https://github.com/allxsmith/bestax/commit/76d6d6ad967eb02528d4d077e869db2025ab4651)) * **bestax-migrate:** correct the Navbar dropdown target and doc drift ([dee9f08](https://github.com/allxsmith/bestax/commit/dee9f08640e34046446d5dd9157f10e96810ac70)) * **bestax-migrate:** correct the rbc domRef guidance for the newly forwarded refs ([f93c844](https://github.com/allxsmith/bestax/commit/f93c844da57b463f28f09f2bd75ea45dcf8d69e7)) * **bestax-migrate:** correct the rbc Modal guidance the compound form contradicts ([76e62d0](https://github.com/allxsmith/bestax/commit/76e62d02dd94c7f239a127bdf806c8847103b392)) * **bestax-migrate:** correct the rbx closeOnBlur claim about background clicks ([8ccae65](https://github.com/allxsmith/bestax/commit/8ccae65cdb44e3a9eb8cd964e4a569b83e249e65)) * **bestax-migrate:** correct the rbx Modal guidance that bulma-ui outgrew ([ae62415](https://github.com/allxsmith/bestax/commit/ae62415fe32a79c773b08c0f4293a81a60436726)), closes [#633](https://github.com/allxsmith/bestax/issues/633) * **bestax-migrate:** decide the href from the element, not the leftovers ([87ccb17](https://github.com/allxsmith/bestax/commit/87ccb17a2847e22e592840bb36b4e41552888a34)), closes [#662](https://github.com/allxsmith/bestax/issues/662) * **bestax-migrate:** declare @allxsmith/bestax-bulma as a dependency ([#650](https://github.com/allxsmith/bestax/issues/650)) ([2094d9b](https://github.com/allxsmith/bestax/commit/2094d9b55b1bf0253944b4da5fb107266f0b346c)), closes [#537](https://github.com/allxsmith/bestax/issues/537) [#644](https://github.com/allxsmith/bestax/issues/644) * **bestax-migrate:** disambiguate Navbar.Dropdown in the forwardRefAs advisory ([242e3d4](https://github.com/allxsmith/bestax/commit/242e3d4514cc1f049fee2d1032c00e2d5cb84716)) * **bestax-migrate:** do not advise nesting an <a> inside an element that holds none ([156c793](https://github.com/allxsmith/bestax/commit/156c7938f076ff9aa8fba49d3ebbaa76101b59ab)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** drain the Copilot backlog — 9 findings ([34b75ad](https://github.com/allxsmith/bestax/commit/34b75ade0f06ff90b13c48d8d9ab9a22964d8c49)) * **bestax-migrate:** drop an href on the targets that declare none ([478f7a4](https://github.com/allxsmith/bestax/commit/478f7a42d6413773f9dbe20b42b2b17b72016bed)), closes [#662](https://github.com/allxsmith/bestax/issues/662) * **bestax-migrate:** fix the alias collision in react-bulma-components too ([9d8219b](https://github.com/allxsmith/bestax/commit/9d8219bb906e86a12249d979dc9af9fe64124f7e)) * **bestax-migrate:** flag dropped RBC deep partials instead of losing their CSS ([7db47db](https://github.com/allxsmith/bestax/commit/7db47db794c6a8960718e0b12a163bd56d6cc8c2)) * **bestax-migrate:** flag labelled dividers, parse pre-1.0 ranges, match require.resolve ([794e0a7](https://github.com/allxsmith/bestax/commit/794e0a726731384fd6c4b2ce632b1bf46d558450)) * **bestax-migrate:** flag the Modal behaviours bestax does not implement ([5f37135](https://github.com/allxsmith/bestax/commit/5f371355aa50be600e9e66cd47fbecf1638cf886)) * **bestax-migrate:** four more findings that arrived mid-pass ([d637083](https://github.com/allxsmith/bestax/commit/d637083378c0ba7d7f0195ca0d9e681f6afdcf30)) * **bestax-migrate:** give the kitchen-sink e2e a per-process scratch dir ([2211ea5](https://github.com/allxsmith/bestax/commit/2211ea514475f6cc2de7c60c1433b1797cb02199)) * **bestax-migrate:** give the TODO the remedy that works on the target it names ([fccb4d9](https://github.com/allxsmith/bestax/commit/fccb4d959328db8cf7e662d9ff4457ac1f55dda6)) * **bestax-migrate:** guard prepack, which npm pack runs and prepublishOnly does not ([830c621](https://github.com/allxsmith/bestax/commit/830c621efa4f3df1b57de9fd55dec57b07a44546)), closes [#412](https://github.com/allxsmith/bestax/issues/412) [pre-#436](https://github.com/pre-/issues/436) * **bestax-migrate:** judge every link attribute against the element, not as a group ([1825b9e](https://github.com/allxsmith/bestax/commit/1825b9ef3e6f5bfcd77bb4cdc2450b2ab6b95400)), closes [#368](https://github.com/allxsmith/bestax/issues/368) * **bestax-migrate:** judge props against the component they will end up on ([f0241e4](https://github.com/allxsmith/bestax/commit/f0241e4d082e3a291038112fb757c7f244061948)) * **bestax-migrate:** keep a namespace import referenced as a value ([2feca47](https://github.com/allxsmith/bestax/commit/2feca47aff22b211f6c6d6b6d84844aa74b122c5)), closes [#4](https://github.com/allxsmith/bestax/issues/4) * **bestax-migrate:** keep a TODO on one line, and correct the link-attribute table ([581833e](https://github.com/allxsmith/bestax/commit/581833ee9433079873b211ab03f87f2dac0ad95d)) * **bestax-migrate:** keep an href the plain tag takes, and quieten the shadow TODO ([e78ced2](https://github.com/allxsmith/bestax/commit/e78ced2a22b36555581c67ab4b8e9da650742cd7)) * **bestax-migrate:** keep dynamic Heading props and never drop them in the collapse ([8a076c0](https://github.com/allxsmith/bestax/commit/8a076c04764741a11ce95e12aba0e53220e9caf1)) * **bestax-migrate:** keep href on the anchor, and as inside its union ([894a633](https://github.com/allxsmith/bestax/commit/894a6334f55c59b829427c8ce73f444e1eb55a51)), closes [#641](https://github.com/allxsmith/bestax/issues/641) [#662](https://github.com/allxsmith/bestax/issues/662) [#662](https://github.com/allxsmith/bestax/issues/662) * **bestax-migrate:** keep subtitle class when literal subtitle collapses with heading ([85c4e91](https://github.com/allxsmith/bestax/commit/85c4e91dccf2d1eb136d06543518e5a356981411)) * **bestax-migrate:** keep the domRef advice off the Delete that Button becomes ([617fbb6](https://github.com/allxsmith/bestax/commit/617fbb62636ff09db5484e52d4f31c67f297306e)) * **bestax-migrate:** keep the href `Dropdown.Item` now takes ([e261cdd](https://github.com/allxsmith/bestax/commit/e261cddc88566377bccccdbeb3d2a7466d919409)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** key aliases by scope and reserve retained partial roots ([402a950](https://github.com/allxsmith/bestax/commit/402a950e6a997bfcb2072e9ff759df358727b32e)) * **bestax-migrate:** key the publish guard on the packer, not on an inherited agent ([cf49058](https://github.com/allxsmith/bestax/commit/cf49058ccad10190c2b2bf6dac81ec8d3e07f326)), closes [#412](https://github.com/allxsmith/bestax/issues/412) * **bestax-migrate:** let a nearer binding win over a shadowed alias ([0c45ff3](https://github.com/allxsmith/bestax/commit/0c45ff3c8f8c71e5df57b6c9e6999bf506e7d111)) * **bestax-migrate:** map rbx innerRef to ref on Button/Dropdown/Modal/Navbar ([5207a79](https://github.com/allxsmith/bestax/commit/5207a791b3a157993b9758d77ab04d11e4a98e2a)) * **bestax-migrate:** migrate component references through a namespace import ([aaef103](https://github.com/allxsmith/bestax/commit/aaef10347f6c451870e7385d0085bb9eaa802f81)) * **bestax-migrate:** name the wire caps and pin them to the worker ([06b3653](https://github.com/allxsmith/bestax/commit/06b3653c5489e5f35bdc082c8dac476eef173de2)) * **bestax-migrate:** only convert Button remove to Delete on a true literal ([2ee5d0b](https://github.com/allxsmith/bestax/commit/2ee5d0bb78e6e31d6b6f1b24c814c4367d10bf5f)), closes [#553](https://github.com/allxsmith/bestax/issues/553) * **bestax-migrate:** only rbx's spread can carry an `as` ([84a6f85](https://github.com/allxsmith/bestax/commit/84a6f8510ec5e2f711864430870358b4433816a1)) * **bestax-migrate:** parenthesize comma-valued folded Sass variables ([5a7b052](https://github.com/allxsmith/bestax/commit/5a7b05284f3faa870c6305b0a02556e53851e93a)), closes [#554](https://github.com/allxsmith/bestax/issues/554) * **bestax-migrate:** pick Heading target by prop value, not presence ([81b6374](https://github.com/allxsmith/bestax/commit/81b6374bc3e73949247e4ce73ece0876d5c631a1)), closes [#552](https://github.com/allxsmith/bestax/issues/552) * **bestax-migrate:** pin both halves of the rbx ref pass-through ([1d87cc2](https://github.com/allxsmith/bestax/commit/1d87cc2872487dd01ec91af61d32620c99cb3e90)), closes [#622](https://github.com/allxsmith/bestax/issues/622) * **bestax-migrate:** plain markup keeps the href its own tag accepts ([8dc9b0c](https://github.com/allxsmith/bestax/commit/8dc9b0c3a9180d5c140cbb3e4f6e23b4a5e2af53)) * **bestax-migrate:** port four value-reference fixes to the RBC source ([bc0096a](https://github.com/allxsmith/bestax/commit/bc0096a6b4db73ed5b22a4a26a9aa07f04ab225a)) * **bestax-migrate:** port namespace-import retention to react-bulma-components ([1c35319](https://github.com/allxsmith/bestax/commit/1c35319b1f446f0afe93f1f7c7d4882bd1850b05)) * **bestax-migrate:** preserve shorthand object keys, and read deps signals on parse failure ([9dd22df](https://github.com/allxsmith/bestax/commit/9dd22df61e04f0d9662c8d1d09db81dd9e59ddcc)) * **bestax-migrate:** read iframe and label off their own content models ([6612821](https://github.com/allxsmith/bestax/commit/6612821a0e7d4d385a96bc19a251fe53f1d74f44)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** read spaced comparators and stop calling non-semver bulma "v1" ([ea287b6](https://github.com/allxsmith/bestax/commit/ea287b68936c53134e672c9037423bb3a17fe9f6)) * **bestax-migrate:** read the element a target renders, not the type it declares ([7296a50](https://github.com/allxsmith/bestax/commit/7296a504e277319bb12c08970a13bfb002191e57)) * **bestax-migrate:** read the element before advising an <a> inside it ([88a95a3](https://github.com/allxsmith/bestax/commit/88a95a3e2c0aab8aab661815596418cc8b911d66)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** recognise every plugin shape semantic-release accepts ([37ba3ea](https://github.com/allxsmith/bestax/commit/37ba3ea0e9a11944ccd119ed220785e49a6e1b57)), closes [#436](https://github.com/allxsmith/bestax/issues/436) * **bestax-migrate:** recognize Sass block comments only outside strings ([cdf4ad6](https://github.com/allxsmith/bestax/commit/cdf4ad69a017cadf6d9e7eca7936b6df1fe166bf)), closes [#554](https://github.com/allxsmith/bestax/issues/554) * **bestax-migrate:** refresh the MCP index after the reference edits ([443829f](https://github.com/allxsmith/bestax/commit/443829ff5ff5882cd1e0e16526050936eb0916e6)) * **bestax-migrate:** refuse a publish that is not pnpm's ([bf27cd4](https://github.com/allxsmith/bestax/commit/bf27cd4f22fb8a5c102c9770f44673c6c97fff86)) * **bestax-migrate:** refuse only packers we can name, not everything unfamiliar ([0b12a94](https://github.com/allxsmith/bestax/commit/0b12a94fe34b76f582485aee7299fb38671ca17f)) * **bestax-migrate:** regenerate MCP index for component-map ([ba745f2](https://github.com/allxsmith/bestax/commit/ba745f2cee8f36868f071a5addb25531864da62f)) * **bestax-migrate:** reject pnpm's workspace alias form instead of unwrapping it ([de6a900](https://github.com/allxsmith/bestax/commit/de6a90081c749ca8e3a761ce9cb9c1bee9e2386a)) * **bestax-migrate:** rename innerRef on rbx Navbar.Burger and Navbar.Link ([b935a16](https://github.com/allxsmith/bestax/commit/b935a166b496717a17a1a4fca63a9f40386efa30)) * **bestax-migrate:** rename rbx innerRef on Modal.Container, which becomes Modal ([90f9840](https://github.com/allxsmith/bestax/commit/90f9840af715a0112d6018c5035edc4c5b7b3d2d)) * **bestax-migrate:** rename rbx innerRef on the Navbar.Item that becomes a Dropdown ([16155fe](https://github.com/allxsmith/bestax/commit/16155fe9d21072d61a422fe9a86eb5c20e0b74ca)) * **bestax-migrate:** report what actually happened to bulma, not a fixed line ([a208436](https://github.com/allxsmith/bestax/commit/a20843691ccdfc66fe2ff8920f87144e6ddeedbc)) * **bestax-migrate:** require the pack script to exist, not just be named ([5315efe](https://github.com/allxsmith/bestax/commit/5315efe86c89205dc4ac97ec94f89b853832b696)) * **bestax-migrate:** resolve aliases by location, reserve value-retained roots, keep extension CSS ([1f02e12](https://github.com/allxsmith/bestax/commit/1f02e1284180f3a7eb526c35f998f3c57f481bf5)) * **bestax-migrate:** resolve bare workspace: and guard the catalog: protocol ([7fda9db](https://github.com/allxsmith/bestax/commit/7fda9dbd1537439edc9ec694a9a9d140c2bfc467)), closes [#417](https://github.com/allxsmith/bestax/issues/417) [#412](https://github.com/allxsmith/bestax/issues/412) * **bestax-migrate:** resolve component references by binding, not by name ([0722674](https://github.com/allxsmith/bestax/commit/072267461d8214c76bdf45a80e66ba000957b586)) * **bestax-migrate:** resolve destructured aliases and protect aliased imports ([58b14cf](https://github.com/allxsmith/bestax/commit/58b14cfcafaa74f495be6935c6aef9ac93a54865)) * **bestax-migrate:** resolve dotted targets for bare alias references ([3f53bea](https://github.com/allxsmith/bestax/commit/3f53beaf0ac1fe0d53bd62253c6b7b2877325f2e)) * **bestax-migrate:** resolve shorthand and destructured aliases correctly ([9c0dea8](https://github.com/allxsmith/bestax/commit/9c0dea832b21e63c09b423ae1f4f367f94035ebf)) * **bestax-migrate:** resolve static string/number Button remove by truthiness ([62084bf](https://github.com/allxsmith/bestax/commit/62084bfc4aa6ea71cf725d48ca39e930a97e3787)) * **bestax-migrate:** resolve static string/number Heading props by truthiness ([f063086](https://github.com/allxsmith/bestax/commit/f063086344b7fa3f7cc6c368a95669c6fc27a14b)), closes [#558](https://github.com/allxsmith/bestax/issues/558) * **bestax-migrate:** resolve workspace: specifiers before publishing ([782829a](https://github.com/allxsmith/bestax/commit/782829a7672e3a44827b53651b738ff37b3581b7)), closes [bestax-migrate#test](https://github.com/bestax-migrate/issues/test) [#412](https://github.com/allxsmith/bestax/issues/412) * **bestax-migrate:** restore the npm link in the release success comment ([64b7a8a](https://github.com/allxsmith/bestax/commit/64b7a8a650c10af70467fcc5effebb0cb41305f6)) * **bestax-migrate:** rewrite RBC stylesheet as a real Bulma root, folding vars ([036cf79](https://github.com/allxsmith/bestax/commit/036cf79130e1397df0e2e708d1d115bec217511c)) * **bestax-migrate:** run the link cleanup on react-bulma-components' plain rewrites too ([8ea05cb](https://github.com/allxsmith/bestax/commit/8ea05cba3e3ebe2bd6a51843415b91da98e913e7)) * **bestax-migrate:** say where the two link rules disagree, not that they agree ([8468858](https://github.com/allxsmith/bestax/commit/846885833c4f57ca4ccac3a9999d858472f461c3)), closes [#682](https://github.com/allxsmith/bestax/issues/682) * **bestax-migrate:** share the bulma range parser so RBC bumps comparator ranges too ([#629](https://github.com/allxsmith/bestax/issues/629)) ([491847c](https://github.com/allxsmith/bestax/commit/491847c2ab9f9a91f62241075f8942f240ad6b23)) * **bestax-migrate:** stop collapsing containers onto children they don't wrap ([e659ed8](https://github.com/allxsmith/bestax/commit/e659ed8e25481ae4e496c105d2f33385b7850e28)) * **bestax-migrate:** stop conflating the two directions an anchor can be invalid ([c7dac64](https://github.com/allxsmith/bestax/commit/c7dac646c8e8e6b035514621381d727a0f98f5a3)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bestax-migrate:** stop mislabeling RBC's own stylesheet as a third-party extension ([6a18553](https://github.com/allxsmith/bestax/commit/6a185530b04e49b79bad57caa320b4ff427b984b)), closes [#555](https://github.com/allxsmith/bestax/issues/555) * **bestax-migrate:** stop naming a close handler in the showClose TODO too ([ce5a337](https://github.com/allxsmith/bestax/commit/ce5a337e6dbb80a358e4d3d26c0691033e75be2c)) * **bestax-migrate:** stop naming a close handler the user may not have ([6cfb557](https://github.com/allxsmith/bestax/commit/6cfb5574289884db108e95c4ed50cb8fcd37df83)) * **bestax-migrate:** stop sending changedBucket, honor Ctrl-C at consent ([271ba4c](https://github.com/allxsmith/bestax/commit/271ba4c3f19ef2846cad80be696c8b3af1991030)) * **bestax-migrate:** stop the pack hooks excusing a catalog: devDependency ([4127ead](https://github.com/allxsmith/bestax/commit/4127ead622f052808ae17644f06af2b77ae89c56)), closes [#412-shaped](https://github.com/allxsmith/bestax/issues/412-shaped) * **bestax-migrate:** stop the release-info tail from being able to fail a release ([f9048cf](https://github.com/allxsmith/bestax/commit/f9048cf4ffc8761ff53b338d085068b4ab159b0c)) * **bestax-migrate:** strip `responsive` from plain elements, cover the shared RBC changes ([f12c3a3](https://github.com/allxsmith/bestax/commit/f12c3a3921905207fc79a80f77dc77309044661e)) * **bestax-migrate:** strip Sass block comments before scanning folded values ([c3fbd46](https://github.com/allxsmith/bestax/commit/c3fbd46b34e4ed0639747afdec18a46a40115c83)), closes [#554](https://github.com/allxsmith/bestax/issues/554) * **bestax-migrate:** take the anchor's other attributes with it, and stop guessing at a falsy href ([9382e4a](https://github.com/allxsmith/bestax/commit/9382e4ac73fe9963533bab19560cba7d61c57965)) * **bestax-migrate:** the component and the element must both allow the attribute ([c009e85](https://github.com/allxsmith/bestax/commit/c009e85c7d62853ed20b32801ecbeb91a35aa962)) * **bestax-migrate:** track backslash escapes when scanning folded Sass values ([eac92eb](https://github.com/allxsmith/bestax/commit/eac92ebeb2ff94d8771c8629d9edb78299a2071e)) * **bestax-migrate:** trust an `as` a spread cannot overwrite, and stop three messages lying ([19fdb09](https://github.com/allxsmith/bestax/commit/19fdb0969789ab76bb97979c7f0ecccc7f589a88)) * **bestax-migrate:** white-bis and white-ter are bestax colours now ([d951c2f](https://github.com/allxsmith/bestax/commit/d951c2fbeb8f549943b89a554e4b3599f6682049)) * **bestax-migrate:** widen the element universe until it disagreed, and fix the Delete hint ([4979d94](https://github.com/allxsmith/bestax/commit/4979d94dec8ed6281e81deb358466c52896f3678)) * **bulma-ui:** a compound matches one simple selector, not co-occurrence ([#703](https://github.com/allxsmith/bestax/issues/703)) ([ce20396](https://github.com/allxsmith/bestax/commit/ce2039691ec93fb3f4d708c881be85f061eaaa73)) * **bulma-ui:** a11y + case-insensitive Taginput matching from PR review ([d576829](https://github.com/allxsmith/bestax/commit/d57682926f510d029839e79d6ba05bd62cc20323)) * **bulma-ui:** accept no children on Avatar, rather than deriving them from `as` ([a8897d2](https://github.com/allxsmith/bestax/commit/a8897d29798fa4545e9c4c89c4280d53c328ab8d)), closes [#665](https://github.com/allxsmith/bestax/issues/665) * **bulma-ui:** accept router props like `to` on Navbar.Item without casts ([#311](https://github.com/allxsmith/bestax/issues/311)) ([b78856b](https://github.com/allxsmith/bestax/commit/b78856ba62986c693e13e545dd86746f206c3ab9)), closes [#306](https://github.com/allxsmith/bestax/issues/306) * **bulma-ui:** add --bulma-shadow to Theme's bulmaVars union ([753ad41](https://github.com/allxsmith/bestax/commit/753ad41bae0a090bfaf2053c4f4afa3760209cee)), closes [#499](https://github.com/allxsmith/bestax/issues/499) * **bulma-ui:** Add build step to publish in ci.yml ([e3707fc](https://github.com/allxsmith/bestax/commit/e3707fcdc0c4ba59dc1d68d81fdd9dc57d4436be)) * **bulma-ui:** add fontawesome-free as explicit devDependency ([a4a5389](https://github.com/allxsmith/bestax/commit/a4a53895f8797ca0889060403ae5d1e21cd09bec)) * **bulma-ui:** add keyboard and focus support to Dropdown and Navbar.Dropdown ([#628](https://github.com/allxsmith/bestax/issues/628)) ([381f22d](https://github.com/allxsmith/bestax/commit/381f22d6403b8a95d3e3ee6b4efabb495e1210aa)) * **bulma-ui:** add missing exports ([0d16633](https://github.com/allxsmith/bestax/commit/0d166338a8843df55af265d30a079858e0bf7da1)) * **bulma-ui:** Add Skeleton to exports ([e481599](https://github.com/allxsmith/bestax/commit/e481599047bd4f094f894569656c878faca3e1ea)) * **bulma-ui:** add the OpenSSF Best Practices badge to the README ([de746d4](https://github.com/allxsmith/bestax/commit/de746d43c0b99f70500745267648dcf1a5425fba)) * **bulma-ui:** admit material-symbols 0.46 in the peer range ([1d5c1d4](https://github.com/allxsmith/bestax/commit/1d5c1d4040bc7ff01fb826999f792638bfacd97f)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([cc3a3e2](https://github.com/allxsmith/bestax/commit/cc3a3e2416361d3da3288c97c894d700a4323a36)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([314bc39](https://github.com/allxsmith/bestax/commit/314bc394d57b4766d20590ae6fd59fe433443c8f)) * **bulma-ui:** another attempt to fix semantic release builds with ci.yml ([c930693](https://github.com/allxsmith/bestax/commit/c930693439e8a289f373c87a568b48fecabc53ae)) * **bulma-ui:** apply the custom-element and event guards consistently ([cc8818c](https://github.com/allxsmith/bestax/commit/cc8818c98881a73fdca0b238bcb16bcc06633f49)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([7ae37d4](https://github.com/allxsmith/bestax/commit/7ae37d48f7a5af85bf29d21c7517abbea7c9448b)) * **bulma-ui:** associate Autocomplete and Taginput labels with their inner inputs ([384bd38](https://github.com/allxsmith/bestax/commit/384bd387639764fa346912cbe6df2d5b02cdaab6)) * **bulma-ui:** associate the form label prop with its control via a generated id ([e6686af](https://github.com/allxsmith/bestax/commit/e6686afa28d006120d5e0dd8181e61036d7fb075)) * **bulma-ui:** attribute shared picker-popover CSS variables to date/time pickers ([80f62ce](https://github.com/allxsmith/bestax/commit/80f62cedb67cde0a6844012be4171edc2df5950e)), closes [#543](https://github.com/allxsmith/bestax/issues/543) [#543](https://github.com/allxsmith/bestax/issues/543) * **bulma-ui:** carry the deprecated `icon` path through every consumer of IconProps ([b8eb722](https://github.com/allxsmith/bestax/commit/b8eb722492d61d471d9440b68668027e47aac5eb)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** catch the other shape a declaration specifier can take ([4f69e20](https://github.com/allxsmith/bestax/commit/4f69e20b698fabc14783a72d9c4c6d6673164eb5)) * **bulma-ui:** chunk the constants bundle as .cjs, and ask the path for the remedy ([83223f7](https://github.com/allxsmith/bestax/commit/83223f703a707dd1a1c6f77b57e042c1fb7fe32c)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** complete domain migration and fix semantic-release configuration ([#64](https://github.com/allxsmith/bestax/issues/64)) ([f4cd71d](https://github.com/allxsmith/bestax/commit/f4cd71d531b757465bf3227aeb5c4e98419cfb97)) * **bulma-ui:** correct blog post examples and add Modal compound components ([#81](https://github.com/allxsmith/bestax/issues/81)) ([559c2e3](https://github.com/allxsmith/bestax/commit/559c2e30fa15580c02f014754fa3846fdd5ed2f6)) * **bulma-ui:** correct NPM_TOKEN env variable in ci.yml ([94b48b4](https://github.com/allxsmith/bestax/commit/94b48b47aec94b83d25f94dade6af793fd7b1672)) * **bulma-ui:** correct the sibling claim, and make the strip set's type check it ([7ffa0e7](https://github.com/allxsmith/bestax/commit/7ffa0e75077d9826fe49dbe874e91a4743ed33c7)), closes [#682](https://github.com/allxsmith/bestax/issues/682) * **bulma-ui:** cover horizontal-layout group label association ([ef3ca9f](https://github.com/allxsmith/bestax/commit/ef3ca9f4b99a149b43f359cb8105255c9a3f2770)) * **bulma-ui:** declare backgroundColor unavailable, and check the whole class ([daf636a](https://github.com/allxsmith/bestax/commit/daf636a5e91d96d3920792651f118ad268ea18d1)) * **bulma-ui:** declare the deprecated `icon` path `Icon` still honours ([80124d1](https://github.com/allxsmith/bestax/commit/80124d12c6f27feb4828815c91d033dcb75853ba)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** define the kept props instead of assigning them ([b5722f2](https://github.com/allxsmith/bestax/commit/b5722f275e19a4cb17bdfb03a57ba0e00215cfb3)), closes [#682](https://github.com/allxsmith/bestax/issues/682) * **bulma-ui:** deprecate CSS-less color values, warn in dev, fix has-text fall-through ([fb111eb](https://github.com/allxsmith/bestax/commit/fb111eb9f08a412821efe07a77e2ba29ee9993b8)) * **bulma-ui:** emit the CommonJS bundle as .cjs, so require() can load it ([f64286c](https://github.com/allxsmith/bestax/commit/f64286ccfce8b173bcd8461911532355f921db73)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** enumerate string size literals so the docs extractor keeps concrete type values ([00bfff3](https://github.com/allxsmith/bestax/commit/00bfff32ed715f8c4e9b4858be8e1f3159b71e0f)) * **bulma-ui:** exclude disabled/hidden controls from Modal initial focus ([f4091f8](https://github.com/allxsmith/bestax/commit/f4091f8420a03261ce07c55c747cd0c4a3110f2a)) * **bulma-ui:** exclude undefined from Icon children and add node stories ([b607db1](https://github.com/allxsmith/bestax/commit/b607db1b5c4301ca17fa0351eaf7b5b7cd5032d7)) * **bulma-ui:** exempt everything module-sync serves, and pin the chunk guards ([c87f6a7](https://github.com/allxsmith/bestax/commit/c87f6a731e81f1e49ec55aae0ad7ebcadc7ad96c)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** fail closed on missing process and scope color guidance to real props ([117c0c0](https://github.com/allxsmith/bestax/commit/117c0c08b5f16ad36d7e402aa714f886a7a9ef3e)) * **bulma-ui:** Fix release.config.js to include package-lock.json ([390da59](https://github.com/allxsmith/bestax/commit/390da5938deeb9a790d063c79c2ca693f9b7d0b9)) * **bulma-ui:** fix standalone Badge pointer-events, pulse halo, and falsy content ([#295](https://github.com/allxsmith/bestax/issues/295)) ([a9db031](https://github.com/allxsmith/bestax/commit/a9db03189c087eb0a61f56357e179296bd4cebf9)), closes [#264](https://github.com/allxsmith/bestax/issues/264) * **bulma-ui:** full classPrefix support across layout/grid + prefix utils ([4ce0b53](https://github.com/allxsmith/bestax/commit/4ce0b53b337ff2ff961cc18a17790ee75d860dfa)) * **bulma-ui:** give the CommonJS chunks the extension too, and finish the target test ([bdcba5c](https://github.com/allxsmith/bestax/commit/bdcba5ca4546368dff3db957cc978753c729a972)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** give the constants subpath a CommonJS types target ([e97d609](https://github.com/allxsmith/bestax/commit/e97d6095860309c64f6882a04b8dc8666e843a5f)) * **bulma-ui:** give the emitted declarations extensions, so their specifiers resolve ([#702](https://github.com/allxsmith/bestax/issues/702)) ([2a4672f](https://github.com/allxsmith/bestax/commit/2a4672f94ebe774c3825e076455286f01bf2b8c4)) * **bulma-ui:** honor the htmlFor opt-out in the convenience hook and tighten the association docs ([92aa622](https://github.com/allxsmith/bestax/commit/92aa622c0ebd231b41562504da6d104128207000)) * **bulma-ui:** honour callback-ref cleanups on Dialog, Sidebar, Toast and Carousel ([dbbdc23](https://github.com/allxsmith/bestax/commit/dbbdc2393b1c5dc1af186fbcaeea2297d94cb7f1)) * **bulma-ui:** improve npm package discoverability with optimized keywords and badges ([#72](https://github.com/allxsmith/bestax/issues/72)) ([8c7a696](https://github.com/allxsmith/bestax/commit/8c7a69664fcc6409096cd72b9bb006ff8edf8ddc)) * **bulma-ui:** Initial semantic release changes ([b78d785](https://github.com/allxsmith/bestax/commit/b78d785e5d3e7aec5b49f178784aad3d97b5434c)) * **bulma-ui:** judge an mjs require target, and certify module-sync by loading ([ce984f5](https://github.com/allxsmith/bestax/commit/ce984f569189dbf8fc0027ed0a66103583881fe0)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** judge both runtimes, not the modern one with a fallback ([525ef79](https://github.com/allxsmith/bestax/commit/525ef79b961f6e6be67490596227a551e5ae2c32)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** judge only the branches a require() can enter ([10ffd2e](https://github.com/allxsmith/bestax/commit/10ffd2e5430c96f6ac0c14c0b9fa0a9041986b2a)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** judge what an older Node reaches behind module-sync ([5b4dd6d](https://github.com/allxsmith/bestax/commit/5b4dd6d2a164f032a7266004e3c73e8e9d6bae9d)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** keep DropdownItemProps accepting every tag it always accepted ([d621b88](https://github.com/allxsmith/bestax/commit/d621b88d86bd7f3bc053474d215726b03df35408)), closes [#667](https://github.com/allxsmith/bestax/issues/667) [#667](https://github.com/allxsmith/bestax/issues/667) [#667](https://github.com/allxsmith/bestax/issues/667) [#663](https://github.com/allxsmith/bestax/issues/663) [#667](https://github.com/allxsmith/bestax/issues/667) * **bulma-ui:** keep React's own node shapes out of the icon-props branch ([638e329](https://github.com/allxsmith/bestax/commit/638e329929beaa3f90709cffb7458adcc155c90c)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** keep stripping disabled where the element does not own it ([afd94a7](https://github.com/allxsmith/bestax/commit/afd94a72b739f22dffc0151de1cbe984acf1646b)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([73cec33](https://github.com/allxsmith/bestax/commit/73cec33709b72f968645a951cda0fa6a664847c5)) * **bulma-ui:** keep Taginput's fallback name unless the label targets its input ([ca5996a](https://github.com/allxsmith/bestax/commit/ca5996a73f5b0816ff82fa4984455bb82ef6060c)) * **bulma-ui:** keep the button default against a spread, and tag the deprecated props ([fcc148b](https://github.com/allxsmith/bestax/commit/fcc148b74655a42c99ddc595f38dc5dd11f82e95)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** keep the form attributes an `as="input"` owns ([3ae7bd8](https://github.com/allxsmith/bestax/commit/3ae7bd873f02a3471022537e1c5d35157d0409a6)) * **bulma-ui:** keep Toast's empty-container fallback, filter to real tab stops, re-key focus across the portal move ([511a7ae](https://github.com/allxsmith/bestax/commit/511a7ae4cd56bf0c63aab99b0440fb6b5c6b0d6a)) * **bulma-ui:** leave custom elements out of the built-in attribute backstops ([94f6f48](https://github.com/allxsmith/bestax/commit/94f6f48e9fa476fa5f9755bd139aeb742b30b344)) * **bulma-ui:** let Dropdown.Item's props follow its constrained `as` ([f9c998f](https://github.com/allxsmith/bestax/commit/f9c998f483997e99deaed4b2a45b176bc2e4743c)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** let Level.Item's anchor take the rest of an anchor's attributes ([#675](https://github.com/allxsmith/bestax/issues/675)) ([59e8e34](https://github.com/allxsmith/bestax/commit/59e8e348ec69ace8144d429f8345e85591d2a3f2)) * **bulma-ui:** make props and refs follow the polymorphic `as` ([7528d87](https://github.com/allxsmith/bestax/commit/7528d87d995bfcdf21e33b5e25da9a3e1c2a0b34)), closes [#188](https://github.com/allxsmith/bestax/issues/188) [#641](https://github.com/allxsmith/bestax/issues/641) * **bulma-ui:** match a spread's enumerability, and close the `type` gap ([84b5cd2](https://github.com/allxsmith/bestax/commit/84b5cd2aae9785b8393d697474c5f6d1905b9bda)), closes [#682](https://github.com/allxsmith/bestax/issues/682) * **bulma-ui:** match compound selectors in either class order ([1cb026e](https://github.com/allxsmith/bestax/commit/1cb026ea9915f0d276731dadb4ee04a998e3bcba)) * **bulma-ui:** memoize Toast's merged ref so the cleanup fires only on detach ([e4e6b04](https://github.com/allxsmith/bestax/commit/e4e6b04be2bf329c2cef0043cb9fe582c4d6bf02)) * **bulma-ui:** migrate domain from bestax.cc to bestax.io ([#64](https://github.com/allxsmith/bestax/issues/64)) ([4870b1e](https://github.com/allxsmith/bestax/commit/4870b1e7d9edd7295f907ae07df9fe00f1217f46)) * **bulma-ui:** migrate ionicons to v8 to unblock publish and Storybook ([927a55b](https://github.com/allxsmith/bestax/commit/927a55b024db8d2c9da7448a958d2a51daef3cca)), closes [#142](https://github.com/allxsmith/bestax/issues/142) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([dce0ee7](https://github.com/allxsmith/bestax/commit/dce0ee7e2b2d5c2678e5b996437ab713cc45365b)) * **bulma-ui:** name Rate, Checkboxes, and Radios groups from their labels via aria-labelledby ([#497](https://github.com/allxsmith/bestax/issues/497)) ([5c4222e](https://github.com/allxsmith/bestax/commit/5c4222e2eca35c151a2c355e329c6b5a47a8195f)) * **bulma-ui:** name the three near-miss components in AGENTS.md ([c63f491](https://github.com/allxsmith/bestax/commit/c63f491274ef3e5db173eb4ee5039c645df74bd1)), closes [#344](https://github.com/allxsmith/bestax/issues/344) * **bulma-ui:** never let labelProps.htmlFor wire a group label to a control ([3b3aaaf](https://github.com/allxsmith/bestax/commit/3b3aaafa6573bfc0c84930ee1517f402105fbc1d)) * **bulma-ui:** preserve Modal's forwarded callback-ref cleanup, restore its [@extra](https://github.com/extra)Prop ([cf9c70d](https://github.com/allxsmith/bestax/commit/cf9c70d3bd20ecdbda8f4639e45a8889e10280d5)) * **bulma-ui:** publish only the polymorphic types, and keep role="img" without an href ([b0c8dfe](https://github.com/allxsmith/bestax/commit/b0c8dfe11d5d44a044ff7de051224e5d3ecf3129)) * **bulma-ui:** publish rewritten README to npm ([9810081](https://github.com/allxsmith/bestax/commit/981008179d96b19f692ca73c17a02ae3f5fa6298)) * **bulma-ui:** publish with npm provenance attestation ([172da62](https://github.com/allxsmith/bestax/commit/172da62349b464d414da552058dfa4db238ab720)), closes [#180](https://github.com/allxsmith/bestax/issues/180) * **bulma-ui:** reference llms docs from README and package.json ([#198](https://github.com/allxsmith/bestax/issues/198)) ([db8aab3](https://github.com/allxsmith/bestax/commit/db8aab32c1c07d81071e7da0c74e811150289d40)) * **bulma-ui:** reject predicate-blocked values during manual entry ([a8f6e28](https://github.com/allxsmith/bestax/commit/a8f6e28b92b997f0cdbb25feed0e039ecc1503b5)) * **bulma-ui:** reject the LinkButton props Button eats, and split a conflated assertion ([b0c7a16](https://github.com/allxsmith/bestax/commit/b0c7a162f584a8ae442006f4815ffd7492175c8d)) * **bulma-ui:** resolve flex item properties and Card compound component issues ([#55](https://github.com/allxsmith/bestax/issues/55)) ([e774da3](https://github.com/allxsmith/bestax/commit/e774da3b7a8890b77d7d699c5b5d0d3a20920fed)) * **bulma-ui:** resolve flex item properties and Card compound component issues ([#55](https://github.com/allxsmith/bestax/issues/55)) ([7641a53](https://github.com/allxsmith/bestax/commit/7641a536db1c4a3928ccc7a15407b939fe205b06)) * **bulma-ui:** resolve react-hooks v7 and [@eslint-react](https://github.com/eslint-react) findings ([14caaaf](https://github.com/allxsmith/bestax/commit/14caaafa1db777ae5ce59c512ac253968df21fc3)) * **bulma-ui:** resolve security vulnerabilities and update dependencies ([#128](https://github.com/allxsmith/bestax/issues/128)) ([112f6e4](https://github.com/allxsmith/bestax/commit/112f6e4841fa9ea9c4ba49200984e413c1bc5f22)), closes [#127](https://github.com/allxsmith/bestax/issues/127) * **bulma-ui:** restore union `as`, and stop the props type collapsing to any ([dfec253](https://github.com/allxsmith/bestax/commit/dfec253473e743fdb562a7d4352f03bae0f081ee)), closes [#641](https://github.com/allxsmith/bestax/issues/641) * **bulma-ui:** restrict semantic-release to bulma-ui scoped commits only ([2d67bf9](https://github.com/allxsmith/bestax/commit/2d67bf9a0ed65d1258c664ca741a1b0966445b79)), closes [#62](https://github.com/allxsmith/bestax/issues/62) * **bulma-ui:** retry failed Avatar src, flatten Fragment children in Avatars, RTL-safe overlap ([#297](https://github.com/allxsmith/bestax/issues/297)) ([c00b9db](https://github.com/allxsmith/bestax/commit/c00b9db6aa21fab055302fd3320dccd4c0cbc824)) * **bulma-ui:** route every hardcoded class through the prefix helpers; add classPrefix sweep test ([#301](https://github.com/allxsmith/bestax/issues/301)) ([a50b134](https://github.com/allxsmith/bestax/commit/a50b134949e08c9c4a207dbd1890213cc3389cd5)), closes [#286](https://github.com/allxsmith/bestax/issues/286) * **bulma-ui:** run a forwarded callback ref's cleanup on Dropdown detach ([f36032c](https://github.com/allxsmith/bestax/commit/f36032c32b898c314b68bd6a4d665049e89118af)) * **bulma-ui:** scope Modal keyboard/focus handling to the topmost modal ([6d3096d](https://github.com/allxsmith/bestax/commit/6d3096d13b1cee29da9d3e4fc13275c4db1a6527)) * **bulma-ui:** scope the two attribute filters independently ([d132427](https://github.com/allxsmith/bestax/commit/d132427012be570331ce469e2b586fcb74f3cb20)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** set displayName on the newly forwarded-ref components ([603d745](https://github.com/allxsmith/bestax/commit/603d745914d36644630358062f702cf1650fa989)) * **bulma-ui:** setup gpg signing with semantic-release ([3e24722](https://github.com/allxsmith/bestax/commit/3e24722d05cd231638864eebb5ff768991633c42)) * **bulma-ui:** stop a Dropdown.Item button submitting the form it sits in ([a27f0d6](https://github.com/allxsmith/bestax/commit/a27f0d6702fe5afbf830bcb84a40cea2a1022195)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** stop Avatar widening to every element, and forward custom props ([74f452b](https://github.com/allxsmith/bestax/commit/74f452b30956f6a8efbad6ed91135b4a55124909)), closes [#661](https://github.com/allxsmith/bestax/issues/661) [#641](https://github.com/allxsmith/bestax/issues/641) * **bulma-ui:** stop emitting are-multiline from Tags, deprecate isMultiline ([#624](https://github.com/allxsmith/bestax/issues/624)) ([0f97eac](https://github.com/allxsmith/bestax/commit/0f97eac1123bf7be11756cfc222cd215ea2b6f68)) * **bulma-ui:** stop guessing which attributes a target element owns ([9baafe9](https://github.com/allxsmith/bestax/commit/9baafe9eca9832946fad96186d33214b2e93c0fa)), closes [#641](https://github.com/allxsmith/bestax/issues/641) * **bulma-ui:** stop predicting the symptom, and drop a claim about the corpus ([2af4883](https://github.com/allxsmith/bestax/commit/2af4883c29b7fe0884ef0ec6f0eb83c7f3181da2)), closes [#688](https://github.com/allxsmith/bestax/issues/688) * **bulma-ui:** stop stripping attributes the target element accepts ([65800e8](https://github.com/allxsmith/bestax/commit/65800e8e85087ea0c17f30149f68c6f0975a9d34)) * **bulma-ui:** stop the color exclusion reaching custom targets, and guard the disabled blocker ([3299b54](https://github.com/allxsmith/bestax/commit/3299b54088db6b25ec0cfbdc0ccb939c608faeec)), closes [#665](https://github.com/allxsmith/bestax/issues/665) * **bulma-ui:** stop the ref cells naming a type parameter no page declares ([5931850](https://github.com/allxsmith/bestax/commit/59318506589e18b7cfad4d3e6d953e514798e18f)) * **bulma-ui:** strip only the keys a caller named, and correct three claims ([7747335](https://github.com/allxsmith/bestax/commit/7747335acec4dcb27d253c7aeb9b4ae62bff14cb)), closes [#682](https://github.com/allxsmith/bestax/issues/682) [#682](https://github.com/allxsmith/bestax/issues/682) * **bulma-ui:** strip redundant library prefix from Icon name ([#242](https://github.com/allxsmith/bestax/issues/242)) ([dbe3622](https://github.com/allxsmith/bestax/commit/dbe36221af3db5be729dd65a3d528042986ee3ec)), closes [#189](https://github.com/allxsmith/bestax/issues/189) * **bulma-ui:** surface supply-chain posture in agent pointer files ([#519](https://github.com/allxsmith/bestax/issues/519)) ([51573e9](https://github.com/allxsmith/bestax/commit/51573e9b0d7655de2aaf49b1ac6c37234b1f07d3)), closes [#413](https://github.com/allxsmith/bestax/issues/413) * **bulma-ui:** test the icon-config shape, and keep one copy of the guard ([f8c9c5b](https://github.com/allxsmith/bestax/commit/f8c9c5b48e97297d5dab900ca2b78f15be59b54c)), closes [#663](https://github.com/allxsmith/bestax/issues/663) * **bulma-ui:** the eight smaller defects review found in [#661](https://github.com/allxsmith/bestax/issues/661) ([a6df70f](https://github.com/allxsmith/bestax/commit/a6df70f308afdd6ea4d7e3e628c5a8fb60fd4e83)) * **bulma-ui:** treat falsy icon nodes as absent in Control and IconText ([c36f5b2](https://github.com/allxsmith/bestax/commit/c36f5b2728c1759c7b8cfdf5a847bf6af5114c09)) * **bulma-ui:** treat optionality modifiers as unsupported, and correct two contracts ([9ca5de9](https://github.com/allxsmith/bestax/commit/9ca5de982a165c4924fbaa0e2747ed1228906d50)) * **bulma-ui:** trigger release to publish via OIDC trusted publishing ([e2d09c5](https://github.com/allxsmith/bestax/commit/e2d09c5e312df3788aa140f0e5e86370a545a989)) * **bulma-ui:** update bundle size claims to accurate 21KB gzipped ([#66](https://github.com/allxsmith/bestax/issues/66)) ([6e381bd](https://github.com/allxsmith/bestax/commit/6e381bdc16ad5572a40983ccc079e33c7882c0c6)) * **bulma-ui:** update package-lock.json ([853d585](https://github.com/allxsmith/bestax/commit/853d585ddfb0622c963b29b050c23f96923fad81)) * **bulma-ui:** update package.json for better seo, exports, types, engines, funding, etc ([98cbc56](https://github.com/allxsmith/bestax/commit/98cbc5637b81c6cba560953bf95eb4c6371b4392)) * **bulma-ui:** use createRequire for ESM compatibility in Storybook 10 ([#130](https://github.com/allxsmith/bestax/issues/130)) ([b27e60e](https://github.com/allxsmith/bestax/commit/b27e60e074dda007e76ad38d867573539b8bcb41)), closes [#129](https://github.com/allxsmith/bestax/issues/129) * **bulma-ui:** warn on the new white shades as component modifiers ([7c617a6](https://github.com/allxsmith/bestax/commit/7c617a6df9ff798d3d00b9d3864a69115195dfd7)) * **bulma-ui:** withhold an href from a Dropdown.Item that is not an anchor ([f597cf2](https://github.com/allxsmith/bestax/commit/f597cf2ae36ebca4c4b57a65ac69c3c259187153)), closes [#667](https://github.com/allxsmith/bestax/issues/667) [#667](https://github.com/allxsmith/bestax/issues/667) [#663](https://github.com/allxsmith/bestax/issues/663) * **ci:** collect screenshots as artifacts and commit in single batch to avoid conflicts ([27b259d](https://github.com/allxsmith/bestax/commit/27b259d774d4088fa371bb7ad2688cc97d4258ab)) * **ci:** ensure npm install uses fresh downloads with --prefer-online ([1f2e15d](https://github.com/allxsmith/bestax/commit/1f2e15ddf2c4b51094ed58d04b26decc317dfa2e)) * **ci:** properly extract base path for recursive file search ([e0330ff](https://github.com/allxsmith/bestax/commit/e0330ff9ca0efe12ad96603cfe134307f3a09b83)) * **ci:** use find command instead of glob module in verified-commit action ([0e2d159](https://github.com/allxsmith/bestax/commit/0e2d159177760c7285c4ddd5930f49e6ac7c5566)) * **ci:** use npm ci for scaffolded app dependencies ([35652c8](https://github.com/allxsmith/bestax/commit/35652c8d84ecd2e1b8f5c2d0bc7b2f573d1e9717)) * collapse the duplicated docs route segment so Grid and Columns URLs resolve ([#598](https://github.com/allxsmith/bestax/issues/598)) ([a11333b](https://github.com/allxsmith/bestax/commit/a11333b7bbc0b444dd45f6d3bb6f4335153d4e89)), closes [#597](https://github.com/allxsmith/bestax/issues/597) * **create-bestax:** add the OpenSSF Best Practices badge to the README ([baad987](https://github.com/allxsmith/bestax/commit/baad987d592cf91eceb5d59f1da302fca8049270)) * **create-bestax:** concrete inline-style → helper-prop mapping for the never-inline rule ([#357](https://github.com/allxsmith/bestax/issues/357)) ([5f72a90](https://github.com/allxsmith/bestax/commit/5f72a90eea06162f4fd5260587098df919ddc4fc)), closes [#350](https://github.com/allxsmith/bestax/issues/350) [#350](https://github.com/allxsmith/bestax/issues/350) * **create-bestax:** correct browser title to prioritize Bestax branding ([#106](https://github.com/allxsmith/bestax/issues/106)) ([23aa535](https://github.com/allxsmith/bestax/commit/23aa535a82639e2b5552294b03636894ed686a4d)), closes [#105](https://github.com/allxsmith/bestax/issues/105) * **create-bestax:** correct template path resolution from ../../ to ../ ([65b4493](https://github.com/allxsmith/bestax/commit/65b44931859e162c46bfc8cdd6e0849942778968)), closes [#78](https://github.com/allxsmith/bestax/issues/78) * **create-bestax:** dark-mode contrast rules in theming/layout skills and docs ([#303](https://github.com/allxsmith/bestax/issues/303)) ([490bf21](https://github.com/allxsmith/bestax/commit/490bf21ad9ee101e4f2630bf53f5b3e8ef22fc9e)), closes [#194](https://github.com/allxsmith/bestax/issues/194) [#195](https://github.com/allxsmith/bestax/issues/195) * **create-bestax:** declare @allxsmith/bestax-bulma as a dependency ([#645](https://github.com/allxsmith/bestax/issues/645)) ([5d785f9](https://github.com/allxsmith/bestax/commit/5d785f998847da69b51c15596747e5bbdec70b7f)), closes [#537](https://github.com/allxsmith/bestax/issues/537) [#644](https://github.com/allxsmith/bestax/issues/644) * **create-bestax:** document strictPort port-collision recovery in generated CLAUDE.md ([7ba0756](https://github.com/allxsmith/bestax/commit/7ba0756a59c654a1857012119352ab425d20c203)), closes [#371](https://github.com/allxsmith/bestax/issues/371) * **create-bestax:** exclude templates directory from linting and typecheck ([18fec0b](https://github.com/allxsmith/bestax/commit/18fec0b50fe71b2ba0bf41beb4bbb1e5bd399e22)) * **create-bestax:** fail closed on foreign consent records, gate ignored files ([81df919](https://github.com/allxsmith/bestax/commit/81df91954cd421c57df7df0495698178be083f5a)) * **create-bestax:** fail fast with guidance instead of hanging when stdin is not a TTY ([#293](https://github.com/allxsmith/bestax/issues/293)) ([46a172d](https://github.com/allxsmith/bestax/commit/46a172d503bb283a5fc168f397261f8afa558b19)), closes [#192](https://github.com/allxsmith/bestax/issues/192) * **create-bestax:** gate consent on both TTYs, honor DNT and Ctrl-C ([8def8da](https://github.com/allxsmith/bestax/commit/8def8da80ce70160d50efba1ae2869827c5814b3)) * **create-bestax:** move templates into package directory and update docs ([195bf01](https://github.com/allxsmith/bestax/commit/195bf01fae72ce268a75156140912e2bc40052c3)), closes [#78](https://github.com/allxsmith/bestax/issues/78) * **create-bestax:** name rbx in the scaffolded CLAUDE.md skill roster ([fcf11dc](https://github.com/allxsmith/bestax/commit/fcf11dc40502421a51904e1a90a09719f5f37647)) * **create-bestax:** never send telemetry from the e2e scaffold harness ([a6db102](https://github.com/allxsmith/bestax/commit/a6db10299c77368622988c1cfc1687b433f5d602)) * **create-bestax:** point scaffolded CLAUDE.md at llms docs; document skills ([#198](https://github.com/allxsmith/bestax/issues/198)) ([b2e0514](https://github.com/allxsmith/bestax/commit/b2e0514c0ed4a04192b56fda8e2fc23a67898f97)) * **create-bestax:** publish with npm provenance attestation ([21ffe8f](https://github.com/allxsmith/bestax/commit/21ffe8f753419eeded407b1fa8685bcbd473fbfe)), closes [#180](https://github.com/allxsmith/bestax/issues/180) * **create-bestax:** put the near-miss guidance where every session sees it ([6db49f3](https://github.com/allxsmith/bestax/commit/6db49f308b888f778f7454ffc934e4aa7d7b2b0d)) * **create-bestax:** read version from package.json instead of hardcoded value ([#109](https://github.com/allxsmith/bestax/issues/109)) ([8605699](https://github.com/allxsmith/bestax/commit/8605699141c90cfde95fba229f21e601e7723586)) * **create-bestax:** refresh README and bump scaffolded bestax-bulma to ^5 ([4e19e86](https://github.com/allxsmith/bestax/commit/4e19e8691781cc0dce9bf6b277a4d0e90a9ec693)) * **create-bestax:** reject dot-only project names, pin icon versions, bundle bestax-icons skill ([#310](https://github.com/allxsmith/bestax/issues/310)) ([ddff8e5](https://github.com/allxsmith/bestax/commit/ddff8e5c54b08f669aa0c34aa5a466050f8929e5)) * **create-bestax:** remove dead ionicons nomodule fallback from generated & shipped surfaces ([db3d588](https://github.com/allxsmith/bestax/commit/db3d5883ad6abf30567c8048cc8ff6c2b9131e07)), closes [#564](https://github.com/allxsmith/bestax/issues/564) * **create-bestax:** review-thread fixes across the telemetry surface ([750b53e](https://github.com/allxsmith/bestax/commit/750b53e052ccb1acf803e01c5ee7bdafbba21b1a)), closes [#550](https://github.com/allxsmith/bestax/issues/550) * **create-bestax:** scaffold @allxsmith/bestax-bulma ^4.0.0 ([1d3b802](https://github.com/allxsmith/bestax/commit/1d3b802eb7285ca05c64cfb0a44bdb96ddb2d82b)) * **create-bestax:** scaffold bundled bestax CSS flavors, not stock Bulma ([43621dc](https://github.com/allxsmith/bestax/commit/43621dc7cebef2dd51f017feccc91a2154e1f7a3)) * **create-bestax:** scope the strictPort recovery kill to the TCP listener ([5fe5397](https://github.com/allxsmith/bestax/commit/5fe5397cd665fd32d693c46f4e2204b076bf73a1)), closes [#371](https://github.com/allxsmith/bestax/issues/371) * **create-bestax:** ship improved bundled skills + component catalog ([#199](https://github.com/allxsmith/bestax/issues/199)) ([a1515c2](https://github.com/allxsmith/bestax/commit/a1515c2742fa1a2b82052045674c4f1b41d0c792)) * **create-bestax:** ship scaffold .gitignore via rename-on-copy and ignore *.tsbuildinfo ([2094086](https://github.com/allxsmith/bestax/commit/209408608e7a45d7346369e98ef106bacfc48cf8)), closes [#371](https://github.com/allxsmith/bestax/issues/371) * **create-bestax:** ship the corrected background-click guidance to scaffolded apps ([067eed8](https://github.com/allxsmith/bestax/commit/067eed818cebd9fd7bd0011718bada6d095c6807)) * **create-bestax:** ship the corrected rbc Modal guidance to scaffolded apps ([1374104](https://github.com/allxsmith/bestax/commit/1374104e0eeeb12db29846ed48ebc430da602e84)) * **create-bestax:** ship the corrected rbx Modal guidance to scaffolded apps ([b864e90](https://github.com/allxsmith/bestax/commit/b864e90c92bca15fe1a5401039047ab9e1ba3d4b)), closes [#633](https://github.com/allxsmith/bestax/issues/633) * **create-bestax:** ship the corrected ref guidance to scaffolded apps ([bd0cfd3](https://github.com/allxsmith/bestax/commit/bd0cfd3d6b99106dad7c66a5ab9d359e40eb1159)) * **create-bestax:** ship the custom-icon-node guidance to scaffolded apps ([e96b7b9](https://github.com/allxsmith/bestax/commit/e96b7b98acad80a77e9c6e316159e3032e2b0533)), closes [#597](https://github.com/allxsmith/bestax/issues/597) * **create-bestax:** ship the Modal.Container ref mapping to scaffolded apps ([06b470f](https://github.com/allxsmith/bestax/commit/06b470fb76bb8170410bf6c37f224bfbcf1022e7)) * **create-bestax:** ship the polymorphic `as` guidance to scaffolded apps ([4aa322c](https://github.com/allxsmith/bestax/commit/4aa322c752fd0e04c3548f44720a4ccf557ca8b5)), closes [#641](https://github.com/allxsmith/bestax/issues/641) * **create-bestax:** shrink the near-miss block and pin the copies together ([d582da5](https://github.com/allxsmith/bestax/commit/d582da567dc0ebc877300399ec221d83af2ec80a)) * **create-bestax:** skills-sync conformance gate + theming skill reference backfill ([#326](https://github.com/allxsmith/bestax/issues/326)) ([9584133](https://github.com/allxsmith/bestax/commit/95841337838139f2e32c482641d7d6c6305800fb)), closes [#285](https://github.com/allxsmith/bestax/issues/285) * **create-bestax:** stop claiming rbx puts innerRef on every component ([83f6f21](https://github.com/allxsmith/bestax/commit/83f6f21401c0eca92400838aef674cd159b47e5e)) * **create-bestax:** stop telling scaffolded apps a carried-over ref needs no work ([d1fe477](https://github.com/allxsmith/bestax/commit/d1fe477b7c7910a9863b3ae7415a6f91446d9642)), closes [#622](https://github.com/allxsmith/bestax/issues/622) * **create-bestax:** stop the skills teaching a Theme call that does not compile ([2935bb2](https://github.com/allxsmith/bestax/commit/2935bb273d0da959049194f1498229cbbb61cfd3)) * **create-bestax:** synchronize version with bestax-bulma to 2.4.0 ([623ee79](https://github.com/allxsmith/bestax/commit/623ee79a5510261c7603dcb867db9baf3d7e6586)), closes [#96](https://github.com/allxsmith/bestax/issues/96) * **create-bestax:** teach the skills the three components Bulma hides ([22dcff7](https://github.com/allxsmith/bestax/commit/22dcff753fd0cd84751a6ea9ecffc8f811483935)) * **create-bestax:** update template dependency to ^2.4.0 ([200971d](https://github.com/allxsmith/bestax/commit/200971d4500283a8be1d64c5bf3ca8396b76cdb1)) * **create-bestax:** use scenario-specific screenshot directories to prevent overwrites ([#108](https://github.com/allxsmith/bestax/issues/108)) ([c675957](https://github.com/allxsmith/bestax/commit/c675957d406d0c86907da06e6bdf7d71ec975b81)), closes [#107](https://github.com/allxsmith/bestax/issues/107) * **create-bestax:** validate at submit in the bestax-form signup example ([0b9518f](https://github.com/allxsmith/bestax/commit/0b9518f595932182cabce5160892730079aed51c)) * **create-bestax:** wire labeled controls in the skill showcase story ([af49a16](https://github.com/allxsmith/bestax/commit/af49a160961f09047fad1b152115ee5623d3a0ae)) * **docs:** announce the hero copy, and stop remounting the icons ([98e2cb0](https://github.com/allxsmith/bestax/commit/98e2cb0236b68d0af54db7e8429f309d3b4cb325)), closes [#434](https://github.com/allxsmith/bestax/issues/434) * **docs:** attribute four orphaned SCSS partials to the API pages that own them ([2f72490](https://github.com/allxsmith/bestax/commit/2f7249076574ff3840e57f79ed5dcf991b71b6b4)), closes [#543](https://github.com/allxsmith/bestax/issues/543) * **docs:** correct Content Signals syntax in robots.txt ([#134](https://github.com/allxsmith/bestax/issues/134)) ([85dd9de](https://github.com/allxsmith/bestax/commit/85dd9de7c147b06f43b9e6a51c6c304a9530b121)) * **docs:** correct the frozen-install translation and reject leaked fences ([1883de3](https://github.com/allxsmith/bestax/commit/1883de3ddea548e13e022a8f40787cf9624de243)) * **docs:** drop dead nomodule ionicons fallback ([82be3e4](https://github.com/allxsmith/bestax/commit/82be3e4a1cefb5c72c79d5a30a06d013bb18cdd1)) * **docs:** emit per-page markdown so llms.txt links resolve ([#200](https://github.com/allxsmith/bestax/issues/200)) ([7877083](https://github.com/allxsmith/bestax/commit/7877083da55d53bdc57811ddc14d5065fd0efdae)) * **docs:** escape apostrophe in QuickStart notification text ([25d6d72](https://github.com/allxsmith/bestax/commit/25d6d7229d691245c3e2ca8475caaac7e9369478)) * **docs:** fail the build on broken anchor links ([0d2f497](https://github.com/allxsmith/bestax/commit/0d2f497112cc459275e243309bd2ca51a9977ac8)), closes [#467](https://github.com/allxsmith/bestax/issues/467) * **docs:** generate llms.txt so the advertised homepage link resolves ([9fae464](https://github.com/allxsmith/bestax/commit/9fae464305595c284335eda65d721480d1accb25)), closes [#177](https://github.com/allxsmith/bestax/issues/177) * **docs:** give every batch run its own port — slot reuse was corrupting runs ([6ef1755](https://github.com/allxsmith/bestax/commit/6ef1755cde7d0ae3a943963ba10fc5c7a193d0fe)) * **docs:** harden PackageManagerTabs and document how to author it ([5b0d3e6](https://github.com/allxsmith/bestax/commit/5b0d3e68389998b35a436ab6e90cc46e68949a37)), closes [#434](https://github.com/allxsmith/bestax/issues/434) * **docs:** harden the hero copy button and share the tab storage key ([9e16cd7](https://github.com/allxsmith/bestax/commit/9e16cd7e9bdd97f7ac6707a74debe2fbc6295d4c)) * **docs:** improve homepage hero layout and button spacing ([5f7a5a7](https://github.com/allxsmith/bestax/commit/5f7a5a78faa3e51766d8f4449e93bc4d6519fde9)) * **docs:** make the eval batch resumable after a container restart ([d56229e](https://github.com/allxsmith/bestax/commit/d56229eb4ba2db2b5313b3051362fcae21df15d0)) * **docs:** make the hero package-manager switcher a real radiogroup ([aa14ff2](https://github.com/allxsmith/bestax/commit/aa14ff25efba2312776a430ee88b5e34ecaf52db)), closes [#434](https://github.com/allxsmith/bestax/issues/434) * **docs:** make the preview deploy include dotfiles, and validate offset dates ([6162fec](https://github.com/allxsmith/bestax/commit/6162fecf4863f04c82800e7d70eb42222ec92192)) * **docs:** move robots.txt to correct deployment location ([#90](https://github.com/allxsmith/bestax/issues/90)) ([1e2aeee](https://github.com/allxsmith/bestax/commit/1e2aeee38fa01097db832b9bc7c920114db194b0)) * **docs:** rebrand and reorganize Storybook ([#83](https://github.com/allxsmith/bestax/issues/83)) ([dfb9937](https://github.com/allxsmith/bestax/commit/dfb99379b65135bc448f6f5e267fe2f473e8e106)) * **docs:** remove dead ionicons nomodule fallback script ([c96cc29](https://github.com/allxsmith/bestax/commit/c96cc2930e827e9ea9dfcfe8782cc0e5464a821e)), closes [#445](https://github.com/allxsmith/bestax/issues/445) * **docs:** remove Google Analytics and add robots.txt ([94776f7](https://github.com/allxsmith/bestax/commit/94776f7a020af5411a8d679b794e09be2de7bf9e)) * **docs:** scope picker calendar/wheel vars to their constituent element ([888…
Closes #494. Stacked on #496 (merge that first; GitHub will retarget this to main).
What
The convenience
labelprop on the three group inputs rendered an unassociated Field label. A group of controls can't take a singlehtmlFor, so the newuseAutoLabelledByhook (sibling of #492'suseAutoLabelId) does it group-style: the rendered<label>gets an id — yours vialabelProps.id, or a generated one — and the group container points at it witharia-labelledby.role="group"+aria-labelledby.role="radiogroup"+aria-labelledby.role="radiogroup"; the hardcodedaria-label="Rating"becomes a fallback, so a wired label actually names the group (aria-label would otherwise win). Unlabeled Rate keeps announcing "Rating" exactly as before.The merged labelProps carry
htmlFor: undefined, so group labels are never wired control-style (also forward-compat with the #495 PR next in this stack). A caller-suppliedroleoraria-labelledbystill wins —{...rest}spreads after the literal attributes, the existing convention.Behavior changes to review
roleattributes on the Checkboxes/Radios wrapper divs (semantics only; no[role=]selectors exist in the SCSS, and all existinggetByRole('radiogroup')queries are name-less).getByRole('group', { name })/getByRole('radiogroup', { name })now resolve from thelabelprop.Tests
New
describe('… group label association (#494)')blocks in all three suites: name resolution via role queries, label id ===aria-labelledby, userlabelProps.idrespected, unlabeled → noaria-labelledby(Rate keeps its fallback), inside-Field no injection, and rest-override wins. All React 18/19-safe.pnpm allgreen.Docs / skill
Accessibility sections updated on
checkboxes.md,radios.md,rate.md(rate.md now documents the previously undocumentedaria-labelfallback); TSDoc drives the regenerated props tables;skills/bestax-formnow describes group-style association, leaving onlyField-composed usage as manual (that's #495, next in the stack).Summary by CodeRabbit
Accessibility
aria-labelledby, with support for generated or custom label IDs.Documentation
Tests