Skip to content

feat(bulma-ui): add Bulma's gap helper props to every component - #877

Merged
allxsmith merged 7 commits into
mainfrom
feat/769-gap-core
Oct 3, 2026
Merged

allxsmith merged 7 commits into
mainfrom
feat/769-gap-core

Conversation

@allxsmith

@allxsmith allxsmith commented Oct 3, 2026 •

Copy link
Copy Markdown
Owner

Part of #769, and the first of three PRs replacing #872, split by package so each can get a complete deep review. The ESLint plugin's gap check (with Theme's columnGap) follows, then the remaining guidance.

Please merge with a merge commit, not a squash. The commits carry four release scopes (bulma-ui, bestax-mcp, create-bestax, bestax-migrate), and a squash would release only the one in the title.

Bulma v1's gap helpers (is-gap-*, is-column-gap-*, is-row-gap-*, is-gapless) ship in bestax.css, but the only ways to reach them were Grid's gap props, in whole steps, or a raw className. They're helper props on every component now.

  • gap, columnGap and rowGap take Bulma's steps, 0 to 8 with the half steps between, as a string or a number. A whole step is 0.5rem, which isn't the margin scale: gap="2" is 1rem where m="2" is 0.5rem. A new validGaps tuple and BulmaGapStep type come with them, at the root and in ./constants.
  • gapless renders is-gapless. A valid gap wins when both are set. columnGap and rowGap win their own axis over either, by Bulma's rule order.
  • They only do something on a flex or grid container, and the TSDoc says so. On Buttons and Tags, which already use CSS gap, the helper replaces Bulma's spacing.
  • Grid keeps its own gap props and its output. They're typed BulmaGapStep now, so they take the half steps.
  • Columns keeps gap as its gutter (is-<n>, whole steps), and its TSDoc says that's not the helper. columnGap and rowGap stay off it too: the gutter is padding inside each column, so a CSS gap would add to it rather than replace it. gapless on Columns renders the same class as isGapless.
  • bestax-migrate: two notes said Grid's gaps take whole steps, which this PR makes false, so those clauses are gone (a fix(bestax-migrate) commit).
  • Theme takes gap, rowGap and gapless as helpers. Its columnGap is unchanged here: it's still the untyped prop for --bulma-column-gap, and a test pins that. Making it the helper comes in the next PR, together with the lint rule that has to declare the old route.

Also in here:

  • MCP server: the gap props join the spacing group. The MCP tests require every row on the useBulmaClasses page to belong to one, so this rides with those rows.
  • Docs: the useBulmaClasses and valid values pages gain the gap rows, the flex guide gains a Gap section, and margin and padding points at it instead of at Grid and Columns.
  • The "there is no gap helper" lines are gone, since this PR makes them false. The two skills' style-mapping rows and the scaffolded CLAUDE.md's row (a fix(create-bestax) commit) map an inline gap to the helper, with the conformance facts that hold the three copies together. The three CLAUDE.md files, the stat card example and the custom-component skill's api.md follow.

pnpm all passes locally.

Bulma v1's gap helpers (is-gap-*, is-column-gap-*, is-row-gap-*, is-gapless) were reachable
only through Grid's gap props, in whole steps, or through a raw className. They are shared
helper props now:

- `gap`, `columnGap` and `rowGap` take Bulma's steps, 0 to 8 with the half steps between them,
  as a string or a number. Each whole step is 0.5rem, which is not the margin scale. A new
  `validGaps` tuple and `BulmaGapStep` type reach the package root and `./constants`.
- `gapless` renders `is-gapless`. A valid `gap` wins when both are set, so the two shorthands
  never sit side by side. Bulma declares the axis classes after them, so `columnGap` and
  `rowGap` win their own axis over either.

Grid keeps its own gap props and renders them itself, now typed `BulmaGapStep`, so they take
the half steps too. Columns keeps `gap` as its columns gutter (`is-<n>`), whole steps only.

Theme takes `gap`, `rowGap` and `gapless` as helpers like every other component. `columnGap`
is left out of ThemeProps and behaves as before, because Theme mints that name for
`--bulma-column-gap`; a test pins that.

The useBulmaClasses and valid-values API pages document the props, and a Gap story shows
them.

Part of #769.
`get_helper_props` assigns every prop in the reference table to exactly one group, so a prop
outside the map is one a `group` call can never surface. `gap`, `columnGap`, `rowGap` and
`gapless` join the spacing group with the Gap section that documents them, which the `gap`
alias already resolved to.

Part of #769.
…lded CLAUDE.md

The scaffolded CLAUDE.md told agents that flex layouts have no `gap` helper and to space
children with margins. Every component takes `gap`, `columnGap` and `rowGap` now, so that
bullet goes, and the inline-style mapping gains a row with the gap scale, which is not the
margin scale.

The mapping is deliberately kept in three places, so the two skills that carry it get the same
row and the custom-component skill loses the same sentence. The style-mapping conformance
check pins the new facts in place of the old ones.

Part of #769.
…gap props

Every component takes the gap helper props now, so the contributor and skill guidance that
said there is no gap helper, and to space children with margins, is false.

- bulma-ui/CLAUDE.md, docs/CLAUDE.md and docs/blog/CLAUDE.md drop that line, and the
  custom-component skill's stat-card example spaces its icon with `gap` in place of the
  comment that said no gap helper exists.
- The custom-component skill's `references/api.md` lists `gap`, `columnGap`, `rowGap` and
  `gapless` on the Spacing row, and `validGaps` among the valid-value constants.
- The flex guide gains a Gap section with the scale, the flex-or-grid caveat and examples.
- The margin and padding guide sent readers to `gap` on Grid or Columns for space between
  items. It points at the gap helpers now, and its See Also links the Gap section.

Part of #769.
@coderabbitai

coderabbitai Bot commented Oct 3, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: allxsmith/bestax/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6df6be06-a573-4efb-a5c1-3b532580e9d4
📥 Commits

Reviewing files that changed from the base of the PR and between 1b63e0d and e420ca9.

📒 Files selected for processing (39)
  • bestax-mcp/data/catalog.json
  • bestax-mcp/data/components/Columns.json
  • bestax-mcp/data/components/Grid.json
  • bestax-mcp/data/components/Valid value constants.json
  • bestax-mcp/data/components/useBulmaClasses.json
  • bestax-mcp/data/skills.json
  • bestax-mcp/src/__tests__/helper-props.test.ts
  • bestax-mcp/src/helper-props.ts
  • bulma-ui/CLAUDE.md
  • bulma-ui/src/__tests__/index.test.ts
  • bulma-ui/src/columns/Columns.tsx
  • bulma-ui/src/columns/__tests__/Columns.test.tsx
  • bulma-ui/src/form/Autocomplete.stories.tsx
  • bulma-ui/src/grid/Grid.tsx
  • bulma-ui/src/grid/__tests__/Grid.test.tsx
  • bulma-ui/src/helpers/Theme.tsx
  • bulma-ui/src/helpers/__tests__/Theme.test.tsx
  • bulma-ui/src/helpers/__tests__/useBulmaClasses.composition.test.tsx
  • bulma-ui/src/helpers/__tests__/useBulmaClasses.test.tsx
  • bulma-ui/src/helpers/__tests__/useSpacingClasses.test.tsx
  • bulma-ui/src/helpers/bulmaClassHelpers.ts
  • bulma-ui/src/helpers/useBulmaClasses.stories.tsx
  • bulma-ui/src/helpers/useBulmaClasses.tsx
  • bulma-ui/src/helpers/useSpacingClasses.tsx
  • create-bestax/src/__tests__/constants.test.ts
  • create-bestax/src/constants.ts
  • docs/CLAUDE.md
  • docs/blog/CLAUDE.md
  • docs/docs/api/columns/columns.md
  • docs/docs/api/grid/grid.md
  • docs/docs/api/helpers/usebulmaclasses.md
  • docs/docs/api/helpers/valid-values.md
  • docs/docs/guides/helpers/flex.md
  • docs/docs/guides/helpers/margin-and-padding.md
  • scripts/check-conformance.mjs
  • skills/bestax-custom-component/SKILL.md
  • skills/bestax-custom-component/examples/stat-card.tsx
  • skills/bestax-custom-component/references/api.md
  • skills/bestax-layout-scaffold/SKILL.md

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.


Walkthrough

The pull request adds gap spacing props to the shared helper, including whole and half steps, axis-specific gaps, and gapless. It updates Grid and Columns integration, tests, API references, guides, examples, and authoring guidance.

Changes

Gap spacing helpers

Layer / File(s) Summary
Shared gap scale and class generation
bulma-ui/src/helpers/bulmaClassHelpers.ts, bulma-ui/src/helpers/useSpacingClasses.tsx, bulma-ui/src/helpers/useBulmaClasses.tsx, bulma-ui/src/helpers/__tests__/*, bulma-ui/src/helpers/useBulmaClasses.stories.tsx
Adds validGaps and BulmaGapStep. The spacing helper generates gap, axis-specific gap, and gapless classes, and useBulmaClasses passes these props to it. Tests and Storybook examples cover supported values and class behavior.
Grid, Columns, and Theme integration
bulma-ui/src/grid/*, bulma-ui/src/columns/*, bulma-ui/src/helpers/Theme.tsx, bulma-ui/src/helpers/__tests__/Theme.test.tsx, bulma-ui/src/form/Autocomplete.stories.tsx, bulma-ui/src/__tests__/index.test.ts
Grid gap props accept whole and half steps. Columns documents and tests its gutter separately from the gap helper. Theme reserves columnGap for its CSS variable prop.
Documentation and authoring guidance
docs/docs/api/*, docs/docs/guides/helpers/*, skills/*, bestax-mcp/*, create-bestax/*, scripts/check-conformance.mjs, docs/CLAUDE.md, docs/blog/CLAUDE.md, bulma-ui/CLAUDE.md
Updates API references, guides, skills, examples, and conformance checks to describe the gap props and scale. MCP grouping and catalog data include gap-related references.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Feature

Merge Risk: ⚪ Minimal · up to e420c

The documented gap behavior has no established merge-blocking issue. The remaining Theme test gap is optional follow-up.

Security Architecture Review

Security architecture risk: 🔵 Low · up to e420c

The inspected changes affect layout without an identified new privilege or data-access path. Risk is low, but the widely shared API has component-specific behavior and some affected surfaces remain unverified.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The contract has broad component reach, but its inspected new effects terminate in presentation classes. That fanout does not demonstrate expanded tenant, service, credential, or data-store authority.

Trust Boundaries and Controls

  • observed — The shared helper normalizes numeric gap steps and checks them against validGaps before emitting gap classes. Recognized helper inputs are consumed separately from residual component props.
  • observed — Grid uses direct class interpolation rather than the shared runtime allowlist. Base-to-head comparison establishes that this rendering path predates the PR; widening its TypeScript gap type does not newly expose arbitrary runtime values.
  • inferred — The inspected MCP metadata and generated guidance deltas expand documentation about layout props, not tool permissions, executable operations, or credential access.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning 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 3 functions across 21 files. (17 skipped: … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the main change: adding Bulma gap helper props across the bulma-ui components.
Description check ✅ Passed The description gives a detailed summary of the changes, affected packages, behavior, documentation updates, and test status. It does not use the template headings or complete the package and checklis…
Full details: Docstring Coverage

Explanation

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 3 functions across 21 files. (17 skipped: 17 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://17d7b3ab.bestax.pages.dev

Comment thread bulma-ui/src/grid/Grid.tsx
Comment thread bulma-ui/src/columns/Columns.tsx

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deep review — 2 blocking · 5 advisory

# Severity Area Finding Location
1 🟡 Minor Correctness Widening Grid's gaps to BulmaGapStep leaves two bestax-migrate statements false ("Grid's gaps take whole steps", "the half steps have no prop") — a same-PR skill obligation bulma-ui/src/grid/Grid.tsx:98
2 🟡 Minor API columnGap/rowGap now reach Columns and add to the gutter (and only at ≥769px), the exact interaction cited for keeping gap off it bulma-ui/src/columns/Columns.tsx:56
3 🔵 Advisory API The Grid row still reads `0`–`8` (number or string, same scale as Columns' `gap`), which no longer conveys that Grid takes half steps skills/bestax-layout-scaffold/references/layout-components.md:187
4 🔵 Advisory Robustness Point-in-time count in a comment — "the default lists all 46" was already drifting and the table is 54 rows after this PR; move it to the issue and link it bestax-mcp/src/helper-props.ts:17
5 🔵 Advisory API On Columns, gapless beside the gutter gap does not lose to it (gap never reaches the helper there), so the shared TSDoc's "a valid gap wins" reads across the carve-out sentence below it bulma-ui/src/helpers/useSpacingClasses.tsx:70
6 🔵 Advisory API gapless is a second spelling of Columns' isGapless — same class, two public props, deliberately pinned by a test bulma-ui/src/columns/__tests__/Columns.test.tsx:115
7 🔵 Advisory API Theme takes gap/rowGap/gapless as helpers but columnGap stays the untyped --bulma-column-gap prop — asymmetric until the declared follow-up bulma-ui/src/helpers/Theme.tsx:796

Overall: The core of this is sound and unusually well pinned. I checked the class names, the !important ordering and the gap arithmetic against the installed bulma@1.0.4 stylesheet rather than against the PR's description, and every load-bearing claim holds: .is-gap-0\.5 through .is-gap-8 exist at 0.5rem per step, the axis classes are declared after .is-gapless and .is-gap-* so columnGap/rowGap really do win their own axis, .buttons/.tags set a plain gap that the !important helper replaces, and @use 'bulma/sass' in bestax.scss ships all of it. Empirically: 5483 bulma-ui tests pass with useSpacingClasses.tsx at 100/100/100/100, both typecheck programs are clean, 246 bestax-mcp tests pass, and check:conformance is green apart from version-regression, which is the shallow-checkout artefact of my sandbox rather than anything in this PR. The riskiest part is not the hook — it is the blast radius of four new props on every component, and that is where both blocking findings sit: a reference that now teaches a limitation the library dropped, and two props that became live on Columns as a side effect of the shared interface rather than by decision. Look at #2 first — it is the one with a user-visible failure, and this PR's own mapping-table row points builders at it.

Residual risk:

  • A gap-named collision on another component — refuted. Grid and Columns are the only two that declare one, each redeclaring it with a type narrower than or equal to BulmaGapStep, and both tsc -p tsconfig.json and tsc -p tsconfig.test.json come back clean. Nothing else in bulma-ui/src declares gap, columnGap, rowGap or gapless (Pagination's gap is a local function; Slider/Notification/ExampleMeta are CSS values).
  • valid-helper-value rejecting the new docs examples — refuted. HELPER_VALUES builds its spacing rows from a hand-written SPACING_PROPS tuple with no gap entry, so the rule ignores gap entirely and gap="0.5" in the new fences is unjudged. Same reason scripts/helper-prop-collisions.test.mjs does not fire on Theme's columnGap: it only flags props the plugin judges, and gap is not one of them yet.
  • A stale generated artefact — refuted for the two that could have moved: skills/bestax-custom-component/references/component-catalog.md contains no gap rows at all, and eslint-plugin/src/generated/metadata.ts carries only @deprecated notes and the colour-as-text set, none of which this PR rewords. The MCP index is regenerated in-tree, and data/skills.json moved with the two skill edits.
  • bestax-migrate's value-union tests breaking on a new valid* tuple — refuted. Those tests pair named constants explicitly (['SIZES', SIZES, validSizes], and so on); they do not sweep the export surface, so validGaps arriving breaks nothing. The flip side is open and declared in #769: the class map's GAPS is still not held to validGaps, so gap helpers outside Grid/Columns stay raw classNames until the follow-up.
  • Open, not refuted: the three mapping-table copies now send builders to columnGap/rowGap with no component-specific caveat anywhere, and Columns is the component where that is wrong. Finding #2 is the code half; the guidance half also lands in create-bestax/src/constants.ts and both skills, which checkStyleMappingSync will happily hold in sync while all three mislead in the same way.
  • Open, not refuted: gap/rowGap/gapless on an isRoot Theme emit a class onto a wrapper that does not exist, so they silently do nothing. That is the pre-existing shape every helper prop has there, and only radius warns about it — worth knowing, not introduced here.

🏄 Clean set, dude — paddled out and caught the whole Bulma gap scale in one ride, half steps and all, with tests tighter than a dawn-patrol wetsuit. Just two bits of kelp on the board: an old migrate note still telling folks the half steps don't exist, and columnGap sneaking onto Columns where it stacks on top of the gutter. Pluck those two and it's glassy.

Grid's gap props take Bulma's half steps now, so two statements in the bulma-classes source
went false: the prop map said a half-step grid gap stays a class because Grid's gaps take whole
steps, and a comment in the class map said the half steps have no prop. The codemod still
converts whole steps only, so `is-gap-0.5` still stays a class; only the false reasons go.

Part of #769.
`columnGap` and `rowGap` reached Columns through its helper props. The columns gutter is
padding inside each column, so their CSS `gap` added to it rather than replacing it, and only
from the tablet width up, where `.columns` is flex. ColumnsProps now leaves them out, as it
already leaves out the `gap` helper, and Columns drops them if untyped code passes them, so
they render no class and never reach the DOM. They did not exist on Columns before the gap
helpers, so nothing that typechecked stops typechecking.

The `gapless` TSDoc said a valid `gap` wins when both are set, which is not true on Columns,
where `gap` is the gutter. It now names Columns as the exception.

Part of #769.
The layout-scaffold skill's Grid row said its gaps take 0 to 8 on the same scale as Columns'
`gap`, which no longer says that Grid takes the half steps. It lists them now.

The MCP server's helper-props comment, and a test comment beside it, counted the props the
default answer lists. The count had gone stale, so they say every prop instead.

Part of #769.
@allxsmith

Copy link
Copy Markdown
Owner Author

On the review's advisories:

  1. The layout-scaffold Grid row now says Grid's gaps take the half steps, in 6be59c5.
  2. The "all 46" count is gone from helper-props.ts, and from the same comment in server.test.ts.
  3. "A valid gap wins" now says plainly that Columns is the exception, where gap is the gutter and gapless is the same modifier as isGapless.
  4. gapless beside isGapless is deliberate. gapless is the shared helper every component takes, and on Columns it lands on the same Bulma class, so both spellings work and the test pins that they agree. Taking isGapless away would break existing code.
  5. Theme's columnGap stays the untyped variable route here on purpose. A script test holds the variables Theme writes by name to the ESLint plugin's declared routes, so making it the helper has to land with the plugin's declaration. That's the next PR, which also carries the one behaviour change to confirm.

@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://f5d23385.bestax.pages.dev

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deep review (verify) — 2 resolved · 0 open

# Severity Area Thread Location Outcome
1 🟡 Minor Correctness Widening Grid's gaps left two bestax-migrate statements false ("whole steps", "no prop") bulma-ui/src/grid/Grid.tsx:98 ✅ Verified fixed
2 🟡 Minor API columnGap/rowGap reached Columns and added to the gutter, only at ≥769px bulma-ui/src/columns/Columns.tsx:62 ✅ Verified fixed

What I checked

#1 — the migrate statements. Both false clauses are deleted rather than reworded, which is what I asked for. skills/bestax-migrate/references/bulma-classes/prop-map.md:145-146 now ends at "A half-step grid gap (is-gap-0.5) stays a class as well."; the grid: header in bestax-migrate/src/sources/bulma-classes/class-map.ts:881-882 stops after the numbers sentence. The surviving claim is still accurate — the class map's gap regex matches is-gap-\d+ only, so the codemod really does leave half steps as classes, and converting them stays #769's third part. A repo-wide grep for "whole steps" now hits only Grid.tsx:13, docs/docs/guides/helpers/flex.md:657 and docs/docs/api/helpers/usebulmaclasses.md:474, all three about Columns' gutter, which genuinely takes them.

#2 — the Columns carve-out. ColumnsProps omits columnGap and rowGap alongside color/backgroundColor (Columns.tsx:22-31), and the component destructures both out of ...props before useBulmaClasses (Columns.tsx:131-137), so the untyped path emits no class and no DOM attribute either. I verified the type half empirically rather than by reading the interface: tsc -p bulma-ui/tsconfig.test.json --noEmit comes back clean, so the new @ts-expect-error above <Columns columnGap="2" /> is load-bearing — had the prop still been accepted, the repo's live-directive rule would have failed it as TS2578. The rewritten test pins the runtime half (columns, columns is-multiline is-gapless, no columngap/rowgap attributes), and gapless still flows through to the helper.

Test runs
  • jest src/columns src/grid (bulma-ui) — 4 suites, 75 tests, all pass
  • tsc -p bulma-ui/tsconfig.test.json --noEmit — clean
  • pnpm --filter bestax-migrate run test — 54 suites, 2229 tests, all pass

The migrate suite first came back with 15 failed suites, every one a Cannot find module '@allxsmith/bestax-bulma' / bulma-ui/dist/index.cjs. That is the documented "build first" shape of a sandbox without bulma-ui/dist, not anything in this PR — building bulma-ui turned the whole suite green. pnpm check:conformance was not available to me in this environment.

Overall: This pass settled the two open threads and reviewed no commits. Both blocking findings are genuinely fixed, each by the narrower of the two available fixes — deletion for the prose, a type-level omit plus an explicit runtime drop for Columns — and both are pinned by tests that would fail if the fix regressed. Nothing is left open; the human should need only a glance at the Columns.tsx:131-137 destructure, which is the one piece of new runtime code either fix added.

Residual risk: none newly identified in this pass — the advisory rows from the first review (the Grid row's wording in the layout-scaffold reference, the point-in-time count in helper-props.ts, the gapless/isGapless double spelling, Theme's asymmetric columnGap) still stand as recorded there and none of them block. The one risk the #2 fix itself introduces is narrow and refuted: dropping columnGap/rowGap from ...props could in principle have swallowed a legitimate DOM attribute, but neither is a valid HTML attribute, and the gapless assertion in the same test proves the rest of the helper surface still reaches useBulmaClasses.

🏄 Came back out to check the lineup and both bits of kelp are off the board, bro — the migrate notes stopped telling folks the half steps don't exist, and columnGap got politely shown the door on Columns at both the type and runtime level. Nothing left floating. Glassy, send it. 🤙

@allxsmith allxsmith added the needs-human-review Loop converged (or contested): awaiting owner review + manual merge label Oct 3, 2026
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

📸 Story screenshots at handoff — 6be59c5

24 stories (light + dark) from this PR's changed files under bulma-ui/src/ (workflow run · artifact story-screenshots-pr-877, 30-day retention).

form-autocomplete--default · Form/Autocomplete · Default
Light Dark
form-autocomplete--default light form-autocomplete--default dark
form-autocomplete--object-data · Form/Autocomplete · Object Data
Light Dark
form-autocomplete--object-data light form-autocomplete--object-data dark
form-autocomplete--clearable · Form/Autocomplete · Clearable
Light Dark
form-autocomplete--clearable light form-autocomplete--clearable dark
form-autocomplete--open-on-focus · Form/Autocomplete · Open On Focus
Light Dark
form-autocomplete--open-on-focus light form-autocomplete--open-on-focus dark
form-autocomplete--keep-first · Form/Autocomplete · Keep First
Light Dark
form-autocomplete--keep-first light form-autocomplete--keep-first dark
form-autocomplete--custom-template · Form/Autocomplete · Custom Template
Light Dark
form-autocomplete--custom-template light form-autocomplete--custom-template dark
columns-columns--mobile-columns · Columns/Columns · Mobile Columns
Light Dark
columns-columns--mobile-columns light columns-columns--mobile-columns dark
columns-columns--desktop-columns · Columns/Columns · Desktop Columns
Light Dark
columns-columns--desktop-columns light columns-columns--desktop-columns dark
columns-columns--different-column-sizes-per-breakpoint · Columns/Columns · Different Column Sizes Per Breakpoint
Light Dark
columns-columns--different-column-sizes-per-breakpoint light columns-columns--different-column-sizes-per-breakpoint dark
columns-columns--nested-columns · Columns/Columns · Nested Columns
Light Dark
columns-columns--nested-columns light columns-columns--nested-columns dark
columns-columns--gap-sizes · Columns/Columns · Gap Sizes
Light Dark
columns-columns--gap-sizes light columns-columns--gap-sizes dark
columns-columns--offsets · Columns/Columns · Offsets
Light Dark
columns-columns--offsets light columns-columns--offsets dark
grid-grid--smart-grid · Grid/Grid · Smart Grid
Light Dark
grid-grid--smart-grid light grid-grid--smart-grid dark
grid-grid--minimum-column-width · Grid/Grid · Minimum Column Width
Light Dark
grid-grid--minimum-column-width light grid-grid--minimum-column-width dark
grid-grid--gap · Grid/Grid · Gap
Light Dark
grid-grid--gap light grid-grid--gap dark
grid-grid--column-gap · Grid/Grid · Column Gap
Light Dark
grid-grid--column-gap light grid-grid--column-gap dark
grid-grid--row-gap · Grid/Grid · Row Gap
Light Dark
grid-grid--row-gap light grid-grid--row-gap dark
grid-grid--fixed-grid · Grid/Grid · Fixed Grid
Light Dark
grid-grid--fixed-grid light grid-grid--fixed-grid dark
helpers-theme--sunset-theme · Helpers/Theme · Sunset Theme
Light Dark
helpers-theme--sunset-theme light helpers-theme--sunset-theme dark
helpers-theme--forest-theme · Helpers/Theme · Forest Theme
Light Dark
helpers-theme--forest-theme light helpers-theme--forest-theme dark
helpers-theme--global-theme · Helpers/Theme · Global Theme
Light Dark
helpers-theme--global-theme light helpers-theme--global-theme dark
helpers-theme--local-theme · Helpers/Theme · Local Theme
Light Dark
helpers-theme--local-theme light helpers-theme--local-theme dark
helpers-theme--theme-with-class-name · Helpers/Theme · Theme With Class Name
Light Dark
helpers-theme--theme-with-class-name light helpers-theme--theme-with-class-name dark
helpers-theme--nested-themes · Helpers/Theme · Nested Themes
Light Dark
helpers-theme--nested-themes light helpers-theme--nested-themes dark
> ✂ 83 more matched stories skipped by the cap: `form-autocomplete--colors`, `form-autocomplete--sizes`, `form-autocomplete--loading`, `form-autocomplete--disabled`, `form-autocomplete--empty-state`, `form-autocomplete--header-footer`, `form-autocomplete--controlled`, `form-autocomplete--async-data`, `form-autocomplete--disabled-items`, `form-autocomplete--form-integration`, … — full set in the artifact.

github-actions Bot added a commit that referenced this pull request Oct 3, 2026
@allxsmith
allxsmith merged commit 1bd4abc into main Oct 3, 2026
83 checks passed
@allxsmith
allxsmith deleted the feat/769-gap-core branch October 3, 2026 11:33
bestax-release-bot Bot pushed a commit that referenced this pull request Oct 3, 2026
@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 5.25.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

bestax-release-bot Bot pushed a commit that referenced this pull request Oct 3, 2026
# [1.2.0](https://github.com/allxsmith/bestax/compare/@allxsmith/eslint-plugin-bestax@1.1.9...@allxsmith/eslint-plugin-bestax@1.2.0) (2026-10-03)

### Bug Fixes

* **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:** color the calendar from the color prop and read TimeInput's wheel variables ([2251e67](2251e67)), closes [#832](#832)
* **bulma-ui:** draw the time wheel focus ring where the wheel's mask shows it ([e1d8c9f](e1d8c9f)), closes [#832](#832)
* **bulma-ui:** fall back when useFocusTrap's initialFocusRef can't take focus ([c191931](c191931))
* **bulma-ui:** give the selected calendar cell a ring that shows on its fill ([b3eecc6](b3eecc6))
* **bulma-ui:** hold Portal to looking a selector up on each render ([8fe02ce](8fe02ce))
* **bulma-ui:** judge image map areas by their image in useFocusTrap ([af7bc59](af7bc59))
* **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 the picker focus rings visible in every color ([612aa09](612aa09))
* **bulma-ui:** make useFocusTrap follow radio groups and initialFocusRef past the trap ([d6219d4](d6219d4))
* **bulma-ui:** place toasts and notifications at the position they were shown with ([#834](#834)) ([62feab9](62feab9))
* **bulma-ui:** read clicks and focus inside a shadow root ([474f2cc](474f2cc))
* **bulma-ui:** restore a portaled Modal's focus to an opener in a shadow root ([c564bd3](c564bd3))
* **bulma-ui:** settle Popover's deep review findings ([feadaf4](feadaf4))
* **bulma-ui:** stop Bulma's spinners under reduced motion in every stylesheet ([b234712](b234712)), closes [#770](#770)
* **bulma-ui:** stop TimeInput reopening on the focus its popover hands back ([1c87c15](1c87c15))
* **eslint-plugin:** judge Columns' gap by its own steps, and lengths as lengths ([4786c8d](4786c8d))

### Features

* **bestax-mcp:** publish to the official MCP Registry ([74efc7f](74efc7f))
* **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 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:** make columnGap the column gap helper on Theme ([eb2c611](eb2c611)), closes [#694](#694)
* **eslint-plugin:** check the gap helper props ([b53a749](b53a749))
bestax-release-bot Bot pushed a commit that referenced this pull request Oct 7, 2026
# [2.25.0](https://github.com/allxsmith/bestax/compare/bestax-migrate@2.24.0...bestax-migrate@2.25.0) (2026-10-07)

### Bug Fixes

* **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:** attach useFocusTrap to a container that mounts after it turns on ([17a944d](17a944d))
* **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:** color the calendar from the color prop and read TimeInput's wheel variables ([2251e67](2251e67)), closes [#832](#832)
* **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:** draw the time wheel focus ring where the wheel's mask shows it ([e1d8c9f](e1d8c9f)), closes [#832](#832)
* **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 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 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 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:** let focus follow the keys in an inline calendar, and skip disabled days for the tab stop ([#885](#885)) ([f55af27](f55af27))
* **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:** make auto leave room for an in-place picker panel's themed offset ([8c534bd](8c534bd)), closes [#904](#904)
* **bulma-ui:** make Theme colorMode switch the scheme under the prefixed builds ([#894](#894)) ([2bd6ec2](2bd6ec2))
* **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:** 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:** 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:** 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:** settle Popover's deep review findings ([feadaf4](feadaf4))
* **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 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:** warn when a root Theme drops its className and helpers ([05c10e0](05c10e0))
* **eslint-plugin:** judge Columns' gap by its own steps, and lengths as lengths ([4786c8d](4786c8d))

### Features

* **bestax-mcp:** publish to the official MCP Registry ([74efc7f](74efc7f))
* **bestax-migrate:** convert the gap, position, overflow, radius and aspect-ratio helpers ([13dcf63](13dcf63))
* **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 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:** make columnGap the column gap helper on Theme ([eb2c611](eb2c611)), closes [#694](#694)
* **eslint-plugin:** check the gap helper props ([b53a749](b53a749))
@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 2.25.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

bestax-release-bot Bot pushed a commit that referenced this pull request Oct 8, 2026
## [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))
@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 4.2.13 🎉

The release is available on:

Your semantic-release bot 📦🚀

bestax-release-bot Bot pushed a commit that referenced this pull request Oct 9, 2026
## [1.14.1](https://github.com/allxsmith/bestax/compare/bestax-mcp@1.14.0...bestax-mcp@1.14.1) (2026-10-09)

### Bug Fixes

* **bestax-mcp:** describe a built icon's attributes as the codemod writes them ([d2f341b](d2f341b)), closes [#942](#942)
* **bestax-mcp:** hold every docs Storybook link to a real story, and floor the index's ([3a6df21](3a6df21))
* **bestax-mcp:** keep a described or named component first in a sentence-shaped search ([2e2a1ef](2e2a1ef))
* **bestax-mcp:** name every component that declares a CSS variable, its owner first ([8bf01e3](8bf01e3))
* **bestax-mcp:** point the index's Storybook links at stories that exist ([0852de4](0852de4))
* **bestax-mcp:** rank the component a search is about above passing mentions ([cc952c2](cc952c2))
* **bestax-mcp:** read self-closing names, explain Theme on every query, advertise dot-paths ([62a4a3a](62a4a3a))
* **bestax-mcp:** release the skill examples that compile in a vite-ts scaffold ([3a7f222](3a7f222))
* **bestax-mcp:** smooth the rough edges a smoke test found ([b6ed21a](b6ed21a))
* **bestax-mcp:** stop the search comment claiming every variable has an owner ([4f1d102](4f1d102))
* **bestax-migrate:** convert a .icon to Icon by the attributes Icon now writes ([a3795fb](a3795fb)), closes [#942](#942)
* **bestax-migrate:** convert an unnamed .icon with a role of its own without aria-hidden ([7c5ff91](7c5ff91)), closes [#942](#942)
* **bestax-migrate:** convert an unnamed .icon with a tabIndex of its own without aria-hidden ([df24c06](df24c06)), closes [#942](#942)
* **bulma-ui:** attach useFocusTrap to a container that mounts after it turns on ([17a944d](17a944d))
* **bulma-ui:** bring File and Taginput under the bare-Control Field rule ([cdaa6c2](cdaa6c2))
* **bulma-ui:** carry Rate's value on its checked star, not the radiogroup ([84f86d8](84f86d8)), closes [#942](#942)
* **bulma-ui:** check initializers for import-time work and stop overstating namespace imports ([20ef350](20ef350))
* **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:** collapse an inline DateTimeInput's wheels on Enter ([ff44aa3](ff44aa3))
* **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:** commit the time on Enter from the seconds wheel too ([d2c0920](d2c0920))
* **bulma-ui:** drop the openOnFocus TSDoc reason that only holds for segments ([efde0d9](efde0d9))
* **bulma-ui:** emit the ESM build one file per module so unused components shake out ([2893197](2893197))
* **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 TimeInput's wheels an id apart from the popover's ([40824cc](40824cc))
* **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:** hide an unnamed Icon and make a named one an image ([f9de39c](f9de39c)), closes [#942](#942)
* **bulma-ui:** hold the year-1 floor under a max before it ([4f6eb18](4f6eb18))
* **bulma-ui:** keep a press on a time wheel item from focusing the hidden item ([c57836a](c57836a)), closes [#942](#942)
* **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 each Rate star's name its own at a value a hair off a whole number ([eed3d99](eed3d99)), closes [#942](#942)
* **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 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 range band under the pointer in the calendar ([c1f2008](c1f2008))
* **bulma-ui:** keep the time wheels' items out of their spinbutton ([6a02615](6a02615)), closes [#942](#942)
* **bulma-ui:** key the Control-level warning by its advice ([24cda3d](24cda3d))
* **bulma-ui:** leave an unnamed Icon with a role of its own visible ([b1e85f5](b1e85f5)), closes [#942](#942)
* **bulma-ui:** leave an unnamed Icon with a tabIndex of its own visible ([a41d131](a41d131)), closes [#942](#942)
* **bulma-ui:** leave Dropdown's menu nothing focusable but its items ([c1ec016](c1ec016)), closes [#942](#942)
* **bulma-ui:** leave keys on a control inside a tab to that control ([4a9f7b6](4a9f7b6))
* **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 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:** 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:** match a picker's opening focus only inside its calendar ([e3c22ed](e3c22ed))
* **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 DateRangeInput's default icon in its Control-level warning ([51fc017](51fc017)), closes [#952](#952)
* **bulma-ui:** name DateRangeInput's default icon in its Control-level warning ([633f5dc](633f5dc)), closes [#952](#952)
* **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 DateRangeInput's default icon in its Control-level warning ([25b7a0b](25b7a0b)), closes [#952](#952)
* **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:** point Autocomplete's aria-controls at its list only while the list is on screen ([8a16115](8a16115)), closes [#942](#942)
* **bulma-ui:** reach Taginput's delete buttons and Autocomplete's clear button ([21a064b](21a064b))
* **bulma-ui:** read a day that is both today and a nearby month the same inside a range band ([4164c3b](4164c3b)), closes [#983](#983)
* **bulma-ui:** read DateTimeInput's footer time row at 4.5:1 in both schemes ([585aa3b](585aa3b)), closes [#976](#976)
* **bulma-ui:** read every calendar day at 4.5:1 in both schemes ([876fe60](876fe60)), closes [#983](#983)
* **bulma-ui:** read picker bounds and months in years 0 to 99 as written ([#890](#890)) ([02fb619](02fb619))
* **bulma-ui:** render the time wheels' inert calendar through inertProps ([f023f25](f023f25))
* **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 Alt+ArrowUp closes DateTimeInput's popover from the wheels ([f994d7d](f994d7d))
* **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:** show the picked file with File's hasName and add a keyboard focus ring ([7881db4](7881db4))
* **bulma-ui:** start a date picker's focus on the focused cell ([#897](#897)) ([6a55714](6a55714))
* **bulma-ui:** stop form wrappers nesting a Field in a bare Control ([2c6d295](2c6d295))
* **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 picker popover partial warning about global nth() ([0b34d84](0b34d84))
* **bulma-ui:** stop the Rate pop and DateTimeInput scrim under reduced motion ([3a59129](3a59129))
* **bulma-ui:** tie DateTimeInput's Time button to the wheels it opens ([889fc7e](889fc7e))
* **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:** wire Autocomplete's combobox to a named listbox ([213f648](213f648)), closes [#942](#942)
* **create-bestax:** check the react ranges fit the library's peers, not equal them ([8ae5a0c](8ae5a0c)), closes [#950](#950)
* **create-bestax:** have the optimize skill install with the project's package manager ([e0ba314](e0ba314)), closes [#597](#597)
* **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:** make every skill example compile in a vite-ts scaffold ([6cc5fec](6cc5fec))
* **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:** read the flags after a `--` that pnpm or bun forwards ([82112a2](82112a2)), closes [#950](#950)
* **create-bestax:** tell the optimize skill's modular build to install bulma ([4289d0a](4289d0a)), closes [#597](#597)
* **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))

### Features

* **bestax-migrate:** convert the gap, position, overflow, radius and aspect-ratio helpers ([13dcf63](13dcf63))
* **bulma-ui:** add Bulma's gap helper props to every component ([#877](#877)) ([1bd4abc](1bd4abc))
* **bulma-ui:** add DateRangeInput ([50fcba7](50fcba7)), closes [#774](#774)
* **bulma-ui:** make columnGap the column gap helper on Theme ([eb2c611](eb2c611)), closes [#694](#694)
* **eslint-plugin:** check the gap helper props ([b53a749](b53a749))
@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 1.14.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

deep-review needs-human-review Loop converged (or contested): awaiting owner review + manual merge released

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant