Repository navigation
feat(bestax-migrate): convert navbar dividers with classes, and navbar text colors - #796
Conversation
…r text colors Navbar.Divider now merges a className with its own class (#791), so a .navbar-divider carrying other classes converts, with them in className, rather than staying markup with an attr:className TODO. The own-class-only rule it needed is gone, since no other entry used it. Navbar.Menu, Navbar.Start and Navbar.End now render textColor (#792), so has-text-* on them becomes that prop instead of staying a class.
bloomer's source treated Navbar.Divider as a part whose className replaces its own class, so a helper on it became a TODO and a spread kept the element as bloomer's. Since #791 it merges the className like the other helperless parts, so a helper becomes its Bulma class there and a spread converts.
…version The lookup said a .navbar-divider with another class stays markup, because Navbar.Divider used to drop its own class for a className. It merges them now, so the lookup converts it and keeps the other classes in className, and the index loses the ownClassOnly field that carried the old rule.
|
Warning Review limit reachedNext included review available in 1 minute. 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: Repository: allxsmith/bestax/.coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (22)
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 |
|
deep-review: fresh A small PR, so keep the review small: read the three commits one at a time with Priority: is each conversion now really identical markup? |
Preview DeploymentPreview URL: https://c473b0f3.bestax.pages.dev |
…vbar-parts # Conflicts: # bestax-mcp/data/skills.json
Preview DeploymentPreview URL: https://b1ca5c68.bestax.pages.dev |
|
deep-review: fresh The runs before this one were stopped by the runner shutting down partway through ("The runner has received a shutdown signal"), which looks like the VM running out of resources. So keep the machine light: don't run Read the commits one at a time with |
|
deep-review: fresh Runs on this PR keep getting stopped by the runner shutting down at about the 20-minute mark, whatever they're doing, so this review has to finish well inside that. Keep it to the core and post what you have by about 15 minutes:
Skip the MCP, docs and skill changes, and don't run builds or test suites: CI runs them on this head. Read with |
There was a problem hiding this comment.
Deep review — 1 blocking · 2 advisory
| No. | Severity | Area | Finding | Location |
|---|---|---|---|---|
| 1 | 🟡 Minor | Correctness | The block comment introducing the four navbar-part entries still says Menu, Start and End "spread textColor onto the element rather than reading it, so their text color stays a class" — false as of #792, and it contradicts the textColor: null lines this PR deletes. Already carried by the open thread at class-map.ts:1228, so not re-posted inline. |
bestax-migrate/src/sources/bulma-classes/class-map.ts:1214-1216 |
| 2 | 🔵 Advisory | Robustness | Navbar.Divider moving into HELPERLESS_TARGETS gives up the spread guard NO_CLASSNAME_TARGETS applied. A NavbarDivider carrying a spread now converts, and a spread holding a bloomer-only helper (isPulled, hasTextColor, …) lands on the <hr> as a DOM attribute rather than becoming a class — TypeScript does not flag excess props arriving through a JSX spread. Intended and correct given the className merge, and identical to every other member of that set, so on the record rather than a defect. |
bestax-migrate/src/sources/bloomer/mapping.ts:166 |
| 3 | 🔵 Advisory | Coverage | Dropdown.Divider sits in both NO_CLASSNAME_TARGETS and HELPERLESS_TARGETS, and the if / else-if means its HELPERLESS_TARGETS row can never be reached. Pre-existing, and now the only such row — worth a look while the file is open. |
bestax-migrate/src/sources/bloomer/mapping.ts:167 |
Overall: The change is sound, and each removal is grounded in library code I read rather than in the PR body. NavbarDivider renders classNames(usePrefixedClassNames("navbar-divider"), className) (bulma-ui/src/components/Navbar.tsx:833-840), so dropping ownClassOnly and the attr:className refusal it drove is right, and the field has no remaining reference anywhere in the repo (a repo-wide grep for ownClassOnly is empty). NavbarMenu, NavbarStart and NavbarEnd each feed color: textColor ?? color into useBulmaClasses (:387-397, :445-455, :477-487), and each types textColor to validColors — token for token the colour list the table converts — so removing textColor: null cannot emit a value the prop rejects. The bgColor: null rows correctly survive: NavbarMenuProps and NavbarStartEndProps omit backgroundColor from BulmaClassesProps, and there is no bgColor key to slip through. On the bloomer side both remaining NO_CLASSNAME_TARGETS claims still hold — PaginationEllipsis spreads its props after its own className (Pagination.tsx:339-347) and DropdownDivider is a bare React.FC declaring no props (Dropdown.tsx:544-546) — and Navbar.Divider genuinely belongs in HELPERLESS_TARGETS, since it extends only React.HTMLAttributes<HTMLHRElement>. The riskiest part is the widest-reaching one, has-text-* on three new targets, and that is exactly what e2e/bulma-classes-truth.test.ts:243-269 gates, by rendering raw markup against the converted component for every HELPER_TOKENS entry on every allowed tag. Start with the one open thread; the code itself needs nothing.
Residual risk:
- Another source carrying the same stale divider assumption. Refuted:
rbx/mapping.ts:699andreact-bulma-components/mapping.ts:665mapNavbar.Dividerwith no class-hostile list of their own, and a grep for the "replaces the class that makes it work" and "drops its own class" phrasings across ts, tsx, md, mjs and json now matches nothing outside the two comments this PR edited. - A generated artefact still encoding
ownClassOnlyor the oldtextColor: null. Refuted for the ESLint plugin:scripts/gen-eslint-meta.mjs:232-255reads onlystatus,target,partandPRECEDENCE, sometadata.ts:242(navbar-dividertoNavbar.Divider,converts: true) is unaffected and cannot go stale. The MCP index is regenerated here; per the steer I did not review it. - The
conditionalStayshalf of the refusal deleted alongsideownClassOnly. Refuted: a conditional class on a divider now falls through to the leftover-joiner path, andclassNamesdrops a falsy or empty result, so a joiner call that adds one class conditionally renders identically before and after. - A dead
classNameentry in theVOCABULARYofrules.tsonce that refusal went. Refuted: the two refusals its rewritten comment now describes are live atplan.ts:641(the child a target renders itself) andplan.ts:797(the wrapper a target renders), so the token is still reachable and the comment matches them. - Open: the
HELPERLESS_TARGETSspread path in row 2. It is the accepted shape for that whole set rather than something this PR introduced, but a bloomer helper riding in through a spread on aNavbarDividernow reaches the DOM where the element used to be retained instead. - Per the steer I ran no builds or suites and did not review the MCP, docs or skill changes; CI covers the first, and the skill and MCP tables were checked only where they bear on the two source files above.
🏄 Two library fixes landed upstream and this one just paddles out and takes the wave they made — dividers with classes and navbar text colors both convert clean now, and it is all backed by a render-truth sweep instead of vibes. Only flotsam left is a stale comment still arguing the old line; scrape that off and it is good to go.
…nge left stale The comment above the navbar parts still said Menu, Start and End keep their text color as a class, which stopped being true with #792. And Dropdown.Divider sat in bloomer's helperless list as well as its class-hostile one, where the first match wins, so that row never applied.
|
deep-review: verify Check the fix for the open thread (the stale comment above the navbar parts) in 03c938e. The same commit also drops the unreachable Keep it short: runs here get stopped by the runner at about 20 minutes, so read with |
Preview DeploymentPreview URL: https://f254b756.bestax.pages.dev |
There was a problem hiding this comment.
Deep review (verify) — 1 resolved · 0 open
| # | Severity | Area | Finding | Location |
|---|---|---|---|---|
| 1 | 🟡 Minor | Correctness | Stale comment claiming Menu/Start/End keep their text color as a class — verified fixed, resolved | bestax-migrate/src/sources/bulma-classes/class-map.ts:1214 |
Overall: This pass settled the one open thread from the prior deep review and reviewed no commits. The comment is now reduced to // No background prop on these parts., which is the deletion I asked for and is true of all four entries (bgColor: null on each, textColor: null on none); grep -rn "rather than reading it" matches nothing repo-wide. I also confirmed the same commit's Dropdown.Divider removal from HELPERLESS_TARGETS is a dead-row deletion: NO_CLASSNAME_TARGETS (bloomer/mapping.ts:156-159) still holds it and transform.ts:350 tests that set in the leading if, with HELPERLESS_TARGETS only reachable through the else if at :405 — no test imports the set and skills/…/bloomer/prop-map.md:149-154 already lists the divider as the no-className exception, so no behaviour or doc moved. Nothing left for the human here beyond the normal squash-merge.
Residual risk: none identified for the settled thread — the claim it reported is gone from the source rather than reworded, and the only other change in the commit is provably unreachable code. Per the steer I did not run builds or test suites; CI on this head covers bestax-migrate's suite, and the two edits are a comment and a dead set member, neither of which has a runtime path a test could newly exercise.
🏄 Clean little clean-up set, dude — one lying comment trimmed to the one clause that's actually true, and a dead row swept out of a list where the first
ifalways won anyway. Nothing gnarly left in the water; ship it.
📸 Story screenshots at handoff —
|
# [2.13.0](https://github.com/allxsmith/bestax/compare/bestax-migrate@2.12.0...bestax-migrate@2.13.0) (2026-09-27) ### Bug Fixes * **bulma-ui:** apply textColor helper class on Navbar Menu, Start, End, and Burger ([#792](#792)) ([feb83c8](feb83c8)) * **bulma-ui:** avoid empty class attribute on several components ([#793](#793)) ([7c5c316](7c5c316)) * **bulma-ui:** merge className into Navbar.Divider instead of overwriting it ([#791](#791)) ([fcc0d51](fcc0d51)) ### Features * **bestax-migrate:** convert navbar dividers with classes, and navbar text colors ([#796](#796)) ([c97c7e9](c97c7e9)) * **bulma-ui:** let Card.Header.Title and Card.FooterItem render Bulma's own tags ([#794](#794)) ([47ecdb6](47ecdb6))
|
🎉 This PR is included in version 2.13.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
# [1.7.0](https://github.com/allxsmith/bestax/compare/bestax-mcp@1.6.0...bestax-mcp@1.7.0) (2026-09-27) ### Bug Fixes * **bestax-mcp:** give .image's ratios their reason in the lookup ([3ea4d0c](3ea4d0c)) * **bestax-migrate:** say why .image's ratios stay classes ([2fbfbd5](2fbfbd5)) * **bulma-ui:** apply textColor helper class on Navbar Menu, Start, End, and Burger ([#792](#792)) ([feb83c8](feb83c8)) * **bulma-ui:** avoid empty class attribute on several components ([#793](#793)) ([7c5c316](7c5c316)) * **bulma-ui:** keep menuitemcheckbox and menuitemradio items in Dropdown's arrow-key order ([#786](#786)) ([064155a](064155a)) * **bulma-ui:** merge className into Navbar.Divider instead of overwriting it ([#791](#791)) ([fcc0d51](fcc0d51)) * **bulma-ui:** render the four burger spans Bulma v1 positions ([#785](#785)) ([8e4e1e6](8e4e1e6)) * **bulma-ui:** stop shipping test-only exports, and document notification() ([#781](#781)) ([5f95398](5f95398)) * **eslint-plugin:** report .image with the message for a class the codemod converts ([d27c19b](d27c19b)) ### Features * **bestax-mcp:** look up .image as Image, with the props it takes from its <img> ([3e63230](3e63230)) * **bestax-migrate:** convert an .image and its <img> to Image ([d4f3673](d4f3673)), closes [#793](#793) * **bestax-migrate:** convert conditional classes in clsx and classnames calls ([8948cce](8948cce)) * **bestax-migrate:** convert navbar dividers with classes, and navbar text colors ([#796](#796)) ([c97c7e9](c97c7e9)) * **bulma-ui:** let Card.Header.Title and Card.FooterItem render Bulma's own tags ([#794](#794)) ([47ecdb6](47ecdb6))
|
🎉 This PR is included in version 1.7.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
## [1.1.4](https://github.com/allxsmith/bestax/compare/@allxsmith/eslint-plugin-bestax@1.1.3...@allxsmith/eslint-plugin-bestax@1.1.4) (2026-09-27) ### Bug Fixes * **bestax-mcp:** give .image's ratios their reason in the lookup ([3ea4d0c](3ea4d0c)) * **bestax-migrate:** say why .image's ratios stay classes ([2fbfbd5](2fbfbd5)) * **bulma-ui:** apply textColor helper class on Navbar Menu, Start, End, and Burger ([#792](#792)) ([feb83c8](feb83c8)) * **bulma-ui:** avoid empty class attribute on several components ([#793](#793)) ([7c5c316](7c5c316)) * **bulma-ui:** keep menuitemcheckbox and menuitemradio items in Dropdown's arrow-key order ([#786](#786)) ([064155a](064155a)) * **bulma-ui:** merge className into Navbar.Divider instead of overwriting it ([#791](#791)) ([fcc0d51](fcc0d51)) * **bulma-ui:** render the four burger spans Bulma v1 positions ([#785](#785)) ([8e4e1e6](8e4e1e6)) * **bulma-ui:** stop shipping test-only exports, and document notification() ([#781](#781)) ([5f95398](5f95398)) * **eslint-plugin:** report .image with the message for a class the codemod converts ([d27c19b](d27c19b)) ### Features * **bestax-mcp:** look up .image as Image, with the props it takes from its <img> ([3e63230](3e63230)) * **bestax-migrate:** convert an .image and its <img> to Image ([d4f3673](d4f3673)), closes [#793](#793) * **bestax-migrate:** convert conditional classes in clsx and classnames calls ([8948cce](8948cce)) * **bestax-migrate:** convert navbar dividers with classes, and navbar text colors ([#796](#796)) ([c97c7e9](c97c7e9)) * **bulma-ui:** let Card.Header.Title and Card.FooterItem render Bulma's own tags ([#794](#794)) ([47ecdb6](47ecdb6))
# [5.18.0](https://github.com/allxsmith/bestax/compare/@allxsmith/bestax-bulma@5.17.0...@allxsmith/bestax-bulma@5.18.0) (2026-09-29) ### Bug Fixes * **bestax-mcp:** give .image's ratios their reason in the lookup ([3ea4d0c](3ea4d0c)) * **bestax-mcp:** say an .image converts around elements written out, not an expression ([49bb27b](49bb27b)) * **bestax-migrate:** convert an .image around its children only when they're elements ([ff99907](ff99907)) * **bestax-migrate:** flag react-bulma-components Pagination's delta={0} rather than renaming it ([e339ff1](e339ff1)) * **bestax-migrate:** keep a .menu-list around a bestax Menu.List as markup ([2119c3f](2119c3f)) * **bestax-migrate:** keep a Modal part as markup inside an existing bestax Modal ([cfd5f15](cfd5f15)) * **bestax-migrate:** keep a named anchor as markup instead of saying its name does nothing ([74dc360](74dc360)), closes [#fragment](https://github.com/allxsmith/bestax/issues/fragment) * **bestax-migrate:** know a bestax part imported under its flat export ([7a325ee](7a325ee)) * **bestax-migrate:** leave a wrapper tag alone when none of its classes would become a prop ([2397b9d](2397b9d)) * **bestax-migrate:** leave a wrapper tag with no helper class alone, TODOs and all ([1167a29](1167a29)) * **bestax-migrate:** map react-bulma-components Pagination onto the props it now renders from ([6cd4b51](6cd4b51)) * **bestax-migrate:** say why .image's ratios stay classes ([2fbfbd5](2fbfbd5)) * **bestax-migrate:** write a tabIndex string as a number on every root ([546bf8a](546bf8a)), closes [#814](#814) * **bulma-ui:** name Pagination's page links, and read a count that's no number as its default ([0a1cf06](0a1cf06)) * **bulma-ui:** prefix the is-current and is-disabled classes on Pagination's parts ([c9a5fae](c9a5fae)) * **bulma-ui:** read a Pagination current page that's no number as the first ([68e963b](68e963b)) * **eslint-plugin:** report .image with the message for a class the codemod converts ([d27c19b](d27c19b)) * **eslint-plugin:** report .menu, .menu-label and .menu-list with the converts message ([8ffaccc](8ffaccc)) * **eslint-plugin:** report Modal's parts with the message for a class the codemod converts ([87f3c08](87f3c08)) * **eslint-plugin:** report Pagination's converting parts with the converts message ([6b94f14](6b94f14)) ### Features * **bestax-mcp:** look up .image as Image, with the props it takes from its <img> ([3e63230](3e63230)) * **bestax-mcp:** look up .menu and its label and list as Menu's parts ([f9fe7cd](f9fe7cd)) * **bestax-mcp:** look up Card's title and footer items on the tags their as takes ([ba8193e](ba8193e)) * **bestax-mcp:** look up Modal's parts as components ([b71583a](b71583a)) * **bestax-mcp:** look up Pagination, its list and its previous and next links as components ([f1298df](f1298df)) * **bestax-mcp:** say an .image converts around anything but a bare <img> ([60e9219](60e9219)) * **bestax-mcp:** say Menu.List renders .menu-list only at the top level ([dcce74f](dcce74f)) * **bestax-migrate:** convert .menu, its labels and its top-level lists ([02f4db6](02f4db6)) * **bestax-migrate:** convert .tabs and .icon around their children ([#815](#815)) ([3967a80](3967a80)) * **bestax-migrate:** convert a menu list's items to Menu.Item ([#816](#816)) ([b385687](b385687)) * **bestax-migrate:** convert an .image and its <img> to Image ([d4f3673](d4f3673)), closes [#793](#793) * **bestax-migrate:** convert an .image around anything but a bare <img> ([0a31c5b](0a31c5b)), closes [#801](#801) * **bestax-migrate:** convert Card's title and footer items on the tags their as takes ([20bc0c6](20bc0c6)), closes [#794](#794) * **bestax-migrate:** convert Modal's parts element by element ([4d41ad2](4d41ad2)), closes [#805](#805) * **bestax-migrate:** convert navbar dividers with classes, and navbar text colors ([#796](#796)) ([c97c7e9](c97c7e9)) * **bestax-migrate:** convert Pagination, its list and its previous and next links ([d75bc70](d75bc70)), closes [#807](#807) * **bestax-migrate:** convert Panel and its heading, tabs and blocks ([#811](#811)) ([0694e54](0694e54)) * **bulma-ui:** render Pagination from total, current and onPageChange ([f7ddf04](f7ddf04)), closes [#813](#813)
|
🎉 This PR is included in version 5.18.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
## [4.2.13](https://github.com/allxsmith/bestax/compare/create-bestax@4.2.12...create-bestax@4.2.13) (2026-10-08) ### Bug Fixes * **bestax-mcp:** give .image's ratios their reason in the lookup ([3ea4d0c](3ea4d0c)) * **bestax-mcp:** say an .image converts around elements written out, not an expression ([49bb27b](49bb27b)) * **bestax-migrate:** convert an .image around its children only when they're elements ([ff99907](ff99907)) * **bestax-migrate:** flag react-bulma-components Pagination's delta={0} rather than renaming it ([e339ff1](e339ff1)) * **bestax-migrate:** keep a .menu-list around a bestax Menu.List as markup ([2119c3f](2119c3f)) * **bestax-migrate:** keep a Modal part as markup inside an existing bestax Modal ([cfd5f15](cfd5f15)) * **bestax-migrate:** keep a named anchor as markup instead of saying its name does nothing ([74dc360](74dc360)), closes [#fragment](https://github.com/allxsmith/bestax/issues/fragment) * **bestax-migrate:** keep a page link as markup when its li is a component's only child ([0e72683](0e72683)) * **bestax-migrate:** know a bestax part imported under its flat export ([7a325ee](7a325ee)) * **bestax-migrate:** leave a wrapper tag alone when none of its classes would become a prop ([2397b9d](2397b9d)) * **bestax-migrate:** leave a wrapper tag with no helper class alone, TODOs and all ([1167a29](1167a29)) * **bestax-migrate:** map react-bulma-components Pagination onto the props it now renders from ([6cd4b51](6cd4b51)) * **bestax-migrate:** rename rbx innerRef to ref on a plain Navbar.Item too ([bb6ace0](bb6ace0)), closes [#734](#734) * **bestax-migrate:** say why .image's ratios stay classes ([2fbfbd5](2fbfbd5)) * **bestax-migrate:** write a File text with a backslash as a string ([212831e](212831e)) * **bestax-migrate:** write a tabIndex string as a number on every root ([546bf8a](546bf8a)), closes [#814](#814) * **bestax-migrate:** write isFullwidth from react-bulma-components too ([01da047](01da047)) * **bestax-migrate:** write isFullwidth rather than its deprecated alias from bloomer ([c2a1d22](c2a1d22)), closes [#680](#680) * **bulma-ui:** announce polite notifications through a status region kept from mount ([#835](#835)) ([c93478d](c93478d)) * **bulma-ui:** answer the granularity review on native input and blur ([7a17486](7a17486)) * **bulma-ui:** apply textColor helper class on Navbar Menu, Start, End, and Burger ([#792](#792)) ([feb83c8](feb83c8)) * **bulma-ui:** attach useFocusTrap to a container that mounts after it turns on ([17a944d](17a944d)) * **bulma-ui:** avoid empty class attribute on several components ([#793](#793)) ([7c5c316](7c5c316)) * **bulma-ui:** bring File and Taginput under the bare-Control Field rule ([cdaa6c2](cdaa6c2)) * **bulma-ui:** clear a picker's unused seed whenever its popover closes ([cbe86c5](cbe86c5)) * **bulma-ui:** close a picker's popover on Alt+ArrowUp from inside it ([b6da4ef](b6da4ef)) * **bulma-ui:** color the calendar from the color prop and read TimeInput's wheel variables ([2251e67](2251e67)), closes [#832](#832) * **bulma-ui:** color TimeInput's wheels from the color prop ([#832](#832)) ([ad370c9](ad370c9)) * **bulma-ui:** commit nothing when a picker popover is dismissed ([0a46209](0a46209)) * **bulma-ui:** commit nothing when Enter confirms untouched picker text ([773e146](773e146)) * **bulma-ui:** commit nothing when focus leaves a picker untouched ([30b4849](30b4849)) * **bulma-ui:** document the checkbox, radio and switch color and size tuples ([bd39ff3](bd39ff3)) * **bulma-ui:** draw the time wheel focus ring where the wheel's mask shows it ([e1d8c9f](e1d8c9f)), closes [#832](#832) * **bulma-ui:** drop the openOnFocus TSDoc reason that only holds for segments ([efde0d9](efde0d9)) * **bulma-ui:** Dropdown items withhold attributes by tag and answer Enter and Space ([#827](#827)) ([f6aeb2d](f6aeb2d)) * **bulma-ui:** fall back when useFocusTrap's initialFocusRef can't take focus ([c191931](c191931)) * **bulma-ui:** fire the pickers' onOpen and onClose once under StrictMode ([#896](#896)) ([20b51ed](20b51ed)) * **bulma-ui:** give the calendar's day grid rows of a week ([971a196](971a196)), closes [#774](#774) * **bulma-ui:** give the selected calendar cell a ring that shows on its fill ([b3eecc6](b3eecc6)) * **bulma-ui:** hide a picker's launcher for a loading Control it sits in ([9a3888e](9a3888e)) * **bulma-ui:** hide a picker's launcher only for the spinner it draws ([7a28a0e](7a28a0e)) * **bulma-ui:** hold Portal to looking a selector up on each render ([8fe02ce](8fe02ce)) * **bulma-ui:** hold the year-1 floor under a max before it ([4f6eb18](4f6eb18)) * **bulma-ui:** judge image map areas by their image in useFocusTrap ([af7bc59](af7bc59)) * **bulma-ui:** keep a range's end while the start's digits are coming ([8d1f862](8d1f862)) * **bulma-ui:** keep a read-only date or time picker closed on ArrowDown ([ba74bf7](ba74bf7)) * **bulma-ui:** keep a tab stop in the year list when the year falls outside it ([fe028c1](fe028c1)) * **bulma-ui:** keep an empty picker's seed while a portaled popover is open ([1e66528](1e66528)) * **bulma-ui:** keep an inline date picker's calendar on its released id ([c26da07](c26da07)), closes [#897](#897) [#897](#897) * **bulma-ui:** keep button defaults through a spread, and type the buttons that had none ([#853](#853)) ([0810482](0810482)) * **bulma-ui:** keep button types and Avatar's accessible name through a spread ([#826](#826)) ([dc798d4](dc798d4)) * **bulma-ui:** keep menuitemcheckbox and menuitemradio items in Dropdown's arrow-key order ([#786](#786)) ([064155a](064155a)) * **bulma-ui:** keep Numberinput's buttons in a row inside Field > Control ([4dff84c](4dff84c)) * **bulma-ui:** keep Numberinput's Field examples in a row and labelled ([c937c88](c937c88)) * **bulma-ui:** keep radiusless zeroing the radius inside a Theme ([07db6a3](07db6a3)), closes [#829](#829) [#694](#694) * **bulma-ui:** keep the calendar behind DateTimeInput's time wheels out of reach ([c7f674c](c7f674c)) * **bulma-ui:** keep the clock's seconds out of a picked date and time ([0af2e71](0af2e71)) * **bulma-ui:** keep the Field for horizontal and fieldClassName in a bare Control ([e4dc513](e4dc513)) * **bulma-ui:** keep the picker focus rings visible in every color ([612aa09](612aa09)) * **bulma-ui:** keep the range band under the pointer in the calendar ([c1f2008](c1f2008)) * **bulma-ui:** key the Avatar link warning on the element and attributes ([e628eba](e628eba)), closes [#733](#733) [#733](#733) * **bulma-ui:** key the Control-level warning by its advice ([24cda3d](24cda3d)) * **bulma-ui:** leave keys on a control inside a tab to that control ([4a9f7b6](4a9f7b6)) * **bulma-ui:** leave rel out of the Avatar link attribute warning ([b059476](b059476)), closes [#733](#733) [#733](#733) * **bulma-ui:** let Autocomplete's clear button give way to a loading spinner ([5c11fb2](5c11fb2)) * **bulma-ui:** let Escape in a popover's year dropdown go back to the grid ([a8b1dbf](a8b1dbf)), closes [#901](#901) * **bulma-ui:** let File's picked-files count be reworded, and document its name in the label ([e86545c](e86545c)) * **bulma-ui:** let focus follow the keys in an inline calendar, and skip disabled days for the tab stop ([#885](#885)) ([f55af27](f55af27)) * **bulma-ui:** let several isRoot Themes share the :root style element ([04f399f](04f399f)), closes [#736](#736) * **bulma-ui:** let the arrow keys move through the calendar's year dropdown ([6abc329](6abc329)), closes [#901](#901) * **bulma-ui:** let the picker bases give way to a loading Control too ([66e803a](66e803a)) * **bulma-ui:** let useFocusTrap go of a container that leaves while it is on ([8c56d7a](8c56d7a)) * **bulma-ui:** let warnOnce decide when the Avatar link warning fires ([1a5965c](1a5965c)), closes [#733](#733) * **bulma-ui:** make ArrowUp raise a time wheel's value ([c27c310](c27c310)) * **bulma-ui:** make auto leave room for an in-place picker panel's themed offset ([8c534bd](8c534bd)), closes [#904](#904) * **bulma-ui:** make Tabs keyboard operable with the WAI-ARIA tabs pattern ([fe0e7ef](fe0e7ef)) * **bulma-ui:** make Theme colorMode switch the scheme under the prefixed builds ([#894](#894)) ([2bd6ec2](2bd6ec2)) * **bulma-ui:** make Theme's radius the helper it is typed as ([36c73d3](36c73d3)), closes [#694](#694) * **bulma-ui:** make useFocusTrap follow radio groups and initialFocusRef past the trap ([d6219d4](d6219d4)) * **bulma-ui:** match a picker's opening focus only inside its calendar ([e3c22ed](e3c22ed)) * **bulma-ui:** merge className into Navbar.Divider instead of overwriting it ([#791](#791)) ([fcc0d51](fcc0d51)) * **bulma-ui:** move focus into DateTimeInput's time wheels as they open ([adfa9db](adfa9db)) * **bulma-ui:** move the year dropdown's tab stop with the arrow keys ([f56daf5](f56daf5)) * **bulma-ui:** name a picker's default icon when its icon size or column moves ([6f6de39](6f6de39)) * **bulma-ui:** name custom elements among the targets that get Avatar's target and rel ([a962259](a962259)), closes [#733](#733) * **bulma-ui:** name DateRangeInput's default icon in its Control-level warning ([15cbbb8](15cbbb8)), closes [#952](#952) * **bulma-ui:** name DateRangeInput's default icon in its Control-level warning ([9cbe7ca](9cbe7ca)), closes [#952](#952) * **bulma-ui:** name Pagination's page links, and read a count that's no number as its default ([0a1cf06](0a1cf06)) * **bulma-ui:** open DateRangeInput's popover on Alt+ArrowDown, as the other pickers ([c0e22ec](c0e22ec)) * **bulma-ui:** open the date and time popovers on Alt+ArrowDown ([6db22cc](6db22cc)) * **bulma-ui:** order the Tabs fallback stop by index and style disabled tabs ([eefd283](eefd283)) * **bulma-ui:** pick a DateInput day at midnight by key as by click ([92c27ca](92c27ca)) * **bulma-ui:** place a portaled picker panel by its coordinates alone ([#886](#886)) ([040299b](040299b)) * **bulma-ui:** place toasts and notifications at the position they were shown with ([#834](#834)) ([62feab9](62feab9)) * **bulma-ui:** prefix the is-current and is-disabled classes on Pagination's parts ([c9a5fae](c9a5fae)) * **bulma-ui:** reach Taginput's delete buttons and Autocomplete's clear button ([21a064b](21a064b)) * **bulma-ui:** read a Pagination current page that's no number as the first ([68e963b](68e963b)) * **bulma-ui:** read clicks and focus inside a shadow root ([474f2cc](474f2cc)) * **bulma-ui:** read picker bounds and months in years 0 to 99 as written ([#890](#890)) ([02fb619](02fb619)) * **bulma-ui:** render the four burger spans Bulma v1 positions ([#785](#785)) ([8e4e1e6](8e4e1e6)) * **bulma-ui:** restore a portaled Modal's focus to an opener in a shadow root ([c564bd3](c564bd3)) * **bulma-ui:** return focus to the input when a date picker closes ([b741264](b741264)) * **bulma-ui:** say a picked DateTimeInput day keeps milliseconds and meets the bounds ([3536467](3536467)) * **bulma-ui:** say Tab reaches DateRangeInput's end input only when typing ([d2d3d1a](d2d3d1a)) * **bulma-ui:** say where Numberinput goes bare and test bare={false} in a Field ([0461631](0461631)) * **bulma-ui:** send a press on DateRangeInput's field to the nearer input ([f06b2b0](f06b2b0)) * **bulma-ui:** settle Popover's deep review findings ([feadaf4](feadaf4)) * **bulma-ui:** show the picked file with File's hasName and add a keyboard focus ring ([7881db4](7881db4)) * **bulma-ui:** show toasts, notifications and dialogs raised before their container mounts ([#828](#828)) ([2ab4493](2ab4493)) * **bulma-ui:** skip the Avatar target warning on elements with their own target ([27b58f4](27b58f4)), closes [#733](#733) * **bulma-ui:** start a date picker's focus on the focused cell ([#897](#897)) ([6a55714](6a55714)) * **bulma-ui:** stop Bulma's spinners under reduced motion in every stylesheet ([b234712](b234712)), closes [#770](#770) * **bulma-ui:** stop form wrappers nesting a Field in a bare Control ([2c6d295](2c6d295)) * **bulma-ui:** stop shipping test-only exports, and document notification() ([#781](#781)) ([5f95398](5f95398)) * **bulma-ui:** stop the date pickers at year 1 ([853142a](853142a)) * **bulma-ui:** stop the indeterminate progress bar and skeleton pulse under reduced motion ([bcf5407](bcf5407)) * **bulma-ui:** stop the Rate pop and DateTimeInput scrim under reduced motion ([3a59129](3a59129)) * **bulma-ui:** stop TimeInput reopening on the focus its popover hands back ([1c87c15](1c87c15)) * **bulma-ui:** strip the Avatar link warning from production builds ([a243fa5](a243fa5)), closes [#733](#733) * **bulma-ui:** warn about a dropped Avatar href only for an as the caller wrote ([c93b27c](c93b27c)), closes [#733](#733) * **bulma-ui:** warn in development when Avatar drops an href on a non-link as ([c76e632](c76e632)), closes [#733](#733) * **bulma-ui:** warn when a root Theme drops its className and helpers ([05c10e0](05c10e0)) * **bulma-ui:** warn when a wrapper inside a Control drops its Control-level props ([cbf434b](cbf434b)), closes [#921](#921) * **bulma-ui:** warn when an inline picker drops its Control-level props ([f0494bd](f0494bd)), closes [#921](#921) * **bulma-ui:** warn when Avatar drops a target or rel on a non-link as ([50c385e](50c385e)), closes [#733](#733) [#733](#733) * **create-bestax:** check the react ranges fit the library's peers, not equal them ([8ae5a0c](8ae5a0c)), closes [#950](#950) * **create-bestax:** import the icon CSS for every Bulma flavor, not only complete ([a712b91](a712b91)), closes [#946](#946) * **create-bestax:** install react and react-dom so Yarn 1 reports no unmet peers ([9c9814c](9c9814c)), closes [#644](#644) [#950](#950) * **create-bestax:** name the files the overwrite prompt removes, and stop on a file path ([39b6232](39b6232)), closes [#945](#945) * **create-bestax:** never empty a non-empty folder under -y, and validate flags first ([917f195](917f195)), closes [#950](#950) [#945](#945) [#950](#950) * **create-bestax:** warn when the icon CSS import has nowhere to go ([f7f0b64](f7f0b64)), closes [#946](#946) [#946](#946) * **eslint-plugin:** judge Columns' gap by its own steps, and lengths as lengths ([4786c8d](4786c8d)) * **eslint-plugin:** report .file as a class the codemod converts ([72a32c9](72a32c9)) * **eslint-plugin:** report .image with the message for a class the codemod converts ([d27c19b](d27c19b)) * **eslint-plugin:** report .menu, .menu-label and .menu-list with the converts message ([8ffaccc](8ffaccc)) * **eslint-plugin:** report .select and .breadcrumb as converted ([a9d8082](a9d8082)) * **eslint-plugin:** report Bulma form markup as classes the codemod converts ([128e832](128e832)) * **eslint-plugin:** report Bulma skeletons as converted ([04ca4ee](04ca4ee)) * **eslint-plugin:** report Modal's parts with the message for a class the codemod converts ([87f3c08](87f3c08)) * **eslint-plugin:** report Pagination's converting parts with the converts message ([6b94f14](6b94f14)) * **eslint-plugin:** report the pagination links and ellipsis as classes the codemod converts ([54ba0b3](54ba0b3)) * **eslint-plugin:** report Theme's deprecated radius route accurately ([5605816](5605816)), closes [#694](#694) * **eslint-plugin:** suggest radiusless for a near miss on Theme ([21aa9a7](21aa9a7)), closes [#694](#694) ### Features * **bestax-mcp:** look up .image as Image, with the props it takes from its <img> ([3e63230](3e63230)) * **bestax-mcp:** look up .menu and its label and list as Menu's parts ([f9fe7cd](f9fe7cd)) * **bestax-mcp:** look up Card's title and footer items on the tags their as takes ([ba8193e](ba8193e)) * **bestax-mcp:** look up Modal's parts as components ([b71583a](b71583a)) * **bestax-mcp:** look up Pagination, its list and its previous and next links as components ([f1298df](f1298df)) * **bestax-mcp:** look up the bestax component and props for a Bulma class string ([4a4b246](4a4b246)), closes [#744](#744) * **bestax-mcp:** publish to the official MCP Registry ([74efc7f](74efc7f)) * **bestax-mcp:** say a Bulma field wraps its children only when horizontal ([929bc82](929bc82)) * **bestax-mcp:** say an .image converts around anything but a bare <img> ([60e9219](60e9219)) * **bestax-mcp:** say Menu.List renders .menu-list only at the top level ([dcce74f](dcce74f)) * **bestax-mcp:** say when a component renders the children from a count ([b60c295](b60c295)) * **bestax-mcp:** say when a component renders the element inside it ([4ced25c](4ced25c)) * **bestax-mcp:** say when a component renders the li around its element, or its own text ([8fd3faf](8fd3faf)) * **bestax-mcp:** say when a component renders the whole .file tree from props ([976d8a3](976d8a3)) * **bestax-migrate:** convert .file inside a Field, building its tree from props ([724dff5](724dff5)), closes [#809](#809) * **bestax-migrate:** convert .icon-text, building its icons from props ([#823](#823)) ([933868f](933868f)) * **bestax-migrate:** convert .menu, its labels and its top-level lists ([02f4db6](02f4db6)) * **bestax-migrate:** convert .select and .breadcrumb with the element inside them ([d76c569](d76c569)) * **bestax-migrate:** convert .tabs and .icon around their children ([#815](#815)) ([3967a80](3967a80)) * **bestax-migrate:** convert a menu list's items to Menu.Item ([#816](#816)) ([b385687](b385687)) * **bestax-migrate:** convert an .image and its <img> to Image ([d4f3673](d4f3673)), closes [#793](#793) * **bestax-migrate:** convert an .image around anything but a bare <img> ([0a31c5b](0a31c5b)), closes [#801](#801) * **bestax-migrate:** convert Bulma cards built from their parts ([#752](#752)) ([1b08e17](1b08e17)) * **bestax-migrate:** convert Bulma form fields, controls, inputs and textareas ([3da788d](3da788d)), closes [#743](#743) * **bestax-migrate:** convert Bulma grids and cells ([#760](#760)) ([22adc7c](22adc7c)), closes [#743](#743) * **bestax-migrate:** convert Bulma navbars ([#754](#754)) ([02fdd72](02fdd72)) * **bestax-migrate:** convert Bulma skeletons ([2574ace](2574ace)) * **bestax-migrate:** convert Card's title and footer items on the tags their as takes ([20bc0c6](20bc0c6)), closes [#794](#794) * **bestax-migrate:** convert conditional classes in clsx and classnames calls ([8948cce](8948cce)) * **bestax-migrate:** convert Modal's parts element by element ([4d41ad2](4d41ad2)), closes [#805](#805) * **bestax-migrate:** convert navbar dividers with classes, and navbar text colors ([#796](#796)) ([c97c7e9](c97c7e9)) * **bestax-migrate:** convert Pagination, its list and its previous and next links ([d75bc70](d75bc70)), closes [#807](#807) * **bestax-migrate:** convert Pagination's page links and ellipsis in their li's place ([ae720fa](ae720fa)), closes [#809](#809) * **bestax-migrate:** convert Panel and its heading, tabs and blocks ([#811](#811)) ([0694e54](0694e54)) * **bestax-migrate:** convert the gap, position, overflow, radius and aspect-ratio helpers ([13dcf63](13dcf63)) * **bestax-migrate:** fold .table-container and .fixed-grid into the component inside ([#761](#761)) ([72504f5](72504f5)), closes [#743](#743) * **bulma-ui:** add Bulma's gap helper props to every component ([#877](#877)) ([1bd4abc](1bd4abc)) * **bulma-ui:** add Bulma's position, overflow, radius and aspect-ratio helper props ([#845](#845)) ([64fb91c](64fb91c)) * **bulma-ui:** add Collapses, an accordion group for Collapse ([#849](#849)) ([a12c823](a12c823)) * **bulma-ui:** add DateRangeInput ([50fcba7](50fcba7)), closes [#774](#774) * **bulma-ui:** add Loader, Bulma's inline spinner ([c5e9eb0](c5e9eb0)), closes [#770](#770) * **bulma-ui:** add month and year pickers to DateInput through granularity ([c4cfc2b](c4cfc2b)), closes [#773](#773) * **bulma-ui:** add Popover ([2e17fac](2e17fac)), closes [#776](#776) * **bulma-ui:** export ClientOnly and useIsHydrated ([2c0c1e6](2c0c1e6)) * **bulma-ui:** export Portal ([346d8c2](346d8c2)) * **bulma-ui:** export useFocusTrap, counting the stops the browser's Tab visits ([c304fef](c304fef)), closes [#772](#772) * **bulma-ui:** let Card.Header.Title and Card.FooterItem render Bulma's own tags ([#794](#794)) ([47ecdb6](47ecdb6)) * **bulma-ui:** make columnGap the column gap helper on Theme ([eb2c611](eb2c611)), closes [#694](#694) * **bulma-ui:** render Pagination from total, current and onPageChange ([f7ddf04](f7ddf04)), closes [#813](#813) * **eslint-plugin:** add an opt-in rule for plain elements styled with a Bulma component class ([#750](#750)) ([0bb4d80](0bb4d80)) * **eslint-plugin:** check the gap helper props ([b53a749](b53a749))
|
🎉 This PR is included in version 4.2.13 🎉 The release is available on: Your semantic-release bot 📦🚀 |
Part of #743, following two library fixes that just merged.
Navbar.Dividernow merges aclassNamewith its own class (#791), andNavbar.Menu,Navbar.StartandNavbar.Endnow rendertextColor(#792). The codemod refused or kept both as classes because of the old behavior, so each converts now:What changed
feat(bestax-migrate)): the divider's entry losesownClassOnly, and since nothing else used that field, the field and itsattr:classNamerefusal go too.attr:classNamestill covers the wrappers and absorbed children it was already refused on. The navbar areas'textColor: nullgoes, sohas-text-*becomestextColorthere like everywhere else.fix(bestax-migrate)): the same stale assumption lived in bloomer's source, which listedNavbar.Divideramong the parts whoseclassNamereplaces their own class. It's a helperless part now, so a helper on aNavbarDividerbecomes its Bulma class inclassNameinstead of a TODO, and a spread converts instead of keeping bloomer's element.fix(bestax-mcp)):lookup_bulma_classesstopped saying a divider with another class stays markup, and the index drops theownClassOnlyfield.has-text-*exceptions. bloomer's prop map loses the divider from its class-hostile list.Checked
has-text-*on each area is rendered and typechecked throughtextColor.DarkNavbarcase in thenavbarfixture pair, and a divider with a class and a text color on.navbar-endin the kitchen sink, render the same before and after. The divider leftleftovers.tsx, since it converts now.className.pnpm allpasses locally.Merge note: squashing this keeps only the title's scope, so bestax-mcp's lookup fix waits for its next release unless the merge keeps the commits.