Repository navigation
fix(bulma-ui): let Level.Item's anchor take the rest of an anchor's attributes - #675
Conversation
|
Warning Review limit reachedNext included review available in 27 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (3)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (14)
🚧 Files skipped from review as they are similar to previous changes (6)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. Walkthrough
ChangesLevel.Item anchor attributes
Priority: ⚪ Pending latest changes Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Bug fix · Severity of issue fixed: Medium Suggested reviewers: Merge Risk: ⚪ Minimal · up to The documented Level.Item element surface now includes paragraph rendering alongside anchor and div support. No actionable merge-blocking risk remains. 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
Full details: Linked Issues checkExplanation Issue Resolution Implement the generic prop and ref model for every component in issue Full details: Docstring CoverageExplanation Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 9 files. (10 skipped: 10 unsupported.) ✨ Finishing Touches 💡 1📝 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.
🟡 Changes recommended
The public props alias lacks the claimed compatibility tests, and migration test documentation remains stale.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Updates Level.Item so anchor variants accept native anchor attributes while preserving compatibility.
Changes:
- Adds constrained polymorphic typing and type/story coverage.
- Removes the obsolete migration exception.
- Regenerates API and MCP documentation.
File summaries
| File | Description |
|---|---|
docs/docs/api/layout/level.md |
Updates generated API documentation. |
bulma-ui/src/layout/Level.tsx |
Adds polymorphic Level.Item props. |
bulma-ui/src/layout/Level.stories.tsx |
Demonstrates anchor attributes. |
bulma-ui/src/__typetests__/polymorphic.tsx |
Tests component-level typing. |
bestax-migrate/src/sources/_shared/polymorphic.ts |
Removes the obsolete link-attribute exception. |
bestax-migrate/e2e/as-unions.test.ts |
Tests the constrained as union by use. |
bestax-mcp/data/components/Level.json |
Regenerates component metadata. |
Review details
- Files reviewed: 7/7 changed files
- Comments generated: 2
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Preview DeploymentPreview URL: https://e05de395.bestax.pages.dev |
Preview DeploymentPreview URL: https://298524cb.bestax.pages.dev |
There was a problem hiding this comment.
🔵 Needs a closer look
The new overload breaks existing ComponentProps and React.memo usage for non-default Level.Item elements.
Review details
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
bulma-ui/src/layout/Level.tsx:288
- This cast's final derivation overload is pinned to
'div', soReact.ComponentProps<typeof Level.Item>andReact.memo(Level.Item)now rejectas="p"andas="a". PreviouslyLevelItemwasReact.FC<LevelItemProps>, whose prop type included all three tags, making this a source-breaking change in a patch described as non-breaking. Preserve a final derivation overload based on the whole-unionLevelItemPropswhile retaining the generic overload for direct-call precision, and pin bothComponentPropsandmemocompatibility in the type tests.
- Files reviewed: 8/8 changed files
- Comments generated: 0 new
- Review effort level: Balanced
Preview DeploymentPreview URL: https://633a7562.bestax.pages.dev |
There was a problem hiding this comment.
🟡 Changes recommended
The new HOC-derived union loses element-specific prop correlation and accepts invalid attribute combinations.
Get a fresh assessment by requesting another Copilot review.
Review details
- Files reviewed: 9/9 changed files
- Comments generated: 1
- Review effort level: Balanced
Preview DeploymentPreview URL: https://fda8cca1.bestax.pages.dev |
There was a problem hiding this comment.
🔵 Needs a closer look
The fallback overload accepts anchor-only props without as="a", and related shipped guidance is stale.
Review details
Suppressed comments (2)
Previously missed (1) — in code that hasn't changed since the last review.
bulma-ui/src/helpers/polymorphic.ts:174
- This new constrained-HOC behavior leaves the shipped contributor guidance stale:
skills/bestax-custom-component/references/library-contributor.md:130-132still saysReact.memocollapses a constrained component onto its default element.bulma-ui/CLAUDE.md:30requires guidance invalidated by a component change to be updated in the same PR.
bulma-ui/src/helpers/polymorphic.ts:179
- This fallback overload makes
asoptional in every member of theAllowedunion. Consequently<Level.Item download="f" />(and the memoized equivalent) can match the anchor member even though runtime defaults to<div>and forwardsdownloadthere. Keepasoptional only for the default member and require it for every non-default member.
(props: PolymorphicProps<Allowed, Own>): React.ReactElement | null;
- Files reviewed: 9/9 changed files
- Comments generated: 0 new
- Review effort level: Balanced
Preview DeploymentPreview URL: https://6237d3f9.bestax.pages.dev |
There was a problem hiding this comment.
🟡 Changes recommended
The derived union still accepts anchor-only properties without an explicit anchor as.
Get a fresh assessment by requesting another Copilot review.
Review details
- Files reviewed: 11/11 changed files
- Comments generated: 1
- Review effort level: Balanced
Preview DeploymentPreview URL: https://c745d53f.bestax.pages.dev |
There was a problem hiding this comment.
🟡 Changes recommended
The generic overload still permits selecting a non-default element type without supplying as, causing the rendered element and accepted attributes to diverge.
Get a fresh assessment by requesting another Copilot review.
Review details
- Files reviewed: 11/11 changed files
- Comments generated: 2
- Review effort level: Balanced
Preview DeploymentPreview URL: https://e85317e6.bestax.pages.dev |
There was a problem hiding this comment.
🟡 Changes recommended
The derived union remains non-exclusive, and shipped migration guidance still describes the removed exception.
Get a fresh assessment by requesting another Copilot review.
Review details
- Files reviewed: 11/11 changed files
- Comments generated: 1
- Review effort level: Balanced
Preview DeploymentPreview URL: https://7809a0c3.bestax.pages.dev |
Both citations in the `HREF_OK` docblock pointed into files this PR rewrote, and one had already rotted: `bulma-ui/src/layout/Level.tsx:227` now lands on a comment terminator. The claims around them are still true, so the next reader checking the premise behind this table would have found nothing and either re-derived it or deleted a correct note. A symbol survives an edit above it; a line number does not. Refs #672
There was a problem hiding this comment.
🟡 Changes recommended
The runtime filter can drift from its derived type, and the extractor fix lacks a focused regression test.
Get a fresh assessment by requesting another Copilot review.
Review details
Suppressed comments (2)
Previously missed (1) — in code that hasn't changed since the last review.
bulma-ui/src/layout/Level.tsx:168
relis already declared byReact.HTMLAttributes, so thisOmitremoves it fromAnchorOnlyAttributes. Listing it as an attribute supplied by this alias misstates the type and contradicts the migration code's explanation thatrelis global; clarify that it remains available through the other base interface.
This issue also appears on line 255 of the same file.
bulma-ui/src/layout/Level.tsx:265
- The public type now gains new anchor-only keys automatically from React, but this filter remains an unchecked manual list. After such a type update, a new key would compile on
as="p"and leak to the<p>, violating the documented withholding guarantee. Make the runtime map statically exhaustive againstkeyof AnchorOnlyAttributes(plus the deliberately stripped globalrel) so type checking forces the two surfaces to stay synchronized.
const ANCHOR_ONLY = [
'href',
'target',
'rel',
'download',
'hrefLang',
'ping',
'referrerPolicy',
'media',
'type',
] as const;
- Files reviewed: 18/18 changed files
- Comments generated: 1
- Review effort level: Balanced
Preview DeploymentPreview URL: https://64b49c4c.bestax.pages.dev |
There was a problem hiding this comment.
🔵 Needs a closer look
The runtime attribute list can drift from its derived type, and the extractor fix lacks a direct regression test.
Review details
Suppressed comments (3)
Previously missed (2) — in code that hasn't changed since the last review.
bulma-ui/src/layout/Level.tsx:265
- This manually maintained array can drift from the derived
AnchorOnlyAttributes, recreating the failure mode the subtraction is intended to prevent: a future React anchor key would become accepted at everyasbut would leak onto<div>/<p>because it is absent here. Make this an exhaustive keyed object such asRecord<keyof AnchorOnlyAttributes | 'rel', true>and filter withkey in ANCHOR_ONLY, so an upstream type addition causes a compile-time failure until runtime filtering is updated.
bulma-ui/src/layout/Level.tsx:168 relis not part of this derived type: this repository's React contract explicitly treatsrelas a member ofHTMLAttributes(seecomponents/Dropdown.tsx:415-419andbestax-migrate/e2e/as-unions.test.ts:350-352), so theOmitremoves it.LevelItemPropsstill acceptsrelthrough itsHTMLAttributesbase, but this documentation currently misstates whatAnchorOnlyAttributescontains.
scripts/lib/props-extract.mjs:1198
- The new multi-element extraction path has no direct regression test.
scripts/props-extract.test.mjsalready pins several catch-all contracts, but none asserts the Level/Title union output, so a return to first-match behavior could be accepted simply by regenerating the currently checked-in docs and MCP data. Add an extractor test that expects every element in one of these union bases.
for (const m of e.text.matchAll(/HTML\w*Element/g)) {
elements.add(DOM_ELEMENT_LABELS[m[0]] ?? 'HTML');
}
- Files reviewed: 18/18 changed files
- Comments generated: 0 new
- Review effort level: Balanced
The extractor fix had only the regenerated pages as evidence, and those are not a guard: a one-match implementation regenerates them just as incomplete, and `gen:api-docs:check` calls that fresh. `Level.Item` must name its `<a>`, `<div>` and `<p>`, and `Title`/`SubTitle` their `<p>`. Refs #672
Preview DeploymentPreview URL: https://5fa4281c.bestax.pages.dev |
There was a problem hiding this comment.
🟢 Approval recommended
The behavior is comprehensively covered and generated surfaces are synchronized; only a minor inline documentation correction remains.
Review details
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
bulma-ui/src/layout/Level.tsx:168
relis not produced by this subtraction: as the migration code notes, React declares it onHTMLAttributes, soAnchorOnlyAttributesexcludes it. Listing it here as anchor-only contradicts the actual type and obscures why the runtime filter treatsrelas a separate compatibility case.
- Files reviewed: 19/19 changed files
- Comments generated: 0 new
- Review effort level: Balanced
The type was derived and the runtime filter was a hand-written array beside it, which drifts in the one direction that matters: the day React adds an anchor attribute, `AnchorOnlyAttributes` accepts it at every `as` while the array lets it leak onto a `<div>`. That is the failure mode the subtraction was chosen to prevent, reintroduced two lines below it. `Record<keyof AnchorOnlyAttributes | 'rel', true>` makes an upstream addition a compile error here until the filter catches up — verified by removing a key and watching `tsc` name it. `rel` is separate on purpose, and the docblock claimed otherwise: React declares it on `HTMLAttributes`, so the subtraction removes it. This component withholds it from a non-anchor because it always has, which is a compatibility decision rather than a fact about anchors — now stated where each name comes from. Refs #672
There was a problem hiding this comment.
🟢 Approval recommended
The compatibility-preserving implementation is consistently documented and covered across runtime, types, migrations, and generated outputs.
Review details
- Files reviewed: 19/19 changed files
- Comments generated: 0 new
- Review effort level: Balanced
Preview DeploymentPreview URL: https://129a1fc3.bestax.pages.dev |
## [5.15.3](https://github.com/allxsmith/bestax/compare/@allxsmith/bestax-bulma@5.15.2...@allxsmith/bestax-bulma@5.15.3) (2026-09-16) ### Bug Fixes * **bulma-ui:** let Level.Item's anchor take the rest of an anchor's attributes ([#675](#675)) ([59e8e34](59e8e34))
|
🎉 This PR is included in version 5.15.3 🎉 The release is available on: Your semantic-release bot 📦🚀 |
## [2.3.4](https://github.com/allxsmith/bestax/compare/bestax-migrate@2.3.3...bestax-migrate@2.3.4) (2026-09-16) ### Bug Fixes * **bulma-ui:** let Level.Item's anchor take the rest of an anchor's attributes ([#675](#675)) ([59e8e34](59e8e34))
|
🎉 This PR is included in version 2.3.4 🎉 The release is available on: Your semantic-release bot 📦🚀 |
## [1.2.5](https://github.com/allxsmith/bestax/compare/bestax-mcp@1.2.4...bestax-mcp@1.2.5) (2026-09-18) ### Bug Fixes * **bestax-mcp:** restamp the index after the valid-values docs edit ([ff4512a](ff4512a)), closes [#521](#521) * **bestax-migrate:** a spread hides the element, not the component ([7f88614](7f88614)) * **bestax-migrate:** an anchor cannot wrap an element whose parent is fixed ([1e2e78b](1e2e78b)), closes [#663](#663) * **bestax-migrate:** an anchor may not wrap interactive content either ([5637976](5637976)), closes [#663](#663) * **bestax-migrate:** announce the one removal that was still silent ([9f2e3ac](9f2e3ac)) * **bestax-migrate:** apply the nested-anchor rule on the plain-markup path too ([ba27e3a](ba27e3a)), closes [#663](#663) * **bestax-migrate:** bound the link attributes by the component too, not just the element ([ca54273](ca54273)) * **bestax-migrate:** decide the href from the element, not the leftovers ([87ccb17](87ccb17)), closes [#662](#662) * **bestax-migrate:** do not advise nesting an <a> inside an element that holds none ([156c793](156c793)), closes [#663](#663) * **bestax-migrate:** drop an href on the targets that declare none ([478f7a4](478f7a4)), closes [#662](#662) * **bestax-migrate:** give the TODO the remedy that works on the target it names ([fccb4d9](fccb4d9)) * **bestax-migrate:** judge every link attribute against the element, not as a group ([1825b9e](1825b9e)), closes [#368](#368) * **bestax-migrate:** judge props against the component they will end up on ([f0241e4](f0241e4)) * **bestax-migrate:** keep a TODO on one line, and correct the link-attribute table ([581833e](581833e)) * **bestax-migrate:** keep an href the plain tag takes, and quieten the shadow TODO ([e78ced2](e78ced2)) * **bestax-migrate:** keep href on the anchor, and as inside its union ([894a633](894a633)), closes [#641](#641) [#662](#662) [#662](#662) * **bestax-migrate:** keep the href `Dropdown.Item` now takes ([e261cdd](e261cdd)), closes [#663](#663) * **bestax-migrate:** only rbx's spread can carry an `as` ([84a6f85](84a6f85)) * **bestax-migrate:** plain markup keeps the href its own tag accepts ([8dc9b0c](8dc9b0c)) * **bestax-migrate:** read iframe and label off their own content models ([6612821](6612821)), closes [#663](#663) * **bestax-migrate:** read the element a target renders, not the type it declares ([7296a50](7296a50)) * **bestax-migrate:** read the element before advising an <a> inside it ([88a95a3](88a95a3)), closes [#663](#663) * **bestax-migrate:** run the link cleanup on react-bulma-components' plain rewrites too ([8ea05cb](8ea05cb)) * **bestax-migrate:** say where the two link rules disagree, not that they agree ([8468858](8468858)), closes [#682](#682) * **bestax-migrate:** stop conflating the two directions an anchor can be invalid ([c7dac64](c7dac64)), closes [#663](#663) * **bestax-migrate:** take the anchor's other attributes with it, and stop guessing at a falsy href ([9382e4a](9382e4a)) * **bestax-migrate:** the component and the element must both allow the attribute ([c009e85](c009e85)) * **bestax-migrate:** trust an `as` a spread cannot overwrite, and stop three messages lying ([19fdb09](19fdb09)) * **bestax-migrate:** white-bis and white-ter are bestax colours now ([d951c2f](d951c2f)) * **bestax-migrate:** widen the element universe until it disagreed, and fix the Delete hint ([4979d94](4979d94)) * **bulma-ui:** accept no children on Avatar, rather than deriving them from `as` ([a8897d2](a8897d2)), closes [#665](#665) * **bulma-ui:** apply the custom-element and event guards consistently ([cc8818c](cc8818c)) * **bulma-ui:** carry the deprecated `icon` path through every consumer of IconProps ([b8eb722](b8eb722)), closes [#663](#663) * **bulma-ui:** catch the other shape a declaration specifier can take ([4f69e20](4f69e20)) * **bulma-ui:** correct the sibling claim, and make the strip set's type check it ([7ffa0e7](7ffa0e7)), closes [#682](#682) * **bulma-ui:** declare backgroundColor unavailable, and check the whole class ([daf636a](daf636a)) * **bulma-ui:** declare the deprecated `icon` path `Icon` still honours ([80124d1](80124d1)), closes [#663](#663) * **bulma-ui:** define the kept props instead of assigning them ([b5722f2](b5722f2)), closes [#682](#682) * **bulma-ui:** give the constants subpath a CommonJS types target ([e97d609](e97d609)) * **bulma-ui:** keep DropdownItemProps accepting every tag it always accepted ([d621b88](d621b88)), closes [#667](#667) [#667](#667) [#667](#667) [#663](#663) [#667](#667) * **bulma-ui:** keep React's own node shapes out of the icon-props branch ([638e329](638e329)), closes [#663](#663) * **bulma-ui:** keep stripping disabled where the element does not own it ([afd94a7](afd94a7)) * **bulma-ui:** keep the button default against a spread, and tag the deprecated props ([fcc148b](fcc148b)), closes [#663](#663) * **bulma-ui:** keep the form attributes an `as="input"` owns ([3ae7bd8](3ae7bd8)) * **bulma-ui:** leave custom elements out of the built-in attribute backstops ([94f6f48](94f6f48)) * **bulma-ui:** let Dropdown.Item's props follow its constrained `as` ([f9c998f](f9c998f)), closes [#663](#663) * **bulma-ui:** let Level.Item's anchor take the rest of an anchor's attributes ([#675](#675)) ([59e8e34](59e8e34)) * **bulma-ui:** make props and refs follow the polymorphic `as` ([7528d87](7528d87)), closes [#188](#188) [#641](#641) * **bulma-ui:** match a spread's enumerability, and close the `type` gap ([84b5cd2](84b5cd2)), closes [#682](#682) * **bulma-ui:** publish only the polymorphic types, and keep role="img" without an href ([b0c8dfe](b0c8dfe)) * **bulma-ui:** reject the LinkButton props Button eats, and split a conflated assertion ([b0c7a16](b0c7a16)) * **bulma-ui:** restore union `as`, and stop the props type collapsing to any ([dfec253](dfec253)), closes [#641](#641) * **bulma-ui:** scope the two attribute filters independently ([d132427](d132427)), closes [#663](#663) * **bulma-ui:** stop a Dropdown.Item button submitting the form it sits in ([a27f0d6](a27f0d6)), closes [#663](#663) * **bulma-ui:** stop Avatar widening to every element, and forward custom props ([74f452b](74f452b)), closes [#661](#661) [#641](#641) * **bulma-ui:** stop guessing which attributes a target element owns ([9baafe9](9baafe9)), closes [#641](#641) * **bulma-ui:** stop stripping attributes the target element accepts ([65800e8](65800e8)) * **bulma-ui:** stop the color exclusion reaching custom targets, and guard the disabled blocker ([3299b54](3299b54)), closes [#665](#665) * **bulma-ui:** stop the ref cells naming a type parameter no page declares ([5931850](5931850)) * **bulma-ui:** strip only the keys a caller named, and correct three claims ([7747335](7747335)), closes [#682](#682) [#682](#682) * **bulma-ui:** test the icon-config shape, and keep one copy of the guard ([f8c9c5b](f8c9c5b)), closes [#663](#663) * **bulma-ui:** the eight smaller defects review found in [#661](#661) ([a6df70f](a6df70f)) * **bulma-ui:** treat optionality modifiers as unsupported, and correct two contracts ([9ca5de9](9ca5de9)) * **bulma-ui:** warn on the new white shades as component modifiers ([7c617a6](7c617a6)) * **bulma-ui:** withhold an href from a Dropdown.Item that is not an anchor ([f597cf2](f597cf2)), closes [#667](#667) [#667](#667) [#663](#663) * **create-bestax:** ship the polymorphic `as` guidance to scaffolded apps ([4aa322c](4aa322c)), closes [#641](#641) * **eslint-plugin:** a `true` display no longer buys silence on inert flex props ([a350ba8](a350ba8)) * **eslint-plugin:** a readable null is still nullish ([30ef3de](30ef3de)) * **eslint-plugin:** guard the textColor rewrite the way replacements are guarded ([a4028ec](a4028ec)) * **eslint-plugin:** judge only the JSX attribute that wins ([fc740d1](fc740d1)), closes [#686](#686) [#678](#678) * **eslint-plugin:** judge only the values a spread cannot overwrite ([0b8d61e](0b8d61e)) * **eslint-plugin:** make the preset lint, and stop the fixes breaking code ([f39e49b](f39e49b)) * **eslint-plugin:** make the preset's file glob honest about its parser ([59d1a54](59d1a54)) * **eslint-plugin:** membership-test the shade before naming the class ([58599d1](58599d1)) * **eslint-plugin:** report both spellings of a `true` helper value ([ed3ddf9](ed3ddf9)) * **eslint-plugin:** stop reporting `radius` on Theme, which is a CSS variable ([b326ce5](b326ce5)) * **eslint-plugin:** stop three autofixes changing what renders ([4853aa5](4853aa5)) * **eslint-plugin:** withhold the color fix when the name is doubled ([85fd556](85fd556)) ### Features * **bulma-ui:** add ./constants subpath export ([595cf3e](595cf3e)) * **bulma-ui:** add the white-bis and white-ter colours the CSS already ships ([0597580](0597580)) * **bulma-ui:** export the other-helper value tuples ([1346973](1346973)) * **eslint-plugin:** add @allxsmith/eslint-plugin-bestax ([790d4e9](790d4e9)), closes [#350](#350) * **eslint-plugin:** check the other-helper props now that they have tuples ([15fced4](15fced4))
|
🎉 This PR is included in version 1.2.5 🎉 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…
## [4.2.9](https://github.com/allxsmith/bestax/compare/create-bestax@4.2.8...create-bestax@4.2.9) (2026-09-21) ### Bug Fixes * **bestax-mcp:** restamp the index after the valid-values docs edit ([ff4512a](ff4512a)), closes [#521](#521) * **bestax-migrate:** a spread hides the element, not the component ([7f88614](7f88614)) * **bestax-migrate:** an anchor cannot wrap an element whose parent is fixed ([1e2e78b](1e2e78b)), closes [#663](#663) * **bestax-migrate:** an anchor may not wrap interactive content either ([5637976](5637976)), closes [#663](#663) * **bestax-migrate:** announce the one removal that was still silent ([9f2e3ac](9f2e3ac)) * **bestax-migrate:** apply the nested-anchor rule on the plain-markup path too ([ba27e3a](ba27e3a)), closes [#663](#663) * **bestax-migrate:** bound the link attributes by the component too, not just the element ([ca54273](ca54273)) * **bestax-migrate:** decide the href from the element, not the leftovers ([87ccb17](87ccb17)), closes [#662](#662) * **bestax-migrate:** do not advise nesting an <a> inside an element that holds none ([156c793](156c793)), closes [#663](#663) * **bestax-migrate:** drop an href on the targets that declare none ([478f7a4](478f7a4)), closes [#662](#662) * **bestax-migrate:** give the TODO the remedy that works on the target it names ([fccb4d9](fccb4d9)) * **bestax-migrate:** judge every link attribute against the element, not as a group ([1825b9e](1825b9e)), closes [#368](#368) * **bestax-migrate:** judge props against the component they will end up on ([f0241e4](f0241e4)) * **bestax-migrate:** keep a TODO on one line, and correct the link-attribute table ([581833e](581833e)) * **bestax-migrate:** keep an href the plain tag takes, and quieten the shadow TODO ([e78ced2](e78ced2)) * **bestax-migrate:** keep href on the anchor, and as inside its union ([894a633](894a633)), closes [#641](#641) [#662](#662) [#662](#662) * **bestax-migrate:** keep the href `Dropdown.Item` now takes ([e261cdd](e261cdd)), closes [#663](#663) * **bestax-migrate:** only rbx's spread can carry an `as` ([84a6f85](84a6f85)) * **bestax-migrate:** plain markup keeps the href its own tag accepts ([8dc9b0c](8dc9b0c)) * **bestax-migrate:** read iframe and label off their own content models ([6612821](6612821)), closes [#663](#663) * **bestax-migrate:** read the element a target renders, not the type it declares ([7296a50](7296a50)) * **bestax-migrate:** read the element before advising an <a> inside it ([88a95a3](88a95a3)), closes [#663](#663) * **bestax-migrate:** run the link cleanup on react-bulma-components' plain rewrites too ([8ea05cb](8ea05cb)) * **bestax-migrate:** say where the two link rules disagree, not that they agree ([8468858](8468858)), closes [#682](#682) * **bestax-migrate:** stop conflating the two directions an anchor can be invalid ([c7dac64](c7dac64)), closes [#663](#663) * **bestax-migrate:** take the anchor's other attributes with it, and stop guessing at a falsy href ([9382e4a](9382e4a)) * **bestax-migrate:** the component and the element must both allow the attribute ([c009e85](c009e85)) * **bestax-migrate:** trust an `as` a spread cannot overwrite, and stop three messages lying ([19fdb09](19fdb09)) * **bestax-migrate:** white-bis and white-ter are bestax colours now ([d951c2f](d951c2f)) * **bestax-migrate:** widen the element universe until it disagreed, and fix the Delete hint ([4979d94](4979d94)) * **bulma-ui:** a compound matches one simple selector, not co-occurrence ([#703](#703)) ([ce20396](ce20396)) * **bulma-ui:** carry the deprecated `icon` path through every consumer of IconProps ([b8eb722](b8eb722)), closes [#663](#663) * **bulma-ui:** catch the other shape a declaration specifier can take ([4f69e20](4f69e20)) * **bulma-ui:** chunk the constants bundle as .cjs, and ask the path for the remedy ([83223f7](83223f7)), closes [#688](#688) * **bulma-ui:** correct the sibling claim, and make the strip set's type check it ([7ffa0e7](7ffa0e7)), closes [#682](#682) * **bulma-ui:** declare the deprecated `icon` path `Icon` still honours ([80124d1](80124d1)), closes [#663](#663) * **bulma-ui:** define the kept props instead of assigning them ([b5722f2](b5722f2)), closes [#682](#682) * **bulma-ui:** emit the CommonJS bundle as .cjs, so require() can load it ([f64286c](f64286c)), closes [#688](#688) * **bulma-ui:** exempt everything module-sync serves, and pin the chunk guards ([c87f6a7](c87f6a7)), closes [#688](#688) * **bulma-ui:** give the CommonJS chunks the extension too, and finish the target test ([bdcba5c](bdcba5c)), closes [#688](#688) * **bulma-ui:** give the constants subpath a CommonJS types target ([e97d609](e97d609)) * **bulma-ui:** give the emitted declarations extensions, so their specifiers resolve ([#702](#702)) ([2a4672f](2a4672f)) * **bulma-ui:** judge an mjs require target, and certify module-sync by loading ([ce984f5](ce984f5)), closes [#688](#688) * **bulma-ui:** judge both runtimes, not the modern one with a fallback ([525ef79](525ef79)), closes [#688](#688) * **bulma-ui:** judge only the branches a require() can enter ([10ffd2e](10ffd2e)), closes [#688](#688) * **bulma-ui:** judge what an older Node reaches behind module-sync ([5b4dd6d](5b4dd6d)), closes [#688](#688) * **bulma-ui:** keep DropdownItemProps accepting every tag it always accepted ([d621b88](d621b88)), closes [#667](#667) [#667](#667) [#667](#667) [#663](#663) [#667](#667) * **bulma-ui:** keep React's own node shapes out of the icon-props branch ([638e329](638e329)), closes [#663](#663) * **bulma-ui:** keep the button default against a spread, and tag the deprecated props ([fcc148b](fcc148b)), closes [#663](#663) * **bulma-ui:** let Dropdown.Item's props follow its constrained `as` ([f9c998f](f9c998f)), closes [#663](#663) * **bulma-ui:** let Level.Item's anchor take the rest of an anchor's attributes ([#675](#675)) ([59e8e34](59e8e34)) * **bulma-ui:** match a spread's enumerability, and close the `type` gap ([84b5cd2](84b5cd2)), closes [#682](#682) * **bulma-ui:** match compound selectors in either class order ([1cb026e](1cb026e)) * **bulma-ui:** stop a Dropdown.Item button submitting the form it sits in ([a27f0d6](a27f0d6)), closes [#663](#663) * **bulma-ui:** stop predicting the symptom, and drop a claim about the corpus ([2af4883](2af4883)), closes [#688](#688) * **bulma-ui:** strip only the keys a caller named, and correct three claims ([7747335](7747335)), closes [#682](#682) [#682](#682) * **bulma-ui:** test the icon-config shape, and keep one copy of the guard ([f8c9c5b](f8c9c5b)), closes [#663](#663) * **bulma-ui:** warn on the new white shades as component modifiers ([7c617a6](7c617a6)) * **bulma-ui:** withhold an href from a Dropdown.Item that is not an anchor ([f597cf2](f597cf2)), closes [#667](#667) [#667](#667) [#663](#663) * **eslint-plugin:** a `true` display no longer buys silence on inert flex props ([a350ba8](a350ba8)) * **eslint-plugin:** a readable null is still nullish ([30ef3de](30ef3de)) * **eslint-plugin:** guard the textColor rewrite the way replacements are guarded ([a4028ec](a4028ec)) * **eslint-plugin:** judge only the JSX attribute that wins ([fc740d1](fc740d1)), closes [#686](#686) [#678](#678) * **eslint-plugin:** judge only the values a spread cannot overwrite ([0b8d61e](0b8d61e)) * **eslint-plugin:** make the preset lint, and stop the fixes breaking code ([f39e49b](f39e49b)) * **eslint-plugin:** make the preset's file glob honest about its parser ([59d1a54](59d1a54)) * **eslint-plugin:** membership-test the shade before naming the class ([58599d1](58599d1)) * **eslint-plugin:** report both spellings of a `true` helper value ([ed3ddf9](ed3ddf9)) * **eslint-plugin:** stop reporting `radius` on Theme, which is a CSS variable ([b326ce5](b326ce5)) * **eslint-plugin:** stop three autofixes changing what renders ([4853aa5](4853aa5)) * **eslint-plugin:** withhold the color fix when the name is doubled ([85fd556](85fd556)) * refuse an ambiguous tagFormat rather than taking the first one ([e31c922](e31c922)), closes [#123](#123) [#705](#705) ### Features * **bulma-ui:** add ./constants subpath export ([595cf3e](595cf3e)) * **bulma-ui:** add the white-bis and white-ter colours the CSS already ships ([0597580](0597580)) * **bulma-ui:** export the other-helper value tuples ([1346973](1346973)) * **eslint-plugin:** add @allxsmith/eslint-plugin-bestax ([790d4e9](790d4e9)), closes [#350](#350) * **eslint-plugin:** check the other-helper props now that they have tuples ([15fced4](15fced4))
|
🎉 This PR is included in version 4.2.9 🎉 The release is available on: Your semantic-release bot 📦🚀 |
The non-breaking half of #672. The rest is deferred — see below.
Important
Do not squash-merge.
bestax-migrate/release.config.jsopens with{ scope: '!(bestax-migrate)', release: false }, so afix(bulma-ui)squash commit would publish the library and silently suppress the codemod release. Rebase or merge commit.What was wrong
LevelItemPropsenumeratedhref,targetandrel, so every other anchor attribute was a type error even on the anchor form:Both are the literal symptom #641 reported.
AnchorOnlyAttributessubtractsReact.HTMLAttributesfromReact.AnchorHTMLAttributes, so what the anchor form accepts is exactly what<a>adds —href,target,rel,download,hrefLang,ping,referrerPolicy,media,type— and it tracks React rather than this file. An earlier revision of this PR swapped the three-name list for a seven-name one; reviewers pointed out that still leftmediaandtyperejected, and still needed a human to notice the next one. A list gains an entry when someone notices; a subtraction gains it when React does.Why enumerated rather than derived from
asDeriving them is the better shape and it is source-breaking, so it waits for the major.
This PR originally did derive them, by making
Level.Itempolymorphic through the sharedConstrainedPolymorphicComponentWithoutRef. That version was reviewed and reverted. It worked, and it broke three things — each verified by compiling identical probes againstmainand the branch:<Dropdown.Item {...bag} />wherebag: DropdownItemProps<'button'>→TS2769. That component is already released. The break came from editing a shared helper, which a PR aboutLevel.Itemhad no business touching.const p: LevelItemProps = { onClick: e => … }→TS7006. Replacingextends HTMLAttributes<A | B | C>with a non-distributiveOmitturns one handler over a union element into a union of three handler types, and contextual typing stops.keyof ComponentProps<typeof Dropdown.Item>collapsed to the shared keys, so'href'stopped being one.None of that is needed to fix #641's symptom. What ships here cannot reach
Dropdown.Item, changes no shared helper, and leaves every existing shape compiling — the spread round-trip, event handlers,ComponentProps,keyof, andReact.memo, all asserted.The half that is deferred
hrefand friends are declared at everyas, so this still compiles:The type permits it and the runtime refuses it — the new attributes are withheld from any tag that is not an
<a>, asserted in both directions. Making it a type error is what #672 keeps, undernext-major, alongside #667 and #681.The codemod half
TARGET_LINK_ATTRSrecords what a target declares when its props do not followas.Level.Itemwas its only row, listing['target']— which would now strip adownloadthe component accepts and write a TODO saying it was rejected.Since the component carries the anchor's whole surface, a row naming every attribute decides nothing a row naming none does, so the row is gone and the existing sweep covers the target: every href-capable target without a row is asserted to accept every link attribute on its anchor. That does leave the
rejectedBy = 'component'arm without a live caller — noted in the code as worth deleting rather than kept for a hypothetical.Three shipped skill references stated the old claim verbatim and are corrected. Nothing catches that class of drift: the copies agree with each other, so
skills-syncand the generators are green either way.Filed from the review
as#681 — an explicit type argument picks a polymorphic element withoutas(<Button<'a'> href />renders a<button>). Pre-existing onmain, on every component with anas.next-major.Also fixed here
catchAllRowin the docs extractor read the props base withString.matchand no/g, so a component whose base is a union of elements was described by whichever came first.Level.Itemsaid "All standard<div>attributes" while rendering a<p>and an<a>too;TitleandSubTitlelost their<p>the same way. Both generators callextractComponent, so the API pages and the MCP index were wrong together.Verification
pnpm allgreen,check:conformancegreen, all four generators current, 1213 migrate tests, Level suite green with tests for forwarding and withholding — the withholding fixture supplies every attribute it asserts against, since checking four while passing two made two of them vacuous.Non-breaking is measured, not asserted: the same probes compile against
mainand this branch with zero errors on both — event handlers, the spread round-trip, assignability toHTMLAttributes<HTMLDivElement>,ComponentProps/keyof/index access,React.memo, the releasedDropdown.Item, and ordinary usage. Those probes now live inbulma-ui/src/__typetests__/polymorphic.tsxrather than in a scratch file, because the earlier revision of this PR broke five of them and a deleted probe proves nothing.Summary by CodeRabbit
New Features
Level.Itemnow supports the full set of standard anchor attributes, includingdownload,media, andtype, when rendered as an anchor.Documentation
Tests