Commit Graph

2351 Commits

Author SHA1 Message Date
github-actions[bot] b1c580c637 chore(release): version packages (#11374)
Co-authored-by: shadcn <m@shadcn.com>
@shadcn/react@0.3.0
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
ozzy 607e8a9717 feat(registry): add interior registry to directory (#11376) 2026-08-04 12:45:18 +04:00
Jay Sharma f0cad1d9f8 Add @23rd into trusted registries (#11377)
* add @23rd into reg..

* verify signing
2026-08-03 18:05:38 +04:00
OwenKephart df664e1bba fix(registry): include titles in SDK search results (#11348) 2026-08-03 15:34:16 +04:00
Ali Bey 8705f2beb4 feat(registry): add @shoogle to the registry directory (#11373)
* feat(registry): add @shoogle to the registry directory

* fix(registry): clarify @shoogle description wording

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 13:15:50 +04:00
github-actions[bot] cb2bcd88d9 chore(release): version packages (#11350)
Co-authored-by: shadcn <m@shadcn.com>
shadcn@4.16.1
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
findingsimo f120cac2da feat(registry): add @whiskeyjack to the registry directory (#11310)
Co-authored-by: shadcn <m@shadcn.com>
2026-07-31 14:28:01 +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
yu5ag a7a07e662e feat(registry): add @liquefy-ui to the registry directory (#11344) 2026-07-31 13:51:38 +04:00
Mojtaba 727b4aabf1 feat(registry): add @1st-pouf (#11345) 2026-07-31 13:51:23 +04:00
BEY AGENCY 705ce59610 feat(registry): add @ai2 to registry directory (#11337) 2026-07-31 04:38:27 +04:00
Vasanthakumar RB 626321a474 feat(registry): add @mediadrop to registry directory (#11341) 2026-07-30 22:12:46 +04:00
Sacha Ichbiah b28e5b4d9e feat(registry): add @retab to the registry directory (#11149)
Adds the @retab namespace (Retab document-processing UI components) to
the registry directory. Registry is open source, publicly hosted, and
flat at https://ui.retab.com/r/{name}.json.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 16:05:58 +04:00
Jérémie Nallet efafb0918c feat(registry): add @atelier to the registry directory (#11342)
Adds @atelier to the registry directory.
  
Atelier UI is an open-source registry of WebGL and motion components for React, built on a single shared canvas so many effects can run on one page.

Homepage: https://www.atelier-ui.com
Registry: https://www.atelier-ui.com/r/registry.json
2026-07-30 15:14:43 +04:00
Denish Navadiya ac6f589fa8 Rename package from @pacekit-gsap to @paceui-gsap (#11326) 2026-07-30 09:29:37 +04:00
Jayant Acharya 9540716252 feat(registry): add @kinetic to the registry directory (#11338)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-30 09:29:11 +04:00
Mateusz Pasek d64c4586bd feat(registry): add @usva to the registry directory (#11334)
* feat(registry): add @usva to the registry directory

* chore: drop the counts from the description
2026-07-30 09:28:11 +04:00
Blinks44 41ac5d05c5 fix(registry): update logo for moduix library (#11332)
* feat(registry): add moduix library

* feat(registry): update logo for moduix library
2026-07-30 09:27:57 +04:00
shadcn 5203f537d1 test(v4): bump next to 16.3 canary for Turbopack memory eviction (#11328)
Evaluating 16.3's dev memory eviction: footprint after browsing 14 docs routes drops 32GB -> 15GB and page nav 3.6-16s -> sub-2s vs 16.2.7. Canary, not for merge until stable.
2026-07-29 16:31:23 +04:00
Evan 687e105572 chore: add @wa-ui to registry directory (#11299) 2026-07-29 16:15:29 +04:00
shadcn 29ea362598 chore(v4): ignore sharded __components__ directories in eslint 2026-07-29 15:31:57 +04:00
Justin Levine 706f596c13 feat(registry): add @neon-ui to registry directory (#11324) 2026-07-29 14:54:10 +04:00
shadcn 767387d428 perf(v4): shard registry component maps per style (#11325)
The generated __components__ maps put every style's dynamic-import edges
(~3,800) into any route that resolves a component, making docs pages
uncompilable in dev. Emit one shard per style plus a lazy getComponent
dispatcher, and fail fast in next.config when generated styles are stale.
2026-07-29 14:11:54 +04:00
David Klein 47c7f92dbc feat(registry): add the @diklein registry to the directory (#11272)
* feat(registry): add @dkproductcard to registry directory

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Update directory.json

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

* registry: consolidate under the @diklein namespace

Collection-level description and homepage for the @diklein entry, and the earlier single-component @dkmediaviewer entry removed: it pointed at the same registry and its item now installs via @diklein/dk-media-viewer. Recreated as one API commit so it carries a verified signature.

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: shadcn <m@shadcn.com>
2026-07-28 19:15:08 +04:00
Rion 3150ac35a6 feat(registry): add @hexui to registry directory (#11305)
* feat(registry): add @hexui to registry directory

* fix(registry): update logo SVG fill color in directory.json

* fix(registry): remove unintended changes
2026-07-28 12:03:24 +04:00
github-actions[bot] 2a2deaac41 chore(release): version packages (#11306)
Co-authored-by: shadcn <m@shadcn.com>
shadcn@4.16.0
2026-07-27 22:31:02 +04:00
shadcn 3340d10baf fix(site): remove React Aria logo from announcement (#11308) 2026-07-27 22:29:54 +04:00
shadcn 431da7169c feat(registry): accept config in addRegistryItems (#11307) 2026-07-27 22:25:57 +04:00
wrappixelTeam 2364cf6e0c feat(registry): added new registry (@shadcn-dashboard) (#11245)
* Added Shadcn Space UI Kit to figma docs

docs: Added Shadcn Space UI Kit to Figma paid section

* Added Shadcn Space UI Kit to figma docs

docs: Added Shadcn Space UI Kit to Figma paid section

* feat(registry): added new registry (@shadcndashboard)
2026-07-27 21:49:09 +04:00
shadcn bf906bb8ae feat(registry): load registries from package.json (#11304) 2026-07-27 19:38:32 +04:00
Kushal Rathod 7774cd7dce feat(registry): add flowui to registry directory (#11236) 2026-07-26 00:06:33 +04:00
Navdeep Singh aa13b0cb83 feat: add NavUI registry (#11290) 2026-07-25 22:40:56 +04:00
github-actions[bot] 234633c555 chore(release): version packages (#11286)
Co-authored-by: shadcn <m@shadcn.com>
shadcn@4.15.0
2026-07-25 22:04:50 +04:00
shadcn a7675774e0 fix(registry): harden programmatic install API (#11285)
* feat(registry): add programmatic install API

Signed-off-by: Colton Padden <colton.padden@vercel.com>

* fix(registry): throw metadata errors

* fix(registry): validate universal dependency trees

* fix(registry): keep programmatic installs non-interactive

* fix(registry): isolate concurrent API calls

* test(registry): cover programmatic install contracts

* fix(registry): match CLI fallback style

* fix(registry): reuse validated install tree

* refactor(registry): share install tree validation

* refactor(registry): share target alias helpers

* fix(registry): avoid duplicate universal item fetches

* fix(registry): preserve non-interactive skipped files

* fix(registry): report unresolved install items

---------

Signed-off-by: Colton Padden <colton.padden@vercel.com>
Co-authored-by: Colton Padden <colton.padden@vercel.com>
2026-07-25 21:56:12 +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
senommu 74408fbafd feat(registry): add @motokoui to registry directory (#11263) 2026-07-25 20:58:23 +04:00
SYED SUBHAN 5202b52587 feat(registry): add @amicro to trusted registries (#11273) 2026-07-25 20:56:48 +04:00
Enes Gules 306cab7ac4 feat(registry): add hugeicons animated (#11283) 2026-07-25 20:56:03 +04:00
shadcn 291de49ab1 docs(message-scroller): remove autoScroll from usage (#11284) 2026-07-25 20:40:01 +04:00
David 4baadbc651 feat(www): add @canvas-ui registry (#11261) 2026-07-23 23:50:36 +04:00
github-actions[bot] 9caf1d1bc4 chore(release): version packages (#11267)
Co-authored-by: shadcn <m@shadcn.com>
shadcn@4.14.1
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
shadcn 91f21dfe13 test(shadcn): consolidate test suite and cover untested modules (#11247)
* test(shadcn): add MCP formatter unit tests

Covers all five formatters in src/mcp/utils.ts (formatSearchResultsWithPagination,
findUnknownTypesMessage, formatSkippedRegistries, formatRegistryItems,
formatItemExamples). Pins the known npxShadcn-not-awaited bug with an
it.fails marker plus a companion test asserting today's broken
"[object Promise]" output, per plans/005 (fix deferred by operator).

* chore(shadcn): add shared test helpers for temp dirs and fixtures

Adds getFixturesDir and withTempDir under src/test-helpers so future
tests don't re-implement mkdtemp cleanup boilerplate or hand-build
fixture paths with __dirname.

* test(shadcn): delete dead vendored-starter test in remix fixture

test/fixtures/frameworks/remix-indie-stack/app/utils.test.ts tested the
vendored Remix Indie Stack starter's own validateEmail helper, not shadcn
code. It's excluded from discovery via the **/fixtures/** vitest exclude,
so this has zero effect on the suite total.

* test(shadcn): move addComponents workspace-routing tests into src/utils

Relocate test/utils/add-components.test.ts's "addComponents workspace
routing" describe block (real addComponents against mock workspace
configs) to a new sibling file, src/utils/add-components.workspace.test.ts,
instead of merging into the existing src/utils/add-components.test.ts.

The existing test file's vi.mock factories replace get-config and
update-files wholesale (no real getWorkspaceConfig/findPackageRoot/
updateFiles passthrough), which conflicts with what the workspace-routing
suite needs. vi.mock is per-file, so a sibling file keeps both real and
mocked variants working side by side.

Also drops the now-untyped `name` field from resolveRegistryTree mock
payloads (not part of registryResolvedItemsTreeSchema, and unused by
addComponents) now that these tests are typechecked as part of src/ for
the first time.

* test(shadcn): move registry and registries/add-registry tests into src/

- test/utils/registry.test.ts -> merged into src/registry/api.test.ts as
  a new "resolveTree" describe (sole coverage of resolveTree).
- test/utils/get-item-target-path.test.ts -> merged into
  src/registry/api.test.ts as a new "getItemTargetPath" describe;
  fixture paths switched to getFixturesDir() from @/src/test-helpers.
- test/utils/registries.test.ts -> src/utils/registries.test.ts.
- test/utils/add-registries.test.ts -> src/commands/registry/add.test.ts
  (tests parseRegistryArg, which lives in src/commands/registry/add.ts).

All four now typecheck as part of src/** for the first time. Only type
fix needed: getConfig() returns Config | null, so the moved
getItemTargetPath assertions non-null-assert its result.

* fix(shadcn): complete the registry test-move commit from the prior step

The previous commit's staging step used `git add -A -- <paths>` with a
stale pathspec that failed outright (exit 128), which meant the commit
silently went through with only the git-mv'd renames/deletions and
none of the follow-up import-path fixes and new describe blocks made
via Edit afterward. src/commands/registry/add.test.ts and
src/utils/registries.test.ts were committed still pointing at
../../src/... paths (broken from their new location), and
src/registry/api.test.ts was committed without the merged resolveTree
/getItemTargetPath describes at all. This commit captures those
already-verified changes so HEAD matches what was actually tested.

* test(shadcn): move get-config and get-project-info cluster into src/

- test/utils/get-config.test.ts -> src/utils/get-config.test.ts,
  restructured into describe("getRawConfig"/"getProjectConfig"/
  "getConfig"/"getWorkspaceConfig") blocks (test -> it), fixture paths
  switched to getFixturesDir().
- test/utils/get-project-info.test.ts -> src/utils/get-project-info.test.ts,
  test/test.each -> it/it.each; merged in as new describes:
    - test/utils/get-tailwind-css-file.test.ts ("get tailwindcss file")
    - test/utils/get-ts-config-alias-prefix.test.ts ("get ts config alias prefix")
    - test/utils/is-typescript-project.test.ts ("is TypeScript project")
  (all four test getters exported from src/utils/get-project-info.ts).
- test/utils/get-package-manager.test.ts -> src/utils/get-package-manager.test.ts,
  split into describe blocks per exported function, test -> it.

All now typecheck as part of src/** for the first time; no type errors
surfaced.

* test(shadcn): move resolve-import and dry-run tests into src/utils

- test/utils/resolve-import.test.ts -> src/utils/resolve-import.test.ts,
  restructured into describe("resolveImport") + the two pre-existing
  describes, test -> it, fixture paths via getFixturesDir().
- test/utils/dry-run.test.ts -> src/utils/dry-run.test.ts, test -> it
  throughout (already describe-organized), fixture/temp-dir paths via
  getFixturesDir().

Dropped the unused `name` field from 10 resolveRegistryTree mock
payloads (not part of registryResolvedItemsTreeSchema) now that this
file typechecks as part of src/** for the first time.

* test(shadcn): move transformer tests into src/utils/transformers

- test/utils/apply-color-mapping.test.ts + test/utils/transform-css-vars.test.ts
  -> merged into src/utils/transformers/transform-css-vars.test.ts.
- test/utils/apply-prefix.test.ts + test/utils/transform-tw-prefix.test.ts
  -> merged into src/utils/transformers/transform-tw-prefix.test.ts.
- test/utils/transform-import.test.ts -> src/utils/transformers/transform-import.test.ts.
- test/utils/transform-rsc.test.ts -> src/utils/transformers/transform-rsc.test.ts.
- test/utils/transform-rtl.test.ts -> src/utils/transformers/transform-rtl.test.ts;
  deleted 8 commented-out test() blocks that asserted nothing.

test -> it throughout; snapshot-bearing tests kept their exact top-level
title (no new describe wrapping) so vitest regenerates snapshots under
the identical key — diffed byte-identical against the originals before
deleting the orphaned test/utils/__snapshots__ files.

Per reviewer authorization: cast partial Config literals passed to
transform() with `as Config` (60 call sites across
transform-import/rsc/rtl/tw-prefix/css-vars.test.ts), and one
`baseColor: "stone" as any` where a bare string was passed where the
type expects a base-color object (preserves the original, intentional
runtime input unchanged). Also cast the ts-morph/TS-internal
`sourceFile.parseDiagnostics` access in transform-rtl.test.ts as `any`
rather than substituting a different (public) API. All casts only;
no assertions or literal values changed. Verified: every regenerated
snapshot is byte-identical to its pre-move original, and
`pnpm test src/utils/transformers/` passes 196/196 both before and
after the casts were added.

* test(shadcn): move updater tests into src/utils/updaters

- test/utils/updaters/update-tailwind-content.test.ts -> src/utils/updaters/update-tailwind-content.test.ts
- test/utils/updaters/update-dependencies.test.ts -> src/utils/updaters/update-dependencies.test.ts
- test/utils/updaters/update-css.test.ts -> src/utils/updaters/update-css.test.ts
- test/utils/updaters/update-css-vars.test.ts -> src/utils/updaters/update-css-vars.test.ts
- test/utils/updaters/update-tailwind-config.test.ts -> src/utils/updaters/update-tailwind-config.test.ts
- test/utils/updaters/update-files.test.ts (2604 lines, largest) -> src/utils/updaters/update-files.test.ts

test -> it / test.each -> it.each throughout; fixture and scratch-temp-dir
paths switched to getFixturesDir() from @/src/test-helpers. Snapshot-
bearing files (update-tailwind-content, update-tailwind-config) diffed
byte-identical against their pre-move originals before the old
test/utils/updaters/__snapshots__ files were deleted.

Also deleted test/utils/updaters/__snapshots__/initialize-tailwind-config.test.ts.snap,
an orphan with no corresponding test file anywhere in the repo (grep
confirmed) — out of the plan's 27-row map but required to satisfy the
"no orphaned snapshot dirs" done-criterion and let Step 8 rmdir the now-
empty test/utils/updaters directory.

Per reviewer authorization (round 1), fixed the resulting typecheck
errors with casts only, no restructuring or assertion changes:
- `as Config` on partial Config/resolvedPaths object literals passed to
  transformTailwindContent/transformTailwindConfig/updateDependencies/
  transformCssVars/resolveFilePath (update-files.test.ts alone needed
  ~59 such casts, plus a `(await getConfig(...))!` non-null assertion
  on the 11 getConfig() calls that had no existing `if (!config) throw`
  guard).
- `as any` on wrapper objects that don't fit any named type at all: the
  `{ config: SHARED_CONFIG }` argument in update-tailwind-content/
  update-tailwind-config tests (the production functions take `config`
  directly, not a wrapped options object — this mismatch predates this
  move and is left as-is per "casts only, do not restructure"), the
  flat color-map literals passed to buildTailwindThemeColorsFromCssVars,
  the `file` param in two resolveFilePath test.each callbacks (whose
  `type` field widens to `string` across the array), and the partial
  `ProjectInfo` literals passed to toAliasedImport tests.

Verified every regenerated snapshot is byte-identical to its pre-move
original, and `pnpm test src/utils/updaters/` passes 278/278 both
before and after the casts were added.

* test(shadcn): characterize registry source include resolution

Adds source.test.ts covering the previously-untested include resolver
in src/registry/source.ts: happy-path flattening (flat, single include,
two-level nested include), root validation, and every containment
guard (absolute/traversal/URL paths, non-registry.json includes, include
cycles, duplicate includes, max include depth, duplicate item names).

* test(shadcn): cover workspace adaptation in template scaffolding

Export getInstallArgs, adaptWorkspaceConfig, and rewriteWorkspaceProtocol
from create-template.ts (no logic changes) and add unit tests covering
the destructive package-manager adaptation that runs when scaffolding a
non-pnpm project: lockfile/workspace-config removal, packageManager and
workspaces rewriting, and workspace: protocol rewriting for npm.

Also removes the vestigial "**/templates/**" vitest exclude, which dates
to migration commit e51648139 and today only matches this CLI's own
source files under src/templates/ (no scaffold-template project
directories live there). Verified via `npx vitest list` before/after:
the collected test set changed by exactly one file,
src/templates/create-template.test.ts - nothing else was newly picked up.

Full suite: 83 files / 1584 tests passing (was 82/1571 baseline + this
file's 13 tests). typecheck and build both exit 0.

* test(shadcn): cover add command orchestration branches

Integration-style tests for the `add` command action handler, pinning the
routing between dry-run, the missing-config init flow, the empty-project
create-project flow, the registry:style/theme overwrite confirm, the
universal registry item short-circuit, the app-index update guard, and the
Tailwind v4 deprecated-components guard. Collaborators (runInit,
createProject, addComponents, updateAppIndex, dryRunComponents, prompts) are
mocked at their seams; preFlightAdd, getConfig, and the registry fetch path
run for real against temp-dir fixtures and an MSW-served registry.

* chore(shadcn): format test files with prettier
2026-07-22 21:55:14 +04:00
dependabot[bot] 37f364e293 chore(deps): bump astro from 6.3.8 to 7.1.0 in /templates/astro-app (#11231)
Bumps [astro](https://github.com/withastro/astro/tree/HEAD/packages/astro) from 6.3.8 to 7.1.0.
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/astro@7.1.0/packages/astro)

---
updated-dependencies:
- dependency-name: astro
  dependency-version: 7.1.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-22 21:23:59 +04:00
dependabot[bot] 47a9116f72 chore(deps): bump astro from 6.4.6 to 7.1.0 in /templates/astro-monorepo (#11233)
Bumps [astro](https://github.com/withastro/astro/tree/HEAD/packages/astro) from 6.4.6 to 7.1.0.
- [Release notes](https://github.com/withastro/astro/releases)
- [Changelog](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md)
- [Commits](https://github.com/withastro/astro/commits/astro@7.1.0/packages/astro)

---
updated-dependencies:
- dependency-name: astro
  dependency-version: 7.1.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-22 21:23:48 +04:00
github-actions[bot] 3f47b9113a chore(release): version packages (#11244)
Co-authored-by: shadcn <m@shadcn.com>
shadcn@4.14.0
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
Blinks44 598a44e14d feat(registry): add moduix library (#11230) 2026-07-22 11:19:46 +04:00