Skip to content

Add the React registry and unified Astro/React docs - #269

Merged
silveltman merged 32 commits into
mainfrom
feat/react-port-20261009
Oct 10, 2026
Merged

silveltman merged 32 commits into
mainfrom
feat/react-port-20261009

Conversation

@silveltman

@silveltman silveltman commented Oct 9, 2026 •

Copy link
Copy Markdown
Collaborator

Adds a native React edition of all 76 UI families and 82 blocks, and one docs site with the requested Astro/React dropdown. Switching keeps the component page when supported; unavailable Astro families have an explicit fallback. Both editions use the existing eight presets and portable registry items.

The docs include the official shadcn/ui Base UI examples pinned to 2d3f1cd436b18ea12f24130de4df781355925b08: 443 React source files and 322 native Astro equivalents. Examples can be installed by family and viewed with their source. Agent Markdown and llms exports use the same pages and example inventory.

Validation

Base: 7aef7eb1c772baf8609abfcb047dc00be4bffce6.
Head: 471103bed5a9f4cb9cc17030313781c365803af9.

  • vp run check passes on the final head. The build at 2e587461a7cf4f563b7e24fa97961ad9726455fc covers identical compiled and registry source; the final commit only overrides the preview-server proxy. All eight standalone preview gallery responses match dist exactly. Together these cover formatting, strict TypeScript/Astro, ESLint, knip, registry validation/generation, all 21 existing tests, HTML validation, link checks and all eight React galleries.
  • Actual shadcn CLI installations in clean Astro and React consumers pass strict checks and production builds in all eight styles. Matching earlier evidence is reused for unchanged registry output. The final portable-link families pass all eight strict checks/builds again in both frameworks. The last native Drawer scripts install correctly in all eight styles and match source exactly; Vega passes strict checks/build, with the same changed scripts in the other seven styles.
  • A real Next.js production build prerenders all 443 React examples imported from a server page.
  • Independent general and visual reviews cover the unified docs and the correction deltas, with no unresolved confirmed introduced findings at the final head. The final review verifies standalone galleries/assets, actual Vega-to-Nova rendering and expanded React Lyra margin (16px); Drawer open state, nested stack, handles, closing, focus and scroll locks were independently verified at matching 2e587461. Browser coverage includes representative pages at 390, 768 and 1440 pixels, framework switching, source navigation, mobile search, labels and keyboard controls, style changes, Toast, Sidebar, and responsive/nested Drawers. Other changed routes are structurally checked; no claim of complete visual inspection of every new example.
  • GitHub Check and Netlify deploy preview pass on final head 471103bed5a9f4cb9cc17030313781c365803af9 (deploy 6aca6a6d0a75ee00089b93e7). Hosted verification confirms framework switching with query/anchor preservation, the explicit missing-Astro fallback, mobile switching at 390px without horizontal overflow, and actual Vega-to-Nova React rendering (36px/8px to 32px/10px height/radius). All eight gallery entrypoints and their 313 distinct referenced assets return HTTP 200.

Limitations and review status

Astro examples are explicitly React only where native primitives cannot preserve the official behavior, including dropdown submenus, multiple combobox selection, three slider thumbs, and multiple drawer snap points. Other families without native Astro implementations are labeled accordingly. The upstream Typography examples page now redirects to Typeset; the existing Fulldev Typography usage remains.

Portable examples replace Next.js Link/Image with equivalent elements and use absolute upstream asset/docs URLs. Astro Input Group textarea growth uses CSS field-sizing: content, with browser support limits. Existing upstream accessibility/hydration findings and the string-name Icon API bundle-size tradeoff remain documented.

CodeRabbit CLI checkpoint on final head 471103bed5a9f4cb9cc17030313781c365803af9, against actual base 7aef7eb1c772baf8609abfcb047dc00be4bffce6: exit 1, too_many_files, 4,918 files versus the 300-file limit. No files were reviewed and no reduced-scope workaround was used. CodeRabbit PR review was also skipped on the final head: 2,999 files versus its 150-file limit. The green CodeRabbit status is a skipped review, not a completed review. The user requested Dispatch all after the CLI limitation was disclosed. Merge, live publication and the resulting release are authorized. The automatic PR review ran its size gate and skipped the review. Dispatch proceeds on the passing checks and independent local reviews; neither the skipped PR review nor the failed CLI checkpoint is counted as a successful review.

silveltman and others added 2 commits October 9, 2026 19:49
Installs every shadcn/ui registry:ui item with the official CLI (base-vega,
lucide) into an isolated react/ workspace package, then restores the cn-*
placeholders of the canonical source so each style is generated by the
repository's existing style maps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Installs with rsc enabled, so the source carries the same "use client"
directives as the shadcn registry and the consumer's CLI decides whether to
keep them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@netlify

netlify Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for fulldev-ui ready!

Name Link
🔨 Latest commit 471103b
🔍 Latest deploy log https://app.netlify.com/projects/fulldev-ui/deploys/6aca6a6d0a75ee00089b93e7
😎 Deploy Preview https://deploy-preview-269--fulldev-ui.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

silveltman and others added 27 commits October 9, 2026 19:58
Banner, form, header, icon, layout, logo, marquee, price, rating, section,
theme-toggle, toc, typography and video as native React components with the
same cn-* placeholders, data slots and behavior as the Astro versions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
All 82 blocks as React components with the same props, markup and styling,
native images with caller-owned srcset, and children for caller-owned
content. The Vite gallery under react/gallery renders every component
family and block in one style, built from the same cn-* style maps as the
registry. react/registry.json lists the React registry items.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
registry:build writes the React registry to public/r/react in every style
with the same style maps, registry:validate checks both registries, and
check runs the React typecheck, lint and knip. The build adds the gallery
to dist/react in every style for previews. The npm package leaves the
React registry out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One demo per family that uses every exported part, its variants and its
interactive states, so each component can be checked in every style.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Scans every demo for dependencies up front so the dev server does not
reload, keeps the browser-only gallery from rendering the theme script,
and labels demo controls and landmarks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tailwind skips classes inside CSS files, so the gallery reads them from the
React registry output instead, the way the docs site picks them up from
public/r.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Icon names come from content, so like the Astro Icon it resolves every
icon of both sets, including simple:figma and the x.com alias, instead of
a fixed list of social brands.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DrawerContent scrolls content taller than the drawer, as the Astro
Drawer does, and is built from exported DrawerViewport and DrawerPopup.
DrawerProvider, DrawerIndent, DrawerIndentBackground and
DrawerVirtualKeyboardProvider wrap the Base UI parts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A caller's ref no longer replaces the internal ref, so Doc1 code blocks
copy their code, and a React 19 callback ref's cleanup runs on detach.
The doc gallery shows Doc1CodeBlock mapped as the pre of MDX-style
content.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sidebar takes mobileTitle and mobileDescription with the upstream English
defaults, and Sidebar1 forwards labels.mobileTitle and
labels.mobileDescription as the Astro block does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Below the lg breakpoint a page picker replaces the 158-link list, so a
page starts at the top, and three demos fit a 390px viewport.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The workspace lists the root package, so Changesets still versions
fulldev-ui next to the private React package.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ixes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…osed

The search dialog sits next to the sidebar instead of inside it, so it is
mounted while the mobile sheet is closed. The search button stays in the
sidebar header.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A query after the route belongs to the demo, and a heading anchor such as
#installation scrolls within the current page instead of replacing it.
Demos that render their own main element get no gallery main around them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Accordion, calendar, carousel and navigation menu examples have their own
labels, the Item group holds list items with separators outside it, and
the sidebar demo renders a single main element.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A heading anchor such as #installation replaces the #/ route in the URL,
so the gallery records the page in ?page= on that history entry. A reload,
the style picker and Back then open the same page and scroll to the
anchor once it has rendered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Block demos link to #, which location.hash reports as empty. The gallery
now treats any fragment that is not a #/ route as an anchor, so the page
stays, is kept in ?page= for reloads and Back, and the style picker
carries the bare # along.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…/ui examples

- Docs at /astro/... and /react/..., with a framework selector in the sidebar,
  per-edition navigation, search and pagination; old URLs redirect.
- <Example> renders one source file as preview, code, Markdown and install.
- React: the examples of the live shadcn/ui Base UI docs, one
  <family>-examples registry item each, with the MIT docs helpers they use.
- The React gallery is now the preview app behind the React pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- All ComponentPreview examples of the canonical docs, including RTL,
  Date Picker and Data Table, from the exact upstream files with their
  helpers and dependencies in each <family>-examples item.
- Shorter React pages: every example, usage, API and notes; no guides.
- Dropdown framework switcher, per-edition llms.txt, a home page for both
  editions, Usage labels for block demos, bounded preview heights.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Native Astro ports of every official example the Astro primitives
  support, with each page in the official order. Examples that need a
  missing part (Dropdown Menu submenus, Combobox chips) say they are in
  the React docs only.
- The official Toast examples are Base UI Toast: they move from sonner
  to toast, with native Astro ports and their own toast-examples item.
  Sonner keeps its own page and demo. The React preview mounts both
  Toasters for official examples.
- Example scripts initialize on astro:page-load and skip elements they
  already bound, so they keep working after a style switch.
- SidebarProvider leaves a nested sidebar alone and initializes markup
  whose inline script did not run. sidebar-demo renders in a frame.
- Unique ids per page, slider thumbs named after their label, upstream
  avatar images by URL, no em dashes in example text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Switch and RadioGroupItem render a button, so a label works with `for`
  and around the control. Field parts and FieldSet take `as`, so a choice
  card is valid label content. FieldGroup takes a `data-slot` override.
  Collapsible renders as an `li` and DropdownMenuItem as a `div` where an
  example needs it.
- Examples that change the official composition are React only: Slider
  multiple thumbs, Drawer snap points, Button Group demo and RTL.
- Drawer examples follow the 768px breakpoint as it changes.
- Classes for one style, such as `style-lyra:ml-4`, resolve per style in
  the registry, the React previews and the Astro previews.
- Docs tables scroll inside the content column; the full-page sidebar
  example keeps a fixed 640px React frame.
- Type and HTML validation fixes: links take `as="a"`, card forms own
  their submit button, unique ids, updated landmark overrides.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The official Navigation Menu and Breadcrumb examples link to
  shadcn/ui's docs pages by absolute URL, so installed copies work.
- linkinator skips hash routes of the React preview app (`#/...`) but
  still checks page anchors, and retries network errors.
- The React Button Group page renders its key name with `kbd`; the React
  Sidebar caption is its own paragraph.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
silveltman and others added 3 commits October 10, 2026 13:35
- The docs example renderer types the example component's props loosely,
  so `slot` type-checks.
- src/lib/examples.ts keeps its local helpers unexported; knip treats the
  two shipped shadcn/ui docs helpers like the price formatter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Drawer demo and nested examples rebind Data Slot when the 768px
breakpoint changes the swipe direction. They now keep each drawer's open
state and active trigger, rebind a nested stack from the outside in, and
show the swipe handle in open popups only below 768px.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Vite's preview server inherited the development proxy for /preview/react/,
so astro preview forwarded the galleries to the React dev server. It now
serves the built galleries from dist; astro dev keeps the proxy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@silveltman silveltman changed the title Add the complete React UI and block registry Add the React registry and unified Astro/React docs Oct 10, 2026
@silveltman
silveltman marked this pull request as ready for review October 10, 2026 18:00
@silveltman
silveltman merged commit e7c330a into main Oct 10, 2026
7 checks passed
@silveltman
silveltman deleted the feat/react-port-20261009 branch October 10, 2026 18:02
@fulldev-release fulldev-release Bot mentioned this pull request Oct 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant