diff --git a/.github/workflows/validate-registries.yml b/.github/workflows/validate-registries.yml
index 96b747144c..f507116a11 100644
--- a/.github/workflows/validate-registries.yml
+++ b/.github/workflows/validate-registries.yml
@@ -13,6 +13,44 @@ on:
- "apps/v4/registry/directory.json"
jobs:
+ check-registry-sync:
+ if: github.event_name == 'pull_request'
+ runs-on: ubuntu-latest
+ name: Check registry sync
+ permissions:
+ contents: read
+ pull-requests: write
+ steps:
+ - name: Check changed files
+ id: changed
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ CHANGED_FILES=$(gh pr diff ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --name-only)
+
+ DIRECTORY_CHANGED=false
+ REGISTRIES_CHANGED=false
+
+ if echo "$CHANGED_FILES" | grep -q "^apps/v4/registry/directory.json$"; then
+ DIRECTORY_CHANGED=true
+ fi
+
+ if echo "$CHANGED_FILES" | grep -q "^apps/v4/public/r/registries.json$"; then
+ REGISTRIES_CHANGED=true
+ fi
+
+ echo "directory_changed=$DIRECTORY_CHANGED" >> $GITHUB_OUTPUT
+ echo "registries_changed=$REGISTRIES_CHANGED" >> $GITHUB_OUTPUT
+
+ - name: Flag missing registries.json update
+ if: steps.changed.outputs.directory_changed == 'true' && steps.changed.outputs.registries_changed == 'false'
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ gh pr edit ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --add-label "registries: invalid"
+ gh pr comment ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --body "can you run \`pnpm registry:build\` and commit the json files please?"
+ exit 1
+
validate:
runs-on: ubuntu-latest
name: pnpm validate:registries
diff --git a/apps/v4/app/(create)/components/project-form.tsx b/apps/v4/app/(create)/components/project-form.tsx
index 6399659d35..d64a7b7039 100644
--- a/apps/v4/app/(create)/components/project-form.tsx
+++ b/apps/v4/app/(create)/components/project-form.tsx
@@ -80,10 +80,11 @@ export function ProjectForm({
const commands = React.useMemo(() => {
const presetFlag = ` --preset ${presetCode}`
+ const baseFlag = params.base !== "radix" ? ` --base ${params.base}` : ""
const templateFlag = ` --template ${framework}`
const monorepoFlag = isMonorepo ? " --monorepo" : ""
const rtlFlag = params.rtl ? " --rtl" : ""
- const flags = `${presetFlag}${templateFlag}${monorepoFlag}${rtlFlag}`
+ const flags = `${presetFlag}${baseFlag}${templateFlag}${monorepoFlag}${rtlFlag}`
return IS_LOCAL_DEV && !process.env.NEXT_PUBLIC_RC
? {
@@ -98,7 +99,7 @@ export function ProjectForm({
yarn: `yarn dlx shadcn${SHADCN_VERSION} init${flags}`,
bun: `bunx --bun shadcn${SHADCN_VERSION} init${flags}`,
}
- }, [framework, isMonorepo, params.rtl, presetCode])
+ }, [framework, isMonorepo, params.base, params.rtl, presetCode])
const command = commands[packageManager]
diff --git a/apps/v4/app/(create)/preview/[base]/[name]/page.tsx b/apps/v4/app/(create)/preview/[base]/[name]/page.tsx
index 3467a03084..50caaa386b 100644
--- a/apps/v4/app/(create)/preview/[base]/[name]/page.tsx
+++ b/apps/v4/app/(create)/preview/[base]/[name]/page.tsx
@@ -135,7 +135,7 @@ export default async function BlockPage({
}
return (
-
+
diff --git a/apps/v4/components/mode-switcher.tsx b/apps/v4/components/mode-switcher.tsx
index 1cd845d0d9..d287df42ea 100644
--- a/apps/v4/components/mode-switcher.tsx
+++ b/apps/v4/components/mode-switcher.tsx
@@ -34,32 +34,6 @@ export function ModeSwitcher({
setTheme(resolvedTheme === "dark" ? "light" : "dark")
}, [resolvedTheme, setTheme])
- React.useEffect(() => {
- const down = (e: KeyboardEvent) => {
- if (
- (e.key === "d" || e.key === "D") &&
- !e.metaKey &&
- !e.ctrlKey &&
- !e.altKey
- ) {
- if (
- (e.target instanceof HTMLElement && e.target.isContentEditable) ||
- e.target instanceof HTMLInputElement ||
- e.target instanceof HTMLTextAreaElement ||
- e.target instanceof HTMLSelectElement
- ) {
- return
- }
-
- e.preventDefault()
- toggleTheme()
- }
- }
-
- document.addEventListener("keydown", down)
- return () => document.removeEventListener("keydown", down)
- }, [toggleTheme])
-
return (
diff --git a/apps/v4/components/theme-provider.tsx b/apps/v4/components/theme-provider.tsx
index 27a68f9795..ea24e06fa7 100644
--- a/apps/v4/components/theme-provider.tsx
+++ b/apps/v4/components/theme-provider.tsx
@@ -1,7 +1,39 @@
"use client"
import * as React from "react"
-import { ThemeProvider as NextThemesProvider } from "next-themes"
+import { ThemeProvider as NextThemesProvider, useTheme } from "next-themes"
+
+function ThemeShortcut() {
+ const { setTheme, resolvedTheme } = useTheme()
+
+ React.useEffect(() => {
+ const down = (e: KeyboardEvent) => {
+ if (
+ (e.key === "d" || e.key === "D") &&
+ !e.metaKey &&
+ !e.ctrlKey &&
+ !e.altKey
+ ) {
+ if (
+ (e.target instanceof HTMLElement && e.target.isContentEditable) ||
+ e.target instanceof HTMLInputElement ||
+ e.target instanceof HTMLTextAreaElement ||
+ e.target instanceof HTMLSelectElement
+ ) {
+ return
+ }
+
+ e.preventDefault()
+ setTheme(resolvedTheme === "dark" ? "light" : "dark")
+ }
+ }
+
+ document.addEventListener("keydown", down)
+ return () => document.removeEventListener("keydown", down)
+ }, [resolvedTheme, setTheme])
+
+ return null
+}
export function ThemeProvider({
children,
@@ -16,6 +48,7 @@ export function ThemeProvider({
enableColorScheme
{...props}
>
+
{children}
)
diff --git a/apps/v4/content/docs/registry/registry-item-json.mdx b/apps/v4/content/docs/registry/registry-item-json.mdx
index 0b43e6846a..4c52058202 100644
--- a/apps/v4/content/docs/registry/registry-item-json.mdx
+++ b/apps/v4/content/docs/registry/registry-item-json.mdx
@@ -103,18 +103,20 @@ The `type` property is used to specify the type of your registry item. This is u
The following types are supported:
-| Type | Description |
-| -------------------- | ------------------------------------------------ |
-| `registry:block` | Use for complex components with multiple files. |
-| `registry:component` | Use for simple components. |
-| `registry:lib` | Use for lib and utils. |
-| `registry:hook` | Use for hooks. |
-| `registry:ui` | Use for UI components and single-file primitives |
-| `registry:page` | Use for page or file-based routes. |
-| `registry:file` | Use for miscellaneous files. |
-| `registry:style` | Use for registry styles. eg. `new-york` |
-| `registry:theme` | Use for themes. |
-| `registry:item` | Use for universal registry items. |
+| Type | Description |
+| -------------------- | ------------------------------------------------- |
+| `registry:base` | Use for entire design systems. |
+| `registry:block` | Use for complex components with multiple files. |
+| `registry:component` | Use for simple components. |
+| `registry:font` | Use for fonts. |
+| `registry:lib` | Use for lib and utils. |
+| `registry:hook` | Use for hooks. |
+| `registry:ui` | Use for UI components and single-file primitives. |
+| `registry:page` | Use for page or file-based routes. |
+| `registry:file` | Use for miscellaneous files. |
+| `registry:style` | Use for registry styles. eg. `new-york`. |
+| `registry:theme` | Use for themes. |
+| `registry:item` | Use for universal registry items. |
### author
diff --git a/apps/v4/package.json b/apps/v4/package.json
index e0109d38e2..38f1c38b96 100644
--- a/apps/v4/package.json
+++ b/apps/v4/package.json
@@ -76,7 +76,7 @@
"rehype-pretty-code": "^0.14.1",
"rimraf": "^6.0.1",
"server-only": "^0.0.1",
- "shadcn": "4.0.0",
+ "shadcn": "4.0.2",
"shiki": "^1.10.1",
"sonner": "^2.0.0",
"swr": "^2.3.6",
diff --git a/apps/v4/public/r/registries.json b/apps/v4/public/r/registries.json
index 4b6c8a5239..26551c07b6 100644
--- a/apps/v4/public/r/registries.json
+++ b/apps/v4/public/r/registries.json
@@ -1,10 +1,4 @@
[
- {
- "name": "@lmscn",
- "homepage": "https://lmscn.vercel.app",
- "url": "https://lmscn.vercel.app/r/{name}.json",
- "description": "LMS components for building interactive learning experiences — quiz, flashcards, matching, fill-in-the-blank, word scramble, sequencing, reading comprehension, spaced repetition and more."
- },
{
"name": "@8bitcn",
"homepage": "https://www.8bitcn.com",
@@ -305,6 +299,12 @@
"url": "https://limeplay.winoffrg.dev/r/{name}.json",
"description": "Modern UI Library for building media players in React. Powered by Shaka Player."
},
+ {
+ "name": "@lmscn",
+ "homepage": "https://lmscn.vercel.app",
+ "url": "https://lmscn.vercel.app/r/{name}.json",
+ "description": "LMS components for building interactive learning experiences — quiz, flashcards, matching, fill-in-the-blank, word scramble, sequencing, reading comprehension, spaced repetition and more."
+ },
{
"name": "@lucide-animated",
"homepage": "https://lucide-animated.com",
@@ -829,10 +829,22 @@
},
{
"name": "@iconiq",
- "homepage": "https://iconiqs.vercel.app",
- "url": "https://iconiqs.vercel.app/r/{name}.json",
+ "homepage": "https://iconiqui.com",
+ "url": "https://iconiqui.com/r/{name}.json",
"description": "Iconiq is a collection of icons designed for web applications. It is a modern, clean, and minimalistic icon set that is perfect for web applications."
},
+ {
+ "name": "@fonttrio",
+ "homepage": "https://www.fonttrio.xyz",
+ "url": "https://www.fonttrio.xyz/r/{name}.json",
+ "description": "Curated font pairing registry for shadcn. Three fonts. One command. Install perfectly configured typography (heading + body + mono) with shadcn add. Includes editorial-grade type scales, CSS variables, and a live preview site."
+ },
+ {
+ "name": "@componentry",
+ "homepage": "https://componentry.fun",
+ "url": "https://componentry.fun/r/{name}.json",
+ "description": "Beautiful, interactive React + Tailwind components for modern product UIs."
+ },
{
"name": "@fluid",
"homepage": "https://www.fluidfunctionalism.com",
diff --git a/apps/v4/public/r/styles/base-lyra/login-02.json b/apps/v4/public/r/styles/base-lyra/login-02.json
index 8d962a836a..5aa25b063e 100644
--- a/apps/v4/public/r/styles/base-lyra/login-02.json
+++ b/apps/v4/public/r/styles/base-lyra/login-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/base-lyra/blocks/login-02/components/login-form.tsx",
- "content": "import { cn } from \"@/registry/base-lyra/lib/utils\"\nimport { Button } from \"@/registry/base-lyra/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-lyra/ui/field\"\nimport { Input } from \"@/registry/base-lyra/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/base-lyra/lib/utils\"\nimport { Button } from \"@/registry/base-lyra/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-lyra/ui/field\"\nimport { Input } from \"@/registry/base-lyra/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/signup-02.json b/apps/v4/public/r/styles/base-lyra/signup-02.json
index 425d2f3182..4742119690 100644
--- a/apps/v4/public/r/styles/base-lyra/signup-02.json
+++ b/apps/v4/public/r/styles/base-lyra/signup-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/base-lyra/blocks/signup-02/components/signup-form.tsx",
- "content": "import { cn } from \"@/registry/base-lyra/lib/utils\"\nimport { Button } from \"@/registry/base-lyra/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-lyra/ui/field\"\nimport { Input } from \"@/registry/base-lyra/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/base-lyra/lib/utils\"\nimport { Button } from \"@/registry/base-lyra/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-lyra/ui/field\"\nimport { Input } from \"@/registry/base-lyra/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/login-02.json b/apps/v4/public/r/styles/base-maia/login-02.json
index c6e76969d1..1a05ebadab 100644
--- a/apps/v4/public/r/styles/base-maia/login-02.json
+++ b/apps/v4/public/r/styles/base-maia/login-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/base-maia/blocks/login-02/components/login-form.tsx",
- "content": "import { cn } from \"@/registry/base-maia/lib/utils\"\nimport { Button } from \"@/registry/base-maia/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-maia/ui/field\"\nimport { Input } from \"@/registry/base-maia/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/base-maia/lib/utils\"\nimport { Button } from \"@/registry/base-maia/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-maia/ui/field\"\nimport { Input } from \"@/registry/base-maia/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/signup-02.json b/apps/v4/public/r/styles/base-maia/signup-02.json
index ac09790e46..ad168369ad 100644
--- a/apps/v4/public/r/styles/base-maia/signup-02.json
+++ b/apps/v4/public/r/styles/base-maia/signup-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/base-maia/blocks/signup-02/components/signup-form.tsx",
- "content": "import { cn } from \"@/registry/base-maia/lib/utils\"\nimport { Button } from \"@/registry/base-maia/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-maia/ui/field\"\nimport { Input } from \"@/registry/base-maia/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/base-maia/lib/utils\"\nimport { Button } from \"@/registry/base-maia/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-maia/ui/field\"\nimport { Input } from \"@/registry/base-maia/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/login-02.json b/apps/v4/public/r/styles/base-mira/login-02.json
index e5b92ea6fe..1b0e33d735 100644
--- a/apps/v4/public/r/styles/base-mira/login-02.json
+++ b/apps/v4/public/r/styles/base-mira/login-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/base-mira/blocks/login-02/components/login-form.tsx",
- "content": "import { cn } from \"@/registry/base-mira/lib/utils\"\nimport { Button } from \"@/registry/base-mira/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-mira/ui/field\"\nimport { Input } from \"@/registry/base-mira/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/base-mira/lib/utils\"\nimport { Button } from \"@/registry/base-mira/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-mira/ui/field\"\nimport { Input } from \"@/registry/base-mira/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/signup-02.json b/apps/v4/public/r/styles/base-mira/signup-02.json
index 1fe9499df5..b7bd98c292 100644
--- a/apps/v4/public/r/styles/base-mira/signup-02.json
+++ b/apps/v4/public/r/styles/base-mira/signup-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/base-mira/blocks/signup-02/components/signup-form.tsx",
- "content": "import { cn } from \"@/registry/base-mira/lib/utils\"\nimport { Button } from \"@/registry/base-mira/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-mira/ui/field\"\nimport { Input } from \"@/registry/base-mira/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/base-mira/lib/utils\"\nimport { Button } from \"@/registry/base-mira/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-mira/ui/field\"\nimport { Input } from \"@/registry/base-mira/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/base-nova/login-02.json b/apps/v4/public/r/styles/base-nova/login-02.json
index 67eb73817d..2535e87374 100644
--- a/apps/v4/public/r/styles/base-nova/login-02.json
+++ b/apps/v4/public/r/styles/base-nova/login-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/base-nova/blocks/login-02/components/login-form.tsx",
- "content": "import { cn } from \"@/registry/base-nova/lib/utils\"\nimport { Button } from \"@/registry/base-nova/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-nova/ui/field\"\nimport { Input } from \"@/registry/base-nova/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/base-nova/lib/utils\"\nimport { Button } from \"@/registry/base-nova/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-nova/ui/field\"\nimport { Input } from \"@/registry/base-nova/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/base-nova/signup-02.json b/apps/v4/public/r/styles/base-nova/signup-02.json
index 90dc53cc98..b8645c736a 100644
--- a/apps/v4/public/r/styles/base-nova/signup-02.json
+++ b/apps/v4/public/r/styles/base-nova/signup-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/base-nova/blocks/signup-02/components/signup-form.tsx",
- "content": "import { cn } from \"@/registry/base-nova/lib/utils\"\nimport { Button } from \"@/registry/base-nova/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-nova/ui/field\"\nimport { Input } from \"@/registry/base-nova/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/base-nova/lib/utils\"\nimport { Button } from \"@/registry/base-nova/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-nova/ui/field\"\nimport { Input } from \"@/registry/base-nova/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/base-vega/login-02.json b/apps/v4/public/r/styles/base-vega/login-02.json
index 985da5f312..cb2b191a45 100644
--- a/apps/v4/public/r/styles/base-vega/login-02.json
+++ b/apps/v4/public/r/styles/base-vega/login-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/base-vega/blocks/login-02/components/login-form.tsx",
- "content": "import { cn } from \"@/registry/base-vega/lib/utils\"\nimport { Button } from \"@/registry/base-vega/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-vega/ui/field\"\nimport { Input } from \"@/registry/base-vega/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/base-vega/lib/utils\"\nimport { Button } from \"@/registry/base-vega/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-vega/ui/field\"\nimport { Input } from \"@/registry/base-vega/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/base-vega/signup-02.json b/apps/v4/public/r/styles/base-vega/signup-02.json
index 33fd691cea..53f34530b1 100644
--- a/apps/v4/public/r/styles/base-vega/signup-02.json
+++ b/apps/v4/public/r/styles/base-vega/signup-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/base-vega/blocks/signup-02/components/signup-form.tsx",
- "content": "import { cn } from \"@/registry/base-vega/lib/utils\"\nimport { Button } from \"@/registry/base-vega/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-vega/ui/field\"\nimport { Input } from \"@/registry/base-vega/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/base-vega/lib/utils\"\nimport { Button } from \"@/registry/base-vega/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/base-vega/ui/field\"\nimport { Input } from \"@/registry/base-vega/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/radix-lyra/login-02.json b/apps/v4/public/r/styles/radix-lyra/login-02.json
index fbb1231027..368f11f0dc 100644
--- a/apps/v4/public/r/styles/radix-lyra/login-02.json
+++ b/apps/v4/public/r/styles/radix-lyra/login-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/radix-lyra/blocks/login-02/components/login-form.tsx",
- "content": "import { cn } from \"@/registry/radix-lyra/lib/utils\"\nimport { Button } from \"@/registry/radix-lyra/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-lyra/ui/field\"\nimport { Input } from \"@/registry/radix-lyra/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/radix-lyra/lib/utils\"\nimport { Button } from \"@/registry/radix-lyra/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-lyra/ui/field\"\nimport { Input } from \"@/registry/radix-lyra/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/radix-lyra/signup-02.json b/apps/v4/public/r/styles/radix-lyra/signup-02.json
index c08fa1e06b..59b36afbd5 100644
--- a/apps/v4/public/r/styles/radix-lyra/signup-02.json
+++ b/apps/v4/public/r/styles/radix-lyra/signup-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/radix-lyra/blocks/signup-02/components/signup-form.tsx",
- "content": "import { cn } from \"@/registry/radix-lyra/lib/utils\"\nimport { Button } from \"@/registry/radix-lyra/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-lyra/ui/field\"\nimport { Input } from \"@/registry/radix-lyra/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/radix-lyra/lib/utils\"\nimport { Button } from \"@/registry/radix-lyra/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-lyra/ui/field\"\nimport { Input } from \"@/registry/radix-lyra/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/radix-maia/login-02.json b/apps/v4/public/r/styles/radix-maia/login-02.json
index fbd042b8b0..1e14ed70e1 100644
--- a/apps/v4/public/r/styles/radix-maia/login-02.json
+++ b/apps/v4/public/r/styles/radix-maia/login-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/radix-maia/blocks/login-02/components/login-form.tsx",
- "content": "import { cn } from \"@/registry/radix-maia/lib/utils\"\nimport { Button } from \"@/registry/radix-maia/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-maia/ui/field\"\nimport { Input } from \"@/registry/radix-maia/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/radix-maia/lib/utils\"\nimport { Button } from \"@/registry/radix-maia/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-maia/ui/field\"\nimport { Input } from \"@/registry/radix-maia/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/radix-maia/signup-02.json b/apps/v4/public/r/styles/radix-maia/signup-02.json
index c99c02b10a..1cfed9e2d8 100644
--- a/apps/v4/public/r/styles/radix-maia/signup-02.json
+++ b/apps/v4/public/r/styles/radix-maia/signup-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/radix-maia/blocks/signup-02/components/signup-form.tsx",
- "content": "import { cn } from \"@/registry/radix-maia/lib/utils\"\nimport { Button } from \"@/registry/radix-maia/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-maia/ui/field\"\nimport { Input } from \"@/registry/radix-maia/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/radix-maia/lib/utils\"\nimport { Button } from \"@/registry/radix-maia/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-maia/ui/field\"\nimport { Input } from \"@/registry/radix-maia/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/radix-mira/login-02.json b/apps/v4/public/r/styles/radix-mira/login-02.json
index d7e1731bb9..6c6d3dc7dc 100644
--- a/apps/v4/public/r/styles/radix-mira/login-02.json
+++ b/apps/v4/public/r/styles/radix-mira/login-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/radix-mira/blocks/login-02/components/login-form.tsx",
- "content": "import { cn } from \"@/registry/radix-mira/lib/utils\"\nimport { Button } from \"@/registry/radix-mira/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-mira/ui/field\"\nimport { Input } from \"@/registry/radix-mira/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/radix-mira/lib/utils\"\nimport { Button } from \"@/registry/radix-mira/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-mira/ui/field\"\nimport { Input } from \"@/registry/radix-mira/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/radix-mira/signup-02.json b/apps/v4/public/r/styles/radix-mira/signup-02.json
index 7a0c701ecb..d560e38dcf 100644
--- a/apps/v4/public/r/styles/radix-mira/signup-02.json
+++ b/apps/v4/public/r/styles/radix-mira/signup-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/radix-mira/blocks/signup-02/components/signup-form.tsx",
- "content": "import { cn } from \"@/registry/radix-mira/lib/utils\"\nimport { Button } from \"@/registry/radix-mira/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-mira/ui/field\"\nimport { Input } from \"@/registry/radix-mira/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/radix-mira/lib/utils\"\nimport { Button } from \"@/registry/radix-mira/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-mira/ui/field\"\nimport { Input } from \"@/registry/radix-mira/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/radix-nova/login-02.json b/apps/v4/public/r/styles/radix-nova/login-02.json
index 6633129489..d1cb64f10c 100644
--- a/apps/v4/public/r/styles/radix-nova/login-02.json
+++ b/apps/v4/public/r/styles/radix-nova/login-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/radix-nova/blocks/login-02/components/login-form.tsx",
- "content": "import { cn } from \"@/registry/radix-nova/lib/utils\"\nimport { Button } from \"@/registry/radix-nova/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-nova/ui/field\"\nimport { Input } from \"@/registry/radix-nova/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/radix-nova/lib/utils\"\nimport { Button } from \"@/registry/radix-nova/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-nova/ui/field\"\nimport { Input } from \"@/registry/radix-nova/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/radix-nova/signup-02.json b/apps/v4/public/r/styles/radix-nova/signup-02.json
index 7b61c1904a..5090bb04d1 100644
--- a/apps/v4/public/r/styles/radix-nova/signup-02.json
+++ b/apps/v4/public/r/styles/radix-nova/signup-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/radix-nova/blocks/signup-02/components/signup-form.tsx",
- "content": "import { cn } from \"@/registry/radix-nova/lib/utils\"\nimport { Button } from \"@/registry/radix-nova/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-nova/ui/field\"\nimport { Input } from \"@/registry/radix-nova/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/radix-nova/lib/utils\"\nimport { Button } from \"@/registry/radix-nova/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-nova/ui/field\"\nimport { Input } from \"@/registry/radix-nova/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/radix-vega/login-02.json b/apps/v4/public/r/styles/radix-vega/login-02.json
index addc0325b3..96bf5d4432 100644
--- a/apps/v4/public/r/styles/radix-vega/login-02.json
+++ b/apps/v4/public/r/styles/radix-vega/login-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/radix-vega/blocks/login-02/components/login-form.tsx",
- "content": "import { cn } from \"@/registry/radix-vega/lib/utils\"\nimport { Button } from \"@/registry/radix-vega/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-vega/ui/field\"\nimport { Input } from \"@/registry/radix-vega/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/radix-vega/lib/utils\"\nimport { Button } from \"@/registry/radix-vega/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-vega/ui/field\"\nimport { Input } from \"@/registry/radix-vega/ui/input\"\n\nexport function LoginForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/styles/radix-vega/signup-02.json b/apps/v4/public/r/styles/radix-vega/signup-02.json
index ace6f30363..4db74d550e 100644
--- a/apps/v4/public/r/styles/radix-vega/signup-02.json
+++ b/apps/v4/public/r/styles/radix-vega/signup-02.json
@@ -18,7 +18,7 @@
},
{
"path": "registry/radix-vega/blocks/signup-02/components/signup-form.tsx",
- "content": "import { cn } from \"@/registry/radix-vega/lib/utils\"\nimport { Button } from \"@/registry/radix-vega/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-vega/ui/field\"\nimport { Input } from \"@/registry/radix-vega/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
+ "content": "import { cn } from \"@/registry/radix-vega/lib/utils\"\nimport { Button } from \"@/registry/radix-vega/ui/button\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n} from \"@/registry/radix-vega/ui/field\"\nimport { Input } from \"@/registry/radix-vega/ui/input\"\n\nexport function SignupForm({\n className,\n ...props\n}: React.ComponentProps<\"form\">) {\n return (\n \n )\n}\n",
"type": "registry:component"
}
],
diff --git a/apps/v4/public/r/templates/astro-app.tar.gz b/apps/v4/public/r/templates/astro-app.tar.gz
index f92ecb698f..2c3b9ad376 100644
Binary files a/apps/v4/public/r/templates/astro-app.tar.gz and b/apps/v4/public/r/templates/astro-app.tar.gz differ
diff --git a/apps/v4/public/r/templates/astro-monorepo.tar.gz b/apps/v4/public/r/templates/astro-monorepo.tar.gz
index 546d9bd90a..64a2a67569 100644
Binary files a/apps/v4/public/r/templates/astro-monorepo.tar.gz and b/apps/v4/public/r/templates/astro-monorepo.tar.gz differ
diff --git a/apps/v4/public/r/templates/next-app.tar.gz b/apps/v4/public/r/templates/next-app.tar.gz
index 6707b2740b..0d68dc9e4a 100644
Binary files a/apps/v4/public/r/templates/next-app.tar.gz and b/apps/v4/public/r/templates/next-app.tar.gz differ
diff --git a/apps/v4/public/r/templates/next-monorepo.tar.gz b/apps/v4/public/r/templates/next-monorepo.tar.gz
index 1f841c6e66..02d6cc4a5b 100644
Binary files a/apps/v4/public/r/templates/next-monorepo.tar.gz and b/apps/v4/public/r/templates/next-monorepo.tar.gz differ
diff --git a/apps/v4/public/r/templates/react-router-app.tar.gz b/apps/v4/public/r/templates/react-router-app.tar.gz
index b4d71491cf..2e1f8e85ba 100644
Binary files a/apps/v4/public/r/templates/react-router-app.tar.gz and b/apps/v4/public/r/templates/react-router-app.tar.gz differ
diff --git a/apps/v4/public/r/templates/react-router-monorepo.tar.gz b/apps/v4/public/r/templates/react-router-monorepo.tar.gz
index 7725680062..517ba1b929 100644
Binary files a/apps/v4/public/r/templates/react-router-monorepo.tar.gz and b/apps/v4/public/r/templates/react-router-monorepo.tar.gz differ
diff --git a/apps/v4/public/r/templates/start-app.tar.gz b/apps/v4/public/r/templates/start-app.tar.gz
index 8f461392af..8560475c2d 100644
Binary files a/apps/v4/public/r/templates/start-app.tar.gz and b/apps/v4/public/r/templates/start-app.tar.gz differ
diff --git a/apps/v4/public/r/templates/start-monorepo.tar.gz b/apps/v4/public/r/templates/start-monorepo.tar.gz
index 08954fc145..80f3472b47 100644
Binary files a/apps/v4/public/r/templates/start-monorepo.tar.gz and b/apps/v4/public/r/templates/start-monorepo.tar.gz differ
diff --git a/apps/v4/public/r/templates/vite-app.tar.gz b/apps/v4/public/r/templates/vite-app.tar.gz
index 9143972a7e..fb9760df42 100644
Binary files a/apps/v4/public/r/templates/vite-app.tar.gz and b/apps/v4/public/r/templates/vite-app.tar.gz differ
diff --git a/apps/v4/public/r/templates/vite-monorepo.tar.gz b/apps/v4/public/r/templates/vite-monorepo.tar.gz
index 6301a0ef19..7d47fd2dcc 100644
Binary files a/apps/v4/public/r/templates/vite-monorepo.tar.gz and b/apps/v4/public/r/templates/vite-monorepo.tar.gz differ
diff --git a/apps/v4/registry/bases/base/blocks/login-02/components/login-form.tsx b/apps/v4/registry/bases/base/blocks/login-02/components/login-form.tsx
index 5efb8d1e2c..18862dd67f 100644
--- a/apps/v4/registry/bases/base/blocks/login-02/components/login-form.tsx
+++ b/apps/v4/registry/bases/base/blocks/login-02/components/login-form.tsx
@@ -41,9 +41,7 @@ export function LoginForm({
-
- Or continue with
-
+ Or continue with