From f199dd3bbf7c9fdf75da1ec512da89ad9f189035 Mon Sep 17 00:00:00 2001 From: shadcn Date: Tue, 19 Mar 2024 10:25:06 +0400 Subject: [PATCH 01/25] feat: switch input-otp to composition (#3052) * feat: switch input-otp to composition * feat: add disabled --- .../www/content/docs/components/input-otp.mdx | 150 +++++++++++++----- apps/www/package.json | 2 +- .../registry/styles/default/input-otp.json | 2 +- .../registry/styles/new-york/input-otp.json | 2 +- .../default/example/input-otp-controlled.tsx | 18 ++- .../default/example/input-otp-demo.tsx | 31 ++-- .../default/example/input-otp-form.tsx | 21 ++- .../default/example/input-otp-pattern.tsx | 21 ++- .../default/example/input-otp-separator.tsx | 29 ++-- apps/www/registry/default/ui/input-otp.tsx | 21 ++- .../new-york/example/input-otp-controlled.tsx | 18 ++- .../new-york/example/input-otp-demo.tsx | 31 ++-- .../new-york/example/input-otp-form.tsx | 21 ++- .../new-york/example/input-otp-pattern.tsx | 21 ++- .../new-york/example/input-otp-separator.tsx | 29 ++-- apps/www/registry/new-york/ui/input-otp.tsx | 19 ++- apps/www/styles/mdx.css | 4 + pnpm-lock.yaml | 8 +- 18 files changed, 265 insertions(+), 183 deletions(-) diff --git a/apps/www/content/docs/components/input-otp.mdx b/apps/www/content/docs/components/input-otp.mdx index 0e31d1b9b1d..3bd96c36726 100644 --- a/apps/www/content/docs/components/input-otp.mdx +++ b/apps/www/content/docs/components/input-otp.mdx @@ -114,24 +114,19 @@ import { ``` ```tsx - ( - <> - - {slots.slice(0, 3).map((slot, index) => ( - - ))}{" "} - - - - {slots.slice(3).map((slot, index) => ( - - ))} - - - )} -/> + + + + + + + + + + + + + ``` ## Examples @@ -150,14 +145,12 @@ import { REGEXP_ONLY_DIGITS_AND_CHARS } from "input-otp" ( - - {slots.map((slot, index) => ( - - ))}{" "} - - )} -/> +> + + + {/* ... */} + + ``` ### Separator @@ -166,29 +159,27 @@ You can use the `` component to add a separator between the -```tsx showLineNumbers {4,17} +```tsx showLineNumbers {4,15} import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, -} from "@/registry/new-york/ui/input-otp" +} from "@/components/ui/input-otp" ... - ( - - {slots.map((slot, index) => ( - - - {index !== slots.length - 1 && } - - ))}{" "} - - )} -/> + + + + + + + + + + + ``` ### Controlled @@ -200,3 +191,80 @@ You can use the `value` and `onChange` props to control the input value. ### Form + +## Changelog + +### 2024-03-19 Composition + +We've made some updates and replaced the render props pattern with composition. Here's how to update your code if you prefer the composition pattern. + + + **Note:** You are not required to update your code if you are using the + `render` prop. It is still supported. + + + + +Update to the latest version of `input-otp`. + +```bash +npm install input-otp@latest +``` + +Update `input-otp.tsx` + +```diff showLineNumbers title="input-otp.tsx" {2,8-11} +- import { OTPInput, SlotProps } from "input-otp" ++ import { OTPInput, OTPInputContext } from "input-otp" + + const InputOTPSlot = React.forwardRef< + React.ElementRef<"div">, +- SlotProps & React.ComponentPropsWithoutRef<"div"> +- >(({ char, hasFakeCaret, isActive, className, ...props }, ref) => { ++ React.ComponentPropsWithoutRef<"div"> & { index: number } ++ >(({ index, className, ...props }, ref) => { ++ const inputOTPContext = React.useContext(OTPInputContext) ++ const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index] +``` + +Then replace the `render` prop in your code. + +```diff showLineNumbers {2-12} + + + + + + + + + + + + + +``` + + + +### 2024-03-19 Disabled + +To add a disabled state to the input, update `` as follows: + +```tsx showLineNumbers title="input-otp.tsx" {4,7-11} +const InputOTP = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, containerClassName, ...props }, ref) => ( + +)) +InputOTP.displayName = "InputOTP" +``` diff --git a/apps/www/package.json b/apps/www/package.json index 38c212ce85a..6d65f3c0e92 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -58,7 +58,7 @@ "embla-carousel-autoplay": "8.0.0-rc15", "embla-carousel-react": "8.0.0-rc15", "geist": "^1.1.0", - "input-otp": "^1.0.1", + "input-otp": "^1.2.2", "jotai": "^2.1.0", "lodash.template": "^4.5.0", "lucide-react": "0.288.0", diff --git a/apps/www/public/registry/styles/default/input-otp.json b/apps/www/public/registry/styles/default/input-otp.json index 6be1abeabc9..648ea71421c 100644 --- a/apps/www/public/registry/styles/default/input-otp.json +++ b/apps/www/public/registry/styles/default/input-otp.json @@ -6,7 +6,7 @@ "files": [ { "name": "input-otp.tsx", - "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, SlotProps } from \"input-otp\"\nimport { Dot } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst InputOTP = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nInputOTP.displayName = \"InputOTP\"\n\nconst InputOTPGroup = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ className, ...props }, ref) => (\n
\n))\nInputOTPGroup.displayName = \"InputOTPGroup\"\n\nconst InputOTPSlot = React.forwardRef<\n React.ElementRef<\"div\">,\n SlotProps & React.ComponentPropsWithoutRef<\"div\">\n>(({ char, hasFakeCaret, isActive, className, ...props }, ref) => {\n return (\n \n {char}\n {hasFakeCaret && (\n
\n
\n
\n )}\n
\n )\n})\nInputOTPSlot.displayName = \"InputOTPSlot\"\n\nconst InputOTPSeparator = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ ...props }, ref) => (\n
\n \n
\n))\nInputOTPSeparator.displayName = \"InputOTPSeparator\"\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n" + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\nimport { Dot } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst InputOTP = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, containerClassName, ...props }, ref) => (\n \n))\nInputOTP.displayName = \"InputOTP\"\n\nconst InputOTPGroup = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ className, ...props }, ref) => (\n
\n))\nInputOTPGroup.displayName = \"InputOTPGroup\"\n\nconst InputOTPSlot = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\"> & { index: number }\n>(({ index, className, ...props }, ref) => {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index]\n\n return (\n \n {char}\n {hasFakeCaret && (\n
\n
\n
\n )}\n
\n )\n})\nInputOTPSlot.displayName = \"InputOTPSlot\"\n\nconst InputOTPSeparator = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ ...props }, ref) => (\n
\n \n
\n))\nInputOTPSeparator.displayName = \"InputOTPSeparator\"\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n" } ], "type": "components:ui" diff --git a/apps/www/public/registry/styles/new-york/input-otp.json b/apps/www/public/registry/styles/new-york/input-otp.json index 8bdb700821b..15b25c76b74 100644 --- a/apps/www/public/registry/styles/new-york/input-otp.json +++ b/apps/www/public/registry/styles/new-york/input-otp.json @@ -6,7 +6,7 @@ "files": [ { "name": "input-otp.tsx", - "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { DashIcon } from \"@radix-ui/react-icons\"\nimport { OTPInput, SlotProps } from \"input-otp\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst InputOTP = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nInputOTP.displayName = \"InputOTP\"\n\nconst InputOTPGroup = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ className, ...props }, ref) => (\n
\n))\nInputOTPGroup.displayName = \"InputOTPGroup\"\n\nconst InputOTPSlot = React.forwardRef<\n React.ElementRef<\"div\">,\n SlotProps & React.ComponentPropsWithoutRef<\"div\">\n>(({ char, hasFakeCaret, isActive, className, ...props }, ref) => {\n return (\n \n {char}\n {hasFakeCaret && (\n
\n
\n
\n )}\n
\n )\n})\nInputOTPSlot.displayName = \"InputOTPSlot\"\n\nconst InputOTPSeparator = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ ...props }, ref) => (\n
\n \n
\n))\nInputOTPSeparator.displayName = \"InputOTPSeparator\"\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n" + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { DashIcon } from \"@radix-ui/react-icons\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst InputOTP = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, containerClassName, ...props }, ref) => (\n \n))\nInputOTP.displayName = \"InputOTP\"\n\nconst InputOTPGroup = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ className, ...props }, ref) => (\n
\n))\nInputOTPGroup.displayName = \"InputOTPGroup\"\n\nconst InputOTPSlot = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\"> & { index: number }\n>(({ index, className, ...props }, ref) => {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index]\n\n return (\n \n {char}\n {hasFakeCaret && (\n
\n
\n
\n )}\n
\n )\n})\nInputOTPSlot.displayName = \"InputOTPSlot\"\n\nconst InputOTPSeparator = React.forwardRef<\n React.ElementRef<\"div\">,\n React.ComponentPropsWithoutRef<\"div\">\n>(({ ...props }, ref) => (\n
\n \n
\n))\nInputOTPSeparator.displayName = \"InputOTPSeparator\"\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n" } ], "type": "components:ui" diff --git a/apps/www/registry/default/example/input-otp-controlled.tsx b/apps/www/registry/default/example/input-otp-controlled.tsx index 264b212cc63..c5f95cfbfca 100644 --- a/apps/www/registry/default/example/input-otp-controlled.tsx +++ b/apps/www/registry/default/example/input-otp-controlled.tsx @@ -17,14 +17,16 @@ export default function InputOTPControlled() { maxLength={6} value={value} onChange={(value) => setValue(value)} - render={({ slots }) => ( - - {slots.map((slot, index) => ( - - ))}{" "} - - )} - /> + > + + + + + + + + +
{value === "" ? ( <>Enter your one-time password. diff --git a/apps/www/registry/default/example/input-otp-demo.tsx b/apps/www/registry/default/example/input-otp-demo.tsx index f2b8d7fb542..ec19b7db0fa 100644 --- a/apps/www/registry/default/example/input-otp-demo.tsx +++ b/apps/www/registry/default/example/input-otp-demo.tsx @@ -7,23 +7,18 @@ import { export default function InputOTPDemo() { return ( - ( - <> - - {slots.slice(0, 3).map((slot, index) => ( - - ))}{" "} - - - - {slots.slice(3).map((slot, index) => ( - - ))} - - - )} - /> + + + + + + + + + + + + + ) } diff --git a/apps/www/registry/default/example/input-otp-form.tsx b/apps/www/registry/default/example/input-otp-form.tsx index 66b18702143..cc6922f52df 100644 --- a/apps/www/registry/default/example/input-otp-form.tsx +++ b/apps/www/registry/default/example/input-otp-form.tsx @@ -56,17 +56,16 @@ export default function InputOTPForm() { One-Time Password - ( - - {slots.map((slot, index) => ( - - ))}{" "} - - )} - {...field} - /> + + + + + + + + + + Please enter the one-time password sent to your phone. diff --git a/apps/www/registry/default/example/input-otp-pattern.tsx b/apps/www/registry/default/example/input-otp-pattern.tsx index a9454b0a0ab..87d711b0ecd 100644 --- a/apps/www/registry/default/example/input-otp-pattern.tsx +++ b/apps/www/registry/default/example/input-otp-pattern.tsx @@ -8,16 +8,15 @@ import { export default function InputOTPPattern() { return ( - ( - - {slots.map((slot, index) => ( - - ))}{" "} - - )} - /> + + + + + + + + + + ) } diff --git a/apps/www/registry/default/example/input-otp-separator.tsx b/apps/www/registry/default/example/input-otp-separator.tsx index fd8f12c1153..e6e5a2a6fa2 100644 --- a/apps/www/registry/default/example/input-otp-separator.tsx +++ b/apps/www/registry/default/example/input-otp-separator.tsx @@ -9,18 +9,21 @@ import { export default function InputOTPWithSeparator() { return ( - ( - - {slots.map((slot, index) => ( - - - {index !== slots.length - 1 && } - - ))}{" "} - - )} - /> + + + + + + + + + + + + + + + + ) } diff --git a/apps/www/registry/default/ui/input-otp.tsx b/apps/www/registry/default/ui/input-otp.tsx index a42ca9a1c92..f66fcfa0ddb 100644 --- a/apps/www/registry/default/ui/input-otp.tsx +++ b/apps/www/registry/default/ui/input-otp.tsx @@ -1,7 +1,7 @@ "use client" import * as React from "react" -import { OTPInput, SlotProps } from "input-otp" +import { OTPInput, OTPInputContext } from "input-otp" import { Dot } from "lucide-react" import { cn } from "@/lib/utils" @@ -9,10 +9,14 @@ import { cn } from "@/lib/utils" const InputOTP = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( +>(({ className, containerClassName, ...props }, ref) => ( )) @@ -28,14 +32,17 @@ InputOTPGroup.displayName = "InputOTPGroup" const InputOTPSlot = React.forwardRef< React.ElementRef<"div">, - SlotProps & React.ComponentPropsWithoutRef<"div"> ->(({ char, hasFakeCaret, isActive, className, ...props }, ref) => { + React.ComponentPropsWithoutRef<"div"> & { index: number } +>(({ index, className, ...props }, ref) => { + const inputOTPContext = React.useContext(OTPInputContext) + const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index] + return (
-
+
)}
diff --git a/apps/www/registry/new-york/example/input-otp-controlled.tsx b/apps/www/registry/new-york/example/input-otp-controlled.tsx index 0293a90a095..9b4eb7330f8 100644 --- a/apps/www/registry/new-york/example/input-otp-controlled.tsx +++ b/apps/www/registry/new-york/example/input-otp-controlled.tsx @@ -17,14 +17,16 @@ export default function InputOTPControlled() { maxLength={6} value={value} onChange={(value) => setValue(value)} - render={({ slots }) => ( - - {slots.map((slot, index) => ( - - ))}{" "} - - )} - /> + > + + + + + + + + +
{value === "" ? ( <>Enter your one-time password. diff --git a/apps/www/registry/new-york/example/input-otp-demo.tsx b/apps/www/registry/new-york/example/input-otp-demo.tsx index bfa24c031a3..bc63ca1c162 100644 --- a/apps/www/registry/new-york/example/input-otp-demo.tsx +++ b/apps/www/registry/new-york/example/input-otp-demo.tsx @@ -7,23 +7,18 @@ import { export default function InputOTPDemo() { return ( - ( - <> - - {slots.slice(0, 3).map((slot, index) => ( - - ))}{" "} - - - - {slots.slice(3).map((slot, index) => ( - - ))} - - - )} - /> + + + + + + + + + + + + + ) } diff --git a/apps/www/registry/new-york/example/input-otp-form.tsx b/apps/www/registry/new-york/example/input-otp-form.tsx index 432216a7a56..2ab26e4739f 100644 --- a/apps/www/registry/new-york/example/input-otp-form.tsx +++ b/apps/www/registry/new-york/example/input-otp-form.tsx @@ -56,17 +56,16 @@ export default function InputOTPForm() { One-Time Password - ( - - {slots.map((slot, index) => ( - - ))}{" "} - - )} - {...field} - /> + + + + + + + + + + Please enter the one-time password sent to your phone. diff --git a/apps/www/registry/new-york/example/input-otp-pattern.tsx b/apps/www/registry/new-york/example/input-otp-pattern.tsx index 48eb4f5630a..9dc46cab92d 100644 --- a/apps/www/registry/new-york/example/input-otp-pattern.tsx +++ b/apps/www/registry/new-york/example/input-otp-pattern.tsx @@ -8,16 +8,15 @@ import { export default function InputOTPPattern() { return ( - ( - - {slots.map((slot, index) => ( - - ))}{" "} - - )} - /> + + + + + + + + + + ) } diff --git a/apps/www/registry/new-york/example/input-otp-separator.tsx b/apps/www/registry/new-york/example/input-otp-separator.tsx index c789f155413..dd652966353 100644 --- a/apps/www/registry/new-york/example/input-otp-separator.tsx +++ b/apps/www/registry/new-york/example/input-otp-separator.tsx @@ -9,18 +9,21 @@ import { export default function InputOTPWithSeparator() { return ( - ( - - {slots.map((slot, index) => ( - - - {index !== slots.length - 1 && } - - ))}{" "} - - )} - /> + + + + + + + + + + + + + + + + ) } diff --git a/apps/www/registry/new-york/ui/input-otp.tsx b/apps/www/registry/new-york/ui/input-otp.tsx index 6229e3cb792..84d07209056 100644 --- a/apps/www/registry/new-york/ui/input-otp.tsx +++ b/apps/www/registry/new-york/ui/input-otp.tsx @@ -2,17 +2,21 @@ import * as React from "react" import { DashIcon } from "@radix-ui/react-icons" -import { OTPInput, SlotProps } from "input-otp" +import { OTPInput, OTPInputContext } from "input-otp" import { cn } from "@/lib/utils" const InputOTP = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( +>(({ className, containerClassName, ...props }, ref) => ( )) @@ -28,8 +32,11 @@ InputOTPGroup.displayName = "InputOTPGroup" const InputOTPSlot = React.forwardRef< React.ElementRef<"div">, - SlotProps & React.ComponentPropsWithoutRef<"div"> ->(({ char, hasFakeCaret, isActive, className, ...props }, ref) => { + React.ComponentPropsWithoutRef<"div"> & { index: number } +>(({ index, className, ...props }, ref) => { + const inputOTPContext = React.useContext(OTPInputContext) + const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index] + return (
-
+
)}
diff --git a/apps/www/styles/mdx.css b/apps/www/styles/mdx.css index 8f7ba69222c..e84b16a56db 100644 --- a/apps/www/styles/mdx.css +++ b/apps/www/styles/mdx.css @@ -69,3 +69,7 @@ .mdx > .steps:first-child > h3:first-child { @apply mt-0; } + +.steps > h3 { + @apply mt-8 mb-4 text-base font-semibold; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5f112a67368..a443cde9866 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -231,8 +231,8 @@ importers: specifier: ^1.1.0 version: 1.1.0(next@14.0.4) input-otp: - specifier: ^1.0.1 - version: 1.0.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.2.2 + version: 1.2.2(react-dom@18.2.0)(react@18.2.0) jotai: specifier: ^2.1.0 version: 2.1.0(react@18.2.0) @@ -7615,8 +7615,8 @@ packages: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: false - /input-otp@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-AFMGRsOwXcH7koO+8nnVcJFYEe92tNmRlb2TUKbj9Bpdyc44GaS3LfJam3MdoXQv1jejpMS0+fxJFSCsEDHd9A==} + /input-otp@1.2.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-9x6UurPuc9Tb+ywWFcFrG4ryvScSmfLyj8D35dl/HNpSr9jZNtWiXufU65kaDHD/KYUop7hDFH+caZCUKdYNsg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 From 3a4c3b2f7d387e4b126a8afd20badc8891a04212 Mon Sep 17 00:00:00 2001 From: Dominik Ferber Date: Thu, 21 Mar 2024 11:38:21 +0200 Subject: [PATCH 02/25] fix nextjs docs (#3075) --- apps/www/content/docs/installation/next.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/content/docs/installation/next.mdx b/apps/www/content/docs/installation/next.mdx index 7f5b9894cc7..d82c4055d09 100644 --- a/apps/www/content/docs/installation/next.mdx +++ b/apps/www/content/docs/installation/next.mdx @@ -50,7 +50,7 @@ Here's how I configure Inter for Next.js: import "@/styles/globals.css" import { Inter as FontSans } from "next/font/google" -import { cn } from "../@/lib/utils" +import { cn } from "@/lib/utils" const fontSans = FontSans({ subsets: ["latin"], From 79c054ac7a7b2a13acc09d72106fd40663cc9bee Mon Sep 17 00:00:00 2001 From: shadcn Date: Fri, 22 Mar 2024 21:39:33 +0400 Subject: [PATCH 03/25] feat: blocks (#3094) --- .github/ISSUE_TEMPLATE/block_request.yml | 27 + apps/www/__registry__/index.tsx | 896 ++++++++++ apps/www/actions/edit-in-v0.ts | 50 + apps/www/app/(app)/blocks/layout.tsx | 52 + apps/www/app/(app)/blocks/page.tsx | 10 + .../app/{ => (app)}/docs/[[...slug]]/page.tsx | 0 apps/www/app/{ => (app)}/docs/layout.tsx | 0 .../components/user-auth-form.tsx | 0 .../examples/authentication/page.tsx | 2 +- .../cards/components/cookie-settings.tsx | 0 .../cards/components/create-account.tsx | 0 .../examples/cards/components/date-picker.tsx | 0 .../examples/cards/components/github-card.tsx | 0 .../cards/components/notifications.tsx | 0 .../cards/components/payment-method.tsx | 0 .../cards/components/report-an-issue.tsx | 0 .../cards/components/share-document.tsx | 0 .../cards/components/team-members.tsx | 0 .../app/{ => (app)}/examples/cards/page.tsx | 0 .../components/date-range-picker.tsx | 0 .../dashboard/components/main-nav.tsx | 0 .../dashboard/components/overview.tsx | 0 .../dashboard/components/recent-sales.tsx | 0 .../examples/dashboard/components/search.tsx | 0 .../dashboard/components/team-switcher.tsx | 0 .../dashboard/components/user-nav.tsx | 0 .../{ => (app)}/examples/dashboard/page.tsx | 14 +- .../examples/forms/account/account-form.tsx | 0 .../examples/forms/account/page.tsx | 2 +- .../forms/appearance/appearance-form.tsx | 0 .../examples/forms/appearance/page.tsx | 2 +- .../examples/forms/components/sidebar-nav.tsx | 0 .../examples/forms/display/display-form.tsx | 0 .../examples/forms/display/page.tsx | 2 +- .../app/{ => (app)}/examples/forms/layout.tsx | 2 +- .../notifications/notifications-form.tsx | 0 .../examples/forms/notifications/page.tsx | 2 +- .../app/{ => (app)}/examples/forms/page.tsx | 2 +- .../examples/forms/profile-form.tsx | 0 apps/www/app/{ => (app)}/examples/layout.tsx | 0 .../mail/components/account-switcher.tsx | 0 .../examples/mail/components/mail-display.tsx | 2 +- .../examples/mail/components/mail-list.tsx | 4 +- .../examples/mail/components/mail.tsx | 48 +- .../examples/mail/components/nav.tsx | 0 .../app/{ => (app)}/examples/mail/data.tsx | 0 .../app/{ => (app)}/examples/mail/page.tsx | 4 +- .../app/{ => (app)}/examples/mail/use-mail.ts | 2 +- .../music/components/album-artwork.tsx | 0 .../examples/music/components/menu.tsx | 0 .../components/podcast-empty-placeholder.tsx | 0 .../examples/music/components/sidebar.tsx | 0 .../{ => (app)}/examples/music/data/albums.ts | 0 .../examples/music/data/playlists.ts | 0 .../app/{ => (app)}/examples/music/page.tsx | 0 .../playground/components/code-viewer.tsx | 0 .../components/maxlength-selector.tsx | 0 .../playground/components/model-selector.tsx | 0 .../playground/components/preset-actions.tsx | 0 .../playground/components/preset-save.tsx | 0 .../playground/components/preset-selector.tsx | 0 .../playground/components/preset-share.tsx | 0 .../components/temperature-selector.tsx | 0 .../playground/components/top-p-selector.tsx | 0 .../examples/playground/data/models.ts | 0 .../examples/playground/data/presets.ts | 0 .../{ => (app)}/examples/playground/page.tsx | 0 .../examples/tasks/components/columns.tsx | 0 .../components/data-table-column-header.tsx | 0 .../components/data-table-faceted-filter.tsx | 0 .../components/data-table-pagination.tsx | 0 .../components/data-table-row-actions.tsx | 0 .../tasks/components/data-table-toolbar.tsx | 2 +- .../components/data-table-view-options.tsx | 0 .../examples/tasks/components/data-table.tsx | 4 +- .../examples/tasks/components/user-nav.tsx | 0 .../{ => (app)}/examples/tasks/data/data.tsx | 0 .../{ => (app)}/examples/tasks/data/schema.ts | 0 .../{ => (app)}/examples/tasks/data/seed.ts | 0 .../examples/tasks/data/tasks.json | 0 .../app/{ => (app)}/examples/tasks/page.tsx | 2 +- apps/www/app/(app)/layout.tsx | 16 + apps/www/app/{ => (app)}/page.tsx | 2 +- apps/www/app/{ => (app)}/sink/layout.tsx | 0 .../app/{ => (app)}/sink/new-york/page.tsx | 0 apps/www/app/{ => (app)}/sink/page.tsx | 0 apps/www/app/{ => (app)}/themes/page.tsx | 2 +- apps/www/app/{ => (app)}/themes/tabs.tsx | 0 .../(blocks)/blocks/[style]/[name]/page.tsx | 86 + apps/www/app/layout.tsx | 8 +- apps/www/components/announcement.tsx | 6 +- .../www/components/block-copy-code-button.tsx | 54 + apps/www/components/block-display.tsx | 24 + apps/www/components/block-preview.tsx | 210 +++ apps/www/components/examples-nav.tsx | 16 +- apps/www/components/main-nav.tsx | 13 +- apps/www/components/mdx-components.tsx | 1 + apps/www/components/providers.tsx | 2 +- apps/www/components/v0-button.tsx | 117 ++ apps/www/config/docs.ts | 14 +- apps/www/content/docs/changelog.mdx | 96 + .../content/docs/components/data-table.mdx | 6 +- apps/www/contentlayer.config.js | 2 +- apps/www/hooks/use-config.ts | 2 +- apps/www/lib/blocks.ts | 109 ++ apps/www/lib/events.ts | 1 + apps/www/lib/highlight-code.ts | 33 + apps/www/package.json | 24 +- apps/www/public/images/dashboard-1-dark.jpg | Bin 0 -> 186693 bytes apps/www/public/images/dashboard-1.jpg | Bin 0 -> 159643 bytes apps/www/public/images/dashboard-2-dark.jpg | Bin 0 -> 114718 bytes apps/www/public/images/dashboard-2.jpg | Bin 0 -> 101104 bytes apps/www/public/images/dashboard-3-dark.jpg | Bin 0 -> 117282 bytes apps/www/public/images/dashboard-3.jpg | Bin 0 -> 105382 bytes apps/www/public/placeholder-logo.svg | 1 + apps/www/public/placeholder-user.jpg | Bin 0 -> 1635 bytes apps/www/public/placeholder.svg | 1 + apps/www/public/registry/colors/gray.json | 2 +- apps/www/public/registry/colors/neutral.json | 2 +- apps/www/public/registry/colors/slate.json | 2 +- apps/www/public/registry/colors/stone.json | 2 +- apps/www/public/registry/colors/zinc.json | 2 +- .../registry/styles/new-york/calendar.json | 2 +- .../registry/styles/new-york/toast.json | 2 +- apps/www/public/registry/themes.css | 480 ++--- apps/www/registry/blocks.ts | 77 + .../default/block/authentication-01.tsx | 45 + .../default/block/authentication-02.tsx | 67 + .../default/block/authentication-03.tsx | 72 + .../default/block/authentication-04.tsx | 74 + .../registry/default/block/dashboard-01.tsx | 455 +++++ .../registry/default/block/dashboard-02.tsx | 244 +++ .../registry/default/block/dashboard-03.tsx | 458 +++++ .../registry/default/block/dashboard-04.tsx | 220 +++ apps/www/registry/examples.ts | 850 +++++++++ .../new-york/block/authentication-01.tsx | 45 + .../new-york/block/authentication-02.tsx | 67 + .../new-york/block/authentication-03.tsx | 72 + .../new-york/block/authentication-04.tsx | 74 + .../registry/new-york/block/dashboard-01.tsx | 455 +++++ .../registry/new-york/block/dashboard-02.tsx | 244 +++ .../registry/new-york/block/dashboard-03.tsx | 458 +++++ .../registry/new-york/block/dashboard-04.tsx | 220 +++ .../new-york/example/breadcrumb-dropdown.tsx | 2 +- .../new-york/example/breadcrumb-link.tsx | 2 +- .../example/breadcrumb-responsive.tsx | 14 +- .../new-york/example/breadcrumb-separator.tsx | 2 +- .../example/resizable-demo-with-handle.tsx | 2 +- apps/www/registry/new-york/ui/calendar.tsx | 2 +- apps/www/registry/new-york/ui/use-toast.ts | 2 +- apps/www/registry/registry.ts | 1132 +----------- apps/www/registry/schema.ts | 50 +- apps/www/registry/ui.ts | 279 +++ apps/www/scripts/build-registry.ts | 82 +- apps/www/styles/globals.css | 3 + package.json | 10 +- pnpm-lock.yaml | 1592 ++++++++--------- templates/next-template/components/icons.tsx | 7 +- templates/next-template/package.json | 14 +- turbo.json | 5 +- 160 files changed, 7480 insertions(+), 2388 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/block_request.yml create mode 100644 apps/www/actions/edit-in-v0.ts create mode 100644 apps/www/app/(app)/blocks/layout.tsx create mode 100644 apps/www/app/(app)/blocks/page.tsx rename apps/www/app/{ => (app)}/docs/[[...slug]]/page.tsx (100%) rename apps/www/app/{ => (app)}/docs/layout.tsx (100%) rename apps/www/app/{ => (app)}/examples/authentication/components/user-auth-form.tsx (100%) rename apps/www/app/{ => (app)}/examples/authentication/page.tsx (97%) rename apps/www/app/{ => (app)}/examples/cards/components/cookie-settings.tsx (100%) rename apps/www/app/{ => (app)}/examples/cards/components/create-account.tsx (100%) rename apps/www/app/{ => (app)}/examples/cards/components/date-picker.tsx (100%) rename apps/www/app/{ => (app)}/examples/cards/components/github-card.tsx (100%) rename apps/www/app/{ => (app)}/examples/cards/components/notifications.tsx (100%) rename apps/www/app/{ => (app)}/examples/cards/components/payment-method.tsx (100%) rename apps/www/app/{ => (app)}/examples/cards/components/report-an-issue.tsx (100%) rename apps/www/app/{ => (app)}/examples/cards/components/share-document.tsx (100%) rename apps/www/app/{ => (app)}/examples/cards/components/team-members.tsx (100%) rename apps/www/app/{ => (app)}/examples/cards/page.tsx (100%) rename apps/www/app/{ => (app)}/examples/dashboard/components/date-range-picker.tsx (100%) rename apps/www/app/{ => (app)}/examples/dashboard/components/main-nav.tsx (100%) rename apps/www/app/{ => (app)}/examples/dashboard/components/overview.tsx (100%) rename apps/www/app/{ => (app)}/examples/dashboard/components/recent-sales.tsx (100%) rename apps/www/app/{ => (app)}/examples/dashboard/components/search.tsx (100%) rename apps/www/app/{ => (app)}/examples/dashboard/components/team-switcher.tsx (100%) rename apps/www/app/{ => (app)}/examples/dashboard/components/user-nav.tsx (100%) rename apps/www/app/{ => (app)}/examples/dashboard/page.tsx (93%) rename apps/www/app/{ => (app)}/examples/forms/account/account-form.tsx (100%) rename apps/www/app/{ => (app)}/examples/forms/account/page.tsx (85%) rename apps/www/app/{ => (app)}/examples/forms/appearance/appearance-form.tsx (100%) rename apps/www/app/{ => (app)}/examples/forms/appearance/page.tsx (84%) rename apps/www/app/{ => (app)}/examples/forms/components/sidebar-nav.tsx (100%) rename apps/www/app/{ => (app)}/examples/forms/display/display-form.tsx (100%) rename apps/www/app/{ => (app)}/examples/forms/display/page.tsx (84%) rename apps/www/app/{ => (app)}/examples/forms/layout.tsx (95%) rename apps/www/app/{ => (app)}/examples/forms/notifications/notifications-form.tsx (100%) rename apps/www/app/{ => (app)}/examples/forms/notifications/page.tsx (81%) rename apps/www/app/{ => (app)}/examples/forms/page.tsx (85%) rename apps/www/app/{ => (app)}/examples/forms/profile-form.tsx (100%) rename apps/www/app/{ => (app)}/examples/layout.tsx (100%) rename apps/www/app/{ => (app)}/examples/mail/components/account-switcher.tsx (100%) rename apps/www/app/{ => (app)}/examples/mail/components/mail-display.tsx (99%) rename apps/www/app/{ => (app)}/examples/mail/components/mail-list.tsx (95%) rename apps/www/app/{ => (app)}/examples/mail/components/mail.tsx (80%) rename apps/www/app/{ => (app)}/examples/mail/components/nav.tsx (100%) rename apps/www/app/{ => (app)}/examples/mail/data.tsx (100%) rename apps/www/app/{ => (app)}/examples/mail/page.tsx (89%) rename apps/www/app/{ => (app)}/examples/mail/use-mail.ts (77%) rename apps/www/app/{ => (app)}/examples/music/components/album-artwork.tsx (100%) rename apps/www/app/{ => (app)}/examples/music/components/menu.tsx (100%) rename apps/www/app/{ => (app)}/examples/music/components/podcast-empty-placeholder.tsx (100%) rename apps/www/app/{ => (app)}/examples/music/components/sidebar.tsx (100%) rename apps/www/app/{ => (app)}/examples/music/data/albums.ts (100%) rename apps/www/app/{ => (app)}/examples/music/data/playlists.ts (100%) rename apps/www/app/{ => (app)}/examples/music/page.tsx (100%) rename apps/www/app/{ => (app)}/examples/playground/components/code-viewer.tsx (100%) rename apps/www/app/{ => (app)}/examples/playground/components/maxlength-selector.tsx (100%) rename apps/www/app/{ => (app)}/examples/playground/components/model-selector.tsx (100%) rename apps/www/app/{ => (app)}/examples/playground/components/preset-actions.tsx (100%) rename apps/www/app/{ => (app)}/examples/playground/components/preset-save.tsx (100%) rename apps/www/app/{ => (app)}/examples/playground/components/preset-selector.tsx (100%) rename apps/www/app/{ => (app)}/examples/playground/components/preset-share.tsx (100%) rename apps/www/app/{ => (app)}/examples/playground/components/temperature-selector.tsx (100%) rename apps/www/app/{ => (app)}/examples/playground/components/top-p-selector.tsx (100%) rename apps/www/app/{ => (app)}/examples/playground/data/models.ts (100%) rename apps/www/app/{ => (app)}/examples/playground/data/presets.ts (100%) rename apps/www/app/{ => (app)}/examples/playground/page.tsx (100%) rename apps/www/app/{ => (app)}/examples/tasks/components/columns.tsx (100%) rename apps/www/app/{ => (app)}/examples/tasks/components/data-table-column-header.tsx (100%) rename apps/www/app/{ => (app)}/examples/tasks/components/data-table-faceted-filter.tsx (100%) rename apps/www/app/{ => (app)}/examples/tasks/components/data-table-pagination.tsx (100%) rename apps/www/app/{ => (app)}/examples/tasks/components/data-table-row-actions.tsx (100%) rename apps/www/app/{ => (app)}/examples/tasks/components/data-table-toolbar.tsx (94%) rename apps/www/app/{ => (app)}/examples/tasks/components/data-table-view-options.tsx (100%) rename apps/www/app/{ => (app)}/examples/tasks/components/data-table.tsx (96%) rename apps/www/app/{ => (app)}/examples/tasks/components/user-nav.tsx (100%) rename apps/www/app/{ => (app)}/examples/tasks/data/data.tsx (100%) rename apps/www/app/{ => (app)}/examples/tasks/data/schema.ts (100%) rename apps/www/app/{ => (app)}/examples/tasks/data/seed.ts (100%) rename apps/www/app/{ => (app)}/examples/tasks/data/tasks.json (100%) rename apps/www/app/{ => (app)}/examples/tasks/page.tsx (95%) create mode 100644 apps/www/app/(app)/layout.tsx rename apps/www/app/{ => (app)}/page.tsx (97%) rename apps/www/app/{ => (app)}/sink/layout.tsx (100%) rename apps/www/app/{ => (app)}/sink/new-york/page.tsx (100%) rename apps/www/app/{ => (app)}/sink/page.tsx (100%) rename apps/www/app/{ => (app)}/themes/page.tsx (96%) rename apps/www/app/{ => (app)}/themes/tabs.tsx (100%) create mode 100644 apps/www/app/(blocks)/blocks/[style]/[name]/page.tsx create mode 100644 apps/www/components/block-copy-code-button.tsx create mode 100644 apps/www/components/block-display.tsx create mode 100644 apps/www/components/block-preview.tsx create mode 100644 apps/www/components/v0-button.tsx create mode 100644 apps/www/lib/blocks.ts create mode 100644 apps/www/lib/highlight-code.ts create mode 100644 apps/www/public/images/dashboard-1-dark.jpg create mode 100644 apps/www/public/images/dashboard-1.jpg create mode 100644 apps/www/public/images/dashboard-2-dark.jpg create mode 100644 apps/www/public/images/dashboard-2.jpg create mode 100644 apps/www/public/images/dashboard-3-dark.jpg create mode 100644 apps/www/public/images/dashboard-3.jpg create mode 100644 apps/www/public/placeholder-logo.svg create mode 100644 apps/www/public/placeholder-user.jpg create mode 100644 apps/www/public/placeholder.svg create mode 100644 apps/www/registry/blocks.ts create mode 100644 apps/www/registry/default/block/authentication-01.tsx create mode 100644 apps/www/registry/default/block/authentication-02.tsx create mode 100644 apps/www/registry/default/block/authentication-03.tsx create mode 100644 apps/www/registry/default/block/authentication-04.tsx create mode 100644 apps/www/registry/default/block/dashboard-01.tsx create mode 100644 apps/www/registry/default/block/dashboard-02.tsx create mode 100644 apps/www/registry/default/block/dashboard-03.tsx create mode 100644 apps/www/registry/default/block/dashboard-04.tsx create mode 100644 apps/www/registry/examples.ts create mode 100644 apps/www/registry/new-york/block/authentication-01.tsx create mode 100644 apps/www/registry/new-york/block/authentication-02.tsx create mode 100644 apps/www/registry/new-york/block/authentication-03.tsx create mode 100644 apps/www/registry/new-york/block/authentication-04.tsx create mode 100644 apps/www/registry/new-york/block/dashboard-01.tsx create mode 100644 apps/www/registry/new-york/block/dashboard-02.tsx create mode 100644 apps/www/registry/new-york/block/dashboard-03.tsx create mode 100644 apps/www/registry/new-york/block/dashboard-04.tsx create mode 100644 apps/www/registry/ui.ts diff --git a/.github/ISSUE_TEMPLATE/block_request.yml b/.github/ISSUE_TEMPLATE/block_request.yml new file mode 100644 index 00000000000..31f46dbc6d9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/block_request.yml @@ -0,0 +1,27 @@ +name: "Request a block" +description: "Request a new block for shadcn/ui." +title: "[blocks]: " +labels: ["area: blocks", "area: request"] +body: + - type: markdown + attributes: + value: | + ### Thanks for taking the time to create a block request! Please search open/closed requests before submitting, as the block or a similar one may have already been requested. + + - type: textarea + id: block-description + attributes: + label: Description + description: Tell us about your block request + placeholder: "A dashboard for an e-commerce website showing sales, orders, and customers..." + validations: + required: true + + - type: input + id: block-example-url + attributes: + label: Example + description: Link to an example of the block + placeholder: ex. https://example.com + validations: + required: false diff --git a/apps/www/__registry__/index.tsx b/apps/www/__registry__/index.tsx index 828a8b69978..e0d1ceaaa7a 100644 --- a/apps/www/__registry__/index.tsx +++ b/apps/www/__registry__/index.tsx @@ -11,6 +11,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/accordion")), files: ["registry/default/ui/accordion.tsx"], + category: "undefined", + subcategory: "undefined", }, "alert": { name: "alert", @@ -18,6 +20,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/alert")), files: ["registry/default/ui/alert.tsx"], + category: "undefined", + subcategory: "undefined", }, "alert-dialog": { name: "alert-dialog", @@ -25,6 +29,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/ui/alert-dialog")), files: ["registry/default/ui/alert-dialog.tsx"], + category: "undefined", + subcategory: "undefined", }, "aspect-ratio": { name: "aspect-ratio", @@ -32,6 +38,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/aspect-ratio")), files: ["registry/default/ui/aspect-ratio.tsx"], + category: "undefined", + subcategory: "undefined", }, "avatar": { name: "avatar", @@ -39,6 +47,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/avatar")), files: ["registry/default/ui/avatar.tsx"], + category: "undefined", + subcategory: "undefined", }, "badge": { name: "badge", @@ -46,6 +56,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/badge")), files: ["registry/default/ui/badge.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb": { name: "breadcrumb", @@ -53,6 +65,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/breadcrumb")), files: ["registry/default/ui/breadcrumb.tsx"], + category: "undefined", + subcategory: "undefined", }, "button": { name: "button", @@ -60,6 +74,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/button")), files: ["registry/default/ui/button.tsx"], + category: "undefined", + subcategory: "undefined", }, "calendar": { name: "calendar", @@ -67,6 +83,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/ui/calendar")), files: ["registry/default/ui/calendar.tsx"], + category: "undefined", + subcategory: "undefined", }, "card": { name: "card", @@ -74,6 +92,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/card")), files: ["registry/default/ui/card.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel": { name: "carousel", @@ -81,6 +101,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/ui/carousel")), files: ["registry/default/ui/carousel.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox": { name: "checkbox", @@ -88,6 +110,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/checkbox")), files: ["registry/default/ui/checkbox.tsx"], + category: "undefined", + subcategory: "undefined", }, "collapsible": { name: "collapsible", @@ -95,6 +119,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/collapsible")), files: ["registry/default/ui/collapsible.tsx"], + category: "undefined", + subcategory: "undefined", }, "command": { name: "command", @@ -102,6 +128,8 @@ export const Index: Record = { registryDependencies: ["dialog"], component: React.lazy(() => import("@/registry/default/ui/command")), files: ["registry/default/ui/command.tsx"], + category: "undefined", + subcategory: "undefined", }, "context-menu": { name: "context-menu", @@ -109,6 +137,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/context-menu")), files: ["registry/default/ui/context-menu.tsx"], + category: "undefined", + subcategory: "undefined", }, "dialog": { name: "dialog", @@ -116,6 +146,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/dialog")), files: ["registry/default/ui/dialog.tsx"], + category: "undefined", + subcategory: "undefined", }, "drawer": { name: "drawer", @@ -123,6 +155,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/drawer")), files: ["registry/default/ui/drawer.tsx"], + category: "undefined", + subcategory: "undefined", }, "dropdown-menu": { name: "dropdown-menu", @@ -130,6 +164,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/dropdown-menu")), files: ["registry/default/ui/dropdown-menu.tsx"], + category: "undefined", + subcategory: "undefined", }, "form": { name: "form", @@ -137,6 +173,8 @@ export const Index: Record = { registryDependencies: ["button","label"], component: React.lazy(() => import("@/registry/default/ui/form")), files: ["registry/default/ui/form.tsx"], + category: "undefined", + subcategory: "undefined", }, "hover-card": { name: "hover-card", @@ -144,6 +182,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/hover-card")), files: ["registry/default/ui/hover-card.tsx"], + category: "undefined", + subcategory: "undefined", }, "input": { name: "input", @@ -151,6 +191,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/input")), files: ["registry/default/ui/input.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp": { name: "input-otp", @@ -158,6 +200,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/input-otp")), files: ["registry/default/ui/input-otp.tsx"], + category: "undefined", + subcategory: "undefined", }, "label": { name: "label", @@ -165,6 +209,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/label")), files: ["registry/default/ui/label.tsx"], + category: "undefined", + subcategory: "undefined", }, "menubar": { name: "menubar", @@ -172,6 +218,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/menubar")), files: ["registry/default/ui/menubar.tsx"], + category: "undefined", + subcategory: "undefined", }, "navigation-menu": { name: "navigation-menu", @@ -179,6 +227,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/navigation-menu")), files: ["registry/default/ui/navigation-menu.tsx"], + category: "undefined", + subcategory: "undefined", }, "pagination": { name: "pagination", @@ -186,6 +236,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/ui/pagination")), files: ["registry/default/ui/pagination.tsx"], + category: "undefined", + subcategory: "undefined", }, "popover": { name: "popover", @@ -193,6 +245,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/popover")), files: ["registry/default/ui/popover.tsx"], + category: "undefined", + subcategory: "undefined", }, "progress": { name: "progress", @@ -200,6 +254,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/progress")), files: ["registry/default/ui/progress.tsx"], + category: "undefined", + subcategory: "undefined", }, "radio-group": { name: "radio-group", @@ -207,6 +263,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/radio-group")), files: ["registry/default/ui/radio-group.tsx"], + category: "undefined", + subcategory: "undefined", }, "resizable": { name: "resizable", @@ -214,6 +272,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/resizable")), files: ["registry/default/ui/resizable.tsx"], + category: "undefined", + subcategory: "undefined", }, "scroll-area": { name: "scroll-area", @@ -221,6 +281,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/scroll-area")), files: ["registry/default/ui/scroll-area.tsx"], + category: "undefined", + subcategory: "undefined", }, "select": { name: "select", @@ -228,6 +290,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/select")), files: ["registry/default/ui/select.tsx"], + category: "undefined", + subcategory: "undefined", }, "separator": { name: "separator", @@ -235,6 +299,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/separator")), files: ["registry/default/ui/separator.tsx"], + category: "undefined", + subcategory: "undefined", }, "sheet": { name: "sheet", @@ -242,6 +308,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/sheet")), files: ["registry/default/ui/sheet.tsx"], + category: "undefined", + subcategory: "undefined", }, "skeleton": { name: "skeleton", @@ -249,6 +317,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/skeleton")), files: ["registry/default/ui/skeleton.tsx"], + category: "undefined", + subcategory: "undefined", }, "slider": { name: "slider", @@ -256,6 +326,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/slider")), files: ["registry/default/ui/slider.tsx"], + category: "undefined", + subcategory: "undefined", }, "sonner": { name: "sonner", @@ -263,6 +335,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/sonner")), files: ["registry/default/ui/sonner.tsx"], + category: "undefined", + subcategory: "undefined", }, "switch": { name: "switch", @@ -270,6 +344,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/switch")), files: ["registry/default/ui/switch.tsx"], + category: "undefined", + subcategory: "undefined", }, "table": { name: "table", @@ -277,6 +353,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/table")), files: ["registry/default/ui/table.tsx"], + category: "undefined", + subcategory: "undefined", }, "tabs": { name: "tabs", @@ -284,6 +362,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/tabs")), files: ["registry/default/ui/tabs.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea": { name: "textarea", @@ -291,6 +371,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/textarea")), files: ["registry/default/ui/textarea.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast": { name: "toast", @@ -298,6 +380,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/toast")), files: ["registry/default/ui/toast.tsx","registry/default/ui/use-toast.ts","registry/default/ui/toaster.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle": { name: "toggle", @@ -305,6 +389,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/toggle")), files: ["registry/default/ui/toggle.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group": { name: "toggle-group", @@ -312,6 +398,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/default/ui/toggle-group")), files: ["registry/default/ui/toggle-group.tsx"], + category: "undefined", + subcategory: "undefined", }, "tooltip": { name: "tooltip", @@ -319,6 +407,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/ui/tooltip")), files: ["registry/default/ui/tooltip.tsx"], + category: "undefined", + subcategory: "undefined", }, "accordion-demo": { name: "accordion-demo", @@ -326,6 +416,8 @@ export const Index: Record = { registryDependencies: ["accordion"], component: React.lazy(() => import("@/registry/default/example/accordion-demo")), files: ["registry/default/example/accordion-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "alert-demo": { name: "alert-demo", @@ -333,6 +425,8 @@ export const Index: Record = { registryDependencies: ["alert"], component: React.lazy(() => import("@/registry/default/example/alert-demo")), files: ["registry/default/example/alert-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "alert-destructive": { name: "alert-destructive", @@ -340,6 +434,8 @@ export const Index: Record = { registryDependencies: ["alert"], component: React.lazy(() => import("@/registry/default/example/alert-destructive")), files: ["registry/default/example/alert-destructive.tsx"], + category: "undefined", + subcategory: "undefined", }, "alert-dialog-demo": { name: "alert-dialog-demo", @@ -347,6 +443,8 @@ export const Index: Record = { registryDependencies: ["alert-dialog","button"], component: React.lazy(() => import("@/registry/default/example/alert-dialog-demo")), files: ["registry/default/example/alert-dialog-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "aspect-ratio-demo": { name: "aspect-ratio-demo", @@ -354,6 +452,8 @@ export const Index: Record = { registryDependencies: ["aspect-ratio"], component: React.lazy(() => import("@/registry/default/example/aspect-ratio-demo")), files: ["registry/default/example/aspect-ratio-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "avatar-demo": { name: "avatar-demo", @@ -361,6 +461,8 @@ export const Index: Record = { registryDependencies: ["avatar"], component: React.lazy(() => import("@/registry/default/example/avatar-demo")), files: ["registry/default/example/avatar-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "badge-demo": { name: "badge-demo", @@ -368,6 +470,8 @@ export const Index: Record = { registryDependencies: ["badge"], component: React.lazy(() => import("@/registry/default/example/badge-demo")), files: ["registry/default/example/badge-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "badge-destructive": { name: "badge-destructive", @@ -375,6 +479,8 @@ export const Index: Record = { registryDependencies: ["badge"], component: React.lazy(() => import("@/registry/default/example/badge-destructive")), files: ["registry/default/example/badge-destructive.tsx"], + category: "undefined", + subcategory: "undefined", }, "badge-outline": { name: "badge-outline", @@ -382,6 +488,8 @@ export const Index: Record = { registryDependencies: ["badge"], component: React.lazy(() => import("@/registry/default/example/badge-outline")), files: ["registry/default/example/badge-outline.tsx"], + category: "undefined", + subcategory: "undefined", }, "badge-secondary": { name: "badge-secondary", @@ -389,6 +497,8 @@ export const Index: Record = { registryDependencies: ["badge"], component: React.lazy(() => import("@/registry/default/example/badge-secondary")), files: ["registry/default/example/badge-secondary.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-demo": { name: "breadcrumb-demo", @@ -396,6 +506,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/default/example/breadcrumb-demo")), files: ["registry/default/example/breadcrumb-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-separator": { name: "breadcrumb-separator", @@ -403,6 +515,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/default/example/breadcrumb-separator")), files: ["registry/default/example/breadcrumb-separator.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-dropdown": { name: "breadcrumb-dropdown", @@ -410,6 +524,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/default/example/breadcrumb-dropdown")), files: ["registry/default/example/breadcrumb-dropdown.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-ellipsis": { name: "breadcrumb-ellipsis", @@ -417,6 +533,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/default/example/breadcrumb-ellipsis")), files: ["registry/default/example/breadcrumb-ellipsis.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-link": { name: "breadcrumb-link", @@ -424,6 +542,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/default/example/breadcrumb-link")), files: ["registry/default/example/breadcrumb-link.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-responsive": { name: "breadcrumb-responsive", @@ -431,6 +551,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/default/example/breadcrumb-responsive")), files: ["registry/default/example/breadcrumb-responsive.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-demo": { name: "button-demo", @@ -438,6 +560,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/example/button-demo")), files: ["registry/default/example/button-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-secondary": { name: "button-secondary", @@ -445,6 +569,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/example/button-secondary")), files: ["registry/default/example/button-secondary.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-destructive": { name: "button-destructive", @@ -452,6 +578,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/example/button-destructive")), files: ["registry/default/example/button-destructive.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-outline": { name: "button-outline", @@ -459,6 +587,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/example/button-outline")), files: ["registry/default/example/button-outline.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-ghost": { name: "button-ghost", @@ -466,6 +596,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/example/button-ghost")), files: ["registry/default/example/button-ghost.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-link": { name: "button-link", @@ -473,6 +605,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/example/button-link")), files: ["registry/default/example/button-link.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-with-icon": { name: "button-with-icon", @@ -480,6 +614,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/example/button-with-icon")), files: ["registry/default/example/button-with-icon.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-loading": { name: "button-loading", @@ -487,6 +623,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/example/button-loading")), files: ["registry/default/example/button-loading.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-icon": { name: "button-icon", @@ -494,6 +632,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/example/button-icon")), files: ["registry/default/example/button-icon.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-as-child": { name: "button-as-child", @@ -501,6 +641,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/default/example/button-as-child")), files: ["registry/default/example/button-as-child.tsx"], + category: "undefined", + subcategory: "undefined", }, "calendar-demo": { name: "calendar-demo", @@ -508,6 +650,8 @@ export const Index: Record = { registryDependencies: ["calendar"], component: React.lazy(() => import("@/registry/default/example/calendar-demo")), files: ["registry/default/example/calendar-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "calendar-form": { name: "calendar-form", @@ -515,6 +659,8 @@ export const Index: Record = { registryDependencies: ["calendar","form","popover"], component: React.lazy(() => import("@/registry/default/example/calendar-form")), files: ["registry/default/example/calendar-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "card-demo": { name: "card-demo", @@ -522,6 +668,8 @@ export const Index: Record = { registryDependencies: ["card","button","switch"], component: React.lazy(() => import("@/registry/default/example/card-demo")), files: ["registry/default/example/card-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "card-with-form": { name: "card-with-form", @@ -529,6 +677,8 @@ export const Index: Record = { registryDependencies: ["button","card","input","label","select"], component: React.lazy(() => import("@/registry/default/example/card-with-form")), files: ["registry/default/example/card-with-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-demo": { name: "carousel-demo", @@ -536,6 +686,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/default/example/carousel-demo")), files: ["registry/default/example/carousel-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-size": { name: "carousel-size", @@ -543,6 +695,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/default/example/carousel-size")), files: ["registry/default/example/carousel-size.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-spacing": { name: "carousel-spacing", @@ -550,6 +704,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/default/example/carousel-spacing")), files: ["registry/default/example/carousel-spacing.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-orientation": { name: "carousel-orientation", @@ -557,6 +713,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/default/example/carousel-orientation")), files: ["registry/default/example/carousel-orientation.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-api": { name: "carousel-api", @@ -564,6 +722,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/default/example/carousel-api")), files: ["registry/default/example/carousel-api.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-plugin": { name: "carousel-plugin", @@ -571,6 +731,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/default/example/carousel-plugin")), files: ["registry/default/example/carousel-plugin.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox-demo": { name: "checkbox-demo", @@ -578,6 +740,8 @@ export const Index: Record = { registryDependencies: ["checkbox"], component: React.lazy(() => import("@/registry/default/example/checkbox-demo")), files: ["registry/default/example/checkbox-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox-disabled": { name: "checkbox-disabled", @@ -585,6 +749,8 @@ export const Index: Record = { registryDependencies: ["checkbox"], component: React.lazy(() => import("@/registry/default/example/checkbox-disabled")), files: ["registry/default/example/checkbox-disabled.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox-form-multiple": { name: "checkbox-form-multiple", @@ -592,6 +758,8 @@ export const Index: Record = { registryDependencies: ["checkbox","form"], component: React.lazy(() => import("@/registry/default/example/checkbox-form-multiple")), files: ["registry/default/example/checkbox-form-multiple.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox-form-single": { name: "checkbox-form-single", @@ -599,6 +767,8 @@ export const Index: Record = { registryDependencies: ["checkbox","form"], component: React.lazy(() => import("@/registry/default/example/checkbox-form-single")), files: ["registry/default/example/checkbox-form-single.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox-with-text": { name: "checkbox-with-text", @@ -606,6 +776,8 @@ export const Index: Record = { registryDependencies: ["checkbox"], component: React.lazy(() => import("@/registry/default/example/checkbox-with-text")), files: ["registry/default/example/checkbox-with-text.tsx"], + category: "undefined", + subcategory: "undefined", }, "collapsible-demo": { name: "collapsible-demo", @@ -613,6 +785,8 @@ export const Index: Record = { registryDependencies: ["collapsible"], component: React.lazy(() => import("@/registry/default/example/collapsible-demo")), files: ["registry/default/example/collapsible-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "combobox-demo": { name: "combobox-demo", @@ -620,6 +794,8 @@ export const Index: Record = { registryDependencies: ["command"], component: React.lazy(() => import("@/registry/default/example/combobox-demo")), files: ["registry/default/example/combobox-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "combobox-dropdown-menu": { name: "combobox-dropdown-menu", @@ -627,6 +803,8 @@ export const Index: Record = { registryDependencies: ["command","dropdown-menu","button"], component: React.lazy(() => import("@/registry/default/example/combobox-dropdown-menu")), files: ["registry/default/example/combobox-dropdown-menu.tsx"], + category: "undefined", + subcategory: "undefined", }, "combobox-form": { name: "combobox-form", @@ -634,6 +812,8 @@ export const Index: Record = { registryDependencies: ["command","form"], component: React.lazy(() => import("@/registry/default/example/combobox-form")), files: ["registry/default/example/combobox-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "combobox-popover": { name: "combobox-popover", @@ -641,6 +821,8 @@ export const Index: Record = { registryDependencies: ["combobox","popover"], component: React.lazy(() => import("@/registry/default/example/combobox-popover")), files: ["registry/default/example/combobox-popover.tsx"], + category: "undefined", + subcategory: "undefined", }, "combobox-responsive": { name: "combobox-responsive", @@ -648,6 +830,8 @@ export const Index: Record = { registryDependencies: ["combobox","popover","drawer"], component: React.lazy(() => import("@/registry/default/example/combobox-responsive")), files: ["registry/default/example/combobox-responsive.tsx"], + category: "undefined", + subcategory: "undefined", }, "command-demo": { name: "command-demo", @@ -655,6 +839,8 @@ export const Index: Record = { registryDependencies: ["command"], component: React.lazy(() => import("@/registry/default/example/command-demo")), files: ["registry/default/example/command-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "command-dialog": { name: "command-dialog", @@ -662,6 +848,8 @@ export const Index: Record = { registryDependencies: ["command","dialog"], component: React.lazy(() => import("@/registry/default/example/command-dialog")), files: ["registry/default/example/command-dialog.tsx"], + category: "undefined", + subcategory: "undefined", }, "context-menu-demo": { name: "context-menu-demo", @@ -669,6 +857,8 @@ export const Index: Record = { registryDependencies: ["context-menu"], component: React.lazy(() => import("@/registry/default/example/context-menu-demo")), files: ["registry/default/example/context-menu-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "data-table-demo": { name: "data-table-demo", @@ -676,6 +866,8 @@ export const Index: Record = { registryDependencies: ["data-table"], component: React.lazy(() => import("@/registry/default/example/data-table-demo")), files: ["registry/default/example/data-table-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "date-picker-demo": { name: "date-picker-demo", @@ -683,6 +875,8 @@ export const Index: Record = { registryDependencies: ["button","calendar","popover"], component: React.lazy(() => import("@/registry/default/example/date-picker-demo")), files: ["registry/default/example/date-picker-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "date-picker-form": { name: "date-picker-form", @@ -690,6 +884,8 @@ export const Index: Record = { registryDependencies: ["button","calendar","form","popover"], component: React.lazy(() => import("@/registry/default/example/date-picker-form")), files: ["registry/default/example/date-picker-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "date-picker-with-presets": { name: "date-picker-with-presets", @@ -697,6 +893,8 @@ export const Index: Record = { registryDependencies: ["button","calendar","popover","select"], component: React.lazy(() => import("@/registry/default/example/date-picker-with-presets")), files: ["registry/default/example/date-picker-with-presets.tsx"], + category: "undefined", + subcategory: "undefined", }, "date-picker-with-range": { name: "date-picker-with-range", @@ -704,6 +902,8 @@ export const Index: Record = { registryDependencies: ["button","calendar","popover"], component: React.lazy(() => import("@/registry/default/example/date-picker-with-range")), files: ["registry/default/example/date-picker-with-range.tsx"], + category: "undefined", + subcategory: "undefined", }, "dialog-demo": { name: "dialog-demo", @@ -711,6 +911,8 @@ export const Index: Record = { registryDependencies: ["dialog"], component: React.lazy(() => import("@/registry/default/example/dialog-demo")), files: ["registry/default/example/dialog-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "dialog-close-button": { name: "dialog-close-button", @@ -718,6 +920,8 @@ export const Index: Record = { registryDependencies: ["dialog","button"], component: React.lazy(() => import("@/registry/default/example/dialog-close-button")), files: ["registry/default/example/dialog-close-button.tsx"], + category: "undefined", + subcategory: "undefined", }, "drawer-demo": { name: "drawer-demo", @@ -725,6 +929,8 @@ export const Index: Record = { registryDependencies: ["drawer"], component: React.lazy(() => import("@/registry/default/example/drawer-demo")), files: ["registry/default/example/drawer-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "drawer-dialog": { name: "drawer-dialog", @@ -732,6 +938,8 @@ export const Index: Record = { registryDependencies: ["drawer","dialog"], component: React.lazy(() => import("@/registry/default/example/drawer-dialog")), files: ["registry/default/example/drawer-dialog.tsx"], + category: "undefined", + subcategory: "undefined", }, "dropdown-menu-demo": { name: "dropdown-menu-demo", @@ -739,6 +947,8 @@ export const Index: Record = { registryDependencies: ["dropdown-menu"], component: React.lazy(() => import("@/registry/default/example/dropdown-menu-demo")), files: ["registry/default/example/dropdown-menu-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "dropdown-menu-checkboxes": { name: "dropdown-menu-checkboxes", @@ -746,6 +956,8 @@ export const Index: Record = { registryDependencies: ["dropdown-menu","checkbox"], component: React.lazy(() => import("@/registry/default/example/dropdown-menu-checkboxes")), files: ["registry/default/example/dropdown-menu-checkboxes.tsx"], + category: "undefined", + subcategory: "undefined", }, "dropdown-menu-radio-group": { name: "dropdown-menu-radio-group", @@ -753,6 +965,8 @@ export const Index: Record = { registryDependencies: ["dropdown-menu","radio-group"], component: React.lazy(() => import("@/registry/default/example/dropdown-menu-radio-group")), files: ["registry/default/example/dropdown-menu-radio-group.tsx"], + category: "undefined", + subcategory: "undefined", }, "hover-card-demo": { name: "hover-card-demo", @@ -760,6 +974,8 @@ export const Index: Record = { registryDependencies: ["hover-card"], component: React.lazy(() => import("@/registry/default/example/hover-card-demo")), files: ["registry/default/example/hover-card-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-demo": { name: "input-demo", @@ -767,6 +983,8 @@ export const Index: Record = { registryDependencies: ["input"], component: React.lazy(() => import("@/registry/default/example/input-demo")), files: ["registry/default/example/input-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-disabled": { name: "input-disabled", @@ -774,6 +992,8 @@ export const Index: Record = { registryDependencies: ["input"], component: React.lazy(() => import("@/registry/default/example/input-disabled")), files: ["registry/default/example/input-disabled.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-file": { name: "input-file", @@ -781,6 +1001,8 @@ export const Index: Record = { registryDependencies: ["input"], component: React.lazy(() => import("@/registry/default/example/input-file")), files: ["registry/default/example/input-file.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-form": { name: "input-form", @@ -788,6 +1010,8 @@ export const Index: Record = { registryDependencies: ["input","button","form"], component: React.lazy(() => import("@/registry/default/example/input-form")), files: ["registry/default/example/input-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-with-button": { name: "input-with-button", @@ -795,6 +1019,8 @@ export const Index: Record = { registryDependencies: ["input","button"], component: React.lazy(() => import("@/registry/default/example/input-with-button")), files: ["registry/default/example/input-with-button.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-with-label": { name: "input-with-label", @@ -802,6 +1028,8 @@ export const Index: Record = { registryDependencies: ["input","button","label"], component: React.lazy(() => import("@/registry/default/example/input-with-label")), files: ["registry/default/example/input-with-label.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-with-text": { name: "input-with-text", @@ -809,6 +1037,8 @@ export const Index: Record = { registryDependencies: ["input","button","label"], component: React.lazy(() => import("@/registry/default/example/input-with-text")), files: ["registry/default/example/input-with-text.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp-demo": { name: "input-otp-demo", @@ -816,6 +1046,8 @@ export const Index: Record = { registryDependencies: ["input-otp"], component: React.lazy(() => import("@/registry/default/example/input-otp-demo")), files: ["registry/default/example/input-otp-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp-pattern": { name: "input-otp-pattern", @@ -823,6 +1055,8 @@ export const Index: Record = { registryDependencies: ["input-otp"], component: React.lazy(() => import("@/registry/default/example/input-otp-pattern")), files: ["registry/default/example/input-otp-pattern.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp-separator": { name: "input-otp-separator", @@ -830,6 +1064,8 @@ export const Index: Record = { registryDependencies: ["input-otp"], component: React.lazy(() => import("@/registry/default/example/input-otp-separator")), files: ["registry/default/example/input-otp-separator.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp-controlled": { name: "input-otp-controlled", @@ -837,6 +1073,8 @@ export const Index: Record = { registryDependencies: ["input-otp"], component: React.lazy(() => import("@/registry/default/example/input-otp-controlled")), files: ["registry/default/example/input-otp-controlled.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp-form": { name: "input-otp-form", @@ -844,6 +1082,8 @@ export const Index: Record = { registryDependencies: ["input-otp","form"], component: React.lazy(() => import("@/registry/default/example/input-otp-form")), files: ["registry/default/example/input-otp-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "label-demo": { name: "label-demo", @@ -851,6 +1091,8 @@ export const Index: Record = { registryDependencies: ["label"], component: React.lazy(() => import("@/registry/default/example/label-demo")), files: ["registry/default/example/label-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "menubar-demo": { name: "menubar-demo", @@ -858,6 +1100,8 @@ export const Index: Record = { registryDependencies: ["menubar"], component: React.lazy(() => import("@/registry/default/example/menubar-demo")), files: ["registry/default/example/menubar-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "navigation-menu-demo": { name: "navigation-menu-demo", @@ -865,6 +1109,8 @@ export const Index: Record = { registryDependencies: ["navigation-menu"], component: React.lazy(() => import("@/registry/default/example/navigation-menu-demo")), files: ["registry/default/example/navigation-menu-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "pagination-demo": { name: "pagination-demo", @@ -872,6 +1118,8 @@ export const Index: Record = { registryDependencies: ["pagination"], component: React.lazy(() => import("@/registry/default/example/pagination-demo")), files: ["registry/default/example/pagination-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "popover-demo": { name: "popover-demo", @@ -879,6 +1127,8 @@ export const Index: Record = { registryDependencies: ["popover"], component: React.lazy(() => import("@/registry/default/example/popover-demo")), files: ["registry/default/example/popover-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "progress-demo": { name: "progress-demo", @@ -886,6 +1136,8 @@ export const Index: Record = { registryDependencies: ["progress"], component: React.lazy(() => import("@/registry/default/example/progress-demo")), files: ["registry/default/example/progress-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "radio-group-demo": { name: "radio-group-demo", @@ -893,6 +1145,8 @@ export const Index: Record = { registryDependencies: ["radio-group"], component: React.lazy(() => import("@/registry/default/example/radio-group-demo")), files: ["registry/default/example/radio-group-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "radio-group-form": { name: "radio-group-form", @@ -900,6 +1154,8 @@ export const Index: Record = { registryDependencies: ["radio-group","form"], component: React.lazy(() => import("@/registry/default/example/radio-group-form")), files: ["registry/default/example/radio-group-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "resizable-demo": { name: "resizable-demo", @@ -907,6 +1163,8 @@ export const Index: Record = { registryDependencies: ["resizable"], component: React.lazy(() => import("@/registry/default/example/resizable-demo")), files: ["registry/default/example/resizable-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "resizable-demo-with-handle": { name: "resizable-demo-with-handle", @@ -914,6 +1172,8 @@ export const Index: Record = { registryDependencies: ["resizable"], component: React.lazy(() => import("@/registry/default/example/resizable-demo-with-handle")), files: ["registry/default/example/resizable-demo-with-handle.tsx"], + category: "undefined", + subcategory: "undefined", }, "resizable-vertical": { name: "resizable-vertical", @@ -921,6 +1181,8 @@ export const Index: Record = { registryDependencies: ["resizable"], component: React.lazy(() => import("@/registry/default/example/resizable-vertical")), files: ["registry/default/example/resizable-vertical.tsx"], + category: "undefined", + subcategory: "undefined", }, "resizable-handle": { name: "resizable-handle", @@ -928,6 +1190,8 @@ export const Index: Record = { registryDependencies: ["resizable"], component: React.lazy(() => import("@/registry/default/example/resizable-handle")), files: ["registry/default/example/resizable-handle.tsx"], + category: "undefined", + subcategory: "undefined", }, "scroll-area-demo": { name: "scroll-area-demo", @@ -935,6 +1199,8 @@ export const Index: Record = { registryDependencies: ["scroll-area"], component: React.lazy(() => import("@/registry/default/example/scroll-area-demo")), files: ["registry/default/example/scroll-area-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "scroll-area-horizontal-demo": { name: "scroll-area-horizontal-demo", @@ -942,6 +1208,8 @@ export const Index: Record = { registryDependencies: ["scroll-area"], component: React.lazy(() => import("@/registry/default/example/scroll-area-horizontal-demo")), files: ["registry/default/example/scroll-area-horizontal-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "select-demo": { name: "select-demo", @@ -949,6 +1217,8 @@ export const Index: Record = { registryDependencies: ["select"], component: React.lazy(() => import("@/registry/default/example/select-demo")), files: ["registry/default/example/select-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "select-scrollable": { name: "select-scrollable", @@ -956,6 +1226,8 @@ export const Index: Record = { registryDependencies: ["select"], component: React.lazy(() => import("@/registry/default/example/select-scrollable")), files: ["registry/default/example/select-scrollable.tsx"], + category: "undefined", + subcategory: "undefined", }, "select-form": { name: "select-form", @@ -963,6 +1235,8 @@ export const Index: Record = { registryDependencies: ["select"], component: React.lazy(() => import("@/registry/default/example/select-form")), files: ["registry/default/example/select-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "separator-demo": { name: "separator-demo", @@ -970,6 +1244,8 @@ export const Index: Record = { registryDependencies: ["separator"], component: React.lazy(() => import("@/registry/default/example/separator-demo")), files: ["registry/default/example/separator-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "sheet-demo": { name: "sheet-demo", @@ -977,6 +1253,8 @@ export const Index: Record = { registryDependencies: ["sheet"], component: React.lazy(() => import("@/registry/default/example/sheet-demo")), files: ["registry/default/example/sheet-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "sheet-side": { name: "sheet-side", @@ -984,6 +1262,8 @@ export const Index: Record = { registryDependencies: ["sheet"], component: React.lazy(() => import("@/registry/default/example/sheet-side")), files: ["registry/default/example/sheet-side.tsx"], + category: "undefined", + subcategory: "undefined", }, "skeleton-demo": { name: "skeleton-demo", @@ -991,6 +1271,8 @@ export const Index: Record = { registryDependencies: ["skeleton"], component: React.lazy(() => import("@/registry/default/example/skeleton-demo")), files: ["registry/default/example/skeleton-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "skeleton-card": { name: "skeleton-card", @@ -998,6 +1280,8 @@ export const Index: Record = { registryDependencies: ["skeleton"], component: React.lazy(() => import("@/registry/default/example/skeleton-card")), files: ["registry/default/example/skeleton-card.tsx"], + category: "undefined", + subcategory: "undefined", }, "slider-demo": { name: "slider-demo", @@ -1005,6 +1289,8 @@ export const Index: Record = { registryDependencies: ["slider"], component: React.lazy(() => import("@/registry/default/example/slider-demo")), files: ["registry/default/example/slider-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "sonner-demo": { name: "sonner-demo", @@ -1012,6 +1298,8 @@ export const Index: Record = { registryDependencies: ["sonner"], component: React.lazy(() => import("@/registry/default/example/sonner-demo")), files: ["registry/default/example/sonner-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "switch-demo": { name: "switch-demo", @@ -1019,6 +1307,8 @@ export const Index: Record = { registryDependencies: ["switch"], component: React.lazy(() => import("@/registry/default/example/switch-demo")), files: ["registry/default/example/switch-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "switch-form": { name: "switch-form", @@ -1026,6 +1316,8 @@ export const Index: Record = { registryDependencies: ["switch","form"], component: React.lazy(() => import("@/registry/default/example/switch-form")), files: ["registry/default/example/switch-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "table-demo": { name: "table-demo", @@ -1033,6 +1325,8 @@ export const Index: Record = { registryDependencies: ["table"], component: React.lazy(() => import("@/registry/default/example/table-demo")), files: ["registry/default/example/table-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "tabs-demo": { name: "tabs-demo", @@ -1040,6 +1334,8 @@ export const Index: Record = { registryDependencies: ["tabs"], component: React.lazy(() => import("@/registry/default/example/tabs-demo")), files: ["registry/default/example/tabs-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-demo": { name: "textarea-demo", @@ -1047,6 +1343,8 @@ export const Index: Record = { registryDependencies: ["textarea"], component: React.lazy(() => import("@/registry/default/example/textarea-demo")), files: ["registry/default/example/textarea-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-disabled": { name: "textarea-disabled", @@ -1054,6 +1352,8 @@ export const Index: Record = { registryDependencies: ["textarea"], component: React.lazy(() => import("@/registry/default/example/textarea-disabled")), files: ["registry/default/example/textarea-disabled.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-form": { name: "textarea-form", @@ -1061,6 +1361,8 @@ export const Index: Record = { registryDependencies: ["textarea","form"], component: React.lazy(() => import("@/registry/default/example/textarea-form")), files: ["registry/default/example/textarea-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-with-button": { name: "textarea-with-button", @@ -1068,6 +1370,8 @@ export const Index: Record = { registryDependencies: ["textarea","button"], component: React.lazy(() => import("@/registry/default/example/textarea-with-button")), files: ["registry/default/example/textarea-with-button.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-with-label": { name: "textarea-with-label", @@ -1075,6 +1379,8 @@ export const Index: Record = { registryDependencies: ["textarea","label"], component: React.lazy(() => import("@/registry/default/example/textarea-with-label")), files: ["registry/default/example/textarea-with-label.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-with-text": { name: "textarea-with-text", @@ -1082,6 +1388,8 @@ export const Index: Record = { registryDependencies: ["textarea","label"], component: React.lazy(() => import("@/registry/default/example/textarea-with-text")), files: ["registry/default/example/textarea-with-text.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast-demo": { name: "toast-demo", @@ -1089,6 +1397,8 @@ export const Index: Record = { registryDependencies: ["toast"], component: React.lazy(() => import("@/registry/default/example/toast-demo")), files: ["registry/default/example/toast-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast-destructive": { name: "toast-destructive", @@ -1096,6 +1406,8 @@ export const Index: Record = { registryDependencies: ["toast"], component: React.lazy(() => import("@/registry/default/example/toast-destructive")), files: ["registry/default/example/toast-destructive.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast-simple": { name: "toast-simple", @@ -1103,6 +1415,8 @@ export const Index: Record = { registryDependencies: ["toast"], component: React.lazy(() => import("@/registry/default/example/toast-simple")), files: ["registry/default/example/toast-simple.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast-with-action": { name: "toast-with-action", @@ -1110,6 +1424,8 @@ export const Index: Record = { registryDependencies: ["toast"], component: React.lazy(() => import("@/registry/default/example/toast-with-action")), files: ["registry/default/example/toast-with-action.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast-with-title": { name: "toast-with-title", @@ -1117,6 +1433,8 @@ export const Index: Record = { registryDependencies: ["toast"], component: React.lazy(() => import("@/registry/default/example/toast-with-title")), files: ["registry/default/example/toast-with-title.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-demo": { name: "toggle-group-demo", @@ -1124,6 +1442,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/default/example/toggle-group-demo")), files: ["registry/default/example/toggle-group-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-disabled": { name: "toggle-group-disabled", @@ -1131,6 +1451,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/default/example/toggle-group-disabled")), files: ["registry/default/example/toggle-group-disabled.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-lg": { name: "toggle-group-lg", @@ -1138,6 +1460,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/default/example/toggle-group-lg")), files: ["registry/default/example/toggle-group-lg.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-outline": { name: "toggle-group-outline", @@ -1145,6 +1469,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/default/example/toggle-group-outline")), files: ["registry/default/example/toggle-group-outline.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-sm": { name: "toggle-group-sm", @@ -1152,6 +1478,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/default/example/toggle-group-sm")), files: ["registry/default/example/toggle-group-sm.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-single": { name: "toggle-group-single", @@ -1159,6 +1487,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/default/example/toggle-group-single")), files: ["registry/default/example/toggle-group-single.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-demo": { name: "toggle-demo", @@ -1166,6 +1496,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/default/example/toggle-demo")), files: ["registry/default/example/toggle-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-disabled": { name: "toggle-disabled", @@ -1173,6 +1505,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/default/example/toggle-disabled")), files: ["registry/default/example/toggle-disabled.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-lg": { name: "toggle-lg", @@ -1180,6 +1514,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/default/example/toggle-lg")), files: ["registry/default/example/toggle-lg.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-outline": { name: "toggle-outline", @@ -1187,6 +1523,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/default/example/toggle-outline")), files: ["registry/default/example/toggle-outline.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-sm": { name: "toggle-sm", @@ -1194,6 +1532,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/default/example/toggle-sm")), files: ["registry/default/example/toggle-sm.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-with-text": { name: "toggle-with-text", @@ -1201,6 +1541,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/default/example/toggle-with-text")), files: ["registry/default/example/toggle-with-text.tsx"], + category: "undefined", + subcategory: "undefined", }, "tooltip-demo": { name: "tooltip-demo", @@ -1208,6 +1550,8 @@ export const Index: Record = { registryDependencies: ["tooltip"], component: React.lazy(() => import("@/registry/default/example/tooltip-demo")), files: ["registry/default/example/tooltip-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-blockquote": { name: "typography-blockquote", @@ -1215,6 +1559,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-blockquote")), files: ["registry/default/example/typography-blockquote.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-demo": { name: "typography-demo", @@ -1222,6 +1568,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-demo")), files: ["registry/default/example/typography-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-h1": { name: "typography-h1", @@ -1229,6 +1577,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-h1")), files: ["registry/default/example/typography-h1.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-h2": { name: "typography-h2", @@ -1236,6 +1586,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-h2")), files: ["registry/default/example/typography-h2.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-h3": { name: "typography-h3", @@ -1243,6 +1595,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-h3")), files: ["registry/default/example/typography-h3.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-h4": { name: "typography-h4", @@ -1250,6 +1604,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-h4")), files: ["registry/default/example/typography-h4.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-inline-code": { name: "typography-inline-code", @@ -1257,6 +1613,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-inline-code")), files: ["registry/default/example/typography-inline-code.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-large": { name: "typography-large", @@ -1264,6 +1622,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-large")), files: ["registry/default/example/typography-large.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-lead": { name: "typography-lead", @@ -1271,6 +1631,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-lead")), files: ["registry/default/example/typography-lead.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-list": { name: "typography-list", @@ -1278,6 +1640,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-list")), files: ["registry/default/example/typography-list.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-muted": { name: "typography-muted", @@ -1285,6 +1649,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-muted")), files: ["registry/default/example/typography-muted.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-p": { name: "typography-p", @@ -1292,6 +1658,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-p")), files: ["registry/default/example/typography-p.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-small": { name: "typography-small", @@ -1299,6 +1667,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-small")), files: ["registry/default/example/typography-small.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-table": { name: "typography-table", @@ -1306,6 +1676,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/typography-table")), files: ["registry/default/example/typography-table.tsx"], + category: "undefined", + subcategory: "undefined", }, "mode-toggle": { name: "mode-toggle", @@ -1313,6 +1685,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/mode-toggle")), files: ["registry/default/example/mode-toggle.tsx"], + category: "undefined", + subcategory: "undefined", }, "cards": { name: "cards", @@ -1320,6 +1694,80 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/default/example/cards")), files: ["registry/default/example/cards/cards.tsx"], + category: "undefined", + subcategory: "undefined", + }, + "dashboard-01": { + name: "dashboard-01", + type: "components:block", + registryDependencies: ["button","dropdown-menu","input","sheet"], + component: React.lazy(() => import("@/registry/default/block/dashboard-01")), + files: ["registry/default/block/dashboard-01.tsx"], + category: "Application", + subcategory: "Dashboard", + }, + "dashboard-02": { + name: "dashboard-02", + type: "components:block", + registryDependencies: ["badge","button","card","dropdown-menu","input"], + component: React.lazy(() => import("@/registry/default/block/dashboard-02")), + files: ["registry/default/block/dashboard-02.tsx"], + category: "Application", + subcategory: "Dashboard", + }, + "dashboard-03": { + name: "dashboard-03", + type: "components:block", + registryDependencies: ["badge","button","drawer","input","label","select","textarea","tooltip"], + component: React.lazy(() => import("@/registry/default/block/dashboard-03")), + files: ["registry/default/block/dashboard-03.tsx"], + category: "Application", + subcategory: "Dashboard", + }, + "dashboard-04": { + name: "dashboard-04", + type: "components:block", + registryDependencies: ["button","card","dropdown-menu","input"], + component: React.lazy(() => import("@/registry/default/block/dashboard-04")), + files: ["registry/default/block/dashboard-04.tsx"], + category: "Application", + subcategory: "Dashboard", + }, + "authentication-01": { + name: "authentication-01", + type: "components:block", + registryDependencies: ["button","card","input","label"], + component: React.lazy(() => import("@/registry/default/block/authentication-01")), + files: ["registry/default/block/authentication-01.tsx"], + category: "Authentication", + subcategory: "Login", + }, + "authentication-02": { + name: "authentication-02", + type: "components:block", + registryDependencies: ["button","card","input","label"], + component: React.lazy(() => import("@/registry/default/block/authentication-02")), + files: ["registry/default/block/authentication-02.tsx"], + category: "Authentication", + subcategory: "Login", + }, + "authentication-03": { + name: "authentication-03", + type: "components:block", + registryDependencies: ["button","card","input","label"], + component: React.lazy(() => import("@/registry/default/block/authentication-03")), + files: ["registry/default/block/authentication-03.tsx"], + category: "Authentication", + subcategory: "Login", + }, + "authentication-04": { + name: "authentication-04", + type: "components:block", + registryDependencies: ["button","card","input","label"], + component: React.lazy(() => import("@/registry/default/block/authentication-04")), + files: ["registry/default/block/authentication-04.tsx"], + category: "Authentication", + subcategory: "Login", }, }, "new-york": { "accordion": { @@ -1328,6 +1776,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/accordion")), files: ["registry/new-york/ui/accordion.tsx"], + category: "undefined", + subcategory: "undefined", }, "alert": { name: "alert", @@ -1335,6 +1785,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/alert")), files: ["registry/new-york/ui/alert.tsx"], + category: "undefined", + subcategory: "undefined", }, "alert-dialog": { name: "alert-dialog", @@ -1342,6 +1794,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/ui/alert-dialog")), files: ["registry/new-york/ui/alert-dialog.tsx"], + category: "undefined", + subcategory: "undefined", }, "aspect-ratio": { name: "aspect-ratio", @@ -1349,6 +1803,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/aspect-ratio")), files: ["registry/new-york/ui/aspect-ratio.tsx"], + category: "undefined", + subcategory: "undefined", }, "avatar": { name: "avatar", @@ -1356,6 +1812,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/avatar")), files: ["registry/new-york/ui/avatar.tsx"], + category: "undefined", + subcategory: "undefined", }, "badge": { name: "badge", @@ -1363,6 +1821,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/badge")), files: ["registry/new-york/ui/badge.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb": { name: "breadcrumb", @@ -1370,6 +1830,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/breadcrumb")), files: ["registry/new-york/ui/breadcrumb.tsx"], + category: "undefined", + subcategory: "undefined", }, "button": { name: "button", @@ -1377,6 +1839,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/button")), files: ["registry/new-york/ui/button.tsx"], + category: "undefined", + subcategory: "undefined", }, "calendar": { name: "calendar", @@ -1384,6 +1848,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/ui/calendar")), files: ["registry/new-york/ui/calendar.tsx"], + category: "undefined", + subcategory: "undefined", }, "card": { name: "card", @@ -1391,6 +1857,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/card")), files: ["registry/new-york/ui/card.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel": { name: "carousel", @@ -1398,6 +1866,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/ui/carousel")), files: ["registry/new-york/ui/carousel.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox": { name: "checkbox", @@ -1405,6 +1875,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/checkbox")), files: ["registry/new-york/ui/checkbox.tsx"], + category: "undefined", + subcategory: "undefined", }, "collapsible": { name: "collapsible", @@ -1412,6 +1884,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/collapsible")), files: ["registry/new-york/ui/collapsible.tsx"], + category: "undefined", + subcategory: "undefined", }, "command": { name: "command", @@ -1419,6 +1893,8 @@ export const Index: Record = { registryDependencies: ["dialog"], component: React.lazy(() => import("@/registry/new-york/ui/command")), files: ["registry/new-york/ui/command.tsx"], + category: "undefined", + subcategory: "undefined", }, "context-menu": { name: "context-menu", @@ -1426,6 +1902,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/context-menu")), files: ["registry/new-york/ui/context-menu.tsx"], + category: "undefined", + subcategory: "undefined", }, "dialog": { name: "dialog", @@ -1433,6 +1911,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/dialog")), files: ["registry/new-york/ui/dialog.tsx"], + category: "undefined", + subcategory: "undefined", }, "drawer": { name: "drawer", @@ -1440,6 +1920,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/drawer")), files: ["registry/new-york/ui/drawer.tsx"], + category: "undefined", + subcategory: "undefined", }, "dropdown-menu": { name: "dropdown-menu", @@ -1447,6 +1929,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/dropdown-menu")), files: ["registry/new-york/ui/dropdown-menu.tsx"], + category: "undefined", + subcategory: "undefined", }, "form": { name: "form", @@ -1454,6 +1938,8 @@ export const Index: Record = { registryDependencies: ["button","label"], component: React.lazy(() => import("@/registry/new-york/ui/form")), files: ["registry/new-york/ui/form.tsx"], + category: "undefined", + subcategory: "undefined", }, "hover-card": { name: "hover-card", @@ -1461,6 +1947,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/hover-card")), files: ["registry/new-york/ui/hover-card.tsx"], + category: "undefined", + subcategory: "undefined", }, "input": { name: "input", @@ -1468,6 +1956,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/input")), files: ["registry/new-york/ui/input.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp": { name: "input-otp", @@ -1475,6 +1965,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/input-otp")), files: ["registry/new-york/ui/input-otp.tsx"], + category: "undefined", + subcategory: "undefined", }, "label": { name: "label", @@ -1482,6 +1974,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/label")), files: ["registry/new-york/ui/label.tsx"], + category: "undefined", + subcategory: "undefined", }, "menubar": { name: "menubar", @@ -1489,6 +1983,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/menubar")), files: ["registry/new-york/ui/menubar.tsx"], + category: "undefined", + subcategory: "undefined", }, "navigation-menu": { name: "navigation-menu", @@ -1496,6 +1992,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/navigation-menu")), files: ["registry/new-york/ui/navigation-menu.tsx"], + category: "undefined", + subcategory: "undefined", }, "pagination": { name: "pagination", @@ -1503,6 +2001,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/ui/pagination")), files: ["registry/new-york/ui/pagination.tsx"], + category: "undefined", + subcategory: "undefined", }, "popover": { name: "popover", @@ -1510,6 +2010,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/popover")), files: ["registry/new-york/ui/popover.tsx"], + category: "undefined", + subcategory: "undefined", }, "progress": { name: "progress", @@ -1517,6 +2019,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/progress")), files: ["registry/new-york/ui/progress.tsx"], + category: "undefined", + subcategory: "undefined", }, "radio-group": { name: "radio-group", @@ -1524,6 +2028,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/radio-group")), files: ["registry/new-york/ui/radio-group.tsx"], + category: "undefined", + subcategory: "undefined", }, "resizable": { name: "resizable", @@ -1531,6 +2037,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/resizable")), files: ["registry/new-york/ui/resizable.tsx"], + category: "undefined", + subcategory: "undefined", }, "scroll-area": { name: "scroll-area", @@ -1538,6 +2046,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/scroll-area")), files: ["registry/new-york/ui/scroll-area.tsx"], + category: "undefined", + subcategory: "undefined", }, "select": { name: "select", @@ -1545,6 +2055,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/select")), files: ["registry/new-york/ui/select.tsx"], + category: "undefined", + subcategory: "undefined", }, "separator": { name: "separator", @@ -1552,6 +2064,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/separator")), files: ["registry/new-york/ui/separator.tsx"], + category: "undefined", + subcategory: "undefined", }, "sheet": { name: "sheet", @@ -1559,6 +2073,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/sheet")), files: ["registry/new-york/ui/sheet.tsx"], + category: "undefined", + subcategory: "undefined", }, "skeleton": { name: "skeleton", @@ -1566,6 +2082,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/skeleton")), files: ["registry/new-york/ui/skeleton.tsx"], + category: "undefined", + subcategory: "undefined", }, "slider": { name: "slider", @@ -1573,6 +2091,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/slider")), files: ["registry/new-york/ui/slider.tsx"], + category: "undefined", + subcategory: "undefined", }, "sonner": { name: "sonner", @@ -1580,6 +2100,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/sonner")), files: ["registry/new-york/ui/sonner.tsx"], + category: "undefined", + subcategory: "undefined", }, "switch": { name: "switch", @@ -1587,6 +2109,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/switch")), files: ["registry/new-york/ui/switch.tsx"], + category: "undefined", + subcategory: "undefined", }, "table": { name: "table", @@ -1594,6 +2118,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/table")), files: ["registry/new-york/ui/table.tsx"], + category: "undefined", + subcategory: "undefined", }, "tabs": { name: "tabs", @@ -1601,6 +2127,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/tabs")), files: ["registry/new-york/ui/tabs.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea": { name: "textarea", @@ -1608,6 +2136,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/textarea")), files: ["registry/new-york/ui/textarea.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast": { name: "toast", @@ -1615,6 +2145,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/toast")), files: ["registry/new-york/ui/toast.tsx","registry/new-york/ui/use-toast.ts","registry/new-york/ui/toaster.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle": { name: "toggle", @@ -1622,6 +2154,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/toggle")), files: ["registry/new-york/ui/toggle.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group": { name: "toggle-group", @@ -1629,6 +2163,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/new-york/ui/toggle-group")), files: ["registry/new-york/ui/toggle-group.tsx"], + category: "undefined", + subcategory: "undefined", }, "tooltip": { name: "tooltip", @@ -1636,6 +2172,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/ui/tooltip")), files: ["registry/new-york/ui/tooltip.tsx"], + category: "undefined", + subcategory: "undefined", }, "accordion-demo": { name: "accordion-demo", @@ -1643,6 +2181,8 @@ export const Index: Record = { registryDependencies: ["accordion"], component: React.lazy(() => import("@/registry/new-york/example/accordion-demo")), files: ["registry/new-york/example/accordion-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "alert-demo": { name: "alert-demo", @@ -1650,6 +2190,8 @@ export const Index: Record = { registryDependencies: ["alert"], component: React.lazy(() => import("@/registry/new-york/example/alert-demo")), files: ["registry/new-york/example/alert-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "alert-destructive": { name: "alert-destructive", @@ -1657,6 +2199,8 @@ export const Index: Record = { registryDependencies: ["alert"], component: React.lazy(() => import("@/registry/new-york/example/alert-destructive")), files: ["registry/new-york/example/alert-destructive.tsx"], + category: "undefined", + subcategory: "undefined", }, "alert-dialog-demo": { name: "alert-dialog-demo", @@ -1664,6 +2208,8 @@ export const Index: Record = { registryDependencies: ["alert-dialog","button"], component: React.lazy(() => import("@/registry/new-york/example/alert-dialog-demo")), files: ["registry/new-york/example/alert-dialog-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "aspect-ratio-demo": { name: "aspect-ratio-demo", @@ -1671,6 +2217,8 @@ export const Index: Record = { registryDependencies: ["aspect-ratio"], component: React.lazy(() => import("@/registry/new-york/example/aspect-ratio-demo")), files: ["registry/new-york/example/aspect-ratio-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "avatar-demo": { name: "avatar-demo", @@ -1678,6 +2226,8 @@ export const Index: Record = { registryDependencies: ["avatar"], component: React.lazy(() => import("@/registry/new-york/example/avatar-demo")), files: ["registry/new-york/example/avatar-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "badge-demo": { name: "badge-demo", @@ -1685,6 +2235,8 @@ export const Index: Record = { registryDependencies: ["badge"], component: React.lazy(() => import("@/registry/new-york/example/badge-demo")), files: ["registry/new-york/example/badge-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "badge-destructive": { name: "badge-destructive", @@ -1692,6 +2244,8 @@ export const Index: Record = { registryDependencies: ["badge"], component: React.lazy(() => import("@/registry/new-york/example/badge-destructive")), files: ["registry/new-york/example/badge-destructive.tsx"], + category: "undefined", + subcategory: "undefined", }, "badge-outline": { name: "badge-outline", @@ -1699,6 +2253,8 @@ export const Index: Record = { registryDependencies: ["badge"], component: React.lazy(() => import("@/registry/new-york/example/badge-outline")), files: ["registry/new-york/example/badge-outline.tsx"], + category: "undefined", + subcategory: "undefined", }, "badge-secondary": { name: "badge-secondary", @@ -1706,6 +2262,8 @@ export const Index: Record = { registryDependencies: ["badge"], component: React.lazy(() => import("@/registry/new-york/example/badge-secondary")), files: ["registry/new-york/example/badge-secondary.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-demo": { name: "breadcrumb-demo", @@ -1713,6 +2271,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/new-york/example/breadcrumb-demo")), files: ["registry/new-york/example/breadcrumb-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-separator": { name: "breadcrumb-separator", @@ -1720,6 +2280,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/new-york/example/breadcrumb-separator")), files: ["registry/new-york/example/breadcrumb-separator.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-dropdown": { name: "breadcrumb-dropdown", @@ -1727,6 +2289,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/new-york/example/breadcrumb-dropdown")), files: ["registry/new-york/example/breadcrumb-dropdown.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-ellipsis": { name: "breadcrumb-ellipsis", @@ -1734,6 +2298,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/new-york/example/breadcrumb-ellipsis")), files: ["registry/new-york/example/breadcrumb-ellipsis.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-link": { name: "breadcrumb-link", @@ -1741,6 +2307,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/new-york/example/breadcrumb-link")), files: ["registry/new-york/example/breadcrumb-link.tsx"], + category: "undefined", + subcategory: "undefined", }, "breadcrumb-responsive": { name: "breadcrumb-responsive", @@ -1748,6 +2316,8 @@ export const Index: Record = { registryDependencies: ["breadcrumb"], component: React.lazy(() => import("@/registry/new-york/example/breadcrumb-responsive")), files: ["registry/new-york/example/breadcrumb-responsive.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-demo": { name: "button-demo", @@ -1755,6 +2325,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/example/button-demo")), files: ["registry/new-york/example/button-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-secondary": { name: "button-secondary", @@ -1762,6 +2334,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/example/button-secondary")), files: ["registry/new-york/example/button-secondary.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-destructive": { name: "button-destructive", @@ -1769,6 +2343,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/example/button-destructive")), files: ["registry/new-york/example/button-destructive.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-outline": { name: "button-outline", @@ -1776,6 +2352,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/example/button-outline")), files: ["registry/new-york/example/button-outline.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-ghost": { name: "button-ghost", @@ -1783,6 +2361,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/example/button-ghost")), files: ["registry/new-york/example/button-ghost.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-link": { name: "button-link", @@ -1790,6 +2370,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/example/button-link")), files: ["registry/new-york/example/button-link.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-with-icon": { name: "button-with-icon", @@ -1797,6 +2379,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/example/button-with-icon")), files: ["registry/new-york/example/button-with-icon.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-loading": { name: "button-loading", @@ -1804,6 +2388,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/example/button-loading")), files: ["registry/new-york/example/button-loading.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-icon": { name: "button-icon", @@ -1811,6 +2397,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/example/button-icon")), files: ["registry/new-york/example/button-icon.tsx"], + category: "undefined", + subcategory: "undefined", }, "button-as-child": { name: "button-as-child", @@ -1818,6 +2406,8 @@ export const Index: Record = { registryDependencies: ["button"], component: React.lazy(() => import("@/registry/new-york/example/button-as-child")), files: ["registry/new-york/example/button-as-child.tsx"], + category: "undefined", + subcategory: "undefined", }, "calendar-demo": { name: "calendar-demo", @@ -1825,6 +2415,8 @@ export const Index: Record = { registryDependencies: ["calendar"], component: React.lazy(() => import("@/registry/new-york/example/calendar-demo")), files: ["registry/new-york/example/calendar-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "calendar-form": { name: "calendar-form", @@ -1832,6 +2424,8 @@ export const Index: Record = { registryDependencies: ["calendar","form","popover"], component: React.lazy(() => import("@/registry/new-york/example/calendar-form")), files: ["registry/new-york/example/calendar-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "card-demo": { name: "card-demo", @@ -1839,6 +2433,8 @@ export const Index: Record = { registryDependencies: ["card","button","switch"], component: React.lazy(() => import("@/registry/new-york/example/card-demo")), files: ["registry/new-york/example/card-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "card-with-form": { name: "card-with-form", @@ -1846,6 +2442,8 @@ export const Index: Record = { registryDependencies: ["button","card","input","label","select"], component: React.lazy(() => import("@/registry/new-york/example/card-with-form")), files: ["registry/new-york/example/card-with-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-demo": { name: "carousel-demo", @@ -1853,6 +2451,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/new-york/example/carousel-demo")), files: ["registry/new-york/example/carousel-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-size": { name: "carousel-size", @@ -1860,6 +2460,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/new-york/example/carousel-size")), files: ["registry/new-york/example/carousel-size.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-spacing": { name: "carousel-spacing", @@ -1867,6 +2469,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/new-york/example/carousel-spacing")), files: ["registry/new-york/example/carousel-spacing.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-orientation": { name: "carousel-orientation", @@ -1874,6 +2478,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/new-york/example/carousel-orientation")), files: ["registry/new-york/example/carousel-orientation.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-api": { name: "carousel-api", @@ -1881,6 +2487,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/new-york/example/carousel-api")), files: ["registry/new-york/example/carousel-api.tsx"], + category: "undefined", + subcategory: "undefined", }, "carousel-plugin": { name: "carousel-plugin", @@ -1888,6 +2496,8 @@ export const Index: Record = { registryDependencies: ["carousel"], component: React.lazy(() => import("@/registry/new-york/example/carousel-plugin")), files: ["registry/new-york/example/carousel-plugin.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox-demo": { name: "checkbox-demo", @@ -1895,6 +2505,8 @@ export const Index: Record = { registryDependencies: ["checkbox"], component: React.lazy(() => import("@/registry/new-york/example/checkbox-demo")), files: ["registry/new-york/example/checkbox-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox-disabled": { name: "checkbox-disabled", @@ -1902,6 +2514,8 @@ export const Index: Record = { registryDependencies: ["checkbox"], component: React.lazy(() => import("@/registry/new-york/example/checkbox-disabled")), files: ["registry/new-york/example/checkbox-disabled.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox-form-multiple": { name: "checkbox-form-multiple", @@ -1909,6 +2523,8 @@ export const Index: Record = { registryDependencies: ["checkbox","form"], component: React.lazy(() => import("@/registry/new-york/example/checkbox-form-multiple")), files: ["registry/new-york/example/checkbox-form-multiple.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox-form-single": { name: "checkbox-form-single", @@ -1916,6 +2532,8 @@ export const Index: Record = { registryDependencies: ["checkbox","form"], component: React.lazy(() => import("@/registry/new-york/example/checkbox-form-single")), files: ["registry/new-york/example/checkbox-form-single.tsx"], + category: "undefined", + subcategory: "undefined", }, "checkbox-with-text": { name: "checkbox-with-text", @@ -1923,6 +2541,8 @@ export const Index: Record = { registryDependencies: ["checkbox"], component: React.lazy(() => import("@/registry/new-york/example/checkbox-with-text")), files: ["registry/new-york/example/checkbox-with-text.tsx"], + category: "undefined", + subcategory: "undefined", }, "collapsible-demo": { name: "collapsible-demo", @@ -1930,6 +2550,8 @@ export const Index: Record = { registryDependencies: ["collapsible"], component: React.lazy(() => import("@/registry/new-york/example/collapsible-demo")), files: ["registry/new-york/example/collapsible-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "combobox-demo": { name: "combobox-demo", @@ -1937,6 +2559,8 @@ export const Index: Record = { registryDependencies: ["command"], component: React.lazy(() => import("@/registry/new-york/example/combobox-demo")), files: ["registry/new-york/example/combobox-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "combobox-dropdown-menu": { name: "combobox-dropdown-menu", @@ -1944,6 +2568,8 @@ export const Index: Record = { registryDependencies: ["command","dropdown-menu","button"], component: React.lazy(() => import("@/registry/new-york/example/combobox-dropdown-menu")), files: ["registry/new-york/example/combobox-dropdown-menu.tsx"], + category: "undefined", + subcategory: "undefined", }, "combobox-form": { name: "combobox-form", @@ -1951,6 +2577,8 @@ export const Index: Record = { registryDependencies: ["command","form"], component: React.lazy(() => import("@/registry/new-york/example/combobox-form")), files: ["registry/new-york/example/combobox-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "combobox-popover": { name: "combobox-popover", @@ -1958,6 +2586,8 @@ export const Index: Record = { registryDependencies: ["combobox","popover"], component: React.lazy(() => import("@/registry/new-york/example/combobox-popover")), files: ["registry/new-york/example/combobox-popover.tsx"], + category: "undefined", + subcategory: "undefined", }, "combobox-responsive": { name: "combobox-responsive", @@ -1965,6 +2595,8 @@ export const Index: Record = { registryDependencies: ["combobox","popover","drawer"], component: React.lazy(() => import("@/registry/new-york/example/combobox-responsive")), files: ["registry/new-york/example/combobox-responsive.tsx"], + category: "undefined", + subcategory: "undefined", }, "command-demo": { name: "command-demo", @@ -1972,6 +2604,8 @@ export const Index: Record = { registryDependencies: ["command"], component: React.lazy(() => import("@/registry/new-york/example/command-demo")), files: ["registry/new-york/example/command-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "command-dialog": { name: "command-dialog", @@ -1979,6 +2613,8 @@ export const Index: Record = { registryDependencies: ["command","dialog"], component: React.lazy(() => import("@/registry/new-york/example/command-dialog")), files: ["registry/new-york/example/command-dialog.tsx"], + category: "undefined", + subcategory: "undefined", }, "context-menu-demo": { name: "context-menu-demo", @@ -1986,6 +2622,8 @@ export const Index: Record = { registryDependencies: ["context-menu"], component: React.lazy(() => import("@/registry/new-york/example/context-menu-demo")), files: ["registry/new-york/example/context-menu-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "data-table-demo": { name: "data-table-demo", @@ -1993,6 +2631,8 @@ export const Index: Record = { registryDependencies: ["data-table"], component: React.lazy(() => import("@/registry/new-york/example/data-table-demo")), files: ["registry/new-york/example/data-table-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "date-picker-demo": { name: "date-picker-demo", @@ -2000,6 +2640,8 @@ export const Index: Record = { registryDependencies: ["button","calendar","popover"], component: React.lazy(() => import("@/registry/new-york/example/date-picker-demo")), files: ["registry/new-york/example/date-picker-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "date-picker-form": { name: "date-picker-form", @@ -2007,6 +2649,8 @@ export const Index: Record = { registryDependencies: ["button","calendar","form","popover"], component: React.lazy(() => import("@/registry/new-york/example/date-picker-form")), files: ["registry/new-york/example/date-picker-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "date-picker-with-presets": { name: "date-picker-with-presets", @@ -2014,6 +2658,8 @@ export const Index: Record = { registryDependencies: ["button","calendar","popover","select"], component: React.lazy(() => import("@/registry/new-york/example/date-picker-with-presets")), files: ["registry/new-york/example/date-picker-with-presets.tsx"], + category: "undefined", + subcategory: "undefined", }, "date-picker-with-range": { name: "date-picker-with-range", @@ -2021,6 +2667,8 @@ export const Index: Record = { registryDependencies: ["button","calendar","popover"], component: React.lazy(() => import("@/registry/new-york/example/date-picker-with-range")), files: ["registry/new-york/example/date-picker-with-range.tsx"], + category: "undefined", + subcategory: "undefined", }, "dialog-demo": { name: "dialog-demo", @@ -2028,6 +2676,8 @@ export const Index: Record = { registryDependencies: ["dialog"], component: React.lazy(() => import("@/registry/new-york/example/dialog-demo")), files: ["registry/new-york/example/dialog-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "dialog-close-button": { name: "dialog-close-button", @@ -2035,6 +2685,8 @@ export const Index: Record = { registryDependencies: ["dialog","button"], component: React.lazy(() => import("@/registry/new-york/example/dialog-close-button")), files: ["registry/new-york/example/dialog-close-button.tsx"], + category: "undefined", + subcategory: "undefined", }, "drawer-demo": { name: "drawer-demo", @@ -2042,6 +2694,8 @@ export const Index: Record = { registryDependencies: ["drawer"], component: React.lazy(() => import("@/registry/new-york/example/drawer-demo")), files: ["registry/new-york/example/drawer-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "drawer-dialog": { name: "drawer-dialog", @@ -2049,6 +2703,8 @@ export const Index: Record = { registryDependencies: ["drawer","dialog"], component: React.lazy(() => import("@/registry/new-york/example/drawer-dialog")), files: ["registry/new-york/example/drawer-dialog.tsx"], + category: "undefined", + subcategory: "undefined", }, "dropdown-menu-demo": { name: "dropdown-menu-demo", @@ -2056,6 +2712,8 @@ export const Index: Record = { registryDependencies: ["dropdown-menu"], component: React.lazy(() => import("@/registry/new-york/example/dropdown-menu-demo")), files: ["registry/new-york/example/dropdown-menu-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "dropdown-menu-checkboxes": { name: "dropdown-menu-checkboxes", @@ -2063,6 +2721,8 @@ export const Index: Record = { registryDependencies: ["dropdown-menu","checkbox"], component: React.lazy(() => import("@/registry/new-york/example/dropdown-menu-checkboxes")), files: ["registry/new-york/example/dropdown-menu-checkboxes.tsx"], + category: "undefined", + subcategory: "undefined", }, "dropdown-menu-radio-group": { name: "dropdown-menu-radio-group", @@ -2070,6 +2730,8 @@ export const Index: Record = { registryDependencies: ["dropdown-menu","radio-group"], component: React.lazy(() => import("@/registry/new-york/example/dropdown-menu-radio-group")), files: ["registry/new-york/example/dropdown-menu-radio-group.tsx"], + category: "undefined", + subcategory: "undefined", }, "hover-card-demo": { name: "hover-card-demo", @@ -2077,6 +2739,8 @@ export const Index: Record = { registryDependencies: ["hover-card"], component: React.lazy(() => import("@/registry/new-york/example/hover-card-demo")), files: ["registry/new-york/example/hover-card-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-demo": { name: "input-demo", @@ -2084,6 +2748,8 @@ export const Index: Record = { registryDependencies: ["input"], component: React.lazy(() => import("@/registry/new-york/example/input-demo")), files: ["registry/new-york/example/input-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-disabled": { name: "input-disabled", @@ -2091,6 +2757,8 @@ export const Index: Record = { registryDependencies: ["input"], component: React.lazy(() => import("@/registry/new-york/example/input-disabled")), files: ["registry/new-york/example/input-disabled.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-file": { name: "input-file", @@ -2098,6 +2766,8 @@ export const Index: Record = { registryDependencies: ["input"], component: React.lazy(() => import("@/registry/new-york/example/input-file")), files: ["registry/new-york/example/input-file.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-form": { name: "input-form", @@ -2105,6 +2775,8 @@ export const Index: Record = { registryDependencies: ["input","button","form"], component: React.lazy(() => import("@/registry/new-york/example/input-form")), files: ["registry/new-york/example/input-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-with-button": { name: "input-with-button", @@ -2112,6 +2784,8 @@ export const Index: Record = { registryDependencies: ["input","button"], component: React.lazy(() => import("@/registry/new-york/example/input-with-button")), files: ["registry/new-york/example/input-with-button.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-with-label": { name: "input-with-label", @@ -2119,6 +2793,8 @@ export const Index: Record = { registryDependencies: ["input","button","label"], component: React.lazy(() => import("@/registry/new-york/example/input-with-label")), files: ["registry/new-york/example/input-with-label.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-with-text": { name: "input-with-text", @@ -2126,6 +2802,8 @@ export const Index: Record = { registryDependencies: ["input","button","label"], component: React.lazy(() => import("@/registry/new-york/example/input-with-text")), files: ["registry/new-york/example/input-with-text.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp-demo": { name: "input-otp-demo", @@ -2133,6 +2811,8 @@ export const Index: Record = { registryDependencies: ["input-otp"], component: React.lazy(() => import("@/registry/new-york/example/input-otp-demo")), files: ["registry/new-york/example/input-otp-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp-pattern": { name: "input-otp-pattern", @@ -2140,6 +2820,8 @@ export const Index: Record = { registryDependencies: ["input-otp"], component: React.lazy(() => import("@/registry/new-york/example/input-otp-pattern")), files: ["registry/new-york/example/input-otp-pattern.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp-separator": { name: "input-otp-separator", @@ -2147,6 +2829,8 @@ export const Index: Record = { registryDependencies: ["input-otp"], component: React.lazy(() => import("@/registry/new-york/example/input-otp-separator")), files: ["registry/new-york/example/input-otp-separator.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp-controlled": { name: "input-otp-controlled", @@ -2154,6 +2838,8 @@ export const Index: Record = { registryDependencies: ["input-otp"], component: React.lazy(() => import("@/registry/new-york/example/input-otp-controlled")), files: ["registry/new-york/example/input-otp-controlled.tsx"], + category: "undefined", + subcategory: "undefined", }, "input-otp-form": { name: "input-otp-form", @@ -2161,6 +2847,8 @@ export const Index: Record = { registryDependencies: ["input-otp","form"], component: React.lazy(() => import("@/registry/new-york/example/input-otp-form")), files: ["registry/new-york/example/input-otp-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "label-demo": { name: "label-demo", @@ -2168,6 +2856,8 @@ export const Index: Record = { registryDependencies: ["label"], component: React.lazy(() => import("@/registry/new-york/example/label-demo")), files: ["registry/new-york/example/label-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "menubar-demo": { name: "menubar-demo", @@ -2175,6 +2865,8 @@ export const Index: Record = { registryDependencies: ["menubar"], component: React.lazy(() => import("@/registry/new-york/example/menubar-demo")), files: ["registry/new-york/example/menubar-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "navigation-menu-demo": { name: "navigation-menu-demo", @@ -2182,6 +2874,8 @@ export const Index: Record = { registryDependencies: ["navigation-menu"], component: React.lazy(() => import("@/registry/new-york/example/navigation-menu-demo")), files: ["registry/new-york/example/navigation-menu-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "pagination-demo": { name: "pagination-demo", @@ -2189,6 +2883,8 @@ export const Index: Record = { registryDependencies: ["pagination"], component: React.lazy(() => import("@/registry/new-york/example/pagination-demo")), files: ["registry/new-york/example/pagination-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "popover-demo": { name: "popover-demo", @@ -2196,6 +2892,8 @@ export const Index: Record = { registryDependencies: ["popover"], component: React.lazy(() => import("@/registry/new-york/example/popover-demo")), files: ["registry/new-york/example/popover-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "progress-demo": { name: "progress-demo", @@ -2203,6 +2901,8 @@ export const Index: Record = { registryDependencies: ["progress"], component: React.lazy(() => import("@/registry/new-york/example/progress-demo")), files: ["registry/new-york/example/progress-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "radio-group-demo": { name: "radio-group-demo", @@ -2210,6 +2910,8 @@ export const Index: Record = { registryDependencies: ["radio-group"], component: React.lazy(() => import("@/registry/new-york/example/radio-group-demo")), files: ["registry/new-york/example/radio-group-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "radio-group-form": { name: "radio-group-form", @@ -2217,6 +2919,8 @@ export const Index: Record = { registryDependencies: ["radio-group","form"], component: React.lazy(() => import("@/registry/new-york/example/radio-group-form")), files: ["registry/new-york/example/radio-group-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "resizable-demo": { name: "resizable-demo", @@ -2224,6 +2928,8 @@ export const Index: Record = { registryDependencies: ["resizable"], component: React.lazy(() => import("@/registry/new-york/example/resizable-demo")), files: ["registry/new-york/example/resizable-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "resizable-demo-with-handle": { name: "resizable-demo-with-handle", @@ -2231,6 +2937,8 @@ export const Index: Record = { registryDependencies: ["resizable"], component: React.lazy(() => import("@/registry/new-york/example/resizable-demo-with-handle")), files: ["registry/new-york/example/resizable-demo-with-handle.tsx"], + category: "undefined", + subcategory: "undefined", }, "resizable-vertical": { name: "resizable-vertical", @@ -2238,6 +2946,8 @@ export const Index: Record = { registryDependencies: ["resizable"], component: React.lazy(() => import("@/registry/new-york/example/resizable-vertical")), files: ["registry/new-york/example/resizable-vertical.tsx"], + category: "undefined", + subcategory: "undefined", }, "resizable-handle": { name: "resizable-handle", @@ -2245,6 +2955,8 @@ export const Index: Record = { registryDependencies: ["resizable"], component: React.lazy(() => import("@/registry/new-york/example/resizable-handle")), files: ["registry/new-york/example/resizable-handle.tsx"], + category: "undefined", + subcategory: "undefined", }, "scroll-area-demo": { name: "scroll-area-demo", @@ -2252,6 +2964,8 @@ export const Index: Record = { registryDependencies: ["scroll-area"], component: React.lazy(() => import("@/registry/new-york/example/scroll-area-demo")), files: ["registry/new-york/example/scroll-area-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "scroll-area-horizontal-demo": { name: "scroll-area-horizontal-demo", @@ -2259,6 +2973,8 @@ export const Index: Record = { registryDependencies: ["scroll-area"], component: React.lazy(() => import("@/registry/new-york/example/scroll-area-horizontal-demo")), files: ["registry/new-york/example/scroll-area-horizontal-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "select-demo": { name: "select-demo", @@ -2266,6 +2982,8 @@ export const Index: Record = { registryDependencies: ["select"], component: React.lazy(() => import("@/registry/new-york/example/select-demo")), files: ["registry/new-york/example/select-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "select-scrollable": { name: "select-scrollable", @@ -2273,6 +2991,8 @@ export const Index: Record = { registryDependencies: ["select"], component: React.lazy(() => import("@/registry/new-york/example/select-scrollable")), files: ["registry/new-york/example/select-scrollable.tsx"], + category: "undefined", + subcategory: "undefined", }, "select-form": { name: "select-form", @@ -2280,6 +3000,8 @@ export const Index: Record = { registryDependencies: ["select"], component: React.lazy(() => import("@/registry/new-york/example/select-form")), files: ["registry/new-york/example/select-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "separator-demo": { name: "separator-demo", @@ -2287,6 +3009,8 @@ export const Index: Record = { registryDependencies: ["separator"], component: React.lazy(() => import("@/registry/new-york/example/separator-demo")), files: ["registry/new-york/example/separator-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "sheet-demo": { name: "sheet-demo", @@ -2294,6 +3018,8 @@ export const Index: Record = { registryDependencies: ["sheet"], component: React.lazy(() => import("@/registry/new-york/example/sheet-demo")), files: ["registry/new-york/example/sheet-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "sheet-side": { name: "sheet-side", @@ -2301,6 +3027,8 @@ export const Index: Record = { registryDependencies: ["sheet"], component: React.lazy(() => import("@/registry/new-york/example/sheet-side")), files: ["registry/new-york/example/sheet-side.tsx"], + category: "undefined", + subcategory: "undefined", }, "skeleton-demo": { name: "skeleton-demo", @@ -2308,6 +3036,8 @@ export const Index: Record = { registryDependencies: ["skeleton"], component: React.lazy(() => import("@/registry/new-york/example/skeleton-demo")), files: ["registry/new-york/example/skeleton-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "skeleton-card": { name: "skeleton-card", @@ -2315,6 +3045,8 @@ export const Index: Record = { registryDependencies: ["skeleton"], component: React.lazy(() => import("@/registry/new-york/example/skeleton-card")), files: ["registry/new-york/example/skeleton-card.tsx"], + category: "undefined", + subcategory: "undefined", }, "slider-demo": { name: "slider-demo", @@ -2322,6 +3054,8 @@ export const Index: Record = { registryDependencies: ["slider"], component: React.lazy(() => import("@/registry/new-york/example/slider-demo")), files: ["registry/new-york/example/slider-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "sonner-demo": { name: "sonner-demo", @@ -2329,6 +3063,8 @@ export const Index: Record = { registryDependencies: ["sonner"], component: React.lazy(() => import("@/registry/new-york/example/sonner-demo")), files: ["registry/new-york/example/sonner-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "switch-demo": { name: "switch-demo", @@ -2336,6 +3072,8 @@ export const Index: Record = { registryDependencies: ["switch"], component: React.lazy(() => import("@/registry/new-york/example/switch-demo")), files: ["registry/new-york/example/switch-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "switch-form": { name: "switch-form", @@ -2343,6 +3081,8 @@ export const Index: Record = { registryDependencies: ["switch","form"], component: React.lazy(() => import("@/registry/new-york/example/switch-form")), files: ["registry/new-york/example/switch-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "table-demo": { name: "table-demo", @@ -2350,6 +3090,8 @@ export const Index: Record = { registryDependencies: ["table"], component: React.lazy(() => import("@/registry/new-york/example/table-demo")), files: ["registry/new-york/example/table-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "tabs-demo": { name: "tabs-demo", @@ -2357,6 +3099,8 @@ export const Index: Record = { registryDependencies: ["tabs"], component: React.lazy(() => import("@/registry/new-york/example/tabs-demo")), files: ["registry/new-york/example/tabs-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-demo": { name: "textarea-demo", @@ -2364,6 +3108,8 @@ export const Index: Record = { registryDependencies: ["textarea"], component: React.lazy(() => import("@/registry/new-york/example/textarea-demo")), files: ["registry/new-york/example/textarea-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-disabled": { name: "textarea-disabled", @@ -2371,6 +3117,8 @@ export const Index: Record = { registryDependencies: ["textarea"], component: React.lazy(() => import("@/registry/new-york/example/textarea-disabled")), files: ["registry/new-york/example/textarea-disabled.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-form": { name: "textarea-form", @@ -2378,6 +3126,8 @@ export const Index: Record = { registryDependencies: ["textarea","form"], component: React.lazy(() => import("@/registry/new-york/example/textarea-form")), files: ["registry/new-york/example/textarea-form.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-with-button": { name: "textarea-with-button", @@ -2385,6 +3135,8 @@ export const Index: Record = { registryDependencies: ["textarea","button"], component: React.lazy(() => import("@/registry/new-york/example/textarea-with-button")), files: ["registry/new-york/example/textarea-with-button.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-with-label": { name: "textarea-with-label", @@ -2392,6 +3144,8 @@ export const Index: Record = { registryDependencies: ["textarea","label"], component: React.lazy(() => import("@/registry/new-york/example/textarea-with-label")), files: ["registry/new-york/example/textarea-with-label.tsx"], + category: "undefined", + subcategory: "undefined", }, "textarea-with-text": { name: "textarea-with-text", @@ -2399,6 +3153,8 @@ export const Index: Record = { registryDependencies: ["textarea","label"], component: React.lazy(() => import("@/registry/new-york/example/textarea-with-text")), files: ["registry/new-york/example/textarea-with-text.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast-demo": { name: "toast-demo", @@ -2406,6 +3162,8 @@ export const Index: Record = { registryDependencies: ["toast"], component: React.lazy(() => import("@/registry/new-york/example/toast-demo")), files: ["registry/new-york/example/toast-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast-destructive": { name: "toast-destructive", @@ -2413,6 +3171,8 @@ export const Index: Record = { registryDependencies: ["toast"], component: React.lazy(() => import("@/registry/new-york/example/toast-destructive")), files: ["registry/new-york/example/toast-destructive.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast-simple": { name: "toast-simple", @@ -2420,6 +3180,8 @@ export const Index: Record = { registryDependencies: ["toast"], component: React.lazy(() => import("@/registry/new-york/example/toast-simple")), files: ["registry/new-york/example/toast-simple.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast-with-action": { name: "toast-with-action", @@ -2427,6 +3189,8 @@ export const Index: Record = { registryDependencies: ["toast"], component: React.lazy(() => import("@/registry/new-york/example/toast-with-action")), files: ["registry/new-york/example/toast-with-action.tsx"], + category: "undefined", + subcategory: "undefined", }, "toast-with-title": { name: "toast-with-title", @@ -2434,6 +3198,8 @@ export const Index: Record = { registryDependencies: ["toast"], component: React.lazy(() => import("@/registry/new-york/example/toast-with-title")), files: ["registry/new-york/example/toast-with-title.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-demo": { name: "toggle-group-demo", @@ -2441,6 +3207,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/new-york/example/toggle-group-demo")), files: ["registry/new-york/example/toggle-group-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-disabled": { name: "toggle-group-disabled", @@ -2448,6 +3216,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/new-york/example/toggle-group-disabled")), files: ["registry/new-york/example/toggle-group-disabled.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-lg": { name: "toggle-group-lg", @@ -2455,6 +3225,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/new-york/example/toggle-group-lg")), files: ["registry/new-york/example/toggle-group-lg.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-outline": { name: "toggle-group-outline", @@ -2462,6 +3234,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/new-york/example/toggle-group-outline")), files: ["registry/new-york/example/toggle-group-outline.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-sm": { name: "toggle-group-sm", @@ -2469,6 +3243,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/new-york/example/toggle-group-sm")), files: ["registry/new-york/example/toggle-group-sm.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-group-single": { name: "toggle-group-single", @@ -2476,6 +3252,8 @@ export const Index: Record = { registryDependencies: ["toggle-group"], component: React.lazy(() => import("@/registry/new-york/example/toggle-group-single")), files: ["registry/new-york/example/toggle-group-single.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-demo": { name: "toggle-demo", @@ -2483,6 +3261,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/new-york/example/toggle-demo")), files: ["registry/new-york/example/toggle-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-disabled": { name: "toggle-disabled", @@ -2490,6 +3270,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/new-york/example/toggle-disabled")), files: ["registry/new-york/example/toggle-disabled.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-lg": { name: "toggle-lg", @@ -2497,6 +3279,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/new-york/example/toggle-lg")), files: ["registry/new-york/example/toggle-lg.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-outline": { name: "toggle-outline", @@ -2504,6 +3288,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/new-york/example/toggle-outline")), files: ["registry/new-york/example/toggle-outline.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-sm": { name: "toggle-sm", @@ -2511,6 +3297,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/new-york/example/toggle-sm")), files: ["registry/new-york/example/toggle-sm.tsx"], + category: "undefined", + subcategory: "undefined", }, "toggle-with-text": { name: "toggle-with-text", @@ -2518,6 +3306,8 @@ export const Index: Record = { registryDependencies: ["toggle"], component: React.lazy(() => import("@/registry/new-york/example/toggle-with-text")), files: ["registry/new-york/example/toggle-with-text.tsx"], + category: "undefined", + subcategory: "undefined", }, "tooltip-demo": { name: "tooltip-demo", @@ -2525,6 +3315,8 @@ export const Index: Record = { registryDependencies: ["tooltip"], component: React.lazy(() => import("@/registry/new-york/example/tooltip-demo")), files: ["registry/new-york/example/tooltip-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-blockquote": { name: "typography-blockquote", @@ -2532,6 +3324,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-blockquote")), files: ["registry/new-york/example/typography-blockquote.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-demo": { name: "typography-demo", @@ -2539,6 +3333,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-demo")), files: ["registry/new-york/example/typography-demo.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-h1": { name: "typography-h1", @@ -2546,6 +3342,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-h1")), files: ["registry/new-york/example/typography-h1.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-h2": { name: "typography-h2", @@ -2553,6 +3351,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-h2")), files: ["registry/new-york/example/typography-h2.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-h3": { name: "typography-h3", @@ -2560,6 +3360,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-h3")), files: ["registry/new-york/example/typography-h3.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-h4": { name: "typography-h4", @@ -2567,6 +3369,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-h4")), files: ["registry/new-york/example/typography-h4.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-inline-code": { name: "typography-inline-code", @@ -2574,6 +3378,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-inline-code")), files: ["registry/new-york/example/typography-inline-code.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-large": { name: "typography-large", @@ -2581,6 +3387,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-large")), files: ["registry/new-york/example/typography-large.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-lead": { name: "typography-lead", @@ -2588,6 +3396,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-lead")), files: ["registry/new-york/example/typography-lead.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-list": { name: "typography-list", @@ -2595,6 +3405,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-list")), files: ["registry/new-york/example/typography-list.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-muted": { name: "typography-muted", @@ -2602,6 +3414,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-muted")), files: ["registry/new-york/example/typography-muted.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-p": { name: "typography-p", @@ -2609,6 +3423,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-p")), files: ["registry/new-york/example/typography-p.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-small": { name: "typography-small", @@ -2616,6 +3432,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-small")), files: ["registry/new-york/example/typography-small.tsx"], + category: "undefined", + subcategory: "undefined", }, "typography-table": { name: "typography-table", @@ -2623,6 +3441,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/typography-table")), files: ["registry/new-york/example/typography-table.tsx"], + category: "undefined", + subcategory: "undefined", }, "mode-toggle": { name: "mode-toggle", @@ -2630,6 +3450,8 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/mode-toggle")), files: ["registry/new-york/example/mode-toggle.tsx"], + category: "undefined", + subcategory: "undefined", }, "cards": { name: "cards", @@ -2637,6 +3459,80 @@ export const Index: Record = { registryDependencies: undefined, component: React.lazy(() => import("@/registry/new-york/example/cards")), files: ["registry/new-york/example/cards/cards.tsx"], + category: "undefined", + subcategory: "undefined", + }, + "dashboard-01": { + name: "dashboard-01", + type: "components:block", + registryDependencies: ["button","dropdown-menu","input","sheet"], + component: React.lazy(() => import("@/registry/new-york/block/dashboard-01")), + files: ["registry/new-york/block/dashboard-01.tsx"], + category: "Application", + subcategory: "Dashboard", + }, + "dashboard-02": { + name: "dashboard-02", + type: "components:block", + registryDependencies: ["badge","button","card","dropdown-menu","input"], + component: React.lazy(() => import("@/registry/new-york/block/dashboard-02")), + files: ["registry/new-york/block/dashboard-02.tsx"], + category: "Application", + subcategory: "Dashboard", + }, + "dashboard-03": { + name: "dashboard-03", + type: "components:block", + registryDependencies: ["badge","button","drawer","input","label","select","textarea","tooltip"], + component: React.lazy(() => import("@/registry/new-york/block/dashboard-03")), + files: ["registry/new-york/block/dashboard-03.tsx"], + category: "Application", + subcategory: "Dashboard", + }, + "dashboard-04": { + name: "dashboard-04", + type: "components:block", + registryDependencies: ["button","card","dropdown-menu","input"], + component: React.lazy(() => import("@/registry/new-york/block/dashboard-04")), + files: ["registry/new-york/block/dashboard-04.tsx"], + category: "Application", + subcategory: "Dashboard", + }, + "authentication-01": { + name: "authentication-01", + type: "components:block", + registryDependencies: ["button","card","input","label"], + component: React.lazy(() => import("@/registry/new-york/block/authentication-01")), + files: ["registry/new-york/block/authentication-01.tsx"], + category: "Authentication", + subcategory: "Login", + }, + "authentication-02": { + name: "authentication-02", + type: "components:block", + registryDependencies: ["button","card","input","label"], + component: React.lazy(() => import("@/registry/new-york/block/authentication-02")), + files: ["registry/new-york/block/authentication-02.tsx"], + category: "Authentication", + subcategory: "Login", + }, + "authentication-03": { + name: "authentication-03", + type: "components:block", + registryDependencies: ["button","card","input","label"], + component: React.lazy(() => import("@/registry/new-york/block/authentication-03")), + files: ["registry/new-york/block/authentication-03.tsx"], + category: "Authentication", + subcategory: "Login", + }, + "authentication-04": { + name: "authentication-04", + type: "components:block", + registryDependencies: ["button","card","input","label"], + component: React.lazy(() => import("@/registry/new-york/block/authentication-04")), + files: ["registry/new-york/block/authentication-04.tsx"], + category: "Authentication", + subcategory: "Login", }, }, } diff --git a/apps/www/actions/edit-in-v0.ts b/apps/www/actions/edit-in-v0.ts new file mode 100644 index 00000000000..82d19ced06c --- /dev/null +++ b/apps/www/actions/edit-in-v0.ts @@ -0,0 +1,50 @@ +"use server" + +import { track } from "@vercel/analytics/server" + +const EDIT_IN_V0_SOURCE = "ui.shadcn.com" + +export async function editInV0({ + name, + description, + style, + code, +}: { + name: string + description: string + style: string + code: string +}) { + try { + await track("edit_in_v0", { + name, + description, + style, + }) + + const response = await fetch(`${process.env.V0_URL}/api/edit`, { + method: "POST", + body: JSON.stringify({ description, code, source: EDIT_IN_V0_SOURCE }), + headers: { + "x-v0-edit-secret": process.env.V0_EDIT_SECRET!, + "x-vercel-protection-bypass": + process.env.DEPLOYMENT_PROTECTION_BYPASS || "not-set", + "Content-Type": "application/json", + }, + }) + + if (!response.ok) { + if (response.status === 403) { + throw new Error("Unauthorized") + } + + throw new Error("Something went wrong. Please try again later.") + } + + return await response.json() + } catch (error) { + if (error instanceof Error) { + return { error: error.message } + } + } +} diff --git a/apps/www/app/(app)/blocks/layout.tsx b/apps/www/app/(app)/blocks/layout.tsx new file mode 100644 index 00000000000..59291352d5d --- /dev/null +++ b/apps/www/app/(app)/blocks/layout.tsx @@ -0,0 +1,52 @@ +import { Metadata } from "next" + +import { Announcement } from "@/components/announcement" +import { + PageActions, + PageHeader, + PageHeaderDescription, + PageHeaderHeading, +} from "@/components/page-header" +import { Button } from "@/registry/new-york/ui/button" + +export const metadata: Metadata = { + title: "Building Blocks.", + description: + "Beautifully designed. Copy and paste into your apps. Open Source.", +} + +export default function BlocksLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( +
+ + + + Building Blocks for the Web + + + Beautifully designed. Copy and paste into your apps. Open Source. + + + + + + +
+ {children} +
+
+ ) +} diff --git a/apps/www/app/(app)/blocks/page.tsx b/apps/www/app/(app)/blocks/page.tsx new file mode 100644 index 00000000000..bee7746845b --- /dev/null +++ b/apps/www/app/(app)/blocks/page.tsx @@ -0,0 +1,10 @@ +import { getAllBlockIds } from "@/lib/blocks" +import { BlockDisplay } from "@/components/block-display" + +export default async function BlocksPage() { + const blocks = await getAllBlockIds() + + return blocks.map((name, index) => ( + + )) +} diff --git a/apps/www/app/docs/[[...slug]]/page.tsx b/apps/www/app/(app)/docs/[[...slug]]/page.tsx similarity index 100% rename from apps/www/app/docs/[[...slug]]/page.tsx rename to apps/www/app/(app)/docs/[[...slug]]/page.tsx diff --git a/apps/www/app/docs/layout.tsx b/apps/www/app/(app)/docs/layout.tsx similarity index 100% rename from apps/www/app/docs/layout.tsx rename to apps/www/app/(app)/docs/layout.tsx diff --git a/apps/www/app/examples/authentication/components/user-auth-form.tsx b/apps/www/app/(app)/examples/authentication/components/user-auth-form.tsx similarity index 100% rename from apps/www/app/examples/authentication/components/user-auth-form.tsx rename to apps/www/app/(app)/examples/authentication/components/user-auth-form.tsx diff --git a/apps/www/app/examples/authentication/page.tsx b/apps/www/app/(app)/examples/authentication/page.tsx similarity index 97% rename from apps/www/app/examples/authentication/page.tsx rename to apps/www/app/(app)/examples/authentication/page.tsx index c994b222c0d..c21e87f3324 100644 --- a/apps/www/app/examples/authentication/page.tsx +++ b/apps/www/app/(app)/examples/authentication/page.tsx @@ -4,7 +4,7 @@ import Link from "next/link" import { cn } from "@/lib/utils" import { buttonVariants } from "@/registry/new-york/ui/button" -import { UserAuthForm } from "@/app/examples/authentication/components/user-auth-form" +import { UserAuthForm } from "@/app/(app)/examples/authentication/components/user-auth-form" export const metadata: Metadata = { title: "Authentication", diff --git a/apps/www/app/examples/cards/components/cookie-settings.tsx b/apps/www/app/(app)/examples/cards/components/cookie-settings.tsx similarity index 100% rename from apps/www/app/examples/cards/components/cookie-settings.tsx rename to apps/www/app/(app)/examples/cards/components/cookie-settings.tsx diff --git a/apps/www/app/examples/cards/components/create-account.tsx b/apps/www/app/(app)/examples/cards/components/create-account.tsx similarity index 100% rename from apps/www/app/examples/cards/components/create-account.tsx rename to apps/www/app/(app)/examples/cards/components/create-account.tsx diff --git a/apps/www/app/examples/cards/components/date-picker.tsx b/apps/www/app/(app)/examples/cards/components/date-picker.tsx similarity index 100% rename from apps/www/app/examples/cards/components/date-picker.tsx rename to apps/www/app/(app)/examples/cards/components/date-picker.tsx diff --git a/apps/www/app/examples/cards/components/github-card.tsx b/apps/www/app/(app)/examples/cards/components/github-card.tsx similarity index 100% rename from apps/www/app/examples/cards/components/github-card.tsx rename to apps/www/app/(app)/examples/cards/components/github-card.tsx diff --git a/apps/www/app/examples/cards/components/notifications.tsx b/apps/www/app/(app)/examples/cards/components/notifications.tsx similarity index 100% rename from apps/www/app/examples/cards/components/notifications.tsx rename to apps/www/app/(app)/examples/cards/components/notifications.tsx diff --git a/apps/www/app/examples/cards/components/payment-method.tsx b/apps/www/app/(app)/examples/cards/components/payment-method.tsx similarity index 100% rename from apps/www/app/examples/cards/components/payment-method.tsx rename to apps/www/app/(app)/examples/cards/components/payment-method.tsx diff --git a/apps/www/app/examples/cards/components/report-an-issue.tsx b/apps/www/app/(app)/examples/cards/components/report-an-issue.tsx similarity index 100% rename from apps/www/app/examples/cards/components/report-an-issue.tsx rename to apps/www/app/(app)/examples/cards/components/report-an-issue.tsx diff --git a/apps/www/app/examples/cards/components/share-document.tsx b/apps/www/app/(app)/examples/cards/components/share-document.tsx similarity index 100% rename from apps/www/app/examples/cards/components/share-document.tsx rename to apps/www/app/(app)/examples/cards/components/share-document.tsx diff --git a/apps/www/app/examples/cards/components/team-members.tsx b/apps/www/app/(app)/examples/cards/components/team-members.tsx similarity index 100% rename from apps/www/app/examples/cards/components/team-members.tsx rename to apps/www/app/(app)/examples/cards/components/team-members.tsx diff --git a/apps/www/app/examples/cards/page.tsx b/apps/www/app/(app)/examples/cards/page.tsx similarity index 100% rename from apps/www/app/examples/cards/page.tsx rename to apps/www/app/(app)/examples/cards/page.tsx diff --git a/apps/www/app/examples/dashboard/components/date-range-picker.tsx b/apps/www/app/(app)/examples/dashboard/components/date-range-picker.tsx similarity index 100% rename from apps/www/app/examples/dashboard/components/date-range-picker.tsx rename to apps/www/app/(app)/examples/dashboard/components/date-range-picker.tsx diff --git a/apps/www/app/examples/dashboard/components/main-nav.tsx b/apps/www/app/(app)/examples/dashboard/components/main-nav.tsx similarity index 100% rename from apps/www/app/examples/dashboard/components/main-nav.tsx rename to apps/www/app/(app)/examples/dashboard/components/main-nav.tsx diff --git a/apps/www/app/examples/dashboard/components/overview.tsx b/apps/www/app/(app)/examples/dashboard/components/overview.tsx similarity index 100% rename from apps/www/app/examples/dashboard/components/overview.tsx rename to apps/www/app/(app)/examples/dashboard/components/overview.tsx diff --git a/apps/www/app/examples/dashboard/components/recent-sales.tsx b/apps/www/app/(app)/examples/dashboard/components/recent-sales.tsx similarity index 100% rename from apps/www/app/examples/dashboard/components/recent-sales.tsx rename to apps/www/app/(app)/examples/dashboard/components/recent-sales.tsx diff --git a/apps/www/app/examples/dashboard/components/search.tsx b/apps/www/app/(app)/examples/dashboard/components/search.tsx similarity index 100% rename from apps/www/app/examples/dashboard/components/search.tsx rename to apps/www/app/(app)/examples/dashboard/components/search.tsx diff --git a/apps/www/app/examples/dashboard/components/team-switcher.tsx b/apps/www/app/(app)/examples/dashboard/components/team-switcher.tsx similarity index 100% rename from apps/www/app/examples/dashboard/components/team-switcher.tsx rename to apps/www/app/(app)/examples/dashboard/components/team-switcher.tsx diff --git a/apps/www/app/examples/dashboard/components/user-nav.tsx b/apps/www/app/(app)/examples/dashboard/components/user-nav.tsx similarity index 100% rename from apps/www/app/examples/dashboard/components/user-nav.tsx rename to apps/www/app/(app)/examples/dashboard/components/user-nav.tsx diff --git a/apps/www/app/examples/dashboard/page.tsx b/apps/www/app/(app)/examples/dashboard/page.tsx similarity index 93% rename from apps/www/app/examples/dashboard/page.tsx rename to apps/www/app/(app)/examples/dashboard/page.tsx index 95b532947fa..4bc9e301b6e 100644 --- a/apps/www/app/examples/dashboard/page.tsx +++ b/apps/www/app/(app)/examples/dashboard/page.tsx @@ -15,13 +15,13 @@ import { TabsList, TabsTrigger, } from "@/registry/new-york/ui/tabs" -import { CalendarDateRangePicker } from "@/app/examples/dashboard/components/date-range-picker" -import { MainNav } from "@/app/examples/dashboard/components/main-nav" -import { Overview } from "@/app/examples/dashboard/components/overview" -import { RecentSales } from "@/app/examples/dashboard/components/recent-sales" -import { Search } from "@/app/examples/dashboard/components/search" -import TeamSwitcher from "@/app/examples/dashboard/components/team-switcher" -import { UserNav } from "@/app/examples/dashboard/components/user-nav" +import { CalendarDateRangePicker } from "@/app/(app)/examples/dashboard/components/date-range-picker" +import { MainNav } from "@/app/(app)/examples/dashboard/components/main-nav" +import { Overview } from "@/app/(app)/examples/dashboard/components/overview" +import { RecentSales } from "@/app/(app)/examples/dashboard/components/recent-sales" +import { Search } from "@/app/(app)/examples/dashboard/components/search" +import TeamSwitcher from "@/app/(app)/examples/dashboard/components/team-switcher" +import { UserNav } from "@/app/(app)/examples/dashboard/components/user-nav" export const metadata: Metadata = { title: "Dashboard", diff --git a/apps/www/app/examples/forms/account/account-form.tsx b/apps/www/app/(app)/examples/forms/account/account-form.tsx similarity index 100% rename from apps/www/app/examples/forms/account/account-form.tsx rename to apps/www/app/(app)/examples/forms/account/account-form.tsx diff --git a/apps/www/app/examples/forms/account/page.tsx b/apps/www/app/(app)/examples/forms/account/page.tsx similarity index 85% rename from apps/www/app/examples/forms/account/page.tsx rename to apps/www/app/(app)/examples/forms/account/page.tsx index 1b21224ec5e..32061ef2e59 100644 --- a/apps/www/app/examples/forms/account/page.tsx +++ b/apps/www/app/(app)/examples/forms/account/page.tsx @@ -1,5 +1,5 @@ import { Separator } from "@/registry/new-york/ui/separator" -import { AccountForm } from "@/app/examples/forms/account/account-form" +import { AccountForm } from "@/app/(app)/examples/forms/account/account-form" export default function SettingsAccountPage() { return ( diff --git a/apps/www/app/examples/forms/appearance/appearance-form.tsx b/apps/www/app/(app)/examples/forms/appearance/appearance-form.tsx similarity index 100% rename from apps/www/app/examples/forms/appearance/appearance-form.tsx rename to apps/www/app/(app)/examples/forms/appearance/appearance-form.tsx diff --git a/apps/www/app/examples/forms/appearance/page.tsx b/apps/www/app/(app)/examples/forms/appearance/page.tsx similarity index 84% rename from apps/www/app/examples/forms/appearance/page.tsx rename to apps/www/app/(app)/examples/forms/appearance/page.tsx index 745d0715499..16dc0fb96dd 100644 --- a/apps/www/app/examples/forms/appearance/page.tsx +++ b/apps/www/app/(app)/examples/forms/appearance/page.tsx @@ -1,5 +1,5 @@ import { Separator } from "@/registry/new-york/ui/separator" -import { AppearanceForm } from "@/app/examples/forms/appearance/appearance-form" +import { AppearanceForm } from "@/app/(app)/examples/forms/appearance/appearance-form" export default function SettingsAppearancePage() { return ( diff --git a/apps/www/app/examples/forms/components/sidebar-nav.tsx b/apps/www/app/(app)/examples/forms/components/sidebar-nav.tsx similarity index 100% rename from apps/www/app/examples/forms/components/sidebar-nav.tsx rename to apps/www/app/(app)/examples/forms/components/sidebar-nav.tsx diff --git a/apps/www/app/examples/forms/display/display-form.tsx b/apps/www/app/(app)/examples/forms/display/display-form.tsx similarity index 100% rename from apps/www/app/examples/forms/display/display-form.tsx rename to apps/www/app/(app)/examples/forms/display/display-form.tsx diff --git a/apps/www/app/examples/forms/display/page.tsx b/apps/www/app/(app)/examples/forms/display/page.tsx similarity index 84% rename from apps/www/app/examples/forms/display/page.tsx rename to apps/www/app/(app)/examples/forms/display/page.tsx index e36a6904135..5eeb6502317 100644 --- a/apps/www/app/examples/forms/display/page.tsx +++ b/apps/www/app/(app)/examples/forms/display/page.tsx @@ -1,5 +1,5 @@ import { Separator } from "@/registry/new-york/ui/separator" -import { DisplayForm } from "@/app/examples/forms/display/display-form" +import { DisplayForm } from "@/app/(app)/examples/forms/display/display-form" export default function SettingsDisplayPage() { return ( diff --git a/apps/www/app/examples/forms/layout.tsx b/apps/www/app/(app)/examples/forms/layout.tsx similarity index 95% rename from apps/www/app/examples/forms/layout.tsx rename to apps/www/app/(app)/examples/forms/layout.tsx index a5d60c7b0b8..b9baa04aead 100644 --- a/apps/www/app/examples/forms/layout.tsx +++ b/apps/www/app/(app)/examples/forms/layout.tsx @@ -2,7 +2,7 @@ import { Metadata } from "next" import Image from "next/image" import { Separator } from "@/registry/new-york/ui/separator" -import { SidebarNav } from "@/app/examples/forms/components/sidebar-nav" +import { SidebarNav } from "@/app/(app)/examples/forms/components/sidebar-nav" export const metadata: Metadata = { title: "Forms", diff --git a/apps/www/app/examples/forms/notifications/notifications-form.tsx b/apps/www/app/(app)/examples/forms/notifications/notifications-form.tsx similarity index 100% rename from apps/www/app/examples/forms/notifications/notifications-form.tsx rename to apps/www/app/(app)/examples/forms/notifications/notifications-form.tsx diff --git a/apps/www/app/examples/forms/notifications/page.tsx b/apps/www/app/(app)/examples/forms/notifications/page.tsx similarity index 81% rename from apps/www/app/examples/forms/notifications/page.tsx rename to apps/www/app/(app)/examples/forms/notifications/page.tsx index 4e0c2547f12..0c97e908c8d 100644 --- a/apps/www/app/examples/forms/notifications/page.tsx +++ b/apps/www/app/(app)/examples/forms/notifications/page.tsx @@ -1,5 +1,5 @@ import { Separator } from "@/registry/new-york/ui/separator" -import { NotificationsForm } from "@/app/examples/forms/notifications/notifications-form" +import { NotificationsForm } from "@/app/(app)/examples/forms/notifications/notifications-form" export default function SettingsNotificationsPage() { return ( diff --git a/apps/www/app/examples/forms/page.tsx b/apps/www/app/(app)/examples/forms/page.tsx similarity index 85% rename from apps/www/app/examples/forms/page.tsx rename to apps/www/app/(app)/examples/forms/page.tsx index 77b0ec4e0af..8a5a2bb6367 100644 --- a/apps/www/app/examples/forms/page.tsx +++ b/apps/www/app/(app)/examples/forms/page.tsx @@ -1,5 +1,5 @@ import { Separator } from "@/registry/new-york/ui/separator" -import { ProfileForm } from "@/app/examples/forms/profile-form" +import { ProfileForm } from "@/app/(app)/examples/forms/profile-form" export default function SettingsProfilePage() { return ( diff --git a/apps/www/app/examples/forms/profile-form.tsx b/apps/www/app/(app)/examples/forms/profile-form.tsx similarity index 100% rename from apps/www/app/examples/forms/profile-form.tsx rename to apps/www/app/(app)/examples/forms/profile-form.tsx diff --git a/apps/www/app/examples/layout.tsx b/apps/www/app/(app)/examples/layout.tsx similarity index 100% rename from apps/www/app/examples/layout.tsx rename to apps/www/app/(app)/examples/layout.tsx diff --git a/apps/www/app/examples/mail/components/account-switcher.tsx b/apps/www/app/(app)/examples/mail/components/account-switcher.tsx similarity index 100% rename from apps/www/app/examples/mail/components/account-switcher.tsx rename to apps/www/app/(app)/examples/mail/components/account-switcher.tsx diff --git a/apps/www/app/examples/mail/components/mail-display.tsx b/apps/www/app/(app)/examples/mail/components/mail-display.tsx similarity index 99% rename from apps/www/app/examples/mail/components/mail-display.tsx rename to apps/www/app/(app)/examples/mail/components/mail-display.tsx index b41acabe761..9a6cb5f84a8 100644 --- a/apps/www/app/examples/mail/components/mail-display.tsx +++ b/apps/www/app/(app)/examples/mail/components/mail-display.tsx @@ -42,7 +42,7 @@ import { TooltipContent, TooltipTrigger, } from "@/registry/new-york/ui/tooltip" -import { Mail } from "@/app/examples/mail/data" +import { Mail } from "@/app/(app)/examples/mail/data" interface MailDisplayProps { mail: Mail | null diff --git a/apps/www/app/examples/mail/components/mail-list.tsx b/apps/www/app/(app)/examples/mail/components/mail-list.tsx similarity index 95% rename from apps/www/app/examples/mail/components/mail-list.tsx rename to apps/www/app/(app)/examples/mail/components/mail-list.tsx index e2301cc8c50..7797b6a46b4 100644 --- a/apps/www/app/examples/mail/components/mail-list.tsx +++ b/apps/www/app/(app)/examples/mail/components/mail-list.tsx @@ -5,8 +5,8 @@ import { cn } from "@/lib/utils" import { Badge } from "@/registry/new-york/ui/badge" import { ScrollArea } from "@/registry/new-york/ui/scroll-area" import { Separator } from "@/registry/new-york/ui/separator" -import { Mail } from "@/app/examples/mail/data" -import { useMail } from "@/app/examples/mail/use-mail" +import { Mail } from "@/app/(app)/examples/mail/data" +import { useMail } from "@/app/(app)/examples/mail/use-mail" interface MailListProps { items: Mail[] diff --git a/apps/www/app/examples/mail/components/mail.tsx b/apps/www/app/(app)/examples/mail/components/mail.tsx similarity index 80% rename from apps/www/app/examples/mail/components/mail.tsx rename to apps/www/app/(app)/examples/mail/components/mail.tsx index 36dfb5498a1..fed6e4fd38f 100644 --- a/apps/www/app/examples/mail/components/mail.tsx +++ b/apps/www/app/(app)/examples/mail/components/mail.tsx @@ -1,4 +1,5 @@ "use client" + import * as React from "react" import { AlertCircle, @@ -7,7 +8,6 @@ import { File, Inbox, MessagesSquare, - PenBox, Search, Send, ShoppingCart, @@ -15,15 +15,14 @@ import { Users2, } from "lucide-react" -import { AccountSwitcher } from "@/app/examples/mail/components/account-switcher" -import { MailDisplay } from "@/app/examples/mail/components/mail-display" -import { MailList } from "@/app/examples/mail/components/mail-list" -import { Nav } from "@/app/examples/mail/components/nav" -import { Mail } from "@/app/examples/mail/data" -import { useMail } from "@/app/examples/mail/use-mail" import { cn } from "@/lib/utils" -import { Separator } from "@/registry/new-york/ui/separator" import { Input } from "@/registry/new-york/ui/input" +import { + ResizableHandle, + ResizablePanel, + ResizablePanelGroup, +} from "@/registry/new-york/ui/resizable" +import { Separator } from "@/registry/new-york/ui/separator" import { Tabs, TabsContent, @@ -31,7 +30,12 @@ import { TabsTrigger, } from "@/registry/new-york/ui/tabs" import { TooltipProvider } from "@/registry/new-york/ui/tooltip" -import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/registry/new-york/ui/resizable" +import { AccountSwitcher } from "@/app/(app)/examples/mail/components/account-switcher" +import { MailDisplay } from "@/app/(app)/examples/mail/components/mail-display" +import { MailList } from "@/app/(app)/examples/mail/components/mail-list" +import { Nav } from "@/app/(app)/examples/mail/components/nav" +import { type Mail } from "@/app/(app)/examples/mail/data" +import { useMail } from "@/app/(app)/examples/mail/use-mail" interface MailProps { accounts: { @@ -78,9 +82,17 @@ export function Mail({ collapsed )}` }} - className={cn(isCollapsed && "min-w-[50px] transition-all duration-300 ease-in-out")} + className={cn( + isCollapsed && + "min-w-[50px] transition-all duration-300 ease-in-out" + )} > -
+
@@ -168,8 +180,18 @@ export function Mail({

Inbox

- All mail - Unread + + All mail + + + Unread +
diff --git a/apps/www/app/examples/mail/components/nav.tsx b/apps/www/app/(app)/examples/mail/components/nav.tsx similarity index 100% rename from apps/www/app/examples/mail/components/nav.tsx rename to apps/www/app/(app)/examples/mail/components/nav.tsx diff --git a/apps/www/app/examples/mail/data.tsx b/apps/www/app/(app)/examples/mail/data.tsx similarity index 100% rename from apps/www/app/examples/mail/data.tsx rename to apps/www/app/(app)/examples/mail/data.tsx diff --git a/apps/www/app/examples/mail/page.tsx b/apps/www/app/(app)/examples/mail/page.tsx similarity index 89% rename from apps/www/app/examples/mail/page.tsx rename to apps/www/app/(app)/examples/mail/page.tsx index 2a222ed9fc4..b0ca187f42a 100644 --- a/apps/www/app/examples/mail/page.tsx +++ b/apps/www/app/(app)/examples/mail/page.tsx @@ -1,8 +1,8 @@ import { cookies } from "next/headers" import Image from "next/image" -import { Mail } from "@/app/examples/mail/components/mail" -import { accounts, mails } from "@/app/examples/mail/data" +import { Mail } from "@/app/(app)/examples/mail/components/mail" +import { accounts, mails } from "@/app/(app)/examples/mail/data" export default function MailPage() { const layout = cookies().get("react-resizable-panels:layout") diff --git a/apps/www/app/examples/mail/use-mail.ts b/apps/www/app/(app)/examples/mail/use-mail.ts similarity index 77% rename from apps/www/app/examples/mail/use-mail.ts rename to apps/www/app/(app)/examples/mail/use-mail.ts index 24c0efeff44..e803f8285c1 100644 --- a/apps/www/app/examples/mail/use-mail.ts +++ b/apps/www/app/(app)/examples/mail/use-mail.ts @@ -1,6 +1,6 @@ import { atom, useAtom } from "jotai" -import { Mail, mails } from "@/app/examples/mail/data" +import { Mail, mails } from "@/app/(app)/examples/mail/data" type Config = { selected: Mail["id"] | null diff --git a/apps/www/app/examples/music/components/album-artwork.tsx b/apps/www/app/(app)/examples/music/components/album-artwork.tsx similarity index 100% rename from apps/www/app/examples/music/components/album-artwork.tsx rename to apps/www/app/(app)/examples/music/components/album-artwork.tsx diff --git a/apps/www/app/examples/music/components/menu.tsx b/apps/www/app/(app)/examples/music/components/menu.tsx similarity index 100% rename from apps/www/app/examples/music/components/menu.tsx rename to apps/www/app/(app)/examples/music/components/menu.tsx diff --git a/apps/www/app/examples/music/components/podcast-empty-placeholder.tsx b/apps/www/app/(app)/examples/music/components/podcast-empty-placeholder.tsx similarity index 100% rename from apps/www/app/examples/music/components/podcast-empty-placeholder.tsx rename to apps/www/app/(app)/examples/music/components/podcast-empty-placeholder.tsx diff --git a/apps/www/app/examples/music/components/sidebar.tsx b/apps/www/app/(app)/examples/music/components/sidebar.tsx similarity index 100% rename from apps/www/app/examples/music/components/sidebar.tsx rename to apps/www/app/(app)/examples/music/components/sidebar.tsx diff --git a/apps/www/app/examples/music/data/albums.ts b/apps/www/app/(app)/examples/music/data/albums.ts similarity index 100% rename from apps/www/app/examples/music/data/albums.ts rename to apps/www/app/(app)/examples/music/data/albums.ts diff --git a/apps/www/app/examples/music/data/playlists.ts b/apps/www/app/(app)/examples/music/data/playlists.ts similarity index 100% rename from apps/www/app/examples/music/data/playlists.ts rename to apps/www/app/(app)/examples/music/data/playlists.ts diff --git a/apps/www/app/examples/music/page.tsx b/apps/www/app/(app)/examples/music/page.tsx similarity index 100% rename from apps/www/app/examples/music/page.tsx rename to apps/www/app/(app)/examples/music/page.tsx diff --git a/apps/www/app/examples/playground/components/code-viewer.tsx b/apps/www/app/(app)/examples/playground/components/code-viewer.tsx similarity index 100% rename from apps/www/app/examples/playground/components/code-viewer.tsx rename to apps/www/app/(app)/examples/playground/components/code-viewer.tsx diff --git a/apps/www/app/examples/playground/components/maxlength-selector.tsx b/apps/www/app/(app)/examples/playground/components/maxlength-selector.tsx similarity index 100% rename from apps/www/app/examples/playground/components/maxlength-selector.tsx rename to apps/www/app/(app)/examples/playground/components/maxlength-selector.tsx diff --git a/apps/www/app/examples/playground/components/model-selector.tsx b/apps/www/app/(app)/examples/playground/components/model-selector.tsx similarity index 100% rename from apps/www/app/examples/playground/components/model-selector.tsx rename to apps/www/app/(app)/examples/playground/components/model-selector.tsx diff --git a/apps/www/app/examples/playground/components/preset-actions.tsx b/apps/www/app/(app)/examples/playground/components/preset-actions.tsx similarity index 100% rename from apps/www/app/examples/playground/components/preset-actions.tsx rename to apps/www/app/(app)/examples/playground/components/preset-actions.tsx diff --git a/apps/www/app/examples/playground/components/preset-save.tsx b/apps/www/app/(app)/examples/playground/components/preset-save.tsx similarity index 100% rename from apps/www/app/examples/playground/components/preset-save.tsx rename to apps/www/app/(app)/examples/playground/components/preset-save.tsx diff --git a/apps/www/app/examples/playground/components/preset-selector.tsx b/apps/www/app/(app)/examples/playground/components/preset-selector.tsx similarity index 100% rename from apps/www/app/examples/playground/components/preset-selector.tsx rename to apps/www/app/(app)/examples/playground/components/preset-selector.tsx diff --git a/apps/www/app/examples/playground/components/preset-share.tsx b/apps/www/app/(app)/examples/playground/components/preset-share.tsx similarity index 100% rename from apps/www/app/examples/playground/components/preset-share.tsx rename to apps/www/app/(app)/examples/playground/components/preset-share.tsx diff --git a/apps/www/app/examples/playground/components/temperature-selector.tsx b/apps/www/app/(app)/examples/playground/components/temperature-selector.tsx similarity index 100% rename from apps/www/app/examples/playground/components/temperature-selector.tsx rename to apps/www/app/(app)/examples/playground/components/temperature-selector.tsx diff --git a/apps/www/app/examples/playground/components/top-p-selector.tsx b/apps/www/app/(app)/examples/playground/components/top-p-selector.tsx similarity index 100% rename from apps/www/app/examples/playground/components/top-p-selector.tsx rename to apps/www/app/(app)/examples/playground/components/top-p-selector.tsx diff --git a/apps/www/app/examples/playground/data/models.ts b/apps/www/app/(app)/examples/playground/data/models.ts similarity index 100% rename from apps/www/app/examples/playground/data/models.ts rename to apps/www/app/(app)/examples/playground/data/models.ts diff --git a/apps/www/app/examples/playground/data/presets.ts b/apps/www/app/(app)/examples/playground/data/presets.ts similarity index 100% rename from apps/www/app/examples/playground/data/presets.ts rename to apps/www/app/(app)/examples/playground/data/presets.ts diff --git a/apps/www/app/examples/playground/page.tsx b/apps/www/app/(app)/examples/playground/page.tsx similarity index 100% rename from apps/www/app/examples/playground/page.tsx rename to apps/www/app/(app)/examples/playground/page.tsx diff --git a/apps/www/app/examples/tasks/components/columns.tsx b/apps/www/app/(app)/examples/tasks/components/columns.tsx similarity index 100% rename from apps/www/app/examples/tasks/components/columns.tsx rename to apps/www/app/(app)/examples/tasks/components/columns.tsx diff --git a/apps/www/app/examples/tasks/components/data-table-column-header.tsx b/apps/www/app/(app)/examples/tasks/components/data-table-column-header.tsx similarity index 100% rename from apps/www/app/examples/tasks/components/data-table-column-header.tsx rename to apps/www/app/(app)/examples/tasks/components/data-table-column-header.tsx diff --git a/apps/www/app/examples/tasks/components/data-table-faceted-filter.tsx b/apps/www/app/(app)/examples/tasks/components/data-table-faceted-filter.tsx similarity index 100% rename from apps/www/app/examples/tasks/components/data-table-faceted-filter.tsx rename to apps/www/app/(app)/examples/tasks/components/data-table-faceted-filter.tsx diff --git a/apps/www/app/examples/tasks/components/data-table-pagination.tsx b/apps/www/app/(app)/examples/tasks/components/data-table-pagination.tsx similarity index 100% rename from apps/www/app/examples/tasks/components/data-table-pagination.tsx rename to apps/www/app/(app)/examples/tasks/components/data-table-pagination.tsx diff --git a/apps/www/app/examples/tasks/components/data-table-row-actions.tsx b/apps/www/app/(app)/examples/tasks/components/data-table-row-actions.tsx similarity index 100% rename from apps/www/app/examples/tasks/components/data-table-row-actions.tsx rename to apps/www/app/(app)/examples/tasks/components/data-table-row-actions.tsx diff --git a/apps/www/app/examples/tasks/components/data-table-toolbar.tsx b/apps/www/app/(app)/examples/tasks/components/data-table-toolbar.tsx similarity index 94% rename from apps/www/app/examples/tasks/components/data-table-toolbar.tsx rename to apps/www/app/(app)/examples/tasks/components/data-table-toolbar.tsx index b396f6c0018..10bd91aee2a 100644 --- a/apps/www/app/examples/tasks/components/data-table-toolbar.tsx +++ b/apps/www/app/(app)/examples/tasks/components/data-table-toolbar.tsx @@ -5,7 +5,7 @@ import { Table } from "@tanstack/react-table" import { Button } from "@/registry/new-york/ui/button" import { Input } from "@/registry/new-york/ui/input" -import { DataTableViewOptions } from "@/app/examples/tasks/components/data-table-view-options" +import { DataTableViewOptions } from "@/app/(app)/examples/tasks/components/data-table-view-options" import { priorities, statuses } from "../data/data" import { DataTableFacetedFilter } from "./data-table-faceted-filter" diff --git a/apps/www/app/examples/tasks/components/data-table-view-options.tsx b/apps/www/app/(app)/examples/tasks/components/data-table-view-options.tsx similarity index 100% rename from apps/www/app/examples/tasks/components/data-table-view-options.tsx rename to apps/www/app/(app)/examples/tasks/components/data-table-view-options.tsx diff --git a/apps/www/app/examples/tasks/components/data-table.tsx b/apps/www/app/(app)/examples/tasks/components/data-table.tsx similarity index 96% rename from apps/www/app/examples/tasks/components/data-table.tsx rename to apps/www/app/(app)/examples/tasks/components/data-table.tsx index 9300d4b71c5..2dd726e5aff 100644 --- a/apps/www/app/examples/tasks/components/data-table.tsx +++ b/apps/www/app/(app)/examples/tasks/components/data-table.tsx @@ -25,8 +25,8 @@ import { TableRow, } from "@/registry/new-york/ui/table" -import { DataTablePagination } from "../components/data-table-pagination" -import { DataTableToolbar } from "../components/data-table-toolbar" +import { DataTablePagination } from "./data-table-pagination" +import { DataTableToolbar } from "./data-table-toolbar" interface DataTableProps { columns: ColumnDef[] diff --git a/apps/www/app/examples/tasks/components/user-nav.tsx b/apps/www/app/(app)/examples/tasks/components/user-nav.tsx similarity index 100% rename from apps/www/app/examples/tasks/components/user-nav.tsx rename to apps/www/app/(app)/examples/tasks/components/user-nav.tsx diff --git a/apps/www/app/examples/tasks/data/data.tsx b/apps/www/app/(app)/examples/tasks/data/data.tsx similarity index 100% rename from apps/www/app/examples/tasks/data/data.tsx rename to apps/www/app/(app)/examples/tasks/data/data.tsx diff --git a/apps/www/app/examples/tasks/data/schema.ts b/apps/www/app/(app)/examples/tasks/data/schema.ts similarity index 100% rename from apps/www/app/examples/tasks/data/schema.ts rename to apps/www/app/(app)/examples/tasks/data/schema.ts diff --git a/apps/www/app/examples/tasks/data/seed.ts b/apps/www/app/(app)/examples/tasks/data/seed.ts similarity index 100% rename from apps/www/app/examples/tasks/data/seed.ts rename to apps/www/app/(app)/examples/tasks/data/seed.ts diff --git a/apps/www/app/examples/tasks/data/tasks.json b/apps/www/app/(app)/examples/tasks/data/tasks.json similarity index 100% rename from apps/www/app/examples/tasks/data/tasks.json rename to apps/www/app/(app)/examples/tasks/data/tasks.json diff --git a/apps/www/app/examples/tasks/page.tsx b/apps/www/app/(app)/examples/tasks/page.tsx similarity index 95% rename from apps/www/app/examples/tasks/page.tsx rename to apps/www/app/(app)/examples/tasks/page.tsx index 78de2c27f05..b244498371a 100644 --- a/apps/www/app/examples/tasks/page.tsx +++ b/apps/www/app/(app)/examples/tasks/page.tsx @@ -17,7 +17,7 @@ export const metadata: Metadata = { // Simulate a database read for tasks. async function getTasks() { const data = await fs.readFile( - path.join(process.cwd(), "app/examples/tasks/data/tasks.json") + path.join(process.cwd(), "app/(app)/examples/tasks/data/tasks.json") ) const tasks = JSON.parse(data.toString()) diff --git a/apps/www/app/(app)/layout.tsx b/apps/www/app/(app)/layout.tsx new file mode 100644 index 00000000000..ceaa87acfbb --- /dev/null +++ b/apps/www/app/(app)/layout.tsx @@ -0,0 +1,16 @@ +import { SiteFooter } from "@/components/site-footer" +import { SiteHeader } from "@/components/site-header" + +interface AppLayoutProps { + children: React.ReactNode +} + +export default function AppLayout({ children }: AppLayoutProps) { + return ( + <> + +
{children}
+ + + ) +} diff --git a/apps/www/app/page.tsx b/apps/www/app/(app)/page.tsx similarity index 97% rename from apps/www/app/page.tsx rename to apps/www/app/(app)/page.tsx index 8b2e4fae602..d34a80631ad 100644 --- a/apps/www/app/page.tsx +++ b/apps/www/app/(app)/page.tsx @@ -13,7 +13,7 @@ import { PageHeaderHeading, } from "@/components/page-header" import { buttonVariants } from "@/registry/new-york/ui/button" -import MailPage from "@/app/examples/mail/page" +import MailPage from "@/app/(app)/examples/mail/page" export default function IndexPage() { return ( diff --git a/apps/www/app/sink/layout.tsx b/apps/www/app/(app)/sink/layout.tsx similarity index 100% rename from apps/www/app/sink/layout.tsx rename to apps/www/app/(app)/sink/layout.tsx diff --git a/apps/www/app/sink/new-york/page.tsx b/apps/www/app/(app)/sink/new-york/page.tsx similarity index 100% rename from apps/www/app/sink/new-york/page.tsx rename to apps/www/app/(app)/sink/new-york/page.tsx diff --git a/apps/www/app/sink/page.tsx b/apps/www/app/(app)/sink/page.tsx similarity index 100% rename from apps/www/app/sink/page.tsx rename to apps/www/app/(app)/sink/page.tsx diff --git a/apps/www/app/themes/page.tsx b/apps/www/app/(app)/themes/page.tsx similarity index 96% rename from apps/www/app/themes/page.tsx rename to apps/www/app/(app)/themes/page.tsx index 00df52d4d63..920aac84930 100644 --- a/apps/www/app/themes/page.tsx +++ b/apps/www/app/(app)/themes/page.tsx @@ -10,7 +10,7 @@ import { } from "@/components/page-header" import { ThemeCustomizer } from "@/components/theme-customizer" import { ThemeWrapper } from "@/components/theme-wrapper" -import { ThemesTabs } from "@/app/themes/tabs" +import { ThemesTabs } from "@/app/(app)/themes/tabs" export const metadata: Metadata = { title: "Themes", diff --git a/apps/www/app/themes/tabs.tsx b/apps/www/app/(app)/themes/tabs.tsx similarity index 100% rename from apps/www/app/themes/tabs.tsx rename to apps/www/app/(app)/themes/tabs.tsx diff --git a/apps/www/app/(blocks)/blocks/[style]/[name]/page.tsx b/apps/www/app/(blocks)/blocks/[style]/[name]/page.tsx new file mode 100644 index 00000000000..75bd1b86c24 --- /dev/null +++ b/apps/www/app/(blocks)/blocks/[style]/[name]/page.tsx @@ -0,0 +1,86 @@ +import { siteConfig } from "@/config/site" +import { getAllBlockIds, getBlock } from "@/lib/blocks" +import { absoluteUrl } from "@/lib/utils" +import { Style, styles } from "@/registry/styles" + +import "@/styles/mdx.css" +import { Metadata } from "next" +import { notFound } from "next/navigation" + +export async function generateMetadata({ + params, +}: { + params: { + style: Style["name"] + name: string + } +}): Promise { + const { name, style } = params + const block = await getBlock(name, style) + + if (!block) { + return {} + } + + return { + title: block.name, + description: block.description, + openGraph: { + title: block.name, + description: block.description, + type: "article", + url: absoluteUrl(`/blocks/${block.name}`), + images: [ + { + url: siteConfig.ogImage, + width: 1200, + height: 630, + alt: siteConfig.name, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: block.name, + description: block.description, + images: [siteConfig.ogImage], + creator: "@shadcn", + }, + } +} + +export async function generateStaticParams() { + const blockIds = await getAllBlockIds() + return styles + .map((style) => + blockIds.map((name) => ({ + style: style.name, + name, + })) + ) + .flat() +} + +export default async function BlockPage({ + params, +}: { + params: { + style: Style["name"] + name: string + } +}) { + const { name, style } = params + const block = await getBlock(name, style) + + if (!block) { + return notFound() + } + + const Component = block.component + + return ( +
+ +
+ ) +} diff --git a/apps/www/app/layout.tsx b/apps/www/app/layout.tsx index 1044f9e0c45..c3f046e9656 100644 --- a/apps/www/app/layout.tsx +++ b/apps/www/app/layout.tsx @@ -6,8 +6,6 @@ import { fontSans } from "@/lib/fonts" import { cn } from "@/lib/utils" import { Analytics } from "@/components/analytics" import { ThemeProvider } from "@/components/providers" -import { SiteFooter } from "@/components/site-footer" -import { SiteHeader } from "@/components/site-header" import { TailwindIndicator } from "@/components/tailwind-indicator" import { ThemeSwitcher } from "@/components/theme-switcher" import { Toaster as DefaultToaster } from "@/registry/default/ui/toaster" @@ -85,7 +83,7 @@ export default function RootLayout({ children }: RootLayoutProps) {
- -
{children}
- + {children}
diff --git a/apps/www/components/announcement.tsx b/apps/www/components/announcement.tsx index bade4851965..e3a1f30baaf 100644 --- a/apps/www/components/announcement.tsx +++ b/apps/www/components/announcement.tsx @@ -10,10 +10,8 @@ export function Announcement() { className="inline-flex items-center rounded-lg bg-muted px-3 py-1 text-sm font-medium" > 🎉 {" "} - New components and more. - - New components, breadcrumb and input otp. - + Introducing Blocks + Introducing Blocks ) diff --git a/apps/www/components/block-copy-code-button.tsx b/apps/www/components/block-copy-code-button.tsx new file mode 100644 index 00000000000..92830e72838 --- /dev/null +++ b/apps/www/components/block-copy-code-button.tsx @@ -0,0 +1,54 @@ +"use client" + +import * as React from "react" +import { CheckIcon, ClipboardIcon } from "@radix-ui/react-icons" + +import { trackEvent } from "@/lib/events" +import { Button } from "@/registry/new-york/ui/button" +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/registry/new-york/ui/tooltip" + +export function BlockCopyCodeButton({ + name, + code, +}: { + name: string + code: string +}) { + const [hasCopied, setHasCopied] = React.useState(false) + + React.useEffect(() => { + setTimeout(() => { + setHasCopied(false) + }, 2000) + }, [hasCopied]) + + return ( + + + + + Copy code + + ) +} diff --git a/apps/www/components/block-display.tsx b/apps/www/components/block-display.tsx new file mode 100644 index 00000000000..a617b407113 --- /dev/null +++ b/apps/www/components/block-display.tsx @@ -0,0 +1,24 @@ +import { getBlock } from "@/lib/blocks" +import { BlockPreview } from "@/components/block-preview" +import { styles } from "@/registry/styles" + +export async function BlockDisplay({ name }: { name: string }) { + const blocks = await Promise.all( + styles.map(async (style) => { + const block = await getBlock(name, style.name) + + // Cannot (and don't need to) pass component to the client. + delete block?.component + + return block + }) + ) + + if (!blocks?.length) { + return null + } + + return blocks.map((block) => ( + + )) +} diff --git a/apps/www/components/block-preview.tsx b/apps/www/components/block-preview.tsx new file mode 100644 index 00000000000..9925ba735a0 --- /dev/null +++ b/apps/www/components/block-preview.tsx @@ -0,0 +1,210 @@ +"use client" + +import * as React from "react" +import { + CircleHelp, + Info, + Monitor, + Phone, + Smartphone, + Tablet, +} from "lucide-react" +import { ImperativePanelHandle } from "react-resizable-panels" + +import { useConfig } from "@/hooks/use-config" +import { BlockCopyCodeButton } from "@/components/block-copy-code-button" +import { Icons } from "@/components/icons" +import { StyleSwitcher } from "@/components/style-switcher" +import { V0Button } from "@/components/v0-button" +import { Badge } from "@/registry/new-york/ui/badge" +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/registry/new-york/ui/popover" +import { + ResizableHandle, + ResizablePanel, + ResizablePanelGroup, +} from "@/registry/new-york/ui/resizable" +import { Separator } from "@/registry/new-york/ui/separator" +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from "@/registry/new-york/ui/tabs" +import { + ToggleGroup, + ToggleGroupItem, +} from "@/registry/new-york/ui/toggle-group" +import { Block } from "@/registry/schema" + +export function BlockPreview({ block }: { block: Block }) { + const [config] = useConfig() + const [isLoading, setIsLoading] = React.useState(true) + const ref = React.useRef(null) + + if (config.style !== block.style) { + return null + } + + return ( + +
+
+ + Preview + Code + +
+ +
+ + {block.name} + + + + + Block description + + + {block.description} + + +
+
+
+ {block.code && ( +
+
+ { + if (ref.current) { + ref.current.resize(parseInt(value)) + } + }} + > + + + + + + + + + + +
+ + + + + + Block description + + +

+ What is the difference between the New York and Default style? +

+

+ A style comes with its own set of components, animations, + icons and more. +

+

+ The Default style has + larger inputs, uses lucide-react for icons and + tailwindcss-animate for animations. +

+

+ The New York style ships + with smaller buttons and inputs. It also uses shadows on cards + and buttons. +

+
+
+ + + +
+ )} +
+ + + + {isLoading ? ( +
+ + Loading... +
+ ) : null} +