From 78f6a8b0f0ed7d7cc74a5129f568e11160ce3046 Mon Sep 17 00:00:00 2001 From: Danila Yudin Date: Tue, 17 Mar 2026 07:07:46 +0300 Subject: [PATCH 1/6] Add @sabraman ui registry (#10054) * Add new UI component entry for @sabraman * fix: update registries.json --- apps/v4/public/r/registries.json | 6 ++++++ apps/v4/registry/directory.json | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/v4/public/r/registries.json b/apps/v4/public/r/registries.json index 652e11a585..da7430efc9 100644 --- a/apps/v4/public/r/registries.json +++ b/apps/v4/public/r/registries.json @@ -916,5 +916,11 @@ "homepage": "https://ui.flexnative.com", "url": "https://ui.flexnative.com/r/{name}.json", "description": "A collection of customizable UI blocks with interactive live previews" + }, + { + "name": "@sabraman", + "homepage": "https://sabraman.ru/components", + "url": "https://sabraman.ru/r/{name}.json", + "description": "Legacy skeuomorphic UI components and blocks for shadcn." } ] diff --git a/apps/v4/registry/directory.json b/apps/v4/registry/directory.json index 891ab13ab3..0c767052eb 100644 --- a/apps/v4/registry/directory.json +++ b/apps/v4/registry/directory.json @@ -1070,5 +1070,13 @@ "url": "https://ui.flexnative.com/r/{name}.json", "description": "A collection of customizable UI blocks with interactive live previews", "logo": "" - } + }, + { + "name": "@sabraman", + "homepage": "https://sabraman.ru/components", + "url": "https://sabraman.ru/r/{name}.json", + "description": "Legacy skeuomorphic UI components and blocks for shadcn.", + "logo": " " +} + ] From 632e2c012e7b83b6dd77b0eb15a9242eefb56c4a Mon Sep 17 00:00:00 2001 From: shadcn Date: Tue, 17 Mar 2026 08:26:13 +0400 Subject: [PATCH 2/6] fix: update skill and add allowed-tools (#10075) --- skills/shadcn/SKILL.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skills/shadcn/SKILL.md b/skills/shadcn/SKILL.md index 8a76cc0dc2..39d1e48176 100644 --- a/skills/shadcn/SKILL.md +++ b/skills/shadcn/SKILL.md @@ -2,6 +2,7 @@ name: shadcn description: Manages shadcn components and projects — adding, searching, fixing, debugging, styling, and composing UI. Provides project context, component docs, and usage examples. Applies when working with shadcn/ui, component registries, presets, --preset codes, or any project with a components.json file. Also triggers for "shadcn init", "create an app with --preset", or "switch to --preset". user-invocable: false +allowed-tools: Bash(npx shadcn@latest *), Bash(pnpm dlx shadcn@latest *), Bash(bunx --bun shadcn@latest *) --- # shadcn/ui @@ -13,7 +14,7 @@ A framework for building ui, components and design systems. Components are added ## Current Project Context ```json -!`npx shadcn@latest info --json 2>/dev/null || echo '{"error": "No shadcn project found. Run shadcn init first."}'` +!`npx shadcn@latest info --json` ``` The JSON above contains the project config and installed components. Use `npx shadcn@latest docs ` to get documentation and example URLs for any component. From acaa0953dfec30f125a2af718714ce9f59abe3ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aboubakary=20Ciss=C3=A9?= <58236609+Aboubakary833@users.noreply.github.com> Date: Tue, 17 Mar 2026 04:43:46 +0000 Subject: [PATCH 3/6] fix: Update import path for Button component in react-router-app template (#10073) --- templates/react-router-app/app/routes/home.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/react-router-app/app/routes/home.tsx b/templates/react-router-app/app/routes/home.tsx index 938c95e082..a520f6ab13 100644 --- a/templates/react-router-app/app/routes/home.tsx +++ b/templates/react-router-app/app/routes/home.tsx @@ -1,4 +1,4 @@ -import { Button } from "@/components/ui/button" +import { Button } from "~/components/ui/button" export default function Home() { return ( From e78bb7b4f36e1c4677a252b7170e1af69f0b5d5f Mon Sep 17 00:00:00 2001 From: shadcn Date: Tue, 17 Mar 2026 09:55:37 +0400 Subject: [PATCH 4/6] feat: move base picker to project form (#10077) * feat: move base picker to project form * fix: format --- .../v4/app/(create)/components/customizer.tsx | 5 +- .../app/(create)/components/menu-picker.tsx | 2 +- .../app/(create)/components/project-form.tsx | 164 ++++++++++++------ 3 files changed, 112 insertions(+), 59 deletions(-) diff --git a/apps/v4/app/(create)/components/customizer.tsx b/apps/v4/app/(create)/components/customizer.tsx index 352cf94632..f1e57620b6 100644 --- a/apps/v4/app/(create)/components/customizer.tsx +++ b/apps/v4/app/(create)/components/customizer.tsx @@ -8,8 +8,6 @@ import { CardHeader, } from "@/examples/base/ui/card" import { FieldGroup } from "@/examples/base/ui/field" -import { Separator } from "@/examples/base/ui/separator" -import { CardTitle } from "@/examples/radix/ui/card" import { type RegistryItem } from "shadcn/schema" import { useIsMobile } from "@/hooks/use-mobile" @@ -23,7 +21,6 @@ import { FontPicker } from "@/app/(create)/components/font-picker" import { IconLibraryPicker } from "@/app/(create)/components/icon-library-picker" import { MainMenu } from "@/app/(create)/components/main-menu" import { MenuColorPicker } from "@/app/(create)/components/menu-picker" -import { ProjectForm } from "@/app/(create)/components/project-form" import { RadiusPicker } from "@/app/(create)/components/radius-picker" import { RandomButton } from "@/app/(create)/components/random-button" import { ResetDialog } from "@/app/(create)/components/reset-button" @@ -58,7 +55,7 @@ export function Customizer({ - + {isMobile && }
Menu
-
+
{currentMenu?.label}
diff --git a/apps/v4/app/(create)/components/project-form.tsx b/apps/v4/app/(create)/components/project-form.tsx index d64a7b7039..7cb6a6a30a 100644 --- a/apps/v4/app/(create)/components/project-form.tsx +++ b/apps/v4/app/(create)/components/project-form.tsx @@ -35,6 +35,7 @@ import { HugeiconsIcon } from "@hugeicons/react" import { cn } from "@/lib/utils" import { useConfig } from "@/hooks/use-config" import { copyToClipboardWithMeta } from "@/components/copy-button" +import { BASES, type BaseName } from "@/registry/config" import { usePresetCode } from "@/app/(create)/hooks/use-design-system" import { useDesignSystemSearchParams, @@ -129,68 +130,74 @@ export function ProjectForm({ }> Create Project - + Create Project - Pick a template and configure your project. Available for all major - React frameworks. + Pick a template and configure your project. - - - Template - - - -
- - Options - - - - - Create a monorepo - - { - const framework = getFramework(params.template ?? "next") - setParams({ - template: getTemplateValue( - framework, - checked === true - ) as typeof params.template, - }) - }} - /> +
+ + + Template + - - - - Enable RTL support - - - setParams({ rtl: checked === true }) - } - /> + + Base + -
-
+ +
+ + Options + + + + + Create a monorepo + + { + const framework = getFramework(params.template ?? "next") + setParams({ + template: getTemplateValue( + framework, + checked === true + ) as typeof params.template, + }) + }} + /> + + + + + + Enable RTL support + + + setParams({ rtl: checked === true }) + } + /> + +
+ +
) }) + +const BaseGrid = React.memo(function BaseGrid({ + base, + setParams, +}: { + base: DesignSystemSearchParams["base"] + setParams: ReturnType[1] +}) { + const handleBaseChange = React.useCallback( + (value: string) => { + setParams({ base: value as BaseName }) + }, + [setParams] + ) + + return ( + + {BASES.map((item) => ( + + + +
+ {item.title} + + + + + ))} + + ) +}) From a8bd00466a11b56c8f4d577dc3094c3d4a72c397 Mon Sep 17 00:00:00 2001 From: shadcn Date: Tue, 17 Mar 2026 09:56:02 +0400 Subject: [PATCH 5/6] chore(templates): bump minor dependencies (#10076) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: Update import path for Button component in react-router-app template * chore(templates): bump minor dependencies Co-Authored-By: Claude Opus 4.6 (1M context) --------- Co-authored-by: Aboubakary Cissé <58236609+Aboubakary833@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) --- templates/astro-app/package.json | 14 +++--- templates/astro-monorepo/package.json | 4 +- templates/next-app/package.json | 14 +++--- templates/next-monorepo/package.json | 4 +- templates/react-router-app/package.json | 20 ++++----- templates/react-router-monorepo/package.json | 4 +- templates/start-app/package.json | 46 ++++++++++---------- templates/start-monorepo/package.json | 4 +- templates/vite-app/package.json | 24 +++++----- templates/vite-monorepo/package.json | 4 +- 10 files changed, 69 insertions(+), 69 deletions(-) diff --git a/templates/astro-app/package.json b/templates/astro-app/package.json index 7bce68808a..2696bda9bf 100644 --- a/templates/astro-app/package.json +++ b/templates/astro-app/package.json @@ -14,24 +14,24 @@ }, "dependencies": { "@astrojs/react": "^4.4.2", - "@tailwindcss/vite": "^4.1.18", + "@tailwindcss/vite": "^4.2.1", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", - "astro": "^5.17.1", + "astro": "^5.18.1", "react": "^19.2.4", "react-dom": "^19.2.4", - "tailwindcss": "^4.1.18" + "tailwindcss": "^4.2.1" }, "devDependencies": { - "@eslint/js": "^9.39.1", - "eslint": "^9.39.1", + "@eslint/js": "^9.39.4", + "eslint": "^9.39.4", "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-react-refresh": "^0.4.24", + "eslint-plugin-react-refresh": "^0.5.2", "globals": "^16.5.0", "prettier": "^3.8.1", "prettier-plugin-astro": "^0.14.1", "prettier-plugin-tailwindcss": "^0.7.2", "typescript": "~5.9.3", - "typescript-eslint": "^8.46.4" + "typescript-eslint": "^8.57.1" } } diff --git a/templates/astro-monorepo/package.json b/templates/astro-monorepo/package.json index 4772b9b07f..a55c5bb1cd 100644 --- a/templates/astro-monorepo/package.json +++ b/templates/astro-monorepo/package.json @@ -13,10 +13,10 @@ "prettier": "^3.8.1", "prettier-plugin-astro": "^0.14.1", "prettier-plugin-tailwindcss": "^0.7.2", - "turbo": "^2.8.8", + "turbo": "^2.8.17", "typescript": "5.9.3" }, - "packageManager": "pnpm@9.0.6", + "packageManager": "pnpm@9.15.9", "engines": { "node": ">=20" } diff --git a/templates/next-app/package.json b/templates/next-app/package.json index 0f9127bfc0..513d6666ff 100644 --- a/templates/next-app/package.json +++ b/templates/next-app/package.json @@ -12,23 +12,23 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "next": "16.1.6", + "next": "16.1.7", "next-themes": "^0.4.6", "react": "^19.2.4", "react-dom": "^19.2.4" }, "devDependencies": { "@eslint/eslintrc": "^3", - "@tailwindcss/postcss": "^4.1.18", - "@types/node": "^25.1.0", - "@types/react": "^19.2.10", + "@tailwindcss/postcss": "^4.2.1", + "@types/node": "^25.5.0", + "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", - "eslint": "^9.39.2", - "eslint-config-next": "16.1.6", + "eslint": "^9.39.4", + "eslint-config-next": "16.1.7", "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", "postcss": "^8", - "tailwindcss": "^4.1.18", + "tailwindcss": "^4.2.1", "typescript": "^5.9.3" } } diff --git a/templates/next-monorepo/package.json b/templates/next-monorepo/package.json index 03929240da..3e042e9216 100644 --- a/templates/next-monorepo/package.json +++ b/templates/next-monorepo/package.json @@ -14,10 +14,10 @@ "@workspace/typescript-config": "workspace:*", "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", - "turbo": "^2.8.8", + "turbo": "^2.8.17", "typescript": "5.9.3" }, - "packageManager": "pnpm@9.0.6", + "packageManager": "pnpm@9.15.9", "engines": { "node": ">=20" } diff --git a/templates/react-router-app/package.json b/templates/react-router-app/package.json index a5ec9c779c..52e2f79e42 100644 --- a/templates/react-router-app/package.json +++ b/templates/react-router-app/package.json @@ -10,24 +10,24 @@ "format": "prettier --write \"**/*.{ts,tsx}\"" }, "dependencies": { - "@react-router/node": "7.12.0", - "@react-router/serve": "7.12.0", - "isbot": "^5.1.31", + "@react-router/node": "7.13.1", + "@react-router/serve": "7.13.1", + "isbot": "^5.1.36", "react": "^19.2.4", "react-dom": "^19.2.4", - "react-router": "7.12.0" + "react-router": "7.13.1" }, "devDependencies": { - "@react-router/dev": "7.12.0", - "@tailwindcss/vite": "^4.1.13", + "@react-router/dev": "7.13.1", + "@tailwindcss/vite": "^4.2.1", "@types/node": "^22", - "@types/react": "^19.2.7", + "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", - "tailwindcss": "^4.1.13", - "typescript": "^5.9.2", - "vite": "^7.1.7", + "tailwindcss": "^4.2.1", + "typescript": "^5.9.3", + "vite": "^7.3.1", "vite-tsconfig-paths": "^5.1.4" } } diff --git a/templates/react-router-monorepo/package.json b/templates/react-router-monorepo/package.json index c080fb55c5..6540fbe797 100644 --- a/templates/react-router-monorepo/package.json +++ b/templates/react-router-monorepo/package.json @@ -11,10 +11,10 @@ "devDependencies": { "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", - "turbo": "^2.8.8", + "turbo": "^2.8.17", "typescript": "5.9.3" }, - "packageManager": "pnpm@9.0.6", + "packageManager": "pnpm@9.15.9", "engines": { "node": ">=20" } diff --git a/templates/start-app/package.json b/templates/start-app/package.json index 77b29faad2..1359fae334 100644 --- a/templates/start-app/package.json +++ b/templates/start-app/package.json @@ -12,34 +12,34 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@tailwindcss/vite": "^4.1.18", - "@tanstack/react-devtools": "^0.7.0", - "@tanstack/react-router": "^1.132.0", - "@tanstack/react-router-devtools": "^1.132.0", - "@tanstack/react-router-ssr-query": "^1.131.7", - "@tanstack/react-start": "^1.132.0", - "@tanstack/router-plugin": "^1.132.0", + "@tailwindcss/vite": "^4.2.1", + "@tanstack/react-devtools": "^0.10.0", + "@tanstack/react-router": "^1.167.4", + "@tanstack/react-router-devtools": "^1.166.9", + "@tanstack/react-router-ssr-query": "^1.166.9", + "@tanstack/react-start": "^1.166.15", + "@tanstack/router-plugin": "^1.166.13", "nitro": "latest", - "react": "^19.2.0", - "react-dom": "^19.2.0", - "tailwindcss": "^4.0.6", + "react": "^19.2.4", + "react-dom": "^19.2.4", + "tailwindcss": "^4.2.1", "vite-tsconfig-paths": "^5.1.4" }, "devDependencies": { - "@tanstack/devtools-vite": "^0.3.11", - "@tanstack/eslint-config": "^0.3.0", - "@testing-library/dom": "^10.4.0", - "@testing-library/react": "^16.2.0", - "@types/node": "^22.10.2", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.2.0", - "@vitejs/plugin-react": "^5.0.4", - "jsdom": "^27.0.0", - "prettier": "^3.5.3", + "@tanstack/devtools-vite": "^0.6.0", + "@tanstack/eslint-config": "^0.4.0", + "@testing-library/dom": "^10.4.1", + "@testing-library/react": "^16.3.2", + "@types/node": "^22.19.15", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.2.0", + "jsdom": "^27.4.0", + "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", - "typescript": "^5.7.2", - "vite": "^7.1.7", - "vitest": "^3.0.5", + "typescript": "^5.9.3", + "vite": "^7.3.1", + "vitest": "^3.2.4", "web-vitals": "^5.1.0" } } diff --git a/templates/start-monorepo/package.json b/templates/start-monorepo/package.json index 61cf76f04b..6b7b5515e5 100644 --- a/templates/start-monorepo/package.json +++ b/templates/start-monorepo/package.json @@ -12,10 +12,10 @@ "devDependencies": { "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", - "turbo": "^2.8.8", + "turbo": "^2.8.17", "typescript": "5.9.3" }, - "packageManager": "pnpm@9.0.6", + "packageManager": "pnpm@9.15.9", "engines": { "node": ">=20" } diff --git a/templates/vite-app/package.json b/templates/vite-app/package.json index 5a1dd70945..45901d1384 100644 --- a/templates/vite-app/package.json +++ b/templates/vite-app/package.json @@ -12,25 +12,25 @@ "preview": "vite preview" }, "dependencies": { - "@tailwindcss/vite": "^4.1.17", - "react": "^19.2.0", - "react-dom": "^19.2.0", - "tailwindcss": "^4.1.17" + "@tailwindcss/vite": "^4.2.1", + "react": "^19.2.4", + "react-dom": "^19.2.4", + "tailwindcss": "^4.2.1" }, "devDependencies": { - "@eslint/js": "^9.39.1", - "@types/node": "^24.10.1", - "@types/react": "^19.2.5", + "@eslint/js": "^9.39.4", + "@types/node": "^24.12.0", + "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^5.1.1", - "eslint": "^9.39.1", + "@vitejs/plugin-react": "^5.2.0", + "eslint": "^9.39.4", "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-react-refresh": "^0.4.24", + "eslint-plugin-react-refresh": "^0.5.2", "globals": "^16.5.0", "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", "typescript": "~5.9.3", - "typescript-eslint": "^8.46.4", - "vite": "^7.2.4" + "typescript-eslint": "^8.57.1", + "vite": "^7.3.1" } } diff --git a/templates/vite-monorepo/package.json b/templates/vite-monorepo/package.json index 73d474feeb..1c84a25aca 100644 --- a/templates/vite-monorepo/package.json +++ b/templates/vite-monorepo/package.json @@ -12,10 +12,10 @@ "devDependencies": { "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.7.2", - "turbo": "^2.8.8", + "turbo": "^2.8.17", "typescript": "5.9.3" }, - "packageManager": "pnpm@9.0.6", + "packageManager": "pnpm@9.15.9", "engines": { "node": ">=20" } From 8db2be8b0952581654acb5ae6d3fa0265b9e51fe Mon Sep 17 00:00:00 2001 From: Victor Williams Date: Wed, 18 Mar 2026 07:11:15 +0100 Subject: [PATCH 6/6] feat: add @nexus-ui registry to public directory (#10067) --- apps/v4/public/r/registries.json | 6 ++++++ apps/v4/registry/directory.json | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/apps/v4/public/r/registries.json b/apps/v4/public/r/registries.json index da7430efc9..2a81c4c2aa 100644 --- a/apps/v4/public/r/registries.json +++ b/apps/v4/public/r/registries.json @@ -917,6 +917,12 @@ "url": "https://ui.flexnative.com/r/{name}.json", "description": "A collection of customizable UI blocks with interactive live previews" }, + { + "name": "@nexus-ui", + "homepage": "https://nexus-ui.dev", + "url": "https://nexus-ui.dev/r/{name}.json", + "description": "Open-source component library of composable, copy-paste primitives for building AI interfaces (chat, streaming, multimodal)" + }, { "name": "@sabraman", "homepage": "https://sabraman.ru/components", diff --git a/apps/v4/registry/directory.json b/apps/v4/registry/directory.json index 0c767052eb..e672f836a2 100644 --- a/apps/v4/registry/directory.json +++ b/apps/v4/registry/directory.json @@ -1071,12 +1071,18 @@ "description": "A collection of customizable UI blocks with interactive live previews", "logo": "" }, + { + "name": "@nexus-ui", + "homepage": "https://nexus-ui.dev", + "url": "https://nexus-ui.dev/r/{name}.json", + "description": "Open-source component library of composable, copy-paste primitives for building AI interfaces (chat, streaming, multimodal)", + "logo": "" + }, { "name": "@sabraman", "homepage": "https://sabraman.ru/components", "url": "https://sabraman.ru/r/{name}.json", "description": "Legacy skeuomorphic UI components and blocks for shadcn.", "logo": " " -} - + } ]