Skip to content

docs: add "The State of React" — a dated, linkable component comparison - #397

Merged
allxsmith merged 9 commits into
mainfrom
claude/component-parity-comparison-mxronl
Jul 28, 2026
Merged

allxsmith merged 9 commits into
mainfrom
claude/component-parity-comparison-mxronl

Conversation

@allxsmith

@allxsmith allxsmith commented Jul 27, 2026 •

Copy link
Copy Markdown
Owner

Description

Adds "The State of React", a dated, linkable component comparison published as a recurring monthly blog series (first edition: July 2026). It compares bestax against react-bulma-components, Mantine, MUI, Chakra UI, shadcn/ui, and React-Bootstrap across ~150 capabilities as a compact icon matrix: each cell is a clickable ✓/◐/– that links to that library's own component docs (the component name is on hover). Column headers are abbreviated with the full name on hover. bestax links are internal and validated by the build; competitor links are best-effort with per-library fallbacks.

Package(s) affected:

  • bulma-ui (@allxsmith/bestax-bulma)
  • create-bestax (create-bestax)
  • docs (@allxsmith/bestax-docs)
  • Other (please specify):

New / changed files:

  • docs/src/data/componentComparison.js — the capability × library matrix + per-cell doc-link resolvers + lastReviewed.
  • docs/src/components/ComponentComparison/ — theme-aware, linkable icon-matrix table (sticky header/first column, light + dark).
  • docs/blog/2026-07-27-state-of-react/index.md — the July 2026 edition (synthwave cover, admonitions, full-width layout).
  • docs/static/img/state-of-react/2026-07.{svg,png} — cover art (SVG source + 1200×630 social image).
  • docs/blog/CLAUDE.md — runbook for future monthly editions.
  • docs/src/css/custom.css, docs/docusaurus.config.js — full-width layout for the posts + exclude CLAUDE.md from the blog glob.
  • docs/docs/guides/getting-started/migration/react-bulma-components.md — cross-link to the series.

Related Issue(s)

Closes #396

Type of Change

  • Bug fix
  • New feature
  • Refactor
  • Documentation
  • Performance
  • Build tooling
  • Other (please describe):

Checklist

  • My code follows the project style guidelines
  • I have performed a self-review of my code
  • I have added tests that prove my fix is effective or that my feature works — n/a (docs only)
  • I have added/updated documentation as needed
  • I have updated Storybook stories as needed (bulma-ui) — n/a
  • My changes require a change to the documentation
  • All new and existing tests passed — docs build passes; onBrokenLinks: 'throw' validated every internal link
  • Any relevant dependencies are updated — n/a
  • If this PR changes commands, conventions, or package structure, the affected CLAUDE.md files are updated — added docs/blog/CLAUDE.md

Screenshots / Demos

The cover art is committed at docs/static/img/state-of-react/2026-07.png (1200×630). The post renders a full-width, sticky-header icon matrix in light and dark (blog "Recent posts" sidebar and right-hand TOC collapsed on comparison posts). Every cell is just the clickable status icon; hover shows the component name.

Additional Context

  • Method: rows are capabilities, not raw exports; ◐ = via prop/composition (treated as "absent" when judging uniqueness); official companion packages (Mantine @mantine/*, MUI @mui/lab & @mui/x-*) count as first-party. Competitor deep-links are best-effort with a per-library fallback and are not covered by the build's link check.
  • The blog is excluded from the LLM index by design (includeBlog: false) — this is a dated snapshot, not canonical reference documentation. Future refreshes are new dated editions per docs/blog/CLAUDE.md.
  • react-bulma-components is included (abbreviated r-bulma); the migration guide also covers it directly.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Pz9Bgf3T5is7nd3mynFtUC

Summary by CodeRabbit

  • New Features
    • Added “The State of React — July 2026” blog post with a capability comparison matrix across major React component libraries.
    • Introduced an interactive comparison component with glyph-based statuses, legend, accessibility labels, internal/external links, and an expandable “method & caveats” section.
    • Added a “See how they compare” tip to the React-Bulma migration guide.
  • Documentation
    • Added a runbook documenting the monthly comparison-series workflow and formatting/verification conventions.
  • Style
    • Updated blog-post layout (focus content column, comparison-scoped styling) and added improved cover/banner styling with dark-theme table support.
  • Chores
    • Adjusted blog preset exclusions to prevent non-post files in blog/ from being treated as posts.

claude added 5 commits July 27, 2026 23:22
A dated, linkable comparison of bestax against Mantine, MUI, Chakra UI,
shadcn/ui, React-Bootstrap, and react-bulma-components, published as a
recurring monthly blog series.

- src/data/componentComparison.js: the capability x library matrix with
  per-cell doc-link resolvers (bestax links are internal and build-validated;
  competitor links are best-effort with per-library fallbacks) plus lastReviewed.
- src/components/ComponentComparison: theme-aware, linkable table (sticky
  header/first column, light + dark).
- blog/2026-07-27-state-of-react-libs: the July 2026 edition, with admonitions
  framing it as a point-in-time snapshot and pointing to the latest edition.
- blog/CLAUDE.md: runbook for future monthly editions.
- Cross-link from the react-bulma-components migration guide to the series.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pz9Bgf3T5is7nd3mynFtUC
The blog plugin globs every markdown file in blog/, so the new
blog/CLAUDE.md runbook was being rendered as a post. Add a blog `exclude`
(Docusaurus defaults + CLAUDE.md) so the runbook stays an agent-only file.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pz9Bgf3T5is7nd3mynFtUC
Give the wide comparison table room by collapsing both menus on posts that
render it:

- hide_table_of_contents: true in the post frontmatter removes the right-hand
  table of contents (built-in, per-post).
- A scoped :has(.sorl-comparison) rule in custom.css collapses the blog
  "Recent posts" sidebar and widens the content column to full width. It keys
  off the component's presence, so it is flash-free (present at SSR) and only
  affects posts that embed the comparison — no global blogSidebarCount change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pz9Bgf3T5is7nd3mynFtUC
Give the series an EDM/outrun cover (a nod to the "A State of Trance"
namesake): a React-atom-meets-sunset over a neon grid with an equalizer
skyline.

- static/img/state-of-react-libs/2026-07.svg: the editable cover source,
  rendered full-width at the top of the post via an .sorl-cover <img>.
- static/img/state-of-react-libs/2026-07.png: 1200x630 raster of the same,
  wired to `image:` (og / Medium link previews) and `cover_image:` (dev.to).
- blog/CLAUDE.md: documents the cover workflow for future editions.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pz9Bgf3T5is7nd3mynFtUC
react-bulma-components is a dead Bulma-0.9 subset, so it added little to the
matrix. Remove its column and reindex, leaving bestax vs Mantine, MUI, Chakra,
shadcn/ui, and React-Bootstrap. Also updates the post prose, the tip, the
migration-guide cross-link, and the runbook to match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pz9Bgf3T5is7nd3mynFtUC
@coderabbitai

coderabbitai Bot commented Jul 27, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 649b5b60-c57f-4f3c-9919-b033003c5b9e

📥 Commits

Reviewing files that changed from the base of the PR and between 447fd53 and fb40dc1.

📒 Files selected for processing (2)
  • docs/src/components/ComponentComparison/styles.module.css
  • docs/src/data/componentComparison.js
🚧 Files skipped from review as they are similar to previous changes (2)
  • docs/src/components/ComponentComparison/styles.module.css
  • docs/src/data/componentComparison.js

Walkthrough

Adds a dated “State of React” blog series with a component-library capability matrix, documentation links, accessible table rendering, responsive styling, publication guidance, and related documentation cross-links.

Changes

State of React comparison

Layer / File(s) Summary
Comparison data and link resolution
docs/src/data/componentComparison.js
Defines seven-library metadata, documentation URL resolvers, cell-status parsing, review date, and a grouped capability matrix.
Comparison table renderer
docs/src/components/ComponentComparison/*, docs/src/css/custom.css
Renders the dated, linkable comparison table with status glyphs, accessibility text, legends, methodology details, responsive behavior, sticky columns, theme-aware styling, and comparison-post layout rules.
Blog publication and documentation integration
docs/blog/2026-07-27-state-of-react/index.md, docs/blog/CLAUDE.md, docs/docs/guides/getting-started/migration/react-bulma-components.md, docs/docusaurus.config.js
Publishes the July 2026 edition, documents the recurring workflow, adds a migration-guide link, and excludes runbook files from blog discovery.

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

Sequence Diagram(s)

sequenceDiagram
  participant Reader
  participant StateOfReactBlog
  participant ComponentComparison
  participant componentComparisonData
  participant LibraryDocs
  Reader->>StateOfReactBlog: open July 2026 edition
  StateOfReactBlog->>ComponentComparison: render comparison
  ComponentComparison->>componentComparisonData: load matrix and library metadata
  ComponentComparison->>LibraryDocs: navigate to component documentation
Loading

Possibly related issues

  • allxsmith/bestax#376: Both changes add or reference comparison-oriented content in the React Bulma components migration flow.
🚥 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%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding The State of React as a dated, linkable component comparison in docs.
Description check ✅ Passed The template sections are present and filled with relevant details, including summary, affected package, issue reference, change type, checklist, and context.
Linked Issues check ✅ Passed Implements the monthly comparison series with dated post, linkable cells, theme-aware table, runbook, and cross-link as requested in #396.
Out of Scope Changes check ✅ Passed No clearly unrelated changes are present; the added docs, styles, data, config, and runbook all support the comparison-series objective.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/component-parity-comparison-mxronl

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://ab2ac1fc.bestax.pages.dev

Bring react-bulma-components back to the comparison, but de-emphasized: an
abbreviated "r-bulma" header and icon-only cells (just the clickable ✓/◐, no
component name), since its links all resolve to one homepage. Restores the
seven-library prose in the post, migration cross-link, and runbook.

The ComponentComparison table now honors a per-library `iconOnly` flag and a
`title` (full name) tooltip on abbreviated headers.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pz9Bgf3T5is7nd3mynFtUC
@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://43518fa2.bestax.pages.dev

Drop the component-name values from every cell — each cell is now just the
clickable ✓/◐/– glyph (the component name lives in its hover/aria label and the
link target). Abbreviate every column header (Chakra, shadcn, R-Bootstrap, …)
with the full name in a title tooltip, and center headers + glyphs. All seven
libraries now fit comfortably without horizontal scrolling.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pz9Bgf3T5is7nd3mynFtUC
@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

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

@allxsmith allxsmith added the deep-review label Jul 28, 2026 — with Claude

@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 Robustness Competitor deep-links are best-effort and not build-validated; some resolve to a library index rather than the exact component page. Acknowledged in the method note + runbook. docs/src/data/componentComparison.js:118-278
2 🔵 Advisory Accessibility Column-header <th> cells omit scope="col" (only the row-header <th scope="row"> sets scope). Low impact — every data cell already carries a full aria-label naming library + component + status, so per-cell context is preserved regardless. docs/src/components/ComponentComparison/index.js:132-141

Overall: Sound, low-risk, docs-only change. I built the site locally (turbo run build --filter=@allxsmith/bestax-docs, exit 0) — onBrokenLinks: 'throw' validated every internal bestax cell link, the /docs/intro link, and the /blog/tags/state-of-react-libs "latest edition" pointer; the edition post and the tag archive both generate, and blog/CLAUDE.md is correctly excluded from the post glob. The riskiest surface is factual accuracy of ~150 hand-compiled matrix cells and the external competitor links, both of which the post itself frames as best-effort and invites corrections on — nothing a build or review can fully certify.

Residual risk (failure class = broken links / silently-wrong comparison):

  • Internal bestax links silently drifting — refuted: the build passed with onBrokenLinks: 'throw', and I confirmed /docs/api/ (the bestaxHref fallback) does not resolve to a built route, so any future unmapped bestax name breaks the build loudly instead of degrading to a generic page.
  • CLAUDE.md leaking as a rendered post — refuted: the added blog exclude glob works (no *claude* under build/blog), and the default exclusions were preserved, not replaced.
  • External competitor links — genuinely unvalidated (advisory #1); this is the one residual, and it is an accepted, documented trade-off rather than a regression.

🏄 Clean set, dude — paddled the whole lineup and every internal link caught the wave, build came in green first try. Only the competitor deep-links are still out past the break where the linter can't reach 'em, but the post owns that honestly. Send it.

Rebrand the recurring component-comparison blog series from "A State of
React Libs" to the more generic "The State of React", leaving room to grow
into broader React coverage while staying focused on component libraries
for now.

- Rename the edition folder, slug (state-of-react-2026-07), tag
  (state-of-react), and image paths (img/state-of-react/).
- Update the synthwave cover art title to "THE STATE OF / REACT" and
  regenerate the 1200x630 PNG social image.
- Refresh the series name across the post, the ComponentComparison
  component, the migration-guide cross-link, and the blog CLAUDE.md runbook;
  point "latest edition" links at /blog/tags/state-of-react.
- Rename the internal --sorl-* status CSS variables to --sor-*.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pz9Bgf3T5is7nd3mynFtUC
@allxsmith allxsmith changed the title docs: add "A State of React Libs" — a dated, linkable component comparison docs: add "The State of React" — a dated, linkable component comparison Jul 28, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

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

Copy link
Copy Markdown
Owner Author

@coderabbitai review


Generated by Claude Code

@coderabbitai

coderabbitai Bot commented Jul 28, 2026 •

Copy link
Copy Markdown

@allxsmith I’ll review the changes in #397.

✅ 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: 2

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

Inline comments:
In `@docs/src/components/ComponentComparison/styles.module.css`:
- Around line 157-158: Fix the Stylelint violations in the .cell styles and the
corresponding styles around the additionally referenced section: remove the
empty .cell rule, and replace the deprecated clip declaration with the supported
equivalent while preserving the existing visual behavior.

In `@docs/src/data/componentComparison.js`:
- Around line 196-199: Update the MUI URL mapping used by muiHref to add a
MenuList override pointing to the documented
https://mui.com/material-ui/api/menu-list/ page, while preserving the existing
fallback behavior for other component names.
🪄 Autofix (Beta)

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: 60e1b5c3-2d82-454a-9de2-83ba731ba01e

📥 Commits

Reviewing files that changed from the base of the PR and between ba0a54e and 447fd53.

⛔ Files ignored due to path filters (2)
  • docs/static/img/state-of-react/2026-07.png is excluded by !**/*.png
  • docs/static/img/state-of-react/2026-07.svg is excluded by !**/*.svg
📒 Files selected for processing (8)
  • docs/blog/2026-07-27-state-of-react/index.md
  • docs/blog/CLAUDE.md
  • docs/docs/guides/getting-started/migration/react-bulma-components.md
  • docs/docusaurus.config.js
  • docs/src/components/ComponentComparison/index.js
  • docs/src/components/ComponentComparison/styles.module.css
  • docs/src/css/custom.css
  • docs/src/data/componentComparison.js

Comment thread docs/src/components/ComponentComparison/styles.module.css Outdated
Comment thread docs/src/data/componentComparison.js
- Remove the empty `.cell` rule (Stylelint block-no-empty); `.cell` stays
  defined via the `.table td.cell` centering selector, so `styles.cell` is
  unchanged.
- Replace the deprecated `clip: rect(...)` in `.srOnly` with
  `clip-path: inset(50%)` (same visually-hidden behavior).
- Map MUI `MenuList` to its documented API page
  (material-ui/api/menu-list) instead of the non-existent react-menu-list
  guide URL.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pz9Bgf3T5is7nd3mynFtUC
@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

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

@allxsmith
allxsmith merged commit 7a87df2 into main Jul 28, 2026
12 checks passed
@allxsmith
allxsmith deleted the claude/component-parity-comparison-mxronl branch July 28, 2026 23:30
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.7.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 2.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

@bestax-release-bot

Copy link
Copy Markdown

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

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.

docs: dated, linkable component comparison — "The State of React" blog series

2 participants