Commit Graph

376 Commits

Author SHA1 Message Date
github-actions[bot] 63c1308d11 chore(release): version packages (#11714)
Co-authored-by: shadcn <m@shadcn.com>
2026-08-31 13:54:21 +04:00
shadcn 503a3a57ae fix(react): hide MessageScroller until the opening position applies (#11720)
* fix(react): hide MessageScroller until the opening position applies

A server-rendered transcript paints at scrollTop 0, then jumps after
hydration. Emit data-pending-scroll on first paint and hide the styled
viewport until defaultScrollPosition runs.

* style: format MessageScroller docs tables and class order
2026-08-31 13:43:41 +04:00
shadcn f9ea1e600e Add official site SEO metadata (#11713)
* feat(site): add official SEO metadata

* chore(site): refine sitemap and redirect
2026-08-30 12:58:50 +04:00
github-actions[bot] 1773ecfeeb chore(release): version packages (#11567)
Co-authored-by: shadcn <m@shadcn.com>
2026-08-21 21:27:21 +04:00
shadcn 33c81f991f feat(shadcn): add private repository support for github registries (#11582)
* feat(shadcn): add private repository support for github registries

* style: code
2026-08-21 21:24:02 +04:00
Ronny Badilla b4f2023b1d feat(shadcn): add migrate base-color (#11248)
* feat(shadcn): add migrate base-color

Add a `base-color` migration that switches a project's base color and
rewrites its theme CSS variables, mirroring `migrate icons`. Only tokens
that still hold the source base color's value are replaced; customized
tokens are left untouched and reported. `--from` defaults to the current
`baseColor`.

* chore: add changeset

* chore: changeset

---------

Co-authored-by: shadcn <m@shadcn.com>
2026-08-20 12:34:02 +04:00
github-actions[bot] d4fc45b1fb chore(release): version packages (#11503)
Co-authored-by: shadcn <m@shadcn.com>
2026-08-13 22:43:17 +04:00
shadcn 9f4e3ff260 fix(shadcn): suppress EACCES when resolving monorepo targets (#11504)
Generated with [Devin](https://devin.ai)

Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-13 22:34:40 +04:00
shadcn 87d71b3629 fix(registry): resolve package.json registries when adding components (#11502)
ensureRegistriesInConfig now checks package.json registries before
falling back to the registries index. Registries declared in
package.json are merged into the config in memory and never persisted
to components.json: the components.json write is built from the file
on disk, and init only persists registries discovered from the index.
2026-08-13 22:06:34 +04:00
shadcn e66b99b14d fix(shadcn): suppress EACCES in remaining migration glob scans (#11500)
* fix: ignore errors on glob

* fix: add error suppression for workspace and migration scans

* fix(shadcn): add suppressErrors to migration glob scans

---------

Co-authored-by: Jonathan <contact@grafikart.fr>
Co-authored-by: Jonathan <395137+Grafikart@users.noreply.github.com>
2026-08-13 21:48:25 +04:00
shadcn aef1cdca54 fix(registry): merge registries from package.json and components.json (#11501)
- getRegistriesConfig now merges registries from both package.json and
  components.json, with components.json taking precedence per key.
- registry add now writes to package.json when components.json is not
  present, mirroring how registries are resolved.
2026-08-13 21:46:49 +04:00
Jonathan 03c45b822e fix(shadcn): stop throwing on unreadable files (#9248) 2026-08-13 21:45:25 +04:00
github-actions[bot] efac598707 chore(release): version packages (#11462)
Co-authored-by: shadcn <m@shadcn.com>
2026-08-12 00:38:09 +04:00
shadcn 401d10b818 feat(helpers): human-in-the-loop mocking for the AI SDK (#11484)
* feat(helpers): add human-in-the-loop mocking

* feat(helpers): adopt useChat message generics and finalize human-in-the-loop

* chore(helpers): tighten changesets

* refactor(registry): use named message type aliases with createChat

* docs(changelog): add helpers human-in-the-loop entry

* docs: add changelog
2026-08-12 00:34:51 +04:00
Nicolas Bouvrette deda4df80f feat(shadcn): add SOCKS proxy support (#10453)
* fix(shadcn): replace node-fetch with undici

Removes the transitive node-domexception deprecation warning triggered
on install by node-fetch -> fetch-blob. Uses Node's global fetch with
undici.ProxyAgent as the dispatcher when https_proxy is set, preserving
existing proxy support.

Also declares the implicit Node version requirement (>=20.18.1, matching
undici@7's engines field) now that Node 20 is entering maintenance EOL.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: changeset

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(shadcn): expand proxy env-var support via EnvHttpProxyAgent

Switch the registry fetcher from undici.ProxyAgent (single-URI) to
undici.EnvHttpProxyAgent, which honors HTTPS_PROXY, HTTP_PROXY,
NO_PROXY (and lowercase variants). Previously only https_proxy
lowercase was respected.

Extracts the dispatcher selection into createProxyDispatcher in
packages/shadcn/src/registry/proxy.ts, with unit tests covering
all env-var permutations and an integration test that spins up a
local CONNECT-tunneling proxy to verify end-to-end routing and
NO_PROXY bypass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: update changeset

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(shadcn): add SOCKS and PAC proxy support

Extends the registry's proxy capabilities beyond HTTP/HTTPS to cover
the standard proxy mechanisms users encounter:

- SOCKS4/SOCKS5 via ALL_PROXY=socks5://... (curl convention).
  Implementation uses the `socks` package wired into a custom undici
  Agent's `connect` factory, so SOCKS routing flows through the same
  fetch dispatcher pipeline as HTTP/HTTPS.

- PAC files via PAC_URL, with full PROXY/SOCKS/DIRECT directive
  support. PacDispatcher lazily fetches and compiles the PAC script
  using `pac-resolver` (running PAC JavaScript in a QuickJS WASM
  sandbox via `quickjs-wasi`), then resolves and routes per request.

Detection and routing priority is PAC > SOCKS > HTTP, matching the
specificity of each mechanism (PAC can return mixed directives
per request; SOCKS and HTTP are per-process configurations).

Coverage:
- 14 new unit tests (env-var detection, priority, edge cases)
- 7 new integration tests using a hand-rolled SOCKS5 server, a
  CONNECT-tunneling HTTP proxy, and a PAC file server — verifying
  end-to-end routing for each mechanism plus per-host PAC directives.

A local pac-resolver.d.ts stub mirrors the v9 surface we use,
because pac-resolver@9 ships its types only via the `exports` map
which the repo's classic `moduleResolution: node` doesn't read.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: update changeset for SOCKS and PAC support

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* test(shadcn): tighten proxy integration tests per review

- Replace the dead "proxy-direct" response body in the test proxy's
  request handler with a 502 reply. The request callback path was
  never exercised (undici only sends CONNECT to the proxy), so the
  unreachable JSON body was confusing dead code. Lock the new
  CONNECT-only contract in with an explicit test.

- Tighten the NO_PROXY-non-match assertion from `.toHaveLength(1)` +
  `.toBe("CONNECT")` to `.toEqual([{ url: originHost, method: "CONNECT" }])`,
  matching the parallel HTTP_PROXY test. The looser version would
  miss bugs where the dispatcher CONNECTed to the wrong host (e.g.,
  the proxy's own address instead of the origin's) — the strict
  version catches that bug class.

Both changes per @pomeh's review feedback.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(shadcn): rescope proxy support to SOCKS only

Per review feedback, split the proxy work: this branch now lands SOCKS
support alone and PAC moves to a follow-up PR.

Removes the PacDispatcher, the PAC directive parser, the PAC_URL env
handling and the pac-resolver type stub, along with the pac-resolver and
quickjs-wasi dependencies (the latter being ~3 MB of WASM). The socks
dependency and the entire SOCKS code path are unchanged, as is
fetchWithProxy's cross-origin redirect hardening.

ALL_PROXY remains SOCKS-only: a non-socks scheme falls through to the
explicit HTTP_PROXY / HTTPS_PROXY variables rather than being absorbed.

Changeset bumped from patch to minor.

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: shadcn <m@shadcn.com>
2026-08-10 15:23:51 +04:00
github-actions[bot] b1c580c637 chore(release): version packages (#11374)
Co-authored-by: shadcn <m@shadcn.com>
2026-08-05 23:11:16 +04:00
shadcn 3e54530e31 feat: questionnaire (#11414)
* feat(questionnaire): add core package and tests

* feat(questionnaire): add registry UI, examples, and docs

* chore(questionnaire): prepare release

* fix(questionnaire): align release examples and docs
2026-08-05 23:08:44 +04:00
OwenKephart df664e1bba fix(registry): include titles in SDK search results (#11348) 2026-08-03 15:34:16 +04:00
github-actions[bot] cb2bcd88d9 chore(release): version packages (#11350)
Co-authored-by: shadcn <m@shadcn.com>
2026-07-31 17:57:34 +04:00
shadcn 5ca53ca7c7 feat(shadcn): add dynamic search support for registries (#11352) 2026-07-31 17:50:10 +04:00
Andrew Barba bfa1b5e9a6 fix(shadcn): create nested output directories in build (#11322)
* fix(shadcn): create nested output directories in build

Registry item names can contain path segments (e.g. "extension/foo").
Both build commands wrote <outputDir>/<name>.json without creating the
implied nested directories, so builds failed with ENOENT on clean
checkouts where the output directory does not already exist. Create the
parent directory before writing each item.

Fixes #11321

* chore: format

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xq2q7jaDcyxyA6YjutStLn

---------

Co-authored-by: shadcn <m@shadcn.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 14:17:44 +04:00
github-actions[bot] 2a2deaac41 chore(release): version packages (#11306)
Co-authored-by: shadcn <m@shadcn.com>
2026-07-27 22:31:02 +04:00
shadcn 431da7169c feat(registry): accept config in addRegistryItems (#11307) 2026-07-27 22:25:57 +04:00
shadcn bf906bb8ae feat(registry): load registries from package.json (#11304) 2026-07-27 19:38:32 +04:00
github-actions[bot] 234633c555 chore(release): version packages (#11286)
Co-authored-by: shadcn <m@shadcn.com>
2026-07-25 22:04:50 +04:00
Colton Padden 7d90dfc0a5 feat(registry): add programmatic install API (#11276)
Signed-off-by: Colton Padden <colton.padden@vercel.com>
2026-07-25 21:29:31 +04:00
github-actions[bot] 9caf1d1bc4 chore(release): version packages (#11267)
Co-authored-by: shadcn <m@shadcn.com>
2026-07-23 20:01:13 +04:00
shadcn 6cd3f4c65c feat: add Base UI toast (#11266)
* feat(shadcn): scope component availability by base

* feat(base-toast): add Base UI toast component

* docs(base-toast): document toast and retire base sonner
2026-07-23 19:58:39 +04:00
github-actions[bot] 3f47b9113a chore(release): version packages (#11244)
Co-authored-by: shadcn <m@shadcn.com>
2026-07-22 15:05:55 +04:00
shadcn 3c26ee2dbd feat(shadcn): migrate icons between any icon libraries (#11241)
* feat(v4): generate cross-library icon mapping from registry placeholders

* feat(shadcn): migrate icons between any icon libraries

* fix(shadcn): harden icon template regexes flagged by CodeQL

* fix(shadcn): replace usage-template regexes with a linear scanner
2026-07-22 15:03:08 +04:00
github-actions[bot] c9850bf087 chore(release): version packages (#11192)
Co-authored-by: shadcn <m@shadcn.com>
2026-07-17 19:22:38 +04:00
shadcn 2b89d67e19 feat: aria (#11208)
* initialize react-aria base

* update imports

* accordion

* checkbox

* radiogroup

* switch

* button

* progress

* collapsible

* toggle / togglegroup

* tabs

* slider

* badge

* fix ts

* buttongroup

* popover

* dialog

* alertdialog

* sheet

* tooltip

* separator

* select

* update preview

* dropdown menu

* build registry

* update examples

* format

* Combobox

* sidebar

* updates

* breadcrumb

* update registry

* update progress

* fix

* fix dropdown menu styles

* fix

* common utility for overlay placement

* hide base tab if it doesn't exist

* update registry

* contextmenu

* direction

* spinner

* scroll area

* rebuild registry

* update examples

* port updates from base

* add preview-02

* Add missing files

* avatar

* remove hover-card

* Command

* Calendar + DatePicker

* Table and DataTable

* updates

* Fix sidebar docs

* fix accordion animation

* update docs

* fixup

* Add composition section to docs

* fix styles

* fixes

* fix dropdown submenus

* Update react-aria-components

* update new styles

* update registry

* bump dependencies

* port latest changes to react-aria base

* update example style

* fixes

* feat(registry): add aniui to registry directory (#11113)

* docs: polish component documentation (#11162)

* fix(docs): preserve sidebar scroll position

* style(docs): increase surface radii

* docs(components): promote example sections

* fix(docs): redirect typography pages to typeset

* fix(docs): preserve duplicate sidebar link position (#11163)

* fix(docs): restore sidebar scroll before hydration (#11166)

* feat: @shadcn/helpers (#11168)

* feat(helpers): add scripted chat adapters

* build(helpers): add release plumbing

* docs(helpers): refine ai-sdk and tanstack-ai guides

* refactor(helpers): rename script types to chat

* docs: update ai-sdk intro

* docs: add changeset

* ci(release): use Node 24 for npm publishing (#11169)

* chore(release): version packages (#11170)

Co-authored-by: shadcn <m@shadcn.com>

* feat(aria): add aria component base

* fix(v4): resolve typecheck errors

* fix(aria): compile render prop styles

* fix: style

* docs(aria): promote example sections

* fix(aria): address registry review findings

* chore(aria): refresh registry metadata and docs

* fix(aria): align component conventions

* chore(v4): stop tracking aria generated styles

* fix(aria): align docs and shared state behavior

* refactor(aria): use native placement and state hooks

* refactor(aria): scope component state selectors

* fix(aria): scan generated aria styles

* style(aria): sort classes after variant cleanup

* fix(aria): remove unused command dependency

* fix(aria): isolate base-specific style hooks

* feat(aria): use Base UI drawer

* fix(aria): open breadcrumb dropdown menu

Use the react-aria Button as the MenuTrigger child so the press
responder wires up. A plain native button never received it, so the
dropdown never opened.

* fix

* fix(aria): address release blockers

* fix(aria): open tooltips without delay

* fix(aria): restore sidebar submenu styles

* fix(aria): use native state selectors

* fix(aria): wire tooltip triggers

* chore(aria): prepare release metadata

* docs(aria): announce React Aria support

---------

Co-authored-by: Devon Govett <devongovett@gmail.com>
Co-authored-by: Anish <39819327+anishlp7@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-17 19:20:21 +04:00
shadcn c49c3061b5 fix(shadcn): drop custom registry headers on cross-origin redirects (#11196)
* fix(shadcn): drop custom registry headers on cross-origin redirects

* style(shadcn): format proxy test
2026-07-16 22:27:33 +04:00
shadcn b8a8e92096 fix(shadcn): prevent flag injection via registry dependency strings (#11195)
* fix(shadcn): prevent flag injection via registry dependency strings

* style(shadcn): format update-dependencies
2026-07-16 22:26:40 +04:00
shadcn df2656111f fix(shadcn): validate file paths for registry items without an explicit target (#11191)
* fix(shadcn): validate file.path for registry items without a target

* test(shadcn): type validateFilesTarget cases with satisfies instead of as
2026-07-16 13:48:47 +04:00
github-actions[bot] bc0705384b chore(release): version packages (#11170)
Co-authored-by: shadcn <m@shadcn.com>
2026-07-14 20:25:11 +04:00
shadcn 0ec4a7ffbf feat: @shadcn/helpers (#11168)
* feat(helpers): add scripted chat adapters

* build(helpers): add release plumbing

* docs(helpers): refine ai-sdk and tanstack-ai guides

* refactor(helpers): rename script types to chat

* docs: update ai-sdk intro

* docs: add changeset
2026-07-14 20:08:51 +04:00
github-actions[bot] 5e800ca2bd chore(release): version packages (#11099)
Co-authored-by: shadcn <m@shadcn.com>
2026-07-08 12:10:47 +04:00
shadcn f6a2647854 fix(react): follow the live edge after an anchored reply fills the viewport (#11106)
* fix(react): follow the live edge after an anchored reply fills the viewport

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0186fcQpHo1aLQC4wRpwKFFu

* fix(react): keep the scroll button quiet while follow-output is engaged

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0186fcQpHo1aLQC4wRpwKFFu

* fix(v4): wire base commands example menu items with onClick

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0186fcQpHo1aLQC4wRpwKFFu

* style: format

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 12:07:23 +04:00
shadcn dd6ce77cf1 fix(react): hold newly appended scroll anchors while autoScroll is enabled (#11100)
The tail spacer makes a freshly anchored turn read as "at the end", so
reconcileFollowMode re-armed following-bottom one frame after the anchor
placement and the first streamed chunk yanked the reader off the anchor.
Exclude the anchored-to-message hold from arming, matching the existing
settling-jump exclusion.


Claude-Session: https://claude.ai/code/session_0186fcQpHo1aLQC4wRpwKFFu

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 10:04:10 +04:00
Erick 628e427231 fix(message-scroller): avoid ResizeObserver loop error by coalescing resize handling into rAF (#11085)
Co-authored-by: shadcn <m@shadcn.com>
2026-07-07 09:37:08 +04:00
github-actions[bot] 2ef6388ca1 chore(release): version packages (#11083)
* chore(release): version packages

* fix

---------

Co-authored-by: shadcn <m@shadcn.com>
2026-07-03 16:20:38 +04:00
shadcn f3e7de1175 feat: base (#11082)
* feat(create): default design system config to base ui

* feat(www): default docs and init to base ui

* feat(www): default preview styles to base-nova

* feat(shadcn): default init and prompts to base ui

* docs: default to base ui in guides and examples

* docs: add changelog

* chore: changeset

* fix: address base ui default review findings

* fix: init handling

* feat: add migrate-radix-to-base skills

* fix: typo
2026-07-03 16:14:53 +04:00
github-actions[bot] 8055a12f46 chore(release): version packages (#11024)
Co-authored-by: shadcn <m@shadcn.com>
2026-06-26 21:25:48 +04:00
shadcn 18fcf0f766 feat: @shadcn/react (#11022)
* 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
2026-06-26 21:19:31 +04:00
github-actions[bot] c520191cd4 chore(release): version packages (#10949)
Co-authored-by: shadcn <m@shadcn.com>
2026-06-26 11:15:28 +04:00
shadcn 365d53b590 fix(shadcn): preserve existing dependency specifiers in package.json (#10967)
Fixes #10525
2026-06-18 21:46:26 +04:00
shadcn 9197676b3d chore: replace node-fetch (#10905)
* chore: replace node-fetch

* fix(shadcn): surface network failure reason from fetch errors

* fix(shadcn): avoid Error.cause typings for older TS lib targets

* fix(shadcn): avoid stricter undici engine

* fix(shadcn): use undici 7 proxy agent
2026-06-15 14:08:41 +04:00
github-actions[bot] 3f2ff18157 chore(release): version packages (#10873)
Co-authored-by: shadcn <m@shadcn.com>
2026-06-08 17:48:39 +04:00
shadcn 05eb2b968b feat(cli): improve search command (#10886)
- Search across multiple registries and make the registry argument
  optional: omit it to search every registry configured in components.json
  (builtins like @shadcn excluded). Without a components.json or configured
  registries, a clear usage error is printed.
- Add a --type filter (accepts "ui" or "registry:ui", comma-separated)
  with validation against the known item types.
- Fetch registries concurrently with a capped worker pool, preserving
  result order.
- Tolerate per-registry failures when searching all configured registries
  (reported in a structured `errors` field); exit non-zero when every
  registry fails. Usage errors print directly instead of routing through
  handleError.
- MCP parity: optional registries (search-all), a `types` filter, and type
  validation across the search/list/examples tools.
- Keep the public registry surface to `searchRegistries` and make it
  self-contained (clears its own context, useCache defaults to false).
- Consolidate search formatting into registry/search, add the `errors`
  field to searchResultsSchema, and update the skill docs.
2026-06-08 17:46:00 +04:00