* feat(@shadcn/react): add message-scroller package
Add the @shadcn/react headless primitives package with MessageScroller
scroll anchoring, streaming follow, history prepend, and jump-to-message
behavior. Includes geometry helpers, use-render utility, and unit,
browser, and perf tests.
* feat(registry): add chat components
Add MessageScroller, Message, Bubble, Attachment, and Marker registry
sources for base and radix, style variants, preview-03 chat blocks,
and registry index wiring.
* feat(v4): integrate chat components into docs site
Wire chat components into the v4 app with docs routes, example preview
pages, message part renderers, markdown support, registry build updates,
and supporting lib utilities.
* feat(examples): add chat component demos
Add base and radix example demos for MessageScroller, Message, Bubble,
Attachment, Marker, scroll-fade, and shimmer.
* docs: add chat component documentation
Add component and utility docs for the chat component set, update docs
navigation, and add the June 2026 chat components changelog entry.
* chore: regenerate registry JSON output
Rebuild public registry artifacts for all style variants with the new
chat components.
* chore(release): add @shadcn/react publish and CI pipeline
Add Changesets prerelease workflow, browser test job, RELEASING docs,
and monorepo wiring for publishing @shadcn/react independently from
the shadcn CLI.
* docs: fix display of component preview on mobile
* fix
* fix
* docs: add message scroller docs
* style: format
* fix
* fix(v4): update homepage mobile demo fallback images
Replace registry dashboard screenshots with compressed CardsDemo captures and narrow the mobile bleed width to 140vw.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(v4): remove container-wrapper padding on homepage
Use p-0 on the demo section wrapper so the mobile preview image aligns flush without extra horizontal inset.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(v4): drop redundant md:p-0 on homepage wrapper
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
The <ComponentsList /> tag on /docs/components was emitted as-is by
the Copy Page button and the /llm/[slug] markdown endpoint because
getComponentsList() walked components.children for pages directly.
After #9304 restructured the folder into components/radix/ and
components/base/ subfolders, the filter always returned [] and the
tag was replaced with an empty string (or, in the copy-page case,
never replaced at all).
- Reuse getPagesFromFolder() from lib/page-tree so the walker stays
in sync with the on-screen ComponentsList React component.
- Match the existing llms.txt format: flat absolute URLs (the
/docs/components/:name -> /docs/components/radix/:name redirect in
next.config.mjs is the canonical form) plus the frontmatter
description pulled via source.getPage() on each page.
- Export replaceComponentsList() and call it from
docs/[[...slug]]/page.tsx so the Copy Page button goes through the
same replacement path as processMdxForLLMs.