Skip to content

feat(bulma-ui): make the natural API guess correct — isFullwidth everywhere, Tag isLight, Card.* helper props, forgiving sizes, NumberInput/TagInput aliases - #507

Merged
allxsmith merged 8 commits into
mainfrom
feat/issue-370-api-consistency
Aug 13, 2026
Merged

allxsmith merged 8 commits into
mainfrom
feat/issue-370-api-consistency

Conversation

@allxsmith

@allxsmith allxsmith commented Aug 12, 2026 •

Copy link
Copy Markdown
Owner

Five additive changes that make the natural API guess correct, straight from the cold-start eval evidence. Every existing prop spelling keeps working; nothing here is breaking.

The five items

  1. isFullwidth everywhere — Button, Select/SelectBase, File, Table, Tabs, and Sidebar all accept the canonical isFullwidth; the divergent spellings (isFullWidth, fullwidth, fullWidth) stay as deprecated aliases, with the canonical prop winning when both are set (isFullwidth ?? legacy, same pattern as Columns' gap/gapSize). Eval: the casing lottery cost tsc rounds in nearly every run that used more than one full-width component.
  2. Tag gains isLight — the light color variant, on both the span and delete-button render paths. Eval: agents invented isLight on Tag in 2/10 runs because Button and Notification already have it.
  3. Card.* sub-parts accept Bulma helper props — all seven (Header, Header.Title, Header.Icon, Image, Content, Footer, FooterItem) now route through useBulmaClasses like the Media sub-parts, including color/bgColor/textColor. CardHeader's className-on-generated-title quirk and the withSubComponents identities are preserved. The catalog generator preamble moves Card.* to the "take helper props" list. Eval: flex-pinning a Card footer forced Box swaps because Card.Content flexGrow didn't exist.
  4. Forgiving sizes — BulmaColumnSize accepts numeric strings (size="7" ≡ size={7}), and Title/SubTitle accept numeric sizes (size={3} ≡ size="3", still deriving <h3>); invalid values (e.g. 7 on Title) are still rejected. Eval: the Column/Title size type mismatch cost rounds in both directions — numbers where strings were required and vice versa.
  5. NumberInput/TagInput aliases — born-deprecated alias exports (NumberInput, NumberInputProps, TagInput, TagInputProps) for the camel-case spellings agents guess. Eval: import { NumberInput } failed on every run that used it.

Docs, stories, and skills are updated in the same PR: the form skill now teaches "full-width is isFullwidth on every component", the custom-component and layout-scaffold skills drop Card from the no-helper-props exception lists, the theming reference gains Tag isLight and the string-or-number Title sizes, and the generated artifacts (API docs props tables, skill catalog, MCP index) are regenerated per commit.

Testing

  • New tests per item: canonical/legacy/precedence/prefix cases for each full-width component (Tabs covers all three chain levels; Sidebar asserts the --bulma-sidebar-width CSS variable both ways), Tag isLight on both render paths, all seven Card sub-parts (helper prop, color-vs-textColor precedence, DOM spread, prefix pair, header quirk), Column string sizes/offsets, Title/SubTitle numeric + out-of-range rejection (string and number), alias identity + render tests, and a TagInput entry in the prefix sweep.
  • pnpm --filter @allxsmith/bestax-bulma test:coverage: 99.61% stmts / 99.12% branches / 99.75% funcs / 99.82% lines — the 99% gate holds.
  • pnpm gen && git diff --exit-code clean; pnpm check:conformance green; full pnpm all green. Note: one pnpm all invocation tripped a pre-existing race in bestax-mcp's sync-skills step (build/test/test:coverage each copy data/skills/ and turbo runs them concurrently — rmdir collision); the constituent turbo tasks all pass run sequentially and a rerun passes. Worth a separate issue.

May lightly conflict with the #369 PR on components/Card.tsx (this PR touches only the sub-part region, #369 the parent) and on regenerated artifacts — whichever merges second rebases and reruns pnpm gen.

Closes #370

Summary by CodeRabbit

  • New Features

    • Added light-colored Tag variants with the isLight option.
    • Card sections now support color, background-color, and text-color helper props.
    • Column, Title, and Subtitle sizes accept numeric values and equivalent numeric strings.
    • Added compatibility aliases for NumberInput and TagInput naming.
  • Bug Fixes

    • Standardized full-width behavior around isFullwidth across components, while preserving deprecated aliases with clear precedence rules.
  • Documentation

    • Updated component guides, examples, catalogs, and migration references to reflect the new props and compatibility behavior.

Copilot AI balanced review requested due to automatic review settings August 12, 2026 19:37
@coderabbitai

coderabbitai Bot commented Aug 12, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@allxsmith, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 46 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: cb424824-c256-400c-837b-0bf300674eb5

📥 Commits

Reviewing files that changed from the base of the PR and between 4968688 and 6fffaea.

📒 Files selected for processing (3)
  • docs/docs/api/form/numberinput.md
  • docs/docs/api/form/taginput.md
  • skills/bestax-form/SKILL.md

Walkthrough

The PR standardizes full-width prop compatibility, adds Card compound-component helper props, supports numeric Bulma size values, adds Tag light variants, introduces deprecated form export aliases, and synchronizes component metadata, documentation, examples, stories, and tests.

Changes

Component API consistency

Layer / File(s) Summary
Full-width prop compatibility
bulma-ui/src/elements/*, bulma-ui/src/components/*, bulma-ui/src/form/*, bestax-mcp/data/components/*, docs/docs/api/*, skills/*
Canonical isFullwidth props now take precedence over deprecated aliases. Runtime behavior, metadata, examples, tests, and migration guidance reflect the compatibility rules.
Card helper prop wiring
bulma-ui/src/components/Card.tsx, bulma-ui/src/components/__tests__/Card.test.tsx, bestax-mcp/data/components/Card.json, docs/docs/api/components/card.md
Card compound components now accept color, bgColor, and textColor, apply Bulma helper classes, and forward filtered HTML props. textColor takes precedence over color.
Numeric sizes and Tag variants
bulma-ui/src/columns/*, bulma-ui/src/elements/{Title,SubTitle,Tag}*, bestax-mcp/data/components/{Column,Columns,Title,SubTitle,Tag,Tags}.json, docs/docs/api/{columns,elements}/*
Column sizes accept numeric strings. Title and SubTitle sizes accept numeric and string values from 1 through 6. Tag supports isLight and documents a light variant.
Compatibility exports and references
bulma-ui/src/form/{Numberinput,Taginput}.tsx, bestax-mcp/data/skills.json, docs/docs/api/form/*
NumberInput and TagInput remain available as deprecated aliases for the preferred Numberinput and Taginput exports. Reference byte sizes and API documentation were updated.

Estimated code review effort: 4 (Complex) | ~45 minutes

Mergeability Score: 🔵 Low · up to 49686

The PR is mergeable with explicit owner follow-up: some guidance and migration output still describe unsupported or deprecated full-width spellings, and the alias documentation needs to distinguish component exports from props-type aliases. The bounded impact is incorrect consumer code or confusing API usage rather than a runtime failure.

Possibly related PRs

  • allxsmith/bestax#491: Both PRs modify Card color and helper-prop handling and related tests.
  • allxsmith/bestax#333: Both PRs update bestax-migrate prop-mapping guidance for full-width prop names.
  • allxsmith/bestax#336: Both PRs modify Card, Sidebar, and Tabs compound-component behavior and documentation.

Suggested labels: released, needs-human-review

Suggested reviewers: bestaxbot

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning Numeric size support and NumberInput/TagInput aliases are not included in linked issue #370, which covers only three API consistency areas. Link separate issues for numeric size support and NumberInput/TagInput aliases, or remove those changes from this PR.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main API consistency changes and identifies the affected areas.
Description check ✅ Passed The description provides a detailed change summary, testing evidence, affected scope, compatibility notes, and a linked issue.
Linked Issues check ✅ Passed The PR satisfies issue #370 by standardizing full-width props, adding Tag.isLight, and enabling helper props on all Card.* sub-parts.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/issue-370-api-consistency

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

Copy link
Copy Markdown
Contributor

Preview Deployment

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

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Standardizes commonly guessed APIs while preserving deprecated aliases, and updates tests, documentation, skills, and generated MCP metadata.

Changes:

  • Adds canonical full-width props, input aliases, Tag light variants, and Card helper props.
  • Expands accepted Column and heading size forms.
  • Updates tests, stories, skills, API docs, and generated indexes.

Reviewed changes

Copilot reviewed 74 out of 74 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
skills/bestax-theming/references/themeable-components.md Updates Tag and heading-size guidance.
skills/bestax-migrate/references/prop-map.md Documents canonical full-width spelling.
skills/bestax-layout-scaffold/references/layout-components.md Documents string sizes and Card helpers.
skills/bestax-form/SKILL.md Documents aliases and full-width convention.
skills/bestax-form/references/api.md Updates Select guidance.
skills/bestax-custom-component/SKILL.md Removes Card helper exception.
skills/bestax-custom-component/references/component-catalog.md Updates compound-component guidance.
skills/bestax-custom-component/references/api.md Documents Card helper support.
scripts/gen-component-catalog.mjs Updates generated catalog preamble.
docs/docs/guides/library/elements/index.md Mentions Tag light variants.
docs/docs/guides/helpers/visibility.md Uses canonical Button prop.
docs/docs/guides/getting-started/migration/react-bulma-components.md Updates migration guidance.
docs/docs/api/form/taginput.md Documents TagInput aliases.
docs/docs/api/form/select.md Documents deprecated Select alias.
docs/docs/api/form/numberinput.md Documents NumberInput aliases.
docs/docs/api/form/file.md Documents deprecated File alias.
docs/docs/api/elements/title.md Updates Title size documentation.
docs/docs/api/elements/tag.md Documents isLight.
docs/docs/api/elements/table.md Documents full-width alias.
docs/docs/api/elements/subtitle.md Updates SubTitle sizes.
docs/docs/api/elements/linkbutton.md Documents canonical full-width prop.
docs/docs/api/elements/button.md Updates full-width examples and props.
docs/docs/api/components/tabs.md Updates full-width examples and aliases.
docs/docs/api/components/sidebar.md Updates Sidebar full-width API.
docs/docs/api/components/card.md Documents Card sub-part helpers.
docs/docs/api/columns/column.md Regenerates Column props.
bulma-ui/src/form/Taginput.tsx Exports deprecated TagInput aliases.
bulma-ui/src/form/SelectBase.tsx Adds Select full-width alias.
bulma-ui/src/form/Numberinput.tsx Exports deprecated NumberInput aliases.
bulma-ui/src/form/File.tsx Adds File full-width alias.
bulma-ui/src/form/__tests__/Taginput.test.tsx Tests TagInput alias.
bulma-ui/src/form/__tests__/SelectBase.test.tsx Tests full-width precedence.
bulma-ui/src/form/__tests__/Numberinput.test.tsx Tests NumberInput alias.
bulma-ui/src/form/__tests__/File.test.tsx Tests File aliases.
bulma-ui/src/elements/Title.tsx Accepts numeric title sizes.
bulma-ui/src/elements/Tag.tsx Adds isLight.
bulma-ui/src/elements/Tag.stories.tsx Adds light Tag story.
bulma-ui/src/elements/Table.tsx Adds Table full-width alias.
bulma-ui/src/elements/SubTitle.tsx Accepts numeric subtitle sizes.
bulma-ui/src/elements/Button.tsx Adds canonical full-width prop.
bulma-ui/src/elements/Button.stories.tsx Updates full-width controls and story.
bulma-ui/src/elements/__tests__/Title.test.tsx Tests numeric and invalid sizes.
bulma-ui/src/elements/__tests__/Tag.test.tsx Tests Tag light variants.
bulma-ui/src/elements/__tests__/Table.test.tsx Tests Table aliases.
bulma-ui/src/elements/__tests__/SubTitle.test.tsx Tests numeric and invalid sizes.
bulma-ui/src/elements/__tests__/Button.test.tsx Tests Button full-width behavior.
bulma-ui/src/components/Tabs.tsx Adds canonical and legacy props.
bulma-ui/src/components/Sidebar.tsx Adds canonical full-width resolution.
bulma-ui/src/components/Sidebar.stories.tsx Updates Sidebar story controls.
bulma-ui/src/components/Card.tsx Adds helpers to Card sub-parts.
bulma-ui/src/components/Card.stories.tsx Demonstrates pinned footer helpers.
bulma-ui/src/components/__tests__/Tabs.test.tsx Tests Tabs alias chain.
bulma-ui/src/components/__tests__/Sidebar.test.tsx Tests Sidebar precedence and width.
bulma-ui/src/components/__tests__/Card.test.tsx Tests Card helper support.
bulma-ui/src/columns/Column.tsx Adds numeric-string sizes.
bulma-ui/src/columns/__tests__/Column.test.tsx Tests string sizes and offsets.
bulma-ui/src/__tests__/prefix-sweep.test.tsx Covers TagInput export.
bestax-mcp/data/skills.json Refreshes skill metadata.
bestax-mcp/data/components/Title.json Regenerates Title metadata.
bestax-mcp/data/components/Tags.json Adds nested Tag light prop.
bestax-mcp/data/components/Tag.json Adds light example and prop.
bestax-mcp/data/components/Tabs.json Updates full-width metadata.
bestax-mcp/data/components/Table.json Adds deprecated alias metadata.
bestax-mcp/data/components/SubTitle.json Regenerates size metadata.
bestax-mcp/data/components/Sidebar.json Updates full-width metadata.
bestax-mcp/data/components/Select.json Adds deprecated alias metadata.
bestax-mcp/data/components/LinkButton.json Updates inherited full-width props.
bestax-mcp/data/components/File.json Adds deprecated alias metadata.
bestax-mcp/data/components/Columns.json Regenerates Column type metadata.
bestax-mcp/data/components/Column.json Regenerates Column type metadata.
bestax-mcp/data/components/Card.json Adds Card sub-part helper metadata.
bestax-mcp/data/components/Buttons.json Updates nested Button metadata.
bestax-mcp/data/components/Button.json Updates canonical Button metadata.
bestax-mcp/data/catalog.json Refreshes component counts.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.


RBC uses bare booleans (`loading`, `outlined`, `rounded`, `fullwidth`); bestax prefixes
with `is`/`has` (`isLoading`, `isOutlined`, `isRounded`, `isFullWidth`). Per-component
with `is`/`has` (`isLoading`, `isOutlined`, `isRounded`, `isFullwidth`). Per-component

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Deliberately out of scope: this PR keeps bestax-migrate untouched — its isFullWidth output remains valid because the alias is only deprecated, never removed, so existing migrations do not break. The prop-map line documents the bestax convention (now canonically isFullwidth), and the public migration guide was updated in this PR to note the emitted spelling is a deprecated alias. Re-pointing the codemod mappings/fixtures at the canonical spellings is follow-up work for a bestax-migrate-scoped change.

Comment thread skills/bestax-form/SKILL.md Outdated
Comment on lines +122 to +124
Full-width is `isFullwidth` on every component (`Button`, `Select`, `File`, `Table`, `Tabs`,
`Sidebar`); older spellings (`isFullWidth`, `fullwidth`, `fullWidth`) still work as deprecated
aliases — write `isFullwidth`.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Fixed in 4968688 — the example now uses isFullwidth. The synced copies under create-bestax/templates and bestax-mcp/data regenerate from skills/ at build/pack time.

Comment thread bulma-ui/src/columns/Column.tsx Outdated
*/
export type BulmaColumnSize =
| number
| `${number}`

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Fixed in 00bfff3 — replaced ${number} with the enumerated 1–12 string literals. That bounds the string form to the documented range and the extractor expands the alias again: the BulmaColumnSize Types footnote is back in column.md and the MCP Column/Columns records carry the full expansion. (The unbounded number arm is pre-existing.)

Comment thread bulma-ui/src/elements/SubTitle.tsx Outdated
Comment on lines +13 to +14
export type SubTitleSize =
(typeof validSubTitleSizes)[number] | 1 | 2 | 3 | 4 | 5 | 6;

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Fixed in 00bfff3 — SubTitleSize is now a plain literal union (string and numeric forms spelled out), which the union walker expands. The generated subtitle.md props table and the MCP record inline the concrete values again; validSubTitleSizes stays the runtime allowlist.

Comment thread bulma-ui/src/elements/Title.tsx Outdated
Comment on lines +13 to +14
export type TitleSize =
(typeof validTitleSizes)[number] | 1 | 2 | 3 | 4 | 5 | 6;

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Fixed in 00bfff3 — TitleSize is now a plain literal union (string and numeric forms spelled out), which the union walker expands. The generated title.md props table and the MCP record inline the concrete values again; validTitleSizes stays the runtime allowlist.

@allxsmith
allxsmith requested review from bestaxbot and a balanced review from Copilot August 12, 2026 22:34

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 74 out of 74 changed files in this pull request and generated no new comments.

Suppressed comments (2)

skills/bestax-migrate/references/prop-map.md:35

  • This canonical-prop guidance conflicts with the migration tool: mapping.ts:180 still rewrites Button fullwidth to deprecated isFullWidth, while mapping.ts:742 leaves Tabs as deprecated fullwidth (the output fixtures confirm both). Since this PR establishes isFullwidth as canonical everywhere, update those mappings and fixtures so migrations do not immediately generate deprecated API usage; the public migration guide should then describe fullwidth → isFullwidth directly.
    bulma-ui/src/columns/Column.tsx:14
  • ${number} accepts out-of-range strings such as "13", "-1", and "1.5", so callers can type-check while emitting Bulma classes that do not exist despite the documented 1–12 contract. It also causes the API extractor to drop the BulmaColumnSize expansion entirely, as shown by the removed type section in column.md and empty types arrays in the generated MCP data. Keep the additive numeric-string support, but enumerate the supported string literals (or teach the extractor about a separately range-constrained alias).
  | `${number}`

@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 — 0 blocking · 2 advisory

# Severity Area Finding Location
1 🔵 Advisory API Card.* sub-parts widen color to the full validColors set (+inherit/current), while the parent Card's color stays restricted to the 6 named colors — a small internal inconsistency (sub-parts are the more capable ones). Documented, backward-compatible. bulma-ui/src/components/Card.tsx:228
2 🔵 Advisory Robustness Deprecated alias exports NumberInput/TagInput are the same object refs, so their displayName stays Numberinput/Taginput — DevTools shows the canonical name for the alias. Cosmetic and expected for a born-deprecated alias. bulma-ui/src/form/Numberinput.tsx:535

Overall: Clean, purely additive API-consistency change with strong test coverage. Every full-width component now takes canonical isFullwidth with the divergent spellings kept as @deprecated aliases resolved via canonical ?? legacy (canonical wins, false respected) — the exact pattern used across the file, applied consistently (Button/Table/File/Select two-way, Tabs three-way, Sidebar isFullwidth ?? fullWidth ?? false). Tag isLight lands on both the span and delete-button paths via the shared class list; Title/SubTitle numeric sizes normalize with String(size) and still reject out-of-range values at runtime; BulmaColumnSize gains a numeric-string form and the runtime already interpolates identically for number vs numeric string. The riskiest surface is the Card sub-part rewrite (7 components rerouted through useBulmaClasses), but the pre-existing CardHeader className-on-generated-title quirk and the withSubComponents identities are preserved, and helper props now correctly land in rest instead of leaking to the DOM.

Residual risk: the failure class is "the natural API guess is wrong."

  • Other divergent full-width spellings left behind — refuted: grep across src shows only Button/Table/File/SelectBase/Tabs/Sidebar carried a full-width prop; Panel's is-fullwidth is a hardcoded internal button class (not a prop) and Select forwards ...selectProps straight to SelectBase, so both casings flow through.
  • New deprecated aliases leaking to the DOM — refuted: isFullWidth is now destructured in every component that gained it (Table/File/SelectBase/Tabs), and Card sub-part helper props are consumed by useBulmaClasses and excluded from the spread rest.
  • Generated-artifact drift (catalog.json/MCP index/API docs) — could not run pnpm gen in the sandbox to confirm freshness; the committed propCount deltas are internally consistent (Button 22→23, Tag 8→9, Card 28→49 = 7 sub-parts × 3 helper props) and CI's gen:catalog:check + gen:mcp:check gate this on merge.

🏄 Total glassy-water session, dude — five gnarly little API traps smoothed into one mellow additive wave, nothing breaks, every legacy spelling still catches the ride. Aliases carry the deprecation flag, tests are all standing tall. Paddle it in. 🌊

…eeps concrete type values

The template-literal string form of BulmaColumnSize and the indexed-access
unions on TitleSize/SubTitleSize defeated the props extractor, dropping the
concrete expansions from the generated API docs and MCP index. Spelling out
the literals restores the expansions and bounds the string sizes to the
documented 1-12 / 1-6 ranges.
Copilot AI review requested due to automatic review settings August 13, 2026 00:40
@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

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

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 75 out of 75 changed files in this pull request and generated no new comments.

Suppressed comments (4)

bulma-ui/src/elements/Title.tsx:14

  • The numeric size form is added to the public API, but Title.stories.tsx still offers and demonstrates only string sizes. Add a numeric-size story or update an existing story to size={3} so Storybook documents this new prop form.
    bulma-ui/src/elements/SubTitle.tsx:14
  • The numeric size form is added to the public API, but SubTitle.stories.tsx still offers and demonstrates only string sizes. Add a numeric-size story or update an existing story to size={3} so Storybook documents this new prop form.
    bulma-ui/src/columns/Column.tsx:18
  • The numeric-string column form is not represented in Column.stories.tsx; its numeric examples still use numbers and its string examples are named fractions. Add a size="7" or offset="3" story example so Storybook documents the newly accepted API form.
  | '1'
  | '2'
  | '3'
  | '4'
  | '5'

bulma-ui/src/components/Tabs.tsx:39

  • The new canonical prop is not reflected in Storybook: bulma-ui/src/components/Tabs.stories.tsx:342 still renders <Tabs fullwidth>, so the component’s story continues teaching the deprecated spelling. Update that story (and its controls, if exposed) to use isFullwidth, as was done for Button and Sidebar.
  isFullwidth?: boolean;

@allxsmith

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 13, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai 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.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/docs/api/form/numberinput.md`:
- Around line 35-36: Update docs/docs/api/form/numberinput.md lines 35-36 to
distinguish the component alias NumberInput, which aliases Numberinput, from the
deprecated props type alias NumberInputProps; make the same wording correction
in docs/docs/api/form/taginput.md lines 35-36 for TagInput, Taginput, and
deprecated TagInputProps.

In `@docs/docs/guides/getting-started/migration/react-bulma-components.md`:
- Around line 49-50: Update the Button.fullwidth mapping and its fixture to emit
the canonical isFullwidth prop instead of deprecated isFullWidth, and revise the
migration guide text accordingly while preserving the other prop mappings.

In `@skills/bestax-form/SKILL.md`:
- Around line 122-124: Replace the universal full-width prop statement in the
skill documentation with a component-specific alias matrix covering Button,
LinkButton, Select, File, Table, Tabs, and Sidebar. Document only the aliases
each component actually supports, explicitly include LinkButton, and identify
isFullwidth as the preferred spelling only where valid so agents do not copy
unsupported TypeScript props.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: fa1f1ecf-413a-44f2-9555-81ebf6100dd6

📥 Commits

Reviewing files that changed from the base of the PR and between 39b8271 and 4968688.

📒 Files selected for processing (75)
  • bestax-mcp/data/catalog.json
  • bestax-mcp/data/components/Button.json
  • bestax-mcp/data/components/Buttons.json
  • bestax-mcp/data/components/Card.json
  • bestax-mcp/data/components/Column.json
  • bestax-mcp/data/components/Columns.json
  • bestax-mcp/data/components/File.json
  • bestax-mcp/data/components/LinkButton.json
  • bestax-mcp/data/components/Select.json
  • bestax-mcp/data/components/Sidebar.json
  • bestax-mcp/data/components/SubTitle.json
  • bestax-mcp/data/components/Table.json
  • bestax-mcp/data/components/Tabs.json
  • bestax-mcp/data/components/Tag.json
  • bestax-mcp/data/components/Tags.json
  • bestax-mcp/data/components/Title.json
  • bestax-mcp/data/skills.json
  • bulma-ui/src/__tests__/prefix-sweep.test.tsx
  • bulma-ui/src/columns/Column.tsx
  • bulma-ui/src/columns/__tests__/Column.test.tsx
  • bulma-ui/src/components/Card.stories.tsx
  • bulma-ui/src/components/Card.tsx
  • bulma-ui/src/components/Sidebar.stories.tsx
  • bulma-ui/src/components/Sidebar.tsx
  • bulma-ui/src/components/Tabs.tsx
  • bulma-ui/src/components/__tests__/Card.test.tsx
  • bulma-ui/src/components/__tests__/Sidebar.test.tsx
  • bulma-ui/src/components/__tests__/Tabs.test.tsx
  • bulma-ui/src/elements/Button.stories.tsx
  • bulma-ui/src/elements/Button.tsx
  • bulma-ui/src/elements/SubTitle.tsx
  • bulma-ui/src/elements/Table.tsx
  • bulma-ui/src/elements/Tag.stories.tsx
  • bulma-ui/src/elements/Tag.tsx
  • bulma-ui/src/elements/Title.tsx
  • bulma-ui/src/elements/__tests__/Button.test.tsx
  • bulma-ui/src/elements/__tests__/SubTitle.test.tsx
  • bulma-ui/src/elements/__tests__/Table.test.tsx
  • bulma-ui/src/elements/__tests__/Tag.test.tsx
  • bulma-ui/src/elements/__tests__/Title.test.tsx
  • bulma-ui/src/form/File.tsx
  • bulma-ui/src/form/Numberinput.tsx
  • bulma-ui/src/form/SelectBase.tsx
  • bulma-ui/src/form/Taginput.tsx
  • bulma-ui/src/form/__tests__/File.test.tsx
  • bulma-ui/src/form/__tests__/Numberinput.test.tsx
  • bulma-ui/src/form/__tests__/SelectBase.test.tsx
  • bulma-ui/src/form/__tests__/Taginput.test.tsx
  • docs/docs/api/columns/column.md
  • docs/docs/api/components/card.md
  • docs/docs/api/components/sidebar.md
  • docs/docs/api/components/tabs.md
  • docs/docs/api/elements/button.md
  • docs/docs/api/elements/linkbutton.md
  • docs/docs/api/elements/subtitle.md
  • docs/docs/api/elements/table.md
  • docs/docs/api/elements/tag.md
  • docs/docs/api/elements/title.md
  • docs/docs/api/form/file.md
  • docs/docs/api/form/numberinput.md
  • docs/docs/api/form/select.md
  • docs/docs/api/form/taginput.md
  • docs/docs/guides/getting-started/migration/react-bulma-components.md
  • docs/docs/guides/helpers/visibility.md
  • docs/docs/guides/library/elements/index.md
  • scripts/gen-component-catalog.mjs
  • skills/bestax-custom-component/SKILL.md
  • skills/bestax-custom-component/references/api.md
  • skills/bestax-custom-component/references/component-catalog.md
  • skills/bestax-form/SKILL.md
  • skills/bestax-form/references/api.md
  • skills/bestax-layout-scaffold/examples/centered.tsx
  • skills/bestax-layout-scaffold/references/layout-components.md
  • skills/bestax-migrate/references/prop-map.md
  • skills/bestax-theming/references/themeable-components.md

Comment thread docs/docs/api/form/numberinput.md Outdated
Comment thread skills/bestax-form/SKILL.md Outdated
Copilot AI review requested due to automatic review settings August 13, 2026 02:00
@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://3e743522.bestax.pages.dev

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 75 out of 75 changed files in this pull request and generated no new comments.

Suppressed comments (7)

bulma-ui/src/components/Tabs.tsx:43

  • The new canonical Tabs prop is not reflected in Storybook: Tabs.stories.tsx:342 still demonstrates only deprecated fullwidth, and its argTypes expose no isFullwidth control. Update the story to teach and expose the canonical prop, as required for changed components by bulma-ui/CLAUDE.md:20-25.
  isFullwidth?: boolean;
  /** Tabs expand to fill the horizontal space. @deprecated Use `isFullwidth` instead — `isFullwidth` wins if both are set. */
  isFullWidth?: boolean;
  /** Tabs expand to fill the horizontal space. @deprecated Use `isFullwidth` instead — `isFullwidth` wins if both are set. */
  fullwidth?: boolean;

bulma-ui/src/elements/Button.tsx:43

  • Because LinkButtonProps extends ButtonProps, this adds isFullwidth to LinkButton too, but LinkButton.stories.tsx:60-63 still exposes only deprecated isFullWidth. Update that story to make the new canonical API discoverable; changed components must keep stories aligned (bulma-ui/CLAUDE.md:20-25).
  isFullwidth?: boolean;
  /** Makes the button full-width. @deprecated Use `isFullwidth` instead — `isFullwidth` wins if both are set. */
  isFullWidth?: boolean;

bulma-ui/src/elements/Title.tsx:14

  • Storybook still limits Title's size control and examples to string values (Title.stories.tsx:12-15,41-52), so the newly supported numeric form is absent from the required story artifact. Add a numeric option/example to keep the story aligned with this prop change (bulma-ui/CLAUDE.md:20-25).
    bulma-ui/src/elements/SubTitle.tsx:14
  • Storybook still limits SubTitle's size control and examples to string values (SubTitle.stories.tsx:12-15,40-51), so the newly supported numeric form is absent from the required story artifact. Add a numeric option/example to keep the story aligned with this prop change (bulma-ui/CLAUDE.md:20-25).
    skills/bestax-layout-scaffold/examples/centered.tsx:47
  • The checked-in public skill showcase still uses <Button ... isFullWidth> at docs/docs/skills/layout-scaffold.mdx:270. Updating only this source example leaves the documentation site teaching the deprecated spelling; update the docs showcase to isFullwidth as well.
    bulma-ui/src/columns/Column.tsx:18
  • Column.stories.tsx has no numeric-string size or offset example, so this newly accepted form is missing from the required story artifact. Add an example such as size="7"/offset="3" to keep Storybook aligned with the public type change (bulma-ui/CLAUDE.md:20-25).
  | '1'
  | '2'
  | '3'
  | '4'
  | '5'

skills/bestax-form/SKILL.md:125

  • This shipped skill omits SelectBase even though this PR adds the canonical prop there, and “historically existed” is inaccurate because isFullWidth is newly added to several components in this PR. List SelectBase and describe the aliases by where they are accepted rather than as historical spellings.

@allxsmith
allxsmith merged commit a7031c0 into main Aug 13, 2026
59 checks passed
@allxsmith
allxsmith deleted the feat/issue-370-api-consistency branch August 13, 2026 02:19
@allxsmith
allxsmith requested a balanced review from Copilot August 13, 2026 02:28
@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 5.10.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 4.1.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 75 out of 75 changed files in this pull request and generated no new comments.

@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 2.0.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 1.0.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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] bulma-ui: API-consistency traps for agents — isFullWidth/isFullwidth, Tag isLight, Card.* helper props

2 participants