diff --git a/apps/v4/components/component-preview-tabs.tsx b/apps/v4/components/component-preview-tabs.tsx
index e38e7a0f4b..04fdcda983 100644
--- a/apps/v4/components/component-preview-tabs.tsx
+++ b/apps/v4/components/component-preview-tabs.tsx
@@ -9,12 +9,14 @@ export function ComponentPreviewTabs({
className,
align = "center",
hideCode = false,
+ chromeLessOnMobile = false,
component,
source,
...props
}: React.ComponentProps<"div"> & {
align?: "center" | "start" | "end"
hideCode?: boolean
+ chromeLessOnMobile?: boolean
component: React.ReactNode
source: React.ReactNode
}) {
@@ -51,7 +53,8 @@ export function ComponentPreviewTabs({
{component}
diff --git a/apps/v4/components/component-preview.tsx b/apps/v4/components/component-preview.tsx
index 1318bcd1be..f242cde03b 100644
--- a/apps/v4/components/component-preview.tsx
+++ b/apps/v4/components/component-preview.tsx
@@ -10,6 +10,7 @@ export function ComponentPreview({
className,
align = "center",
hideCode = false,
+ chromeLessOnMobile = false,
...props
}: React.ComponentProps<"div"> & {
name: string
@@ -17,12 +18,13 @@ export function ComponentPreview({
description?: string
hideCode?: boolean
type?: "block" | "component" | "example"
+ chromeLessOnMobile?: boolean
}) {
const Component = Index[name]?.component
if (!Component) {
return (
-
+
Component{" "}
{name}
@@ -63,6 +65,7 @@ export function ComponentPreview({
hideCode={hideCode}
component={ }
source={ }
+ chromeLessOnMobile={chromeLessOnMobile}
{...props}
/>
)
diff --git a/apps/v4/components/component-source.tsx b/apps/v4/components/component-source.tsx
index 3aefe35f48..19bd09775c 100644
--- a/apps/v4/components/component-source.tsx
+++ b/apps/v4/components/component-source.tsx
@@ -43,6 +43,14 @@ export async function ComponentSource({
return null
}
+ // Fix imports.
+ // Replace @/registry/new-york-v4/ with @/components/.
+ code = code.replaceAll("@/registry/new-york-v4/", "@/components/")
+
+ // Replace export default with export.
+ code = code.replaceAll("export default", "export")
+ code = code.replaceAll("/* eslint-disable react/no-children-prop */\n", "")
+
const lang = language ?? title?.split(".").pop() ?? "tsx"
const highlightedCode = await highlightCode(code, lang)
diff --git a/apps/v4/components/docs-sidebar.tsx b/apps/v4/components/docs-sidebar.tsx
index 313a225d67..08166a2e2f 100644
--- a/apps/v4/components/docs-sidebar.tsx
+++ b/apps/v4/components/docs-sidebar.tsx
@@ -31,6 +31,10 @@ const TOP_LEVEL_SECTIONS = [
name: "MCP Server",
href: "/docs/mcp",
},
+ {
+ name: "Forms",
+ href: "/docs/forms",
+ },
{
name: "Changelog",
href: "/docs/changelog",
diff --git a/apps/v4/components/mobile-nav.tsx b/apps/v4/components/mobile-nav.tsx
index c400a5c89e..5722d1bf82 100644
--- a/apps/v4/components/mobile-nav.tsx
+++ b/apps/v4/components/mobile-nav.tsx
@@ -29,6 +29,10 @@ const TOP_LEVEL_SECTIONS = [
name: "MCP Server",
href: "/docs/mcp",
},
+ {
+ name: "Forms",
+ href: "/docs/forms",
+ },
{
name: "Changelog",
href: "/docs/changelog",
diff --git a/apps/v4/content/docs/components/checkbox.mdx b/apps/v4/content/docs/components/checkbox.mdx
index 3b2ef2e9c4..0f2c24063d 100644
--- a/apps/v4/content/docs/components/checkbox.mdx
+++ b/apps/v4/content/docs/components/checkbox.mdx
@@ -56,9 +56,3 @@ import { Checkbox } from "@/components/ui/checkbox"
```tsx
```
-
-## Examples
-
-### Form
-
-
diff --git a/apps/v4/content/docs/components/combobox.mdx b/apps/v4/content/docs/components/combobox.mdx
index 6c76d585f3..a8788f7f24 100644
--- a/apps/v4/content/docs/components/combobox.mdx
+++ b/apps/v4/content/docs/components/combobox.mdx
@@ -143,7 +143,3 @@ export function ExampleCombobox() {
You can create a responsive combobox by using the ` ` on desktop and the ` ` components on mobile.
-
-### Form
-
-
diff --git a/apps/v4/content/docs/components/date-picker.mdx b/apps/v4/content/docs/components/date-picker.mdx
index f94ca0a014..24ca640ef0 100644
--- a/apps/v4/content/docs/components/date-picker.mdx
+++ b/apps/v4/content/docs/components/date-picker.mdx
@@ -94,7 +94,3 @@ This component uses the `chrono-node` library to parse natural language dates.
title="Natural Language Picker"
description="A calendar with natural language picker."
/>
-
-### Form
-
-
diff --git a/apps/v4/content/docs/components/field.mdx b/apps/v4/content/docs/components/field.mdx
index ef65561110..72ea66badc 100644
--- a/apps/v4/content/docs/components/field.mdx
+++ b/apps/v4/content/docs/components/field.mdx
@@ -98,6 +98,10 @@ The `Field` family is designed for composing accessible forms. A typical field i
- `FieldContent` is a flex column that groups label and description. Not required if you have no description.
- Wrap related fields with `FieldGroup`, and use `FieldSet` with `FieldLegend` for semantic grouping.
+## Form
+
+See the [Form](/docs/forms) documentation for building forms with the `Field` component and [React Hook Form](/docs/forms/react-hook-form) or [Tanstack Form](/docs/forms/tanstack-form).
+
## Examples
### Input
diff --git a/apps/v4/content/docs/components/form.mdx b/apps/v4/content/docs/components/form.mdx
index 99a39e3b28..5992318212 100644
--- a/apps/v4/content/docs/components/form.mdx
+++ b/apps/v4/content/docs/components/form.mdx
@@ -1,10 +1,18 @@
---
-title: React Hook Form
+title: Form
description: Building forms with React Hook Form and Zod.
links:
doc: https://react-hook-form.com
---
+import { InfoIcon } from "lucide-react"
+
+ } title="We are not actively developing this component anymore.">
+
+The Form component is an abstraction over the `react-hook-form` library. Going forward, we recommend using the [` `](/docs/components/field) component to build forms. See the [Form](/docs/form) documentation for more information.
+
+
+
Forms are tricky. They are one of the most common things you'll build in a web application, but also one of the most complex.
Well-designed HTML forms are:
@@ -119,8 +127,6 @@ npm install @radix-ui/react-label @radix-ui/react-slot react-hook-form @hookform
## Usage
-
-
### Create a form schema
Define the shape of your form using a Zod schema. You can read more about using Zod in the [Zod documentation](https://zod.dev).
@@ -233,23 +239,3 @@ export function ProfileForm() {
### Done
That's it. You now have a fully accessible form that is type-safe with client-side validation.
-
-
-
-
-
-## Examples
-
-See the following links for more examples on how to use the `` component with other components:
-
-- [Checkbox](/docs/components/checkbox#form)
-- [Date Picker](/docs/components/date-picker#form)
-- [Input](/docs/components/input#form)
-- [Radio Group](/docs/components/radio-group#form)
-- [Select](/docs/components/select#form)
-- [Switch](/docs/components/switch#form)
-- [Textarea](/docs/components/textarea#form)
-- [Combobox](/docs/components/combobox#form)
diff --git a/apps/v4/content/docs/components/input.mdx b/apps/v4/content/docs/components/input.mdx
index e9db832740..c4638ca6b1 100644
--- a/apps/v4/content/docs/components/input.mdx
+++ b/apps/v4/content/docs/components/input.mdx
@@ -94,10 +94,6 @@ import { Input } from "@/components/ui/input"
description="An input component with a button."
/>
-### Form
-
-
-
## Changelog
### 2025-09-18 Remove `flex` class
diff --git a/apps/v4/content/docs/components/radio-group.mdx b/apps/v4/content/docs/components/radio-group.mdx
index 934619fcaf..0b571c8354 100644
--- a/apps/v4/content/docs/components/radio-group.mdx
+++ b/apps/v4/content/docs/components/radio-group.mdx
@@ -69,9 +69,3 @@ import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"
```
-
-## Examples
-
-### Form
-
-
diff --git a/apps/v4/content/docs/components/select.mdx b/apps/v4/content/docs/components/select.mdx
index 0c037852da..96e6f3bc7e 100644
--- a/apps/v4/content/docs/components/select.mdx
+++ b/apps/v4/content/docs/components/select.mdx
@@ -84,7 +84,3 @@ import {
name="select-scrollable"
description="A select component with a scrollable list of options."
/>
-
-### Form
-
-
diff --git a/apps/v4/content/docs/components/switch.mdx b/apps/v4/content/docs/components/switch.mdx
index 317fc81768..2c7bae254c 100644
--- a/apps/v4/content/docs/components/switch.mdx
+++ b/apps/v4/content/docs/components/switch.mdx
@@ -56,9 +56,3 @@ import { Switch } from "@/components/ui/switch"
```tsx
```
-
-## Examples
-
-### Form
-
-
diff --git a/apps/v4/content/docs/components/textarea.mdx b/apps/v4/content/docs/components/textarea.mdx
index ca869b2734..c8175f73e9 100644
--- a/apps/v4/content/docs/components/textarea.mdx
+++ b/apps/v4/content/docs/components/textarea.mdx
@@ -79,7 +79,3 @@ import { Textarea } from "@/components/ui/textarea"
name="textarea-with-button"
description="A textarea with a button"
/>
-
-### Form
-
-
diff --git a/apps/v4/content/docs/forms/index.mdx b/apps/v4/content/docs/forms/index.mdx
new file mode 100644
index 0000000000..abf56ae300
--- /dev/null
+++ b/apps/v4/content/docs/forms/index.mdx
@@ -0,0 +1,45 @@
+---
+title: Forms
+description: Build forms with React and shadcn/ui.
+---
+
+import { ClipboardListIcon, InfoIcon } from "lucide-react"
+
+## Pick Your Framework
+
+Start by selecting your framework. Then follow the instructions to learn how to build forms with shadcn/ui and the form library of your choice.
+
+
+
+
+ React Hook Form
+
+
+
+
+
+ TanStack Form
+
+
+
+ React
+
+
+ useActionState
+ (Coming Soon)
+
+
+
diff --git a/apps/v4/content/docs/forms/meta.json b/apps/v4/content/docs/forms/meta.json
new file mode 100644
index 0000000000..a38239c8c5
--- /dev/null
+++ b/apps/v4/content/docs/forms/meta.json
@@ -0,0 +1,3 @@
+{
+ "pages": ["react-hook-form", "tanstack-form"]
+}
diff --git a/apps/v4/content/docs/forms/next.mdx b/apps/v4/content/docs/forms/next.mdx
new file mode 100644
index 0000000000..554114e505
--- /dev/null
+++ b/apps/v4/content/docs/forms/next.mdx
@@ -0,0 +1,397 @@
+---
+title: Next.js
+description: Build forms in React using useActionState and Server Actions.
+---
+
+import { InfoIcon } from "lucide-react"
+
+In this guide, we will take a look at building forms with Next.js using `useActionState` and Server Actions. We'll cover building forms, validation, pending states, accessibility, and more.
+
+## Demo
+
+We are going to build the following form with a simple text input and a textarea. On submit, we'll use a server action to validate the form data and update the form state.
+
+
+
+
}>
+ **Note:** The examples on this page intentionally disable browser validation
+ to show how schema validation and form errors work in server actions.
+
+
+## Approach
+
+This form leverages Next.js and React's built-in capabilities for form handling. We'll build our form using the `
` component, which gives you **complete flexibility over the markup and styling**.
+
+- Uses Next.js `
` component for navigation and progressive enhancement.
+- `
` components for building accessible forms.
+- `useActionState` for managing form state and errors.
+- Handles loading states with pending prop.
+- Server Actions for handling form submissions.
+- Server-side validation using Zod.
+
+## Anatomy
+
+Here's a basic example of a form using the `
` component.
+
+```tsx showLineNumbers
+
+```
+
+## Usage
+
+### Create a form schema
+
+We'll start by defining the shape of our form using a Zod schema in a `schema.ts` file.
+
+
}>
+ **Note:** This example uses `zod v3` for schema validation, but you can
+ replace it with any other schema validation library. Make sure your schema
+ library conforms to the Standard Schema specification.
+
+
+```tsx showLineNumbers title="schema.ts"
+import { z } from "zod"
+
+export const formSchema = z.object({
+ title: z
+ .string()
+ .min(5, "Bug title must be at least 5 characters.")
+ .max(32, "Bug title must be at most 32 characters."),
+ description: z
+ .string()
+ .min(20, "Description must be at least 20 characters.")
+ .max(100, "Description must be at most 100 characters."),
+})
+```
+
+### Define the form state type
+
+Next, we'll create a type for our form state that includes values, errors, and success status. This will be used to type the form state on the client and server.
+
+```tsx showLineNumbers title="schema.ts"
+import { z } from "zod"
+
+export type FormState = {
+ values?: z.infer
+ errors: null | Partial, string[]>>
+ success: boolean
+}
+```
+
+**Important:** We define the schema and the `FormState` type in a separate file so we can import them into both the client and server components.
+
+### Create the Server Action
+
+A server action is a function that runs on the server and can be called from the client. We'll use it to validate the form data and update the form state.
+
+
+
+**Note:** We're returning `values` for error cases. This is because we want to keep the user submitted values in the form state. For success cases, we're returning empty values to reset the form.
+
+### Build the form
+
+We can now build the form using the ` ` component. We'll use the `useActionState` hook to manage the form state, server action, and pending state.
+
+
+
+### Done
+
+That's it. You now have a fully accessible form with client and server-side validation.
+
+When you submit the form, the `formAction` function will be called on the server. The server action will validate the form data and update the form state.
+
+If the form data is invalid, the server action will return the errors to the client. If the form data is valid, the server action will return the success status and update the form state.
+
+## Pending States
+
+Use the `pending` prop from `useActionState` to show loading indicators and disable form inputs.
+
+```tsx showLineNumbers {11,26-34}
+"use client"
+
+import * as React from "react"
+import Form from "next/form"
+
+import { Spinner } from "@/components/ui/spinner"
+
+import { bugReportFormAction } from "./actions"
+
+export function BugReportForm() {
+ const [formState, formAction, pending] = React.useActionState(
+ bugReportFormAction,
+ {
+ errors: null,
+ success: false,
+ }
+ )
+
+ return (
+
+ )
+}
+```
+
+## Disabled States
+
+### Submit Button
+
+To disable the submit button, use the `pending` prop on the button's `disabled` prop.
+
+```tsx showLineNumbers
+
+ {pending && } Submit
+
+```
+
+### Field
+
+To apply a disabled state and styling to a ` ` component, use the `data-disabled` prop on the ` ` component.
+
+```tsx showLineNumbers
+
+ Name
+
+
+```
+
+## Validation
+
+### Server-side Validation
+
+Use `safeParse()` on your schema in your server action to validate the form data.
+
+```tsx showLineNumbers title="actions.ts" {12-20}
+"use server"
+
+export async function bugReportFormAction(
+ _prevState: FormState,
+ formData: FormData
+) {
+ const values = {
+ title: formData.get("title") as string,
+ description: formData.get("description") as string,
+ }
+
+ const result = formSchema.safeParse(values)
+
+ if (!result.success) {
+ return {
+ values,
+ success: false,
+ errors: result.error.flatten().fieldErrors,
+ }
+ }
+
+ return {
+ errors: null,
+ success: true,
+ }
+}
+```
+
+### Business Logic Validation
+
+You can add additional custom validation logic in your server action.
+
+Make sure to return the values on validation errors. This is to ensure that the form state maintains the user's input.
+
+```tsx showLineNumbers title="actions.ts" {22-35}
+"use server"
+
+export async function bugReportFormAction(
+ _prevState: FormState,
+ formData: FormData
+) {
+ const values = {
+ title: formData.get("title") as string,
+ description: formData.get("description") as string,
+ }
+
+ const result = formSchema.safeParse(values)
+
+ if (!result.success) {
+ return {
+ values,
+ success: false,
+ errors: result.error.flatten().fieldErrors,
+ }
+ }
+
+ // Check if email already exists in database.
+ const existingUser = await db.user.findUnique({
+ where: { email: result.data.email },
+ })
+
+ if (existingUser) {
+ return {
+ values,
+ success: false,
+ errors: {
+ email: ["This email is already registered"],
+ },
+ }
+ }
+
+ return {
+ errors: null,
+ success: true,
+ }
+}
+```
+
+## Displaying Errors
+
+Display errors next to the field using ` `. Make sure to add the `data-invalid` prop to the ` ` component and `aria-invalid` prop to the input.
+
+```tsx showLineNumbers
+
+ Email
+
+ {formState.errors?.email && (
+ {formState.errors.email[0]}
+ )}
+
+```
+
+## Resetting the Form
+
+When you submit a form with a server action, React will automatically reset the form state to the initial values.
+
+### Reset on Success
+
+To reset the form on success, you can omit the `values` from the server action and React will automatically reset the form state to the initial values. This is standard React behavior.
+
+```tsx showLineNumbers title="actions.ts" {22-26}
+export async function demoFormAction(
+ _prevState: FormState,
+ formData: FormData
+) {
+ const values = {
+ title: formData.get("title") as string,
+ description: formData.get("description") as string,
+ }
+
+ // Validation.
+ if (!result.success) {
+ return {
+ values,
+ success: false,
+ errors: result.error.flatten().fieldErrors,
+ }
+ }
+
+ // Business logic.
+ callYourDatabaseOrAPI(values)
+
+ // Omit the values on success to reset the form state.
+ return {
+ errors: null,
+ success: true,
+ }
+}
+```
+
+### Preserve on Validation Errors
+
+To prevent the form from being reset on failure, you can return the values in the server action. This is to ensure that the form state maintains the user's input.
+
+```tsx showLineNumbers title="actions.ts" {12-17}
+export async function demoFormAction(
+ _prevState: FormState,
+ formData: FormData
+) {
+ const values = {
+ title: formData.get("title") as string,
+ description: formData.get("description") as string,
+ }
+
+ // Validation.
+ if (!result.success) {
+ return {
+ // Return the values on validation errors.
+ values,
+ success: false,
+ errors: result.error.flatten().fieldErrors,
+ }
+ }
+}
+```
+
+## Complex Forms
+
+Here is an example of a more complex form with multiple fields and validation.
+
+
+
+### Schema
+
+
+
+### Form
+
+
+
+### Server Action
+
+
diff --git a/apps/v4/content/docs/forms/react-hook-form.mdx b/apps/v4/content/docs/forms/react-hook-form.mdx
new file mode 100644
index 0000000000..76d07ab3ee
--- /dev/null
+++ b/apps/v4/content/docs/forms/react-hook-form.mdx
@@ -0,0 +1,629 @@
+---
+title: React Hook Form
+description: Build forms in React using React Hook Form and Zod.
+links:
+ doc: https://react-hook-form.com
+---
+
+import { InfoIcon } from "lucide-react"
+
+In this guide, we will take a look at building forms with React Hook Form. We'll cover building forms with the ` ` component, adding schema validation using Zod, error handling, accessibility, and more.
+
+## Demo
+
+We are going to build the following form. It has a simple text input and a textarea. On submit, we'll validate the form data and display any errors.
+
+ }>
+ **Note:** For the purpose of this demo, we have intentionally disabled browser
+ validation to show how schema validation and form errors work in React Hook
+ Form. It is recommended to add basic browser validation in your production
+ code.
+
+
+
+
+## Approach
+
+This form leverages React Hook Form for performant, flexible form handling. We'll build our form using the ` ` component, which gives you **complete flexibility over the markup and styling**.
+
+- Uses React Hook Form's `useForm` hook for form state management.
+- ` ` component for controlled inputs.
+- ` ` components for building accessible forms.
+- Client-side validation using Zod with `zodResolver`.
+
+## Anatomy
+
+Here's a basic example of a form using the ` ` component from React Hook Form and the ` ` component.
+
+```tsx showLineNumbers {5-18}
+ (
+
+ Bug Title
+
+
+ Provide a concise title for your bug report.
+
+ {fieldState.invalid && }
+
+ )}
+/>
+```
+
+## Form
+
+### Create a form schema
+
+We'll start by defining the shape of our form using a Zod schema
+
+ }>
+ **Note:** This example uses `zod v3` for schema validation, but you can
+ replace it with any other Standard Schema validation library supported by
+ React Hook Form.
+
+
+```tsx showLineNumbers title="form.tsx"
+import * as z from "zod"
+
+const formSchema = z.object({
+ title: z
+ .string()
+ .min(5, "Bug title must be at least 5 characters.")
+ .max(32, "Bug title must be at most 32 characters."),
+ description: z
+ .string()
+ .min(20, "Description must be at least 20 characters.")
+ .max(100, "Description must be at most 100 characters."),
+})
+```
+
+### Setup the form
+
+Next, we'll use the `useForm` hook from React Hook Form to create our form instance. We'll also add the Zod resolver to validate the form data.
+
+```tsx showLineNumbers title="form.tsx" {17-23}
+import { zodResolver } from "@hookform/resolvers/zod"
+import { useForm } from "react-hook-form"
+import * as z from "zod"
+
+const formSchema = z.object({
+ title: z
+ .string()
+ .min(5, "Bug title must be at least 5 characters.")
+ .max(32, "Bug title must be at most 32 characters."),
+ description: z
+ .string()
+ .min(20, "Description must be at least 20 characters.")
+ .max(100, "Description must be at most 100 characters."),
+})
+
+export function BugReportForm() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ title: "",
+ description: "",
+ },
+ })
+
+ function onSubmit(data: z.infer) {
+ // Do something with the form values.
+ console.log(data)
+ }
+
+ return (
+
+ )
+}
+```
+
+### Build the form
+
+We can now build the form using the ` ` component from React Hook Form and the ` ` component.
+
+
+
+### Done
+
+That's it. You now have a fully accessible form with client-side validation.
+
+When you submit the form, the `onSubmit` function will be called with the validated form data. If the form data is invalid, React Hook Form will display the errors next to each field.
+
+## Validation
+
+### Client-side Validation
+
+React Hook Form validates your form data using the Zod schema. Define a schema and pass it to the `resolver` option of the `useForm` hook.
+
+```tsx showLineNumbers title="example-form.tsx" {5-8,12}
+import { zodResolver } from "@hookform/resolvers/zod"
+import { useForm } from "react-hook-form"
+import * as z from "zod"
+
+const formSchema = z.object({
+ title: z.string(),
+ description: z.string().optional(),
+})
+
+export function ExampleForm() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ title: "",
+ description: "",
+ },
+ })
+}
+```
+
+### Validation Modes
+
+React Hook Form supports different validation modes.
+
+```tsx showLineNumbers title="form.tsx" {3}
+const form = useForm>({
+ resolver: zodResolver(formSchema),
+ mode: "onChange",
+})
+```
+
+| Mode | Description |
+| ------------- | -------------------------------------------------------- |
+| `"onChange"` | Validation triggers on every change. |
+| `"onBlur"` | Validation triggers on blur. |
+| `"onSubmit"` | Validation triggers on submit (default). |
+| `"onTouched"` | Validation triggers on first blur, then on every change. |
+| `"all"` | Validation triggers on blur and change. |
+
+## Displaying Errors
+
+Display errors next to the field using ` `. For styling and accessibility:
+
+- Add the `data-invalid` prop to the ` ` component.
+- Add the `aria-invalid` prop to the form control such as ` `, ` `, ` `, etc.
+
+```tsx showLineNumbers title="form.tsx" {5,11,13}
+ (
+
+ Email
+
+ {fieldState.invalid && }
+
+ )}
+/>
+```
+
+## Working with Different Field Types
+
+### Input
+
+- For input fields, spread the `field` object onto the ` ` component.
+- To show errors, add the `aria-invalid` prop to the ` ` component and the `data-invalid` prop to the ` ` component.
+
+
+
+For simple text inputs, spread the `field` object onto the input.
+
+```tsx showLineNumbers title="form.tsx" {5,7,8}
+ (
+
+ Name
+
+ {fieldState.invalid && }
+
+ )}
+/>
+```
+
+### Textarea
+
+- For textarea fields, spread the `field` object onto the `` component.
+- To show errors, add the `aria-invalid` prop to the `` component and the `data-invalid` prop to the ` ` component.
+
+
+
+For textarea fields, spread the `field` object onto the textarea.
+
+```tsx showLineNumbers title="form.tsx" {5,10,18}
+ (
+
+ More about you
+
+
+ Tell us more about yourself. This will be used to help us personalize
+ your experience.
+
+ {fieldState.invalid && }
+
+ )}
+/>
+```
+
+### Select
+
+- For select components, use `field.value` and `field.onChange` on the ` ` component.
+- To show errors, add the `aria-invalid` prop to the ` ` component and the `data-invalid` prop to the ` ` component.
+
+
+
+```tsx showLineNumbers title="form.tsx" {5,13,22}
+ (
+
+
+
+ Spoken Language
+
+
+ For best results, select the language you speak.
+
+ {fieldState.invalid && }
+
+
+
+
+
+
+ Auto
+ English
+
+
+
+ )}
+/>
+```
+
+### Checkbox
+
+- For checkbox arrays, use `field.value` and `field.onChange` with array manipulation.
+- To show errors, add the `aria-invalid` prop to the ` ` component and the `data-invalid` prop to the ` ` component.
+- Remember to add `data-slot="checkbox-group"` to the ` ` component for proper styling and spacing.
+
+
+
+```tsx showLineNumbers title="form.tsx" {10,15,20-22,38}
+ (
+
+ Tasks
+
+ Get notified when tasks you've created have updates.
+
+
+ {tasks.map((task) => (
+
+ {
+ const newValue = checked
+ ? [...field.value, task.id]
+ : field.value.filter((value) => value !== task.id)
+ field.onChange(newValue)
+ }}
+ />
+
+ {task.label}
+
+
+ ))}
+
+ {fieldState.invalid && }
+
+ )}
+/>
+```
+
+### Radio Group
+
+- For radio groups, use `field.value` and `field.onChange` on the ` ` component.
+- To show errors, add the `aria-invalid` prop to the ` ` component and the `data-invalid` prop to the ` ` component.
+
+
+
+```tsx showLineNumbers title="form.tsx" {12-13,17,25,31}
+ (
+
+ Plan
+
+ You can upgrade or downgrade your plan at any time.
+
+
+ {plans.map((plan) => (
+
+
+
+ {plan.title}
+ {plan.description}
+
+
+
+
+ ))}
+
+ {fieldState.invalid && }
+
+ )}
+/>
+```
+
+### Switch
+
+- For switches, use `field.value` and `field.onChange` on the ` ` component.
+- To show errors, add the `aria-invalid` prop to the ` ` component and the `data-invalid` prop to the ` ` component.
+
+
+
+```tsx showLineNumbers title="form.tsx" {5,13,18-19}
+ (
+
+
+
+ Multi-factor authentication
+
+
+ Enable multi-factor authentication to secure your account.
+
+ {fieldState.invalid && }
+
+
+
+ )}
+/>
+```
+
+### Complex Forms
+
+Here is an example of a more complex form with multiple fields and validation.
+
+
+
+## Resetting the Form
+
+Use `form.reset()` to reset the form to its default values.
+
+```tsx showLineNumbers
+ form.reset()}>
+ Reset
+
+```
+
+## Array Fields
+
+React Hook Form provides a `useFieldArray` hook for managing dynamic array fields. This is useful when you need to add or remove fields dynamically.
+
+
+
+### Using useFieldArray
+
+Use the `useFieldArray` hook to manage array fields. It provides `fields`, `append`, and `remove` methods.
+
+```tsx showLineNumbers title="form.tsx" {8-11}
+import { useFieldArray, useForm } from "react-hook-form"
+
+export function ExampleForm() {
+ const form = useForm({
+ // ... form config
+ })
+
+ const { fields, append, remove } = useFieldArray({
+ control: form.control,
+ name: "emails",
+ })
+}
+```
+
+### Array Field Structure
+
+Wrap your array fields in a ` ` with a ` ` and ` `.
+
+```tsx showLineNumbers title="form.tsx"
+
+ Email Addresses
+
+ Add up to 5 email addresses where we can contact you.
+
+ {/* Array items go here */}
+
+```
+
+### Controller Pattern for Array Items
+
+Map over the `fields` array and use ` ` for each item. **Make sure to use `field.id` as the key**.
+
+```tsx showLineNumbers title="form.tsx"
+{
+ fields.map((field, index) => (
+ (
+
+
+
+
+ {/* Remove button */}
+
+ {fieldState.invalid && }
+
+
+ )}
+ />
+ ))
+}
+```
+
+### Adding Items
+
+Use the `append` method to add new items to the array.
+
+```tsx showLineNumbers title="form.tsx"
+ append({ address: "" })}
+ disabled={fields.length >= 5}
+>
+ Add Email Address
+
+```
+
+### Removing Items
+
+Use the `remove` method to remove items from the array. Add the remove button conditionally.
+
+```tsx showLineNumbers title="form.tsx"
+{
+ fields.length > 1 && (
+
+ remove(index)}
+ aria-label={`Remove email ${index + 1}`}
+ >
+
+
+
+ )
+}
+```
+
+### Array Validation
+
+Use Zod's `array` method to validate array fields.
+
+```tsx showLineNumbers title="form.tsx"
+const formSchema = z.object({
+ emails: z
+ .array(
+ z.object({
+ address: z.string().email("Enter a valid email address."),
+ })
+ )
+ .min(1, "Add at least one email address.")
+ .max(5, "You can add up to 5 email addresses."),
+})
+```
diff --git a/apps/v4/content/docs/forms/tanstack-form.mdx b/apps/v4/content/docs/forms/tanstack-form.mdx
new file mode 100644
index 0000000000..acd10b3410
--- /dev/null
+++ b/apps/v4/content/docs/forms/tanstack-form.mdx
@@ -0,0 +1,698 @@
+---
+title: TanStack Form
+description: Build forms in React using TanStack Form and Zod.
+links:
+ doc: https://tanstack.com/form
+---
+
+import { InfoIcon } from "lucide-react"
+
+This guide explores how to build forms using TanStack Form. You'll learn to create forms with the ` ` component, implement schema validation with Zod, handle errors, and ensure accessibility.
+
+## Demo
+
+We'll start by building the following form. It has a simple text input and a textarea. On submit, we'll validate the form data and display any errors.
+
+ }>
+ **Note:** For the purpose of this demo, we have intentionally disabled browser
+ validation to show how schema validation and form errors work in TanStack
+ Form. It is recommended to add basic browser validation in your production
+ code.
+
+
+
+
+## Approach
+
+This form leverages TanStack Form for powerful, headless form handling. We'll build our form using the ` ` component, which gives you **complete flexibility over the markup and styling**.
+
+- Uses TanStack Form's `useForm` hook for form state management.
+- `form.Field` component with render prop pattern for controlled inputs.
+- ` ` components for building accessible forms.
+- Client-side validation using Zod.
+- Real-time validation feedback.
+
+## Anatomy
+
+Here's a basic example of a form using TanStack Form with the ` ` component.
+
+```tsx showLineNumbers {15-31}
+
+```
+
+## Form
+
+### Create a schema
+
+We'll start by defining the shape of our form using a Zod schema.
+
+ }>
+ **Note:** This example uses `zod v3` for schema validation. TanStack Form
+ integrates seamlessly with Zod and other Standard Schema validation libraries
+ through its validators API.
+
+
+```tsx showLineNumbers title="form.tsx"
+import * as z from "zod"
+
+const formSchema = z.object({
+ title: z
+ .string()
+ .min(5, "Bug title must be at least 5 characters.")
+ .max(32, "Bug title must be at most 32 characters."),
+ description: z
+ .string()
+ .min(20, "Description must be at least 20 characters.")
+ .max(100, "Description must be at most 100 characters."),
+})
+```
+
+### Setup the form
+
+Use the `useForm` hook from TanStack Form to create your form instance with Zod validation.
+
+```tsx showLineNumbers title="form.tsx" {10-21}
+import { useForm } from "@tanstack/react-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+const formSchema = z.object({
+ // ...
+})
+
+export function BugReportForm() {
+ const form = useForm({
+ defaultValues: {
+ title: "",
+ description: "",
+ },
+ validators: {
+ onSubmit: formSchema,
+ },
+ onSubmit: async ({ value }) => {
+ toast.success("Form submitted successfully")
+ },
+ })
+
+ return (
+
+ )
+}
+```
+
+We are using `onSubmit` to validate the form data here. TanStack Form supports other validation modes, which you can read about in the [documentation](https://tanstack.com/form/latest/docs/framework/react/guides/dynamic-validation).
+
+### Build the form
+
+We can now build the form using the `form.Field` component from TanStack Form and the ` ` component.
+
+
+
+### Done
+
+That's it. You now have a fully accessible form with client-side validation.
+
+When you submit the form, the `onSubmit` function will be called with the validated form data. If the form data is invalid, TanStack Form will display the errors next to each field.
+
+## Validation
+
+### Client-side Validation
+
+TanStack Form validates your form data using the Zod schema. Validation happens in real-time as the user types.
+
+```tsx showLineNumbers title="form.tsx" {13-15}
+import { useForm } from "@tanstack/react-form"
+
+const formSchema = z.object({
+ // ...
+})
+
+export function BugReportForm() {
+ const form = useForm({
+ defaultValues: {
+ title: "",
+ description: "",
+ },
+ validators: {
+ onSubmit: formSchema,
+ },
+ onSubmit: async ({ value }) => {
+ console.log(value)
+ },
+ })
+
+ return
+}
+```
+
+### Validation Modes
+
+TanStack Form supports different validation strategies through the `validators` option:
+
+| Mode | Description |
+| ------------ | ------------------------------------ |
+| `"onChange"` | Validation triggers on every change. |
+| `"onBlur"` | Validation triggers on blur. |
+| `"onSubmit"` | Validation triggers on submit. |
+
+```tsx showLineNumbers title="form.tsx" {6-9}
+const form = useForm({
+ defaultValues: {
+ title: "",
+ description: "",
+ },
+ validators: {
+ onSubmit: formSchema,
+ onChange: formSchema,
+ onBlur: formSchema,
+ },
+})
+```
+
+## Displaying Errors
+
+Display errors next to the field using ` `. For styling and accessibility:
+
+- Add the `data-invalid` prop to the ` ` component.
+- Add the `aria-invalid` prop to the form control such as ` `, ` `, ` `, etc.
+
+```tsx showLineNumbers title="form.tsx" {4,18}
+ {
+ const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid
+
+ return (
+
+ Email
+ field.handleChange(e.target.value)}
+ type="email"
+ aria-invalid={isInvalid}
+ />
+ {isInvalid && }
+
+ )
+ }}
+/>
+```
+
+## Working with Different Field Types
+
+### Input
+
+- For input fields, use `field.state.value` and `field.handleChange` on the ` ` component.
+- To show errors, add the `aria-invalid` prop to the ` ` component and the `data-invalid` prop to the ` ` component.
+
+
+
+```tsx showLineNumbers title="form.tsx" {6,11-14,22}
+ {
+ const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Username
+ field.handleChange(e.target.value)}
+ aria-invalid={isInvalid}
+ placeholder="shadcn"
+ autoComplete="username"
+ />
+
+ This is your public display name. Must be between 3 and 10 characters.
+ Must only contain letters, numbers, and underscores.
+
+ {isInvalid && }
+
+ )
+ }}
+/>
+```
+
+### Textarea
+
+- For textarea fields, use `field.state.value` and `field.handleChange` on the `` component.
+- To show errors, add the `aria-invalid` prop to the `` component and the `data-invalid` prop to the ` ` component.
+
+
+
+```tsx showLineNumbers title="form.tsx" {6,13-16,24}
+ {
+ const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+
+ More about you
+
+
+ )
+ }}
+/>
+```
+
+### Select
+
+- For select components, use `field.state.value` and `field.handleChange` on the ` ` component.
+- To show errors, add the `aria-invalid` prop to the ` ` component and the `data-invalid` prop to the ` ` component.
+
+
+
+```tsx showLineNumbers title="form.tsx" {6,18-19,23}
+ {
+ const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+
+
+ Spoken Language
+
+
+ For best results, select the language you speak.
+
+ {isInvalid && }
+
+
+
+
+
+
+ Auto
+ English
+
+
+
+ )
+ }}
+/>
+```
+
+### Checkbox
+
+- For checkbox, use `field.state.value` and `field.handleChange` on the ` ` component.
+- To show errors, add the `aria-invalid` prop to the ` ` component and the `data-invalid` prop to the ` ` component.
+- For checkbox arrays, use `mode="array"` on the ` ` component and TanStack Form's array helpers.
+- Remember to add `data-slot="checkbox-group"` to the ` ` component for proper styling and spacing.
+
+
+
+```tsx showLineNumbers title="form.tsx" {12,17,22-24,44}
+ {
+ const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Tasks
+
+ Get notified when tasks you've created have updates.
+
+
+ {tasks.map((task) => (
+
+ {
+ if (checked) {
+ field.pushValue(task.id)
+ } else {
+ const index = field.state.value.indexOf(task.id)
+ if (index > -1) {
+ field.removeValue(index)
+ }
+ }
+ }}
+ />
+
+ {task.label}
+
+
+ ))}
+
+ {isInvalid && }
+
+ )
+ }}
+/>
+```
+
+### Radio Group
+
+- For radio groups, use `field.state.value` and `field.handleChange` on the ` ` component.
+- To show errors, add the `aria-invalid` prop to the ` ` component and the `data-invalid` prop to the ` ` component.
+
+
+
+```tsx showLineNumbers title="form.tsx" {21,29,35}
+ {
+ const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Plan
+
+ You can upgrade or downgrade your plan at any time.
+
+
+ {plans.map((plan) => (
+
+
+
+ {plan.title}
+ {plan.description}
+
+
+
+
+ ))}
+
+ {isInvalid && }
+
+ )
+ }}
+/>
+```
+
+### Switch
+
+- For switches, use `field.state.value` and `field.handleChange` on the ` ` component.
+- To show errors, add the `aria-invalid` prop to the ` ` component and the `data-invalid` prop to the ` ` component.
+
+
+
+```tsx showLineNumbers title="form.tsx" {6,14,19-21}
+ {
+ const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+
+
+ Multi-factor authentication
+
+
+ Enable multi-factor authentication to secure your account.
+
+ {isInvalid && }
+
+
+
+ )
+ }}
+/>
+```
+
+### Complex Forms
+
+Here is an example of a more complex form with multiple fields and validation.
+
+
+
+## Resetting the Form
+
+Use `form.reset()` to reset the form to its default values.
+
+```tsx showLineNumbers
+ form.reset()}>
+ Reset
+
+```
+
+## Array Fields
+
+TanStack Form provides powerful array field management with `mode="array"`. This allows you to dynamically add, remove, and update array items with full validation support.
+
+
+
+This example demonstrates managing multiple email addresses with array fields. Users can add up to 5 email addresses, remove individual addresses, and each address is validated independently.
+
+### Array Field Structure
+
+Use `mode="array"` on the parent field to enable array field management.
+
+```tsx showLineNumbers title="form.tsx" {3,12-14}
+ {
+ return (
+
+ Email Addresses
+
+ Add up to 5 email addresses where we can contact you.
+
+
+ {field.state.value.map((_, index) => (
+ // Nested field for each array item
+ ))}
+
+
+ )
+ }}
+/>
+```
+
+### Nested Fields
+
+Access individual array items using bracket notation: `fieldName[index].propertyName`. This example uses `InputGroup` to display the remove button inline with the input.
+
+```tsx showLineNumbers title="form.tsx"
+ {
+ const isSubFieldInvalid =
+ subField.state.meta.isTouched && !subField.state.meta.isValid
+ return (
+
+
+
+ subField.handleChange(e.target.value)}
+ aria-invalid={isSubFieldInvalid}
+ placeholder="name@example.com"
+ type="email"
+ />
+ {field.state.value.length > 1 && (
+
+ field.removeValue(index)}
+ aria-label={`Remove email ${index + 1}`}
+ >
+
+
+
+ )}
+
+ {isSubFieldInvalid && (
+
+ )}
+
+
+ )
+ }}
+/>
+```
+
+### Adding Items
+
+Use `field.pushValue(item)` to add items to an array field. You can disable the button when the array reaches its maximum length.
+
+```tsx showLineNumbers title="form.tsx"
+ field.pushValue({ address: "" })}
+ disabled={field.state.value.length >= 5}
+>
+ Add Email Address
+
+```
+
+### Removing Items
+
+Use `field.removeValue(index)` to remove items from an array field. You can conditionally show the remove button only when there's more than one item.
+
+```tsx showLineNumbers title="form.tsx"
+{
+ field.state.value.length > 1 && (
+ field.removeValue(index)}
+ aria-label={`Remove email ${index + 1}`}
+ >
+
+
+ )
+}
+```
+
+### Array Validation
+
+Validate array fields using Zod's array methods.
+
+```tsx showLineNumbers title="form.tsx"
+const formSchema = z.object({
+ emails: z
+ .array(
+ z.object({
+ address: z.string().email("Enter a valid email address."),
+ })
+ )
+ .min(1, "Add at least one email address.")
+ .max(5, "You can add up to 5 email addresses."),
+})
+```
diff --git a/apps/v4/content/docs/meta.json b/apps/v4/content/docs/meta.json
index 53a3705dd9..18ad1d0492 100644
--- a/apps/v4/content/docs/meta.json
+++ b/apps/v4/content/docs/meta.json
@@ -4,6 +4,7 @@
"(root)",
"changelog",
"components",
+ "forms",
"installation",
"dark-mode",
"registry"
diff --git a/apps/v4/next.config.mjs b/apps/v4/next.config.mjs
index acd3d655ea..5bbdd5527a 100644
--- a/apps/v4/next.config.mjs
+++ b/apps/v4/next.config.mjs
@@ -42,16 +42,6 @@ const nextConfig = {
destination: "/docs/figma",
permanent: true,
},
- {
- source: "/docs/forms",
- destination: "/docs/components/form",
- permanent: false,
- },
- {
- source: "/docs/forms/react-hook-form",
- destination: "/docs/components/form",
- permanent: false,
- },
{
source: "/sidebar",
destination: "/docs/components/sidebar",
diff --git a/apps/v4/public/r/styles/new-york-v4/form-next-complex.json b/apps/v4/public/r/styles/new-york-v4/form-next-complex.json
new file mode 100644
index 0000000000..9c4b29bb2d
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-next-complex.json
@@ -0,0 +1,35 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-next-complex",
+ "type": "registry:example",
+ "registryDependencies": [
+ "field",
+ "input",
+ "textarea",
+ "button",
+ "card",
+ "spinner",
+ "checkbox",
+ "dialog",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-next-complex.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport Form from \"next/form\"\nimport { toast } from \"sonner\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport { Card, CardContent, CardFooter } from \"@/registry/new-york-v4/ui/card\"\nimport { Checkbox } from \"@/registry/new-york-v4/ui/checkbox\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/new-york-v4/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/new-york-v4/ui/select\"\nimport { Spinner } from \"@/registry/new-york-v4/ui/spinner\"\nimport { Switch } from \"@/registry/new-york-v4/ui/switch\"\n\nimport { complexFormAction } from \"./form-next-complex-action\"\nimport { addons, type FormState } from \"./form-next-complex-schema\"\n\nexport default function FormNextComplex() {\n const [formState, formAction, pending] = React.useActionState<\n FormState,\n FormData\n >(complexFormAction, {\n values: {\n plan: \"basic\",\n billingPeriod: \"monthly\",\n addons: [],\n emailNotifications: false,\n },\n errors: null,\n success: false,\n })\n\n React.useEffect(() => {\n if (formState.success) {\n toast.success(\"Preferences saved\", {\n description: \"Your subscription plan has been updated.\",\n })\n }\n }, [formState.success])\n\n return (\n \n \n \n \n \n \n \n {pending && }\n Save Preferences\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ },
+ {
+ "path": "registry/new-york-v4/examples/form-next-complex-schema.ts",
+ "content": "import { z } from \"zod\"\n\nexport const formSchema = z.object({\n plan: z\n .string({\n required_error: \"Please select a subscription plan\",\n })\n .min(1, \"Please select a subscription plan\")\n .refine((value) => value === \"basic\" || value === \"pro\", {\n message: \"Invalid plan selection. Please choose Basic or Pro\",\n }),\n billingPeriod: z\n .string({\n required_error: \"Please select a billing period\",\n })\n .min(1, \"Please select a billing period\"),\n addons: z\n .array(z.string())\n .min(1, \"Please select at least one add-on\")\n .max(3, \"You can select up to 3 add-ons\")\n .refine(\n (value) => value.every((addon) => addons.some((a) => a.id === addon)),\n {\n message: \"You selected an invalid add-on\",\n }\n ),\n emailNotifications: z.boolean(),\n})\n\nexport type FormState = {\n values: z.infer\n errors: null | Partial, string[]>>\n success: boolean\n}\n\nexport const addons = [\n {\n id: \"analytics\",\n title: \"Analytics\",\n description: \"Advanced analytics and reporting\",\n },\n {\n id: \"backup\",\n title: \"Backup\",\n description: \"Automated daily backups\",\n },\n {\n id: \"support\",\n title: \"Priority Support\",\n description: \"24/7 premium customer support\",\n },\n] as const\n",
+ "type": "registry:example"
+ },
+ {
+ "path": "registry/new-york-v4/examples/form-next-complex-action.ts",
+ "content": "\"use server\"\n\nimport { formSchema, type FormState } from \"./form-next-complex-schema\"\n\nexport async function complexFormAction(\n _prevState: FormState,\n formData: FormData\n) {\n // Sleep for 1 second\n await new Promise((resolve) => setTimeout(resolve, 1000))\n\n const values = {\n plan: formData.get(\"plan\") as FormState[\"values\"][\"plan\"],\n billingPeriod: formData.get(\"billingPeriod\") as string,\n addons: formData.getAll(\"addons\") as string[],\n emailNotifications: formData.get(\"emailNotifications\") === \"on\",\n }\n\n const result = formSchema.safeParse(values)\n\n if (!result.success) {\n return {\n values,\n success: false,\n errors: result.error.flatten().fieldErrors,\n }\n }\n\n // Do something with the values.\n // Call your database or API here.\n\n return {\n values,\n errors: null,\n success: true,\n }\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-next-demo.json b/apps/v4/public/r/styles/new-york-v4/form-next-demo.json
new file mode 100644
index 0000000000..b0d0325ad7
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-next-demo.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-next-demo",
+ "type": "registry:example",
+ "registryDependencies": [
+ "field",
+ "input",
+ "textarea",
+ "button",
+ "card",
+ "spinner"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-next-demo.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport Form from \"next/form\"\nimport { toast } from \"sonner\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Input } from \"@/registry/new-york-v4/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/new-york-v4/ui/input-group\"\nimport { Spinner } from \"@/registry/new-york-v4/ui/spinner\"\n\nimport { demoFormAction } from \"./form-next-demo-action\"\nimport { type FormState } from \"./form-next-demo-schema\"\n\nexport default function FormNextDemo() {\n const [formState, formAction, pending] = React.useActionState<\n FormState,\n FormData\n >(demoFormAction, {\n values: {\n title: \"\",\n description: \"\",\n },\n errors: null,\n success: false,\n })\n const [descriptionLength, setDescriptionLength] = React.useState(0)\n\n React.useEffect(() => {\n if (formState.success) {\n toast(\"Thank you for your feedback\", {\n description: \"We'll review your report and get back to you soon.\",\n })\n }\n }, [formState.success])\n\n React.useEffect(() => {\n setDescriptionLength(formState.values.description.length)\n }, [formState.values.description])\n\n return (\n \n \n Bug Report \n \n Help us improve by reporting bugs you encounter.\n \n \n \n \n \n \n \n \n {pending && }\n Submit\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-rhf-array.json b/apps/v4/public/r/styles/new-york-v4/form-rhf-array.json
new file mode 100644
index 0000000000..359b3f6d0c
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-rhf-array.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-array",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-array.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { XIcon } from \"lucide-react\"\nimport { Controller, useFieldArray, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSet,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/new-york-v4/ui/input-group\"\n\nconst formSchema = z.object({\n emails: z\n .array(\n z.object({\n address: z.string().email(\"Enter a valid email address.\"),\n })\n )\n .min(1, \"Add at least one email address.\")\n .max(5, \"You can add up to 5 email addresses.\"),\n})\n\nexport default function FormRhfArray() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n emails: [{ address: \"\" }, { address: \"\" }],\n },\n })\n\n const { fields, append, remove } = useFieldArray({\n control: form.control,\n name: \"emails\",\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Contact Emails \n Manage your contact email addresses. \n \n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-rhf-checkbox.json b/apps/v4/public/r/styles/new-york-v4/form-rhf-checkbox.json
new file mode 100644
index 0000000000..59b91b5873
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-rhf-checkbox.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-checkbox",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "checkbox",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-checkbox.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport { Checkbox } from \"@/registry/new-york-v4/ui/checkbox\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n} from \"@/registry/new-york-v4/ui/field\"\n\nconst tasks = [\n {\n id: \"push\",\n label: \"Push notifications\",\n },\n {\n id: \"email\",\n label: \"Email notifications\",\n },\n] as const\n\nconst formSchema = z.object({\n responses: z.boolean(),\n tasks: z\n .array(z.string())\n .min(1, \"Please select at least one notification type.\")\n .refine(\n (value) => value.every((task) => tasks.some((t) => t.id === task)),\n {\n message: \"Invalid notification type selected.\",\n }\n ),\n})\n\nexport default function FormRhfCheckbox() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n responses: true,\n tasks: [],\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Notifications \n Manage your notification preferences. \n \n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-rhf-complex.json b/apps/v4/public/r/styles/new-york-v4/form-rhf-complex.json
new file mode 100644
index 0000000000..f5c35ceb8a
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-rhf-complex.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-complex",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-complex.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport { Checkbox } from \"@/registry/new-york-v4/ui/checkbox\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/new-york-v4/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/new-york-v4/ui/select\"\nimport { Switch } from \"@/registry/new-york-v4/ui/switch\"\n\nconst addons = [\n {\n id: \"analytics\",\n title: \"Analytics\",\n description: \"Advanced analytics and reporting\",\n },\n {\n id: \"backup\",\n title: \"Backup\",\n description: \"Automated daily backups\",\n },\n {\n id: \"support\",\n title: \"Priority Support\",\n description: \"24/7 premium customer support\",\n },\n] as const\n\nconst formSchema = z.object({\n plan: z\n .string({\n required_error: \"Please select a subscription plan\",\n })\n .min(1, \"Please select a subscription plan\")\n .refine((value) => value === \"basic\" || value === \"pro\", {\n message: \"Invalid plan selection. Please choose Basic or Pro\",\n }),\n billingPeriod: z\n .string({\n required_error: \"Please select a billing period\",\n })\n .min(1, \"Please select a billing period\"),\n addons: z\n .array(z.string())\n .min(1, \"Please select at least one add-on\")\n .max(3, \"You can select up to 3 add-ons\")\n .refine(\n (value) => value.every((addon) => addons.some((a) => a.id === addon)),\n {\n message: \"You selected an invalid add-on\",\n }\n ),\n emailNotifications: z.boolean(),\n})\n\nexport default function FormRhfComplex() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n plan: \"basic\",\n billingPeriod: \"\",\n addons: [],\n emailNotifications: false,\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n You're almost there! \n \n Choose your subscription plan and billing period.\n \n \n \n \n \n \n \n \n Save Preferences\n \n form.reset()}>\n Reset\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-rhf-demo.json b/apps/v4/public/r/styles/new-york-v4/form-rhf-demo.json
new file mode 100644
index 0000000000..c4ee4aba16
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-rhf-demo.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-demo",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-demo.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Input } from \"@/registry/new-york-v4/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/new-york-v4/ui/input-group\"\n\nconst formSchema = z.object({\n title: z\n .string()\n .min(5, \"Bug title must be at least 5 characters.\")\n .max(32, \"Bug title must be at most 32 characters.\"),\n description: z\n .string()\n .min(20, \"Description must be at least 20 characters.\")\n .max(100, \"Description must be at most 100 characters.\"),\n})\n\nexport default function BugReportForm() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n title: \"\",\n description: \"\",\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Bug Report \n \n Help us improve by reporting bugs you encounter.\n \n \n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Submit\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-rhf-input.json b/apps/v4/public/r/styles/new-york-v4/form-rhf-input.json
new file mode 100644
index 0000000000..095cdeefae
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-rhf-input.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-input",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-input.tsx",
+ "content": "\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Input } from \"@/registry/new-york-v4/ui/input\"\n\nconst formSchema = z.object({\n username: z\n .string()\n .min(3, \"Username must be at least 3 characters.\")\n .max(10, \"Username must be at most 10 characters.\")\n .regex(\n /^[a-zA-Z0-9_]+$/,\n \"Username can only contain letters, numbers, and underscores.\"\n ),\n})\n\nexport default function FormRhfInput() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n username: \"\",\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Profile Settings \n \n Update your profile information below.\n \n \n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-rhf-password.json b/apps/v4/public/r/styles/new-york-v4/form-rhf-password.json
new file mode 100644
index 0000000000..897a1df7d2
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-rhf-password.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-password",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input-group",
+ "progress",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-password.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { CheckIcon } from \"lucide-react\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/new-york-v4/ui/input-group\"\nimport { Progress } from \"@/registry/new-york-v4/ui/progress\"\n\nconst passwordRequirements = [\n {\n id: \"length\",\n label: \"At least 8 characters\",\n test: (val: string) => val.length >= 8,\n },\n {\n id: \"lowercase\",\n label: \"One lowercase letter\",\n test: (val: string) => /[a-z]/.test(val),\n },\n {\n id: \"uppercase\",\n label: \"One uppercase letter\",\n test: (val: string) => /[A-Z]/.test(val),\n },\n { id: \"number\", label: \"One number\", test: (val: string) => /\\d/.test(val) },\n {\n id: \"special\",\n label: \"One special character\",\n test: (val: string) => /[!@#$%^&*(),.?\":{}|<>]/.test(val),\n },\n]\n\nconst formSchema = z.object({\n password: z\n .string()\n .min(8, \"Password must be at least 8 characters\")\n .refine(\n (val) => /[a-z]/.test(val),\n \"Password must contain at least one lowercase letter\"\n )\n .refine(\n (val) => /[A-Z]/.test(val),\n \"Password must contain at least one uppercase letter\"\n )\n .refine(\n (val) => /\\d/.test(val),\n \"Password must contain at least one number\"\n )\n .refine(\n (val) => /[!@#$%^&*(),.?\":{}|<>]/.test(val),\n \"Password must contain at least one special character\"\n ),\n})\n\nexport default function FormRhfPassword() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n password: \"\",\n },\n })\n\n const password = form.watch(\"password\")\n\n // Calculate password strength.\n const metRequirements = passwordRequirements.filter((req) =>\n req.test(password || \"\")\n )\n const strengthPercentage =\n (metRequirements.length / passwordRequirements.length) * 100\n\n // Determine strength level and color.\n const getStrengthColor = () => {\n if (strengthPercentage === 0) return \"bg-neutral-200\"\n if (strengthPercentage <= 40) return \"bg-red-500\"\n if (strengthPercentage <= 80) return \"bg-yellow-500\"\n return \"bg-green-500\"\n }\n\n const allRequirementsMet =\n metRequirements.length === passwordRequirements.length\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Create Password \n \n Choose a strong password to secure your account.\n \n \n \n \n \n \n \n \n Create Password\n \n form.reset()}>\n Reset\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-rhf-radiogroup.json b/apps/v4/public/r/styles/new-york-v4/form-rhf-radiogroup.json
new file mode 100644
index 0000000000..e48f503d16
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-rhf-radiogroup.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-radiogroup",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "radio-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-radiogroup.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSet,\n FieldTitle,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/new-york-v4/ui/radio-group\"\n\nconst plans = [\n {\n id: \"starter\",\n title: \"Starter (100K tokens/month)\",\n description: \"For everyday use with basic features.\",\n },\n {\n id: \"pro\",\n title: \"Pro (1M tokens/month)\",\n description: \"For advanced AI usage with more features.\",\n },\n {\n id: \"enterprise\",\n title: \"Enterprise (Unlimited tokens)\",\n description: \"For large teams and heavy usage.\",\n },\n] as const\n\nconst formSchema = z.object({\n plan: z.string().min(1, \"You must select a subscription plan to continue.\"),\n})\n\nexport default function FormRhfRadioGroup() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n plan: \"\",\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Subscription Plan \n \n See pricing and features for each plan.\n \n \n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-rhf-select.json b/apps/v4/public/r/styles/new-york-v4/form-rhf-select.json
new file mode 100644
index 0000000000..1e25c452ce
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-rhf-select.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-select",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "select",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-select.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/new-york-v4/ui/select\"\n\nconst spokenLanguages = [\n { label: \"English\", value: \"en\" },\n { label: \"Spanish\", value: \"es\" },\n { label: \"French\", value: \"fr\" },\n { label: \"German\", value: \"de\" },\n { label: \"Italian\", value: \"it\" },\n { label: \"Chinese\", value: \"zh\" },\n { label: \"Japanese\", value: \"ja\" },\n] as const\n\nconst formSchema = z.object({\n language: z\n .string()\n .min(1, \"Please select your spoken language.\")\n .refine((val) => val !== \"auto\", {\n message:\n \"Auto-detection is not allowed. Please select a specific language.\",\n }),\n})\n\nexport default function FormRhfSelect() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n language: \"\",\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Language Preferences \n \n Select your preferred spoken language.\n \n \n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-rhf-switch.json b/apps/v4/public/r/styles/new-york-v4/form-rhf-switch.json
new file mode 100644
index 0000000000..683ba9890a
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-rhf-switch.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-switch",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "switch",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-switch.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Switch } from \"@/registry/new-york-v4/ui/switch\"\n\nconst formSchema = z.object({\n twoFactor: z.boolean().refine((val) => val === true, {\n message: \"It is highly recommended to enable two-factor authentication.\",\n }),\n})\n\nexport default function FormRhfSwitch() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n twoFactor: false,\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Security Settings \n \n Manage your account security preferences.\n \n \n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-rhf-textarea.json b/apps/v4/public/r/styles/new-york-v4/form-rhf-textarea.json
new file mode 100644
index 0000000000..2a8f7ef6cf
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-rhf-textarea.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-textarea",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "textarea",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-textarea.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Textarea } from \"@/registry/new-york-v4/ui/textarea\"\n\nconst formSchema = z.object({\n about: z\n .string()\n .min(10, \"Please provide at least 10 characters.\")\n .max(200, \"Please keep it under 200 characters.\"),\n})\n\nexport default function FormRhfTextarea() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n about: \"\",\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Personalization \n \n Customize your experience by telling us more about yourself.\n \n \n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-tanstack-array.json b/apps/v4/public/r/styles/new-york-v4/form-tanstack-array.json
new file mode 100644
index 0000000000..64f90fdc63
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-tanstack-array.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-array",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-array.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport * as React from \"react\"\nimport { useForm } from \"@tanstack/react-form\"\nimport { XIcon } from \"lucide-react\"\nimport { toast } from \"sonner\"\nimport { z } from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSet,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/new-york-v4/ui/input-group\"\n\nconst formSchema = z.object({\n emails: z\n .array(\n z.object({\n address: z.string().email(\"Enter a valid email address.\"),\n })\n )\n .min(1, \"Add at least one email address.\")\n .max(5, \"You can add up to 5 email addresses.\"),\n})\n\nexport default function FormTanstackArray() {\n const form = useForm({\n defaultValues: {\n emails: [{ address: \"\" }],\n },\n validators: {\n onBlur: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Contact Emails \n Manage your contact email addresses. \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {(field) => {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Email Addresses \n \n Add up to 5 email addresses where we can contact you.\n \n \n {field.state.value.map((_, index) => (\n {\n const isSubFieldInvalid =\n subField.state.meta.isTouched &&\n !subField.state.meta.isValid\n return (\n \n \n \n \n subField.handleChange(e.target.value)\n }\n aria-invalid={isSubFieldInvalid}\n placeholder=\"name@example.com\"\n type=\"email\"\n autoComplete=\"email\"\n />\n {field.state.value.length > 1 && (\n \n field.removeValue(index)}\n aria-label={`Remove email ${index + 1}`}\n >\n \n \n \n )}\n \n {isSubFieldInvalid && (\n \n )}\n \n \n )\n }}\n />\n ))}\n field.pushValue({ address: \"\" })}\n disabled={field.state.value.length >= 5}\n >\n Add Email Address\n \n \n {isInvalid && }\n \n )\n }}\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-tanstack-checkbox.json b/apps/v4/public/r/styles/new-york-v4/form-tanstack-checkbox.json
new file mode 100644
index 0000000000..aa54873851
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-tanstack-checkbox.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-checkbox",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "checkbox",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-checkbox.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport { Checkbox } from \"@/registry/new-york-v4/ui/checkbox\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n} from \"@/registry/new-york-v4/ui/field\"\n\nconst tasks = [\n {\n id: \"push\",\n label: \"Push notifications\",\n },\n {\n id: \"email\",\n label: \"Email notifications\",\n },\n] as const\n\nconst formSchema = z.object({\n responses: z.boolean(),\n tasks: z\n .array(z.string())\n .min(1, \"Please select at least one notification type.\")\n .refine(\n (value) => value.every((task) => tasks.some((t) => t.id === task)),\n {\n message: \"Invalid notification type selected.\",\n }\n ),\n})\n\nexport default function FormTanstackCheckbox() {\n const form = useForm({\n defaultValues: {\n responses: true,\n tasks: [] as string[],\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Notifications \n Manage your notification preferences. \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Responses \n \n Get notified for requests that take time, like research or\n image generation.\n \n \n \n \n field.handleChange(checked === true)\n }\n disabled\n />\n \n Push notifications\n \n \n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Tasks \n \n Get notified when tasks you've created have updates.\n \n \n {tasks.map((task) => (\n \n {\n if (checked) {\n field.pushValue(task.id)\n } else {\n const index = field.state.value.indexOf(task.id)\n if (index > -1) {\n field.removeValue(index)\n }\n }\n }}\n />\n \n {task.label}\n \n \n ))}\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-tanstack-complex.json b/apps/v4/public/r/styles/new-york-v4/form-tanstack-complex.json
new file mode 100644
index 0000000000..5b99c6fc72
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-tanstack-complex.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-complex",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-complex.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport * as React from \"react\"\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport { Card, CardContent, CardFooter } from \"@/registry/new-york-v4/ui/card\"\nimport { Checkbox } from \"@/registry/new-york-v4/ui/checkbox\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/new-york-v4/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/new-york-v4/ui/select\"\nimport { Switch } from \"@/registry/new-york-v4/ui/switch\"\n\nconst addons = [\n {\n id: \"analytics\",\n title: \"Analytics\",\n description: \"Advanced analytics and reporting\",\n },\n {\n id: \"backup\",\n title: \"Backup\",\n description: \"Automated daily backups\",\n },\n {\n id: \"support\",\n title: \"Priority Support\",\n description: \"24/7 premium customer support\",\n },\n] as const\n\nconst formSchema = z.object({\n plan: z\n .string({\n required_error: \"Please select a subscription plan\",\n })\n .min(1, \"Please select a subscription plan\")\n .refine((value) => value === \"basic\" || value === \"pro\", {\n message: \"Invalid plan selection. Please choose Basic or Pro\",\n }),\n billingPeriod: z\n .string({\n required_error: \"Please select a billing period\",\n })\n .min(1, \"Please select a billing period\"),\n addons: z\n .array(z.string())\n .min(1, \"Please select at least one add-on\")\n .max(3, \"You can select up to 3 add-ons\")\n .refine(\n (value) => value.every((addon) => addons.some((a) => a.id === addon)),\n {\n message: \"You selected an invalid add-on\",\n }\n ),\n emailNotifications: z.boolean(),\n})\n\nexport default function FormTanstackComplex() {\n const form = useForm({\n defaultValues: {\n plan: \"basic\",\n billingPeriod: \"monthly\",\n addons: [] as string[],\n emailNotifications: false,\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Subscription Plan \n \n Choose your subscription plan.\n \n \n \n \n \n Basic \n \n For individuals and small teams\n \n \n \n \n \n \n \n \n Pro \n \n For businesses with higher demands\n \n \n \n \n \n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Billing Period \n \n \n \n \n \n Monthly \n Yearly \n \n \n \n Choose how often you want to be billed.\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Add-ons \n \n Select additional features you'd like to include.\n \n \n {addons.map((addon) => (\n \n {\n if (checked) {\n field.pushValue(addon.id)\n } else {\n const index = field.state.value.indexOf(\n addon.id\n )\n if (index > -1) {\n field.removeValue(index)\n }\n }\n }}\n />\n \n \n {addon.title}\n \n \n {addon.description}\n \n \n \n ))}\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n \n \n Email Notifications\n \n \n Receive email updates about your subscription\n \n \n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n \n Save Preferences\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-tanstack-demo.json b/apps/v4/public/r/styles/new-york-v4/form-tanstack-demo.json
new file mode 100644
index 0000000000..a6253220fc
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-tanstack-demo.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-demo",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-demo.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport * as React from \"react\"\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Input } from \"@/registry/new-york-v4/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/new-york-v4/ui/input-group\"\n\nconst formSchema = z.object({\n title: z\n .string()\n .min(5, \"Bug title must be at least 5 characters.\")\n .max(32, \"Bug title must be at most 32 characters.\"),\n description: z\n .string()\n .min(20, \"Description must be at least 20 characters.\")\n .max(100, \"Description must be at most 100 characters.\"),\n})\n\nexport default function BugReportForm() {\n const form = useForm({\n defaultValues: {\n title: \"\",\n description: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Bug Report \n \n Help us improve by reporting bugs you encounter.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Bug Title \n field.handleChange(e.target.value)}\n aria-invalid={isInvalid}\n placeholder=\"Login button not working on mobile\"\n autoComplete=\"off\"\n />\n {isInvalid && (\n \n )}\n \n )\n }}\n />\n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Description \n \n field.handleChange(e.target.value)}\n placeholder=\"I'm having an issue with the login button on mobile.\"\n rows={6}\n className=\"min-h-24 resize-none\"\n aria-invalid={isInvalid}\n />\n \n \n {field.state.value.length}/100 characters\n \n \n \n \n Include steps to reproduce, expected behavior, and what\n actually happened.\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Submit\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-tanstack-input.json b/apps/v4/public/r/styles/new-york-v4/form-tanstack-input.json
new file mode 100644
index 0000000000..84c0b734eb
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-tanstack-input.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-input",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-input.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Input } from \"@/registry/new-york-v4/ui/input\"\n\nconst formSchema = z.object({\n username: z\n .string()\n .min(3, \"Username must be at least 3 characters.\")\n .max(10, \"Username must be at most 10 characters.\")\n .regex(\n /^[a-zA-Z0-9_]+$/,\n \"Username can only contain letters, numbers, and underscores.\"\n ),\n})\n\nexport default function FormTanstackInput() {\n const form = useForm({\n defaultValues: {\n username: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Profile Settings \n \n Update your profile information below.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n \n Username\n \n field.handleChange(e.target.value)}\n aria-invalid={isInvalid}\n placeholder=\"shadcn\"\n autoComplete=\"username\"\n />\n \n This is your public display name. Must be between 3 and 10\n characters. Must only contain letters, numbers, and\n underscores.\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-tanstack-radiogroup.json b/apps/v4/public/r/styles/new-york-v4/form-tanstack-radiogroup.json
new file mode 100644
index 0000000000..6be49f151a
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-tanstack-radiogroup.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-radiogroup",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "radio-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-radiogroup.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSet,\n FieldTitle,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/new-york-v4/ui/radio-group\"\n\nconst plans = [\n {\n id: \"starter\",\n title: \"Starter (100K tokens/month)\",\n description: \"For everyday use with basic features.\",\n },\n {\n id: \"pro\",\n title: \"Pro (1M tokens/month)\",\n description: \"For advanced AI usage with more features.\",\n },\n {\n id: \"enterprise\",\n title: \"Enterprise (Unlimited tokens)\",\n description: \"For large teams and heavy usage.\",\n },\n] as const\n\nconst formSchema = z.object({\n plan: z.string().min(1, \"You must select a subscription plan to continue.\"),\n})\n\nexport default function FormTanstackRadioGroup() {\n const form = useForm({\n defaultValues: {\n plan: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Subscription Plan \n \n See pricing and features for each plan.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Plan \n \n You can upgrade or downgrade your plan at any time.\n \n \n {plans.map((plan) => (\n \n \n \n {plan.title} \n \n {plan.description}\n \n \n \n \n \n ))}\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-tanstack-select.json b/apps/v4/public/r/styles/new-york-v4/form-tanstack-select.json
new file mode 100644
index 0000000000..96d85ad75b
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-tanstack-select.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-select",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "select",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-select.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/new-york-v4/ui/select\"\n\nconst spokenLanguages = [\n { label: \"English\", value: \"en\" },\n { label: \"Spanish\", value: \"es\" },\n { label: \"French\", value: \"fr\" },\n { label: \"German\", value: \"de\" },\n { label: \"Italian\", value: \"it\" },\n { label: \"Chinese\", value: \"zh\" },\n { label: \"Japanese\", value: \"ja\" },\n] as const\n\nconst formSchema = z.object({\n language: z\n .string()\n .min(1, \"Please select your spoken language.\")\n .refine((val) => val !== \"auto\", {\n message:\n \"Auto-detection is not allowed. Please select a specific language.\",\n }),\n})\n\nexport default function FormTanstackSelect() {\n const form = useForm({\n defaultValues: {\n language: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Language Preferences \n \n Select your preferred spoken language.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n \n \n Spoken Language\n \n \n For best results, select the language you speak.\n \n {isInvalid && (\n \n )}\n \n \n \n \n \n \n Auto \n \n {spokenLanguages.map((language) => (\n \n {language.label}\n \n ))}\n \n \n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-tanstack-switch.json b/apps/v4/public/r/styles/new-york-v4/form-tanstack-switch.json
new file mode 100644
index 0000000000..3d33eb91b4
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-tanstack-switch.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-switch",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "switch",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-switch.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Switch } from \"@/registry/new-york-v4/ui/switch\"\n\nconst formSchema = z.object({\n twoFactor: z.boolean().refine((val) => val === true, {\n message: \"It is highly recommended to enable two-factor authentication.\",\n }),\n})\n\nexport default function FormTanstackSwitch() {\n const form = useForm({\n defaultValues: {\n twoFactor: false,\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Security Settings \n \n Manage your account security preferences.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n \n \n Multi-factor authentication\n \n \n Enable multi-factor authentication to secure your\n account.\n \n {isInvalid && (\n \n )}\n \n \n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/form-tanstack-textarea.json b/apps/v4/public/r/styles/new-york-v4/form-tanstack-textarea.json
new file mode 100644
index 0000000000..e8c44c875f
--- /dev/null
+++ b/apps/v4/public/r/styles/new-york-v4/form-tanstack-textarea.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-textarea",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "textarea",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-textarea.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Textarea } from \"@/registry/new-york-v4/ui/textarea\"\n\nconst formSchema = z.object({\n about: z\n .string()\n .min(10, \"Please provide at least 10 characters.\")\n .max(200, \"Please keep it under 200 characters.\"),\n})\n\nexport default function FormTanstackTextarea() {\n const form = useForm({\n defaultValues: {\n about: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Personalization \n \n Customize your experience by telling us more about yourself.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n \n More about you\n \n field.handleChange(e.target.value)}\n aria-invalid={isInvalid}\n placeholder=\"I'm a software engineer...\"\n className=\"min-h-[120px]\"\n />\n \n Tell us more about yourself. This will be used to help us\n personalize your experience.\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/v4/public/r/styles/new-york-v4/registry.json b/apps/v4/public/r/styles/new-york-v4/registry.json
index 87d84120d0..ae12fd8a78 100644
--- a/apps/v4/public/r/styles/new-york-v4/registry.json
+++ b/apps/v4/public/r/styles/new-york-v4/registry.json
@@ -5,41 +5,25 @@
{
"name": "index",
"type": "registry:style",
- "dependencies": [
- "class-variance-authority",
- "lucide-react"
- ],
- "devDependencies": [
- "tw-animate-css"
- ],
- "registryDependencies": [
- "utils"
- ],
+ "dependencies": ["class-variance-authority", "lucide-react"],
+ "devDependencies": ["tw-animate-css"],
+ "registryDependencies": ["utils"],
"files": [],
"cssVars": {}
},
{
"name": "style",
"type": "registry:style",
- "dependencies": [
- "class-variance-authority",
- "lucide-react"
- ],
- "devDependencies": [
- "tw-animate-css"
- ],
- "registryDependencies": [
- "utils"
- ],
+ "dependencies": ["class-variance-authority", "lucide-react"],
+ "devDependencies": ["tw-animate-css"],
+ "registryDependencies": ["utils"],
"files": [],
"cssVars": {}
},
{
"name": "accordion",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-accordion"
- ],
+ "dependencies": ["@radix-ui/react-accordion"],
"files": [
{
"path": "registry/new-york-v4/ui/accordion.tsx",
@@ -60,12 +44,8 @@
{
"name": "alert-dialog",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-alert-dialog"
- ],
- "registryDependencies": [
- "button"
- ],
+ "dependencies": ["@radix-ui/react-alert-dialog"],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/alert-dialog.tsx",
@@ -76,9 +56,7 @@
{
"name": "aspect-ratio",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-aspect-ratio"
- ],
+ "dependencies": ["@radix-ui/react-aspect-ratio"],
"files": [
{
"path": "registry/new-york-v4/ui/aspect-ratio.tsx",
@@ -89,9 +67,7 @@
{
"name": "avatar",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-avatar"
- ],
+ "dependencies": ["@radix-ui/react-avatar"],
"files": [
{
"path": "registry/new-york-v4/ui/avatar.tsx",
@@ -102,9 +78,7 @@
{
"name": "badge",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slot"
- ],
+ "dependencies": ["@radix-ui/react-slot"],
"files": [
{
"path": "registry/new-york-v4/ui/badge.tsx",
@@ -115,9 +89,7 @@
{
"name": "breadcrumb",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slot"
- ],
+ "dependencies": ["@radix-ui/react-slot"],
"files": [
{
"path": "registry/new-york-v4/ui/breadcrumb.tsx",
@@ -128,9 +100,7 @@
{
"name": "button",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slot"
- ],
+ "dependencies": ["@radix-ui/react-slot"],
"files": [
{
"path": "registry/new-york-v4/ui/button.tsx",
@@ -141,10 +111,7 @@
{
"name": "button-group",
"type": "registry:ui",
- "registryDependencies": [
- "button",
- "separator"
- ],
+ "registryDependencies": ["button", "separator"],
"files": [
{
"path": "registry/new-york-v4/ui/button-group.tsx",
@@ -155,13 +122,8 @@
{
"name": "calendar",
"type": "registry:ui",
- "dependencies": [
- "react-day-picker@latest",
- "date-fns"
- ],
- "registryDependencies": [
- "button"
- ],
+ "dependencies": ["react-day-picker@latest", "date-fns"],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/calendar.tsx",
@@ -182,12 +144,8 @@
{
"name": "carousel",
"type": "registry:ui",
- "dependencies": [
- "embla-carousel-react"
- ],
- "registryDependencies": [
- "button"
- ],
+ "dependencies": ["embla-carousel-react"],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/carousel.tsx",
@@ -198,13 +156,8 @@
{
"name": "chart",
"type": "registry:ui",
- "dependencies": [
- "recharts@2.15.4",
- "lucide-react"
- ],
- "registryDependencies": [
- "card"
- ],
+ "dependencies": ["recharts@2.15.4", "lucide-react"],
+ "registryDependencies": ["card"],
"files": [
{
"path": "registry/new-york-v4/ui/chart.tsx",
@@ -215,9 +168,7 @@
{
"name": "checkbox",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-checkbox"
- ],
+ "dependencies": ["@radix-ui/react-checkbox"],
"files": [
{
"path": "registry/new-york-v4/ui/checkbox.tsx",
@@ -228,9 +179,7 @@
{
"name": "collapsible",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-collapsible"
- ],
+ "dependencies": ["@radix-ui/react-collapsible"],
"files": [
{
"path": "registry/new-york-v4/ui/collapsible.tsx",
@@ -241,12 +190,8 @@
{
"name": "command",
"type": "registry:ui",
- "dependencies": [
- "cmdk"
- ],
- "registryDependencies": [
- "dialog"
- ],
+ "dependencies": ["cmdk"],
+ "registryDependencies": ["dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/command.tsx",
@@ -257,9 +202,7 @@
{
"name": "context-menu",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-context-menu"
- ],
+ "dependencies": ["@radix-ui/react-context-menu"],
"files": [
{
"path": "registry/new-york-v4/ui/context-menu.tsx",
@@ -270,9 +213,7 @@
{
"name": "dialog",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-dialog"
- ],
+ "dependencies": ["@radix-ui/react-dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/dialog.tsx",
@@ -283,10 +224,7 @@
{
"name": "drawer",
"type": "registry:ui",
- "dependencies": [
- "vaul",
- "@radix-ui/react-dialog"
- ],
+ "dependencies": ["vaul", "@radix-ui/react-dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/drawer.tsx",
@@ -297,9 +235,7 @@
{
"name": "dropdown-menu",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-dropdown-menu"
- ],
+ "dependencies": ["@radix-ui/react-dropdown-menu"],
"files": [
{
"path": "registry/new-york-v4/ui/dropdown-menu.tsx",
@@ -320,10 +256,7 @@
{
"name": "field",
"type": "registry:ui",
- "registryDependencies": [
- "label",
- "separator"
- ],
+ "registryDependencies": ["label", "separator"],
"files": [
{
"path": "registry/new-york-v4/ui/field.tsx",
@@ -341,10 +274,7 @@
"zod",
"react-hook-form"
],
- "registryDependencies": [
- "button",
- "label"
- ],
+ "registryDependencies": ["button", "label"],
"files": [
{
"path": "registry/new-york-v4/ui/form.tsx",
@@ -355,9 +285,7 @@
{
"name": "hover-card",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-hover-card"
- ],
+ "dependencies": ["@radix-ui/react-hover-card"],
"files": [
{
"path": "registry/new-york-v4/ui/hover-card.tsx",
@@ -378,11 +306,7 @@
{
"name": "input-group",
"type": "registry:ui",
- "registryDependencies": [
- "button",
- "input",
- "textarea"
- ],
+ "registryDependencies": ["button", "input", "textarea"],
"files": [
{
"path": "registry/new-york-v4/ui/input-group.tsx",
@@ -393,9 +317,7 @@
{
"name": "input-otp",
"type": "registry:ui",
- "dependencies": [
- "input-otp"
- ],
+ "dependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/ui/input-otp.tsx",
@@ -406,9 +328,7 @@
{
"name": "item",
"type": "registry:ui",
- "registryDependencies": [
- "separator"
- ],
+ "registryDependencies": ["separator"],
"files": [
{
"path": "registry/new-york-v4/ui/item.tsx",
@@ -419,9 +339,7 @@
{
"name": "label",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-label"
- ],
+ "dependencies": ["@radix-ui/react-label"],
"files": [
{
"path": "registry/new-york-v4/ui/label.tsx",
@@ -432,9 +350,7 @@
{
"name": "menubar",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-menubar"
- ],
+ "dependencies": ["@radix-ui/react-menubar"],
"files": [
{
"path": "registry/new-york-v4/ui/menubar.tsx",
@@ -445,9 +361,7 @@
{
"name": "navigation-menu",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-navigation-menu"
- ],
+ "dependencies": ["@radix-ui/react-navigation-menu"],
"files": [
{
"path": "registry/new-york-v4/ui/navigation-menu.tsx",
@@ -458,9 +372,7 @@
{
"name": "pagination",
"type": "registry:ui",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/pagination.tsx",
@@ -471,9 +383,7 @@
{
"name": "popover",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-popover"
- ],
+ "dependencies": ["@radix-ui/react-popover"],
"files": [
{
"path": "registry/new-york-v4/ui/popover.tsx",
@@ -484,9 +394,7 @@
{
"name": "progress",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-progress"
- ],
+ "dependencies": ["@radix-ui/react-progress"],
"files": [
{
"path": "registry/new-york-v4/ui/progress.tsx",
@@ -497,9 +405,7 @@
{
"name": "radio-group",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-radio-group"
- ],
+ "dependencies": ["@radix-ui/react-radio-group"],
"files": [
{
"path": "registry/new-york-v4/ui/radio-group.tsx",
@@ -510,9 +416,7 @@
{
"name": "resizable",
"type": "registry:ui",
- "dependencies": [
- "react-resizable-panels"
- ],
+ "dependencies": ["react-resizable-panels"],
"files": [
{
"path": "registry/new-york-v4/ui/resizable.tsx",
@@ -523,9 +427,7 @@
{
"name": "scroll-area",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-scroll-area"
- ],
+ "dependencies": ["@radix-ui/react-scroll-area"],
"files": [
{
"path": "registry/new-york-v4/ui/scroll-area.tsx",
@@ -536,9 +438,7 @@
{
"name": "select",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-select"
- ],
+ "dependencies": ["@radix-ui/react-select"],
"files": [
{
"path": "registry/new-york-v4/ui/select.tsx",
@@ -549,9 +449,7 @@
{
"name": "separator",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-separator"
- ],
+ "dependencies": ["@radix-ui/react-separator"],
"files": [
{
"path": "registry/new-york-v4/ui/separator.tsx",
@@ -562,9 +460,7 @@
{
"name": "sheet",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-dialog"
- ],
+ "dependencies": ["@radix-ui/react-dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/sheet.tsx",
@@ -651,9 +547,7 @@
{
"name": "slider",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slider"
- ],
+ "dependencies": ["@radix-ui/react-slider"],
"files": [
{
"path": "registry/new-york-v4/ui/slider.tsx",
@@ -664,10 +558,7 @@
{
"name": "sonner",
"type": "registry:ui",
- "dependencies": [
- "sonner",
- "next-themes"
- ],
+ "dependencies": ["sonner", "next-themes"],
"files": [
{
"path": "registry/new-york-v4/ui/sonner.tsx",
@@ -678,9 +569,7 @@
{
"name": "spinner",
"type": "registry:ui",
- "dependencies": [
- "class-variance-authority"
- ],
+ "dependencies": ["class-variance-authority"],
"files": [
{
"path": "registry/new-york-v4/ui/spinner.tsx",
@@ -691,9 +580,7 @@
{
"name": "switch",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-switch"
- ],
+ "dependencies": ["@radix-ui/react-switch"],
"files": [
{
"path": "registry/new-york-v4/ui/switch.tsx",
@@ -714,9 +601,7 @@
{
"name": "tabs",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-tabs"
- ],
+ "dependencies": ["@radix-ui/react-tabs"],
"files": [
{
"path": "registry/new-york-v4/ui/tabs.tsx",
@@ -737,9 +622,7 @@
{
"name": "toggle",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-toggle"
- ],
+ "dependencies": ["@radix-ui/react-toggle"],
"files": [
{
"path": "registry/new-york-v4/ui/toggle.tsx",
@@ -750,12 +633,8 @@
{
"name": "toggle-group",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-toggle-group"
- ],
- "registryDependencies": [
- "toggle"
- ],
+ "dependencies": ["@radix-ui/react-toggle-group"],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/ui/toggle-group.tsx",
@@ -766,9 +645,7 @@
{
"name": "tooltip",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-tooltip"
- ],
+ "dependencies": ["@radix-ui/react-tooltip"],
"files": [
{
"path": "registry/new-york-v4/ui/tooltip.tsx",
@@ -871,9 +748,7 @@
"meta": {
"iframeHeight": "1000px"
},
- "categories": [
- "dashboard"
- ]
+ "categories": ["dashboard"]
},
{
"name": "sidebar-01",
@@ -905,10 +780,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-02",
@@ -940,19 +812,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-03",
"type": "registry:block",
"description": "A sidebar with submenus.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-03/page.tsx",
@@ -964,20 +830,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-04",
"type": "registry:block",
"description": "A floating sidebar with submenus.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb",
- "separator"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb", "separator"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-04/page.tsx",
@@ -989,10 +848,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-05",
@@ -1020,10 +876,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-06",
@@ -1055,10 +908,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-07",
@@ -1099,10 +949,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-08",
@@ -1143,10 +990,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-09",
@@ -1177,10 +1021,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-10",
@@ -1229,10 +1070,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-11",
@@ -1255,10 +1093,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-12",
@@ -1296,21 +1131,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-13",
"type": "registry:block",
"description": "A sidebar in a dialog.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb",
- "button",
- "dialog"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb", "button", "dialog"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-13/page.tsx",
@@ -1322,19 +1149,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-14",
"type": "registry:block",
"description": "A sidebar on the right.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-14/page.tsx",
@@ -1346,10 +1167,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-15",
@@ -1412,10 +1230,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-16",
@@ -1466,22 +1281,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "login-01",
"type": "registry:block",
"description": "A simple login form.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-01/page.tsx",
@@ -1493,21 +1299,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-02",
"type": "registry:block",
"description": "A two column login page with a cover image.",
- "registryDependencies": [
- "button",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-02/page.tsx",
@@ -1519,22 +1317,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-03",
"type": "registry:block",
"description": "A login page with a muted background color.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-03/page.tsx",
@@ -1546,22 +1335,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-04",
"type": "registry:block",
"description": "A login page with form and image.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-04/page.tsx",
@@ -1573,21 +1353,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-05",
"type": "registry:block",
"description": "A simple email-only login page.",
- "registryDependencies": [
- "button",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-05/page.tsx",
@@ -1599,18 +1371,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "calendar-01",
"type": "registry:block",
"description": "A simple calendar.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-01.tsx",
@@ -1622,18 +1389,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-02",
"type": "registry:block",
"description": "Multiple months with single selection.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-02.tsx",
@@ -1645,18 +1407,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-03",
"type": "registry:block",
"description": "Multiple months with multiple selection.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-03.tsx",
@@ -1668,18 +1425,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-04",
"type": "registry:block",
"description": "Single month with range selection",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-04.tsx",
@@ -1691,18 +1443,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0 xl:pt-28",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-05",
"type": "registry:block",
"description": "Multiple months with range selection",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-05.tsx",
@@ -1714,18 +1461,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-06",
"type": "registry:block",
"description": "Range selection with minimum days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-06.tsx",
@@ -1737,18 +1479,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-07",
"type": "registry:block",
"description": "Range selection with minimum and maximum days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-07.tsx",
@@ -1760,18 +1497,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-08",
"type": "registry:block",
"description": "Calendar with disabled days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-08.tsx",
@@ -1783,18 +1515,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-09",
"type": "registry:block",
"description": "Calendar with disabled weekends",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-09.tsx",
@@ -1806,20 +1533,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-10",
"type": "registry:block",
"description": "Today button",
- "registryDependencies": [
- "calendar",
- "card",
- "button"
- ],
+ "registryDependencies": ["calendar", "card", "button"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-10.tsx",
@@ -1831,18 +1551,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-11",
"type": "registry:block",
"description": "Start and end of month",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-11.tsx",
@@ -1854,20 +1569,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-12",
"type": "registry:block",
"description": "Localized calendar",
- "registryDependencies": [
- "calendar",
- "card",
- "select"
- ],
+ "registryDependencies": ["calendar", "card", "select"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-12.tsx",
@@ -1879,20 +1587,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-13",
"type": "registry:block",
"description": "With Month and Year Dropdown",
- "registryDependencies": [
- "calendar",
- "label",
- "select"
- ],
+ "registryDependencies": ["calendar", "label", "select"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-13.tsx",
@@ -1904,18 +1605,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-14",
"type": "registry:block",
"description": "With Booked/Unavailable Days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-14.tsx",
@@ -1927,18 +1623,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-15",
"type": "registry:block",
"description": "With Week Numbers",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-15.tsx",
@@ -1950,21 +1641,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-16",
"type": "registry:block",
"description": "With time picker",
- "registryDependencies": [
- "calendar",
- "card",
- "input",
- "label"
- ],
+ "registryDependencies": ["calendar", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-16.tsx",
@@ -1976,21 +1659,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-17",
"type": "registry:block",
"description": "With time picker inline",
- "registryDependencies": [
- "calendar",
- "card",
- "input",
- "label"
- ],
+ "registryDependencies": ["calendar", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-17.tsx",
@@ -2002,18 +1677,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-18",
"type": "registry:block",
"description": "Variable size",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-18.tsx",
@@ -2025,24 +1695,14 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-19",
"type": "registry:block",
"description": "With presets",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "calendar",
- "card",
- "input",
- "label"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["calendar", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-19.tsx",
@@ -2054,20 +1714,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-20",
"type": "registry:block",
"description": "With time presets",
- "registryDependencies": [
- "calendar",
- "card",
- "button"
- ],
+ "registryDependencies": ["calendar", "card", "button"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-20.tsx",
@@ -2079,18 +1732,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-21",
"type": "registry:block",
"description": "Custom days and formatters",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-21.tsx",
@@ -2102,21 +1750,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-22",
"type": "registry:block",
"description": "Date picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-22.tsx",
@@ -2128,21 +1768,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-23",
"type": "registry:block",
"description": "Date range picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-23.tsx",
@@ -2154,21 +1786,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-24",
"type": "registry:block",
"description": "Date and Time picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-24.tsx",
@@ -2180,21 +1804,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-25",
"type": "registry:block",
"description": "Date and Time range picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-25.tsx",
@@ -2206,10 +1822,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-26",
@@ -2233,10 +1846,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-27",
@@ -2260,10 +1870,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-28",
@@ -2287,18 +1894,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-29",
"type": "registry:block",
"description": "Natural language date picker",
- "dependencies": [
- "chrono-node"
- ],
+ "dependencies": ["chrono-node"],
"registryDependencies": [
"calendar",
"input",
@@ -2317,10 +1919,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-30",
@@ -2344,20 +1943,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-31",
"type": "registry:block",
"description": "With event slots",
- "registryDependencies": [
- "calendar",
- "card",
- "button"
- ],
+ "registryDependencies": ["calendar", "card", "button"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-31.tsx",
@@ -2369,20 +1961,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-32",
"type": "registry:block",
"description": "Date picker in a drawer",
- "registryDependencies": [
- "calendar",
- "button",
- "drawer"
- ],
+ "registryDependencies": ["calendar", "button", "drawer"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-32.tsx",
@@ -2394,21 +1979,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "signup-01",
"type": "registry:block",
"description": "A simple signup form.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label"
- ],
+ "registryDependencies": ["button", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-01/page.tsx",
@@ -2420,21 +1997,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-02",
"type": "registry:block",
"description": "A two column signup page with a cover image.",
- "registryDependencies": [
- "button",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-02/page.tsx",
@@ -2446,22 +2015,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-03",
"type": "registry:block",
"description": "A signup page with a muted background color.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-03/page.tsx",
@@ -2473,22 +2033,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-04",
"type": "registry:block",
"description": "A signup page with form and image.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-04/page.tsx",
@@ -2500,20 +2051,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-05",
"type": "registry:block",
"description": "A simple signup form with social providers.",
- "registryDependencies": [
- "button",
- "input",
- "label"
- ],
+ "registryDependencies": ["button", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-05/page.tsx",
@@ -2525,22 +2069,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "otp-01",
"type": "registry:block",
"description": "A simple OTP verification form.",
- "registryDependencies": [
- "button",
- "card",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-01/page.tsx",
@@ -2552,21 +2087,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-02",
"type": "registry:block",
"description": "A two column OTP page with a cover image.",
- "registryDependencies": [
- "button",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-02/page.tsx",
@@ -2578,22 +2105,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-03",
"type": "registry:block",
"description": "An OTP page with a muted background color.",
- "registryDependencies": [
- "button",
- "card",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-03/page.tsx",
@@ -2605,22 +2123,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-04",
"type": "registry:block",
"description": "An OTP page with form and image.",
- "registryDependencies": [
- "button",
- "card",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-04/page.tsx",
@@ -2632,21 +2141,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-05",
"type": "registry:block",
"description": "A simple OTP form with social providers.",
- "registryDependencies": [
- "button",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-05/page.tsx",
@@ -2658,10 +2159,7 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "new-components-01",
@@ -2796,1279 +2294,852 @@
"type": "registry:component"
}
],
- "categories": [
- "components",
- "showcase"
- ]
+ "categories": ["components", "showcase"]
},
{
"name": "chart-area-axes",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-axes.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-gradient",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-gradient.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-icons",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-icons.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart",
- "select"
- ],
+ "registryDependencies": ["card", "chart", "select"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-interactive.tsx",
"type": "registry:component"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-legend",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-legend.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-linear",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-linear.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-stacked-expand",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-stacked-expand.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-step",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-step.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-bar-active",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-active.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-horizontal",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-horizontal.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-interactive.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-mixed",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-mixed.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-multiple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-multiple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-negative",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-negative.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-line-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-dots-colors",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-dots-colors.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-dots-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-dots-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-dots",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-dots.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-interactive.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-linear",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-linear.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-multiple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-multiple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-step",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-step.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-pie-donut-active",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-donut-active.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-donut-text",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-donut-text.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-donut",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-donut.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-interactive.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-label-list",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-label-list.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-legend",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-legend.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-separator-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-separator-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-simple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-simple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-radar-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-dots",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-dots.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-circle-fill",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-circle-fill.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-circle-no-lines",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-circle-no-lines.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-circle",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-circle.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-fill",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-fill.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-icons",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-icons.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-legend",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-legend.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-lines-only",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-lines-only.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-multiple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-multiple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-radius",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-radius.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radial-grid",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-grid.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-shape",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-shape.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-simple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-simple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-text",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-text.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-tooltip-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-indicator-line",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-indicator-line.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-indicator-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-indicator-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-label-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-label-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-label-formatter",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-label-formatter.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-formatter",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-formatter.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-icons",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-icons.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-advanced",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-advanced.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "utils",
"type": "registry:lib",
- "dependencies": [
- "clsx",
- "tailwind-merge"
- ],
+ "dependencies": ["clsx", "tailwind-merge"],
"files": [
{
"path": "registry/new-york-v4/lib/utils.ts",
@@ -4454,9 +3525,7 @@
{
"name": "accordion-demo",
"type": "registry:example",
- "registryDependencies": [
- "accordion"
- ],
+ "registryDependencies": ["accordion"],
"files": [
{
"path": "registry/new-york-v4/examples/accordion-demo.tsx",
@@ -4467,9 +3536,7 @@
{
"name": "alert-demo",
"type": "registry:example",
- "registryDependencies": [
- "alert"
- ],
+ "registryDependencies": ["alert"],
"files": [
{
"path": "registry/new-york-v4/examples/alert-demo.tsx",
@@ -4480,9 +3547,7 @@
{
"name": "alert-destructive",
"type": "registry:example",
- "registryDependencies": [
- "alert"
- ],
+ "registryDependencies": ["alert"],
"files": [
{
"path": "registry/new-york-v4/examples/alert-destructive.tsx",
@@ -4493,10 +3558,7 @@
{
"name": "alert-dialog-demo",
"type": "registry:example",
- "registryDependencies": [
- "alert-dialog",
- "button"
- ],
+ "registryDependencies": ["alert-dialog", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/alert-dialog-demo.tsx",
@@ -4507,9 +3569,7 @@
{
"name": "aspect-ratio-demo",
"type": "registry:example",
- "registryDependencies": [
- "aspect-ratio"
- ],
+ "registryDependencies": ["aspect-ratio"],
"files": [
{
"path": "registry/new-york-v4/examples/aspect-ratio-demo.tsx",
@@ -4520,9 +3580,7 @@
{
"name": "avatar-demo",
"type": "registry:example",
- "registryDependencies": [
- "avatar"
- ],
+ "registryDependencies": ["avatar"],
"files": [
{
"path": "registry/new-york-v4/examples/avatar-demo.tsx",
@@ -4533,9 +3591,7 @@
{
"name": "badge-demo",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-demo.tsx",
@@ -4546,9 +3602,7 @@
{
"name": "badge-destructive",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-destructive.tsx",
@@ -4559,9 +3613,7 @@
{
"name": "badge-outline",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-outline.tsx",
@@ -4572,9 +3624,7 @@
{
"name": "badge-secondary",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-secondary.tsx",
@@ -4585,9 +3635,7 @@
{
"name": "breadcrumb-demo",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-demo.tsx",
@@ -4598,9 +3646,7 @@
{
"name": "breadcrumb-separator",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-separator.tsx",
@@ -4611,9 +3657,7 @@
{
"name": "breadcrumb-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-dropdown.tsx",
@@ -4624,9 +3668,7 @@
{
"name": "breadcrumb-ellipsis",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-ellipsis.tsx",
@@ -4637,9 +3679,7 @@
{
"name": "breadcrumb-link",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-link.tsx",
@@ -4650,9 +3690,7 @@
{
"name": "breadcrumb-responsive",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-responsive.tsx",
@@ -4663,9 +3701,7 @@
{
"name": "button-demo",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-demo.tsx",
@@ -4676,9 +3712,7 @@
{
"name": "button-default",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-default.tsx",
@@ -4689,9 +3723,7 @@
{
"name": "button-secondary",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-secondary.tsx",
@@ -4702,9 +3734,7 @@
{
"name": "button-destructive",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-destructive.tsx",
@@ -4715,9 +3745,7 @@
{
"name": "button-outline",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-outline.tsx",
@@ -4728,9 +3756,7 @@
{
"name": "button-ghost",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-ghost.tsx",
@@ -4741,9 +3767,7 @@
{
"name": "button-link",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-link.tsx",
@@ -4754,9 +3778,7 @@
{
"name": "button-with-icon",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-with-icon.tsx",
@@ -4767,9 +3789,7 @@
{
"name": "button-loading",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-loading.tsx",
@@ -4780,9 +3800,7 @@
{
"name": "button-icon",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-icon.tsx",
@@ -4793,9 +3811,7 @@
{
"name": "button-as-child",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-as-child.tsx",
@@ -4806,9 +3822,7 @@
{
"name": "button-rounded",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-rounded.tsx",
@@ -4819,9 +3833,7 @@
{
"name": "button-size",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-size.tsx",
@@ -4832,9 +3844,7 @@
{
"name": "button-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-demo.tsx",
@@ -4845,9 +3855,7 @@
{
"name": "button-group-nested",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-nested.tsx",
@@ -4858,9 +3866,7 @@
{
"name": "button-group-size",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-size.tsx",
@@ -4871,9 +3877,7 @@
{
"name": "button-group-separator",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-separator.tsx",
@@ -4884,9 +3888,7 @@
{
"name": "button-group-split",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-split.tsx",
@@ -4897,9 +3899,7 @@
{
"name": "button-group-input",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-input.tsx",
@@ -4910,9 +3910,7 @@
{
"name": "button-group-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-dropdown.tsx",
@@ -4923,9 +3921,7 @@
{
"name": "button-group-select",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-select.tsx",
@@ -4936,9 +3932,7 @@
{
"name": "button-group-popover",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-popover.tsx",
@@ -4949,9 +3943,7 @@
{
"name": "button-group-input-group",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-input-group.tsx",
@@ -4962,9 +3954,7 @@
{
"name": "button-group-orientation",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-orientation.tsx",
@@ -4975,9 +3965,7 @@
{
"name": "calendar-demo",
"type": "registry:example",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/examples/calendar-demo.tsx",
@@ -4988,11 +3976,7 @@
{
"name": "calendar-form",
"type": "registry:example",
- "registryDependencies": [
- "calendar",
- "form",
- "popover"
- ],
+ "registryDependencies": ["calendar", "form", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/calendar-form.tsx",
@@ -5003,11 +3987,7 @@
{
"name": "card-demo",
"type": "registry:example",
- "registryDependencies": [
- "card",
- "button",
- "switch"
- ],
+ "registryDependencies": ["card", "button", "switch"],
"files": [
{
"path": "registry/new-york-v4/examples/card-demo.tsx",
@@ -5018,13 +3998,7 @@
{
"name": "card-with-form",
"type": "registry:example",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "select"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "select"],
"files": [
{
"path": "registry/new-york-v4/examples/card-with-form.tsx",
@@ -5035,9 +4009,7 @@
{
"name": "carousel-demo",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-demo.tsx",
@@ -5048,9 +4020,7 @@
{
"name": "carousel-size",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-size.tsx",
@@ -5061,9 +4031,7 @@
{
"name": "carousel-spacing",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-spacing.tsx",
@@ -5074,9 +4042,7 @@
{
"name": "carousel-orientation",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-orientation.tsx",
@@ -5087,9 +4053,7 @@
{
"name": "carousel-api",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-api.tsx",
@@ -5100,9 +4064,7 @@
{
"name": "carousel-plugin",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-plugin.tsx",
@@ -5113,9 +4075,7 @@
{
"name": "checkbox-demo",
"type": "registry:example",
- "registryDependencies": [
- "checkbox"
- ],
+ "registryDependencies": ["checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-demo.tsx",
@@ -5126,9 +4086,7 @@
{
"name": "checkbox-disabled",
"type": "registry:example",
- "registryDependencies": [
- "checkbox"
- ],
+ "registryDependencies": ["checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-disabled.tsx",
@@ -5139,10 +4097,7 @@
{
"name": "checkbox-form-multiple",
"type": "registry:example",
- "registryDependencies": [
- "checkbox",
- "form"
- ],
+ "registryDependencies": ["checkbox", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-form-multiple.tsx",
@@ -5153,10 +4108,7 @@
{
"name": "checkbox-form-single",
"type": "registry:example",
- "registryDependencies": [
- "checkbox",
- "form"
- ],
+ "registryDependencies": ["checkbox", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-form-single.tsx",
@@ -5167,9 +4119,7 @@
{
"name": "checkbox-with-text",
"type": "registry:example",
- "registryDependencies": [
- "checkbox"
- ],
+ "registryDependencies": ["checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-with-text.tsx",
@@ -5180,9 +4130,7 @@
{
"name": "collapsible-demo",
"type": "registry:example",
- "registryDependencies": [
- "collapsible"
- ],
+ "registryDependencies": ["collapsible"],
"files": [
{
"path": "registry/new-york-v4/examples/collapsible-demo.tsx",
@@ -5193,9 +4141,7 @@
{
"name": "combobox-demo",
"type": "registry:example",
- "registryDependencies": [
- "command"
- ],
+ "registryDependencies": ["command"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-demo.tsx",
@@ -5206,11 +4152,7 @@
{
"name": "combobox-dropdown-menu",
"type": "registry:example",
- "registryDependencies": [
- "command",
- "dropdown-menu",
- "button"
- ],
+ "registryDependencies": ["command", "dropdown-menu", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-dropdown-menu.tsx",
@@ -5221,10 +4163,7 @@
{
"name": "combobox-form",
"type": "registry:example",
- "registryDependencies": [
- "command",
- "form"
- ],
+ "registryDependencies": ["command", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-form.tsx",
@@ -5235,10 +4174,7 @@
{
"name": "combobox-popover",
"type": "registry:example",
- "registryDependencies": [
- "combobox",
- "popover"
- ],
+ "registryDependencies": ["combobox", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-popover.tsx",
@@ -5249,11 +4185,7 @@
{
"name": "combobox-responsive",
"type": "registry:example",
- "registryDependencies": [
- "combobox",
- "popover",
- "drawer"
- ],
+ "registryDependencies": ["combobox", "popover", "drawer"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-responsive.tsx",
@@ -5264,9 +4196,7 @@
{
"name": "command-demo",
"type": "registry:example",
- "registryDependencies": [
- "command"
- ],
+ "registryDependencies": ["command"],
"files": [
{
"path": "registry/new-york-v4/examples/command-demo.tsx",
@@ -5277,10 +4207,7 @@
{
"name": "command-dialog",
"type": "registry:example",
- "registryDependencies": [
- "command",
- "dialog"
- ],
+ "registryDependencies": ["command", "dialog"],
"files": [
{
"path": "registry/new-york-v4/examples/command-dialog.tsx",
@@ -5291,9 +4218,7 @@
{
"name": "context-menu-demo",
"type": "registry:example",
- "registryDependencies": [
- "context-menu"
- ],
+ "registryDependencies": ["context-menu"],
"files": [
{
"path": "registry/new-york-v4/examples/context-menu-demo.tsx",
@@ -5304,9 +4229,7 @@
{
"name": "data-table-demo",
"type": "registry:example",
- "registryDependencies": [
- "data-table"
- ],
+ "registryDependencies": ["data-table"],
"files": [
{
"path": "registry/new-york-v4/examples/data-table-demo.tsx",
@@ -5317,14 +4240,8 @@
{
"name": "date-picker-demo",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "popover"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-demo.tsx",
@@ -5335,15 +4252,8 @@
{
"name": "date-picker-form",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "form",
- "popover"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "form", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-form.tsx",
@@ -5354,15 +4264,8 @@
{
"name": "date-picker-with-presets",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "popover",
- "select"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "popover", "select"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-with-presets.tsx",
@@ -5373,14 +4276,8 @@
{
"name": "date-picker-with-range",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "popover"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-with-range.tsx",
@@ -5391,9 +4288,7 @@
{
"name": "dialog-demo",
"type": "registry:example",
- "registryDependencies": [
- "dialog"
- ],
+ "registryDependencies": ["dialog"],
"files": [
{
"path": "registry/new-york-v4/examples/dialog-demo.tsx",
@@ -5404,10 +4299,7 @@
{
"name": "dialog-close-button",
"type": "registry:example",
- "registryDependencies": [
- "dialog",
- "button"
- ],
+ "registryDependencies": ["dialog", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/dialog-close-button.tsx",
@@ -5418,9 +4310,7 @@
{
"name": "drawer-demo",
"type": "registry:example",
- "registryDependencies": [
- "drawer"
- ],
+ "registryDependencies": ["drawer"],
"files": [
{
"path": "registry/new-york-v4/examples/drawer-demo.tsx",
@@ -5431,10 +4321,7 @@
{
"name": "empty-demo",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button"
- ],
+ "registryDependencies": ["empty", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-demo.tsx",
@@ -5445,9 +4332,7 @@
{
"name": "empty-icon",
"type": "registry:example",
- "registryDependencies": [
- "empty"
- ],
+ "registryDependencies": ["empty"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-icon.tsx",
@@ -5458,11 +4343,7 @@
{
"name": "empty-avatar",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button",
- "avatar"
- ],
+ "registryDependencies": ["empty", "button", "avatar"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-avatar.tsx",
@@ -5473,11 +4354,7 @@
{
"name": "empty-avatar-group",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button",
- "avatar"
- ],
+ "registryDependencies": ["empty", "button", "avatar"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-avatar-group.tsx",
@@ -5488,11 +4365,7 @@
{
"name": "empty-input-group",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button",
- "input"
- ],
+ "registryDependencies": ["empty", "button", "input"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-input-group.tsx",
@@ -5503,10 +4376,7 @@
{
"name": "empty-outline",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button"
- ],
+ "registryDependencies": ["empty", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-outline.tsx",
@@ -5517,9 +4387,7 @@
{
"name": "empty-background",
"type": "registry:example",
- "registryDependencies": [
- "empty"
- ],
+ "registryDependencies": ["empty"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-background.tsx",
@@ -5530,9 +4398,7 @@
{
"name": "field-demo",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-demo.tsx",
@@ -5543,9 +4409,7 @@
{
"name": "field-input",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-input.tsx",
@@ -5556,9 +4420,7 @@
{
"name": "field-textarea",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-textarea.tsx",
@@ -5569,9 +4431,7 @@
{
"name": "field-fieldset",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-fieldset.tsx",
@@ -5582,9 +4442,7 @@
{
"name": "field-radio",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-radio.tsx",
@@ -5595,9 +4453,7 @@
{
"name": "field-checkbox",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-checkbox.tsx",
@@ -5608,9 +4464,7 @@
{
"name": "field-switch",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-switch.tsx",
@@ -5621,9 +4475,7 @@
{
"name": "field-slider",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-slider.tsx",
@@ -5634,9 +4486,7 @@
{
"name": "field-select",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-select.tsx",
@@ -5647,9 +4497,7 @@
{
"name": "field-choice-card",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-choice-card.tsx",
@@ -5660,9 +4508,7 @@
{
"name": "field-group",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-group.tsx",
@@ -5673,9 +4519,7 @@
{
"name": "field-responsive",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-responsive.tsx",
@@ -5683,13 +4527,284 @@
}
]
},
+ {
+ "name": "form-rhf-demo",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-demo.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-input",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "input", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-input.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-select",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "select", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-select.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-checkbox",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "checkbox", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-checkbox.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-switch",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "switch", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-switch.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-textarea",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "textarea", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-textarea.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-radiogroup",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "radio-group", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-radiogroup.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-array",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-array.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-complex",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-complex.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-password",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "input-group",
+ "progress",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-password.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-demo",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-demo.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-input",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "input", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-input.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-textarea",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "textarea", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-textarea.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-select",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "select", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-select.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-checkbox",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "checkbox", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-checkbox.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-switch",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "switch", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-switch.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-radiogroup",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "radio-group", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-radiogroup.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-array",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-array.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-complex",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-complex.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
{
"name": "drawer-dialog",
"type": "registry:example",
- "registryDependencies": [
- "drawer",
- "dialog"
- ],
+ "registryDependencies": ["drawer", "dialog"],
"files": [
{
"path": "registry/new-york-v4/examples/drawer-dialog.tsx",
@@ -5700,9 +4815,7 @@
{
"name": "dropdown-menu-demo",
"type": "registry:example",
- "registryDependencies": [
- "dropdown-menu"
- ],
+ "registryDependencies": ["dropdown-menu"],
"files": [
{
"path": "registry/new-york-v4/examples/dropdown-menu-demo.tsx",
@@ -5713,10 +4826,7 @@
{
"name": "dropdown-menu-checkboxes",
"type": "registry:example",
- "registryDependencies": [
- "dropdown-menu",
- "checkbox"
- ],
+ "registryDependencies": ["dropdown-menu", "checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/dropdown-menu-checkboxes.tsx",
@@ -5727,10 +4837,7 @@
{
"name": "dropdown-menu-radio-group",
"type": "registry:example",
- "registryDependencies": [
- "dropdown-menu",
- "radio-group"
- ],
+ "registryDependencies": ["dropdown-menu", "radio-group"],
"files": [
{
"path": "registry/new-york-v4/examples/dropdown-menu-radio-group.tsx",
@@ -5741,9 +4848,7 @@
{
"name": "hover-card-demo",
"type": "registry:example",
- "registryDependencies": [
- "hover-card"
- ],
+ "registryDependencies": ["hover-card"],
"files": [
{
"path": "registry/new-york-v4/examples/hover-card-demo.tsx",
@@ -5754,9 +4859,7 @@
{
"name": "input-demo",
"type": "registry:example",
- "registryDependencies": [
- "input"
- ],
+ "registryDependencies": ["input"],
"files": [
{
"path": "registry/new-york-v4/examples/input-demo.tsx",
@@ -5767,9 +4870,7 @@
{
"name": "input-disabled",
"type": "registry:example",
- "registryDependencies": [
- "input"
- ],
+ "registryDependencies": ["input"],
"files": [
{
"path": "registry/new-york-v4/examples/input-disabled.tsx",
@@ -5780,9 +4881,7 @@
{
"name": "input-file",
"type": "registry:example",
- "registryDependencies": [
- "input"
- ],
+ "registryDependencies": ["input"],
"files": [
{
"path": "registry/new-york-v4/examples/input-file.tsx",
@@ -5793,11 +4892,7 @@
{
"name": "input-form",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button",
- "form"
- ],
+ "registryDependencies": ["input", "button", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/input-form.tsx",
@@ -5808,10 +4903,7 @@
{
"name": "input-with-button",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button"
- ],
+ "registryDependencies": ["input", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/input-with-button.tsx",
@@ -5822,11 +4914,7 @@
{
"name": "input-with-label",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button",
- "label"
- ],
+ "registryDependencies": ["input", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/input-with-label.tsx",
@@ -5837,11 +4925,7 @@
{
"name": "input-with-text",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button",
- "label"
- ],
+ "registryDependencies": ["input", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/input-with-text.tsx",
@@ -5852,9 +4936,7 @@
{
"name": "input-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-demo.tsx",
@@ -5865,10 +4947,7 @@
{
"name": "input-group-label",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "label"
- ],
+ "registryDependencies": ["input-group", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-label.tsx",
@@ -5879,9 +4958,7 @@
{
"name": "input-group-text",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-text.tsx",
@@ -5892,10 +4969,7 @@
{
"name": "input-group-tooltip",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "tooltip"
- ],
+ "registryDependencies": ["input-group", "tooltip"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-tooltip.tsx",
@@ -5906,9 +4980,7 @@
{
"name": "input-group-button",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-button.tsx",
@@ -5919,10 +4991,7 @@
{
"name": "input-group-button-group",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "button-group"
- ],
+ "registryDependencies": ["input-group", "button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-button-group.tsx",
@@ -5933,11 +5002,7 @@
{
"name": "input-group-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "dropdown-menu",
- "button"
- ],
+ "registryDependencies": ["input-group", "dropdown-menu", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-dropdown.tsx",
@@ -5948,10 +5013,7 @@
{
"name": "input-group-spinner",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "spinner"
- ],
+ "registryDependencies": ["input-group", "spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-spinner.tsx",
@@ -5962,10 +5024,7 @@
{
"name": "input-group-textarea",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "textarea"
- ],
+ "registryDependencies": ["input-group", "textarea"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-textarea.tsx",
@@ -5976,9 +5035,7 @@
{
"name": "input-group-icon",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-icon.tsx",
@@ -6006,9 +5063,7 @@
{
"name": "input-otp-demo",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-demo.tsx",
@@ -6019,9 +5074,7 @@
{
"name": "input-otp-pattern",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-pattern.tsx",
@@ -6032,9 +5085,7 @@
{
"name": "input-otp-separator",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-separator.tsx",
@@ -6045,9 +5096,7 @@
{
"name": "input-otp-controlled",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-controlled.tsx",
@@ -6058,10 +5107,7 @@
{
"name": "input-otp-form",
"type": "registry:example",
- "registryDependencies": [
- "input-otp",
- "form"
- ],
+ "registryDependencies": ["input-otp", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-form.tsx",
@@ -6072,9 +5118,7 @@
{
"name": "item-demo",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-demo.tsx",
@@ -6085,9 +5129,7 @@
{
"name": "item-size",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-size.tsx",
@@ -6098,9 +5140,7 @@
{
"name": "item-variant",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-variant.tsx",
@@ -6111,9 +5151,7 @@
{
"name": "item-icon",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-icon.tsx",
@@ -6124,9 +5162,7 @@
{
"name": "item-image",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-image.tsx",
@@ -6137,9 +5173,7 @@
{
"name": "item-avatar",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-avatar.tsx",
@@ -6150,9 +5184,7 @@
{
"name": "item-group",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-group.tsx",
@@ -6163,9 +5195,7 @@
{
"name": "item-header",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-header.tsx",
@@ -6176,9 +5206,7 @@
{
"name": "item-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-dropdown.tsx",
@@ -6189,9 +5217,7 @@
{
"name": "item-link",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-link.tsx",
@@ -6202,9 +5228,7 @@
{
"name": "kbd-demo",
"type": "registry:example",
- "registryDependencies": [
- "kbd"
- ],
+ "registryDependencies": ["kbd"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-demo.tsx",
@@ -6215,11 +5239,7 @@
{
"name": "kbd-tooltip",
"type": "registry:example",
- "registryDependencies": [
- "kbd",
- "tooltip",
- "button"
- ],
+ "registryDependencies": ["kbd", "tooltip", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-tooltip.tsx",
@@ -6230,12 +5250,7 @@
{
"name": "kbd-input-group",
"type": "registry:example",
- "registryDependencies": [
- "kbd",
- "input",
- "button",
- "label"
- ],
+ "registryDependencies": ["kbd", "input", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-input-group.tsx",
@@ -6246,10 +5261,7 @@
{
"name": "kbd-button",
"type": "registry:example",
- "registryDependencies": [
- "kbd",
- "button"
- ],
+ "registryDependencies": ["kbd", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-button.tsx",
@@ -6260,9 +5272,7 @@
{
"name": "kbd-group",
"type": "registry:example",
- "registryDependencies": [
- "kbd"
- ],
+ "registryDependencies": ["kbd"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-group.tsx",
@@ -6273,9 +5283,7 @@
{
"name": "label-demo",
"type": "registry:example",
- "registryDependencies": [
- "label"
- ],
+ "registryDependencies": ["label"],
"files": [
{
"path": "registry/new-york-v4/examples/label-demo.tsx",
@@ -6286,9 +5294,7 @@
{
"name": "menubar-demo",
"type": "registry:example",
- "registryDependencies": [
- "menubar"
- ],
+ "registryDependencies": ["menubar"],
"files": [
{
"path": "registry/new-york-v4/examples/menubar-demo.tsx",
@@ -6299,9 +5305,7 @@
{
"name": "navigation-menu-demo",
"type": "registry:example",
- "registryDependencies": [
- "navigation-menu"
- ],
+ "registryDependencies": ["navigation-menu"],
"files": [
{
"path": "registry/new-york-v4/examples/navigation-menu-demo.tsx",
@@ -6312,9 +5316,7 @@
{
"name": "pagination-demo",
"type": "registry:example",
- "registryDependencies": [
- "pagination"
- ],
+ "registryDependencies": ["pagination"],
"files": [
{
"path": "registry/new-york-v4/examples/pagination-demo.tsx",
@@ -6325,9 +5327,7 @@
{
"name": "popover-demo",
"type": "registry:example",
- "registryDependencies": [
- "popover"
- ],
+ "registryDependencies": ["popover"],
"files": [
{
"path": "registry/new-york-v4/examples/popover-demo.tsx",
@@ -6338,9 +5338,7 @@
{
"name": "progress-demo",
"type": "registry:example",
- "registryDependencies": [
- "progress"
- ],
+ "registryDependencies": ["progress"],
"files": [
{
"path": "registry/new-york-v4/examples/progress-demo.tsx",
@@ -6351,9 +5349,7 @@
{
"name": "radio-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "radio-group"
- ],
+ "registryDependencies": ["radio-group"],
"files": [
{
"path": "registry/new-york-v4/examples/radio-group-demo.tsx",
@@ -6364,10 +5360,7 @@
{
"name": "radio-group-form",
"type": "registry:example",
- "registryDependencies": [
- "radio-group",
- "form"
- ],
+ "registryDependencies": ["radio-group", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/radio-group-form.tsx",
@@ -6378,9 +5371,7 @@
{
"name": "resizable-demo",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-demo.tsx",
@@ -6391,9 +5382,7 @@
{
"name": "resizable-demo-with-handle",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-demo-with-handle.tsx",
@@ -6404,9 +5393,7 @@
{
"name": "resizable-vertical",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-vertical.tsx",
@@ -6417,9 +5404,7 @@
{
"name": "resizable-handle",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-handle.tsx",
@@ -6430,9 +5415,7 @@
{
"name": "scroll-area-demo",
"type": "registry:example",
- "registryDependencies": [
- "scroll-area"
- ],
+ "registryDependencies": ["scroll-area"],
"files": [
{
"path": "registry/new-york-v4/examples/scroll-area-demo.tsx",
@@ -6443,9 +5426,7 @@
{
"name": "scroll-area-horizontal-demo",
"type": "registry:example",
- "registryDependencies": [
- "scroll-area"
- ],
+ "registryDependencies": ["scroll-area"],
"files": [
{
"path": "registry/new-york-v4/examples/scroll-area-horizontal-demo.tsx",
@@ -6456,9 +5437,7 @@
{
"name": "select-demo",
"type": "registry:example",
- "registryDependencies": [
- "select"
- ],
+ "registryDependencies": ["select"],
"files": [
{
"path": "registry/new-york-v4/examples/select-demo.tsx",
@@ -6469,9 +5448,7 @@
{
"name": "select-scrollable",
"type": "registry:example",
- "registryDependencies": [
- "select"
- ],
+ "registryDependencies": ["select"],
"files": [
{
"path": "registry/new-york-v4/examples/select-scrollable.tsx",
@@ -6482,9 +5459,7 @@
{
"name": "select-form",
"type": "registry:example",
- "registryDependencies": [
- "select"
- ],
+ "registryDependencies": ["select"],
"files": [
{
"path": "registry/new-york-v4/examples/select-form.tsx",
@@ -6495,9 +5470,7 @@
{
"name": "separator-demo",
"type": "registry:example",
- "registryDependencies": [
- "separator"
- ],
+ "registryDependencies": ["separator"],
"files": [
{
"path": "registry/new-york-v4/examples/separator-demo.tsx",
@@ -6508,9 +5481,7 @@
{
"name": "sheet-demo",
"type": "registry:example",
- "registryDependencies": [
- "sheet"
- ],
+ "registryDependencies": ["sheet"],
"files": [
{
"path": "registry/new-york-v4/examples/sheet-demo.tsx",
@@ -6521,9 +5492,7 @@
{
"name": "sheet-side",
"type": "registry:example",
- "registryDependencies": [
- "sheet"
- ],
+ "registryDependencies": ["sheet"],
"files": [
{
"path": "registry/new-york-v4/examples/sheet-side.tsx",
@@ -6534,9 +5503,7 @@
{
"name": "skeleton-demo",
"type": "registry:example",
- "registryDependencies": [
- "skeleton"
- ],
+ "registryDependencies": ["skeleton"],
"files": [
{
"path": "registry/new-york-v4/examples/skeleton-demo.tsx",
@@ -6547,9 +5514,7 @@
{
"name": "skeleton-card",
"type": "registry:example",
- "registryDependencies": [
- "skeleton"
- ],
+ "registryDependencies": ["skeleton"],
"files": [
{
"path": "registry/new-york-v4/examples/skeleton-card.tsx",
@@ -6560,9 +5525,7 @@
{
"name": "slider-demo",
"type": "registry:example",
- "registryDependencies": [
- "slider"
- ],
+ "registryDependencies": ["slider"],
"files": [
{
"path": "registry/new-york-v4/examples/slider-demo.tsx",
@@ -6573,9 +5536,7 @@
{
"name": "sonner-demo",
"type": "registry:example",
- "registryDependencies": [
- "sonner"
- ],
+ "registryDependencies": ["sonner"],
"files": [
{
"path": "registry/new-york-v4/examples/sonner-demo.tsx",
@@ -6586,9 +5547,7 @@
{
"name": "spinner-demo",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-demo.tsx",
@@ -6599,10 +5558,7 @@
{
"name": "spinner-basic",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "button"
- ],
+ "registryDependencies": ["spinner", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-basic.tsx",
@@ -6613,10 +5569,7 @@
{
"name": "spinner-button",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "button"
- ],
+ "registryDependencies": ["spinner", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-button.tsx",
@@ -6627,10 +5580,7 @@
{
"name": "spinner-badge",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "badge"
- ],
+ "registryDependencies": ["spinner", "badge"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-badge.tsx",
@@ -6641,11 +5591,7 @@
{
"name": "spinner-input-group",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "button",
- "input"
- ],
+ "registryDependencies": ["spinner", "button", "input"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-input-group.tsx",
@@ -6656,9 +5602,7 @@
{
"name": "spinner-empty",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-empty.tsx",
@@ -6669,9 +5613,7 @@
{
"name": "spinner-color",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-color.tsx",
@@ -6682,9 +5624,7 @@
{
"name": "spinner-custom",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-custom.tsx",
@@ -6695,9 +5635,7 @@
{
"name": "spinner-size",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-size.tsx",
@@ -6708,9 +5646,7 @@
{
"name": "spinner-item",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-item.tsx",
@@ -6721,9 +5657,7 @@
{
"name": "switch-demo",
"type": "registry:example",
- "registryDependencies": [
- "switch"
- ],
+ "registryDependencies": ["switch"],
"files": [
{
"path": "registry/new-york-v4/examples/switch-demo.tsx",
@@ -6734,10 +5668,7 @@
{
"name": "switch-form",
"type": "registry:example",
- "registryDependencies": [
- "switch",
- "form"
- ],
+ "registryDependencies": ["switch", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/switch-form.tsx",
@@ -6748,9 +5679,7 @@
{
"name": "table-demo",
"type": "registry:example",
- "registryDependencies": [
- "table"
- ],
+ "registryDependencies": ["table"],
"files": [
{
"path": "registry/new-york-v4/examples/table-demo.tsx",
@@ -6761,9 +5690,7 @@
{
"name": "tabs-demo",
"type": "registry:example",
- "registryDependencies": [
- "tabs"
- ],
+ "registryDependencies": ["tabs"],
"files": [
{
"path": "registry/new-york-v4/examples/tabs-demo.tsx",
@@ -6774,9 +5701,7 @@
{
"name": "textarea-demo",
"type": "registry:example",
- "registryDependencies": [
- "textarea"
- ],
+ "registryDependencies": ["textarea"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-demo.tsx",
@@ -6787,9 +5712,7 @@
{
"name": "textarea-disabled",
"type": "registry:example",
- "registryDependencies": [
- "textarea"
- ],
+ "registryDependencies": ["textarea"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-disabled.tsx",
@@ -6800,10 +5723,7 @@
{
"name": "textarea-form",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "form"
- ],
+ "registryDependencies": ["textarea", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-form.tsx",
@@ -6814,10 +5734,7 @@
{
"name": "textarea-with-button",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "button"
- ],
+ "registryDependencies": ["textarea", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-with-button.tsx",
@@ -6828,10 +5745,7 @@
{
"name": "textarea-with-label",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "label"
- ],
+ "registryDependencies": ["textarea", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-with-label.tsx",
@@ -6842,10 +5756,7 @@
{
"name": "textarea-with-text",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "label"
- ],
+ "registryDependencies": ["textarea", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-with-text.tsx",
@@ -6856,9 +5767,7 @@
{
"name": "toggle-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-demo.tsx",
@@ -6869,9 +5778,7 @@
{
"name": "toggle-group-disabled",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-disabled.tsx",
@@ -6882,9 +5789,7 @@
{
"name": "toggle-group-lg",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-lg.tsx",
@@ -6895,9 +5800,7 @@
{
"name": "toggle-group-outline",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-outline.tsx",
@@ -6908,9 +5811,7 @@
{
"name": "toggle-group-sm",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-sm.tsx",
@@ -6921,9 +5822,7 @@
{
"name": "toggle-group-single",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-single.tsx",
@@ -6934,9 +5833,7 @@
{
"name": "toggle-demo",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-demo.tsx",
@@ -6947,9 +5844,7 @@
{
"name": "toggle-disabled",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-disabled.tsx",
@@ -6960,9 +5855,7 @@
{
"name": "toggle-lg",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-lg.tsx",
@@ -6973,9 +5866,7 @@
{
"name": "toggle-outline",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-outline.tsx",
@@ -6986,9 +5877,7 @@
{
"name": "toggle-sm",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-sm.tsx",
@@ -6999,9 +5888,7 @@
{
"name": "toggle-with-text",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-with-text.tsx",
@@ -7012,9 +5899,7 @@
{
"name": "tooltip-demo",
"type": "registry:example",
- "registryDependencies": [
- "tooltip"
- ],
+ "registryDependencies": ["tooltip"],
"files": [
{
"path": "registry/new-york-v4/examples/tooltip-demo.tsx",
@@ -7236,9 +6121,7 @@
"name": "calendar-hijri",
"type": "registry:example",
"description": "A Persian calendar.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/examples/calendar-hijri.tsx",
@@ -7250,10 +6133,7 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "sidebar-demo",
@@ -7386,4 +6266,4 @@
]
}
]
-}
\ No newline at end of file
+}
diff --git a/apps/v4/registry.json b/apps/v4/registry.json
index 87d84120d0..ae12fd8a78 100644
--- a/apps/v4/registry.json
+++ b/apps/v4/registry.json
@@ -5,41 +5,25 @@
{
"name": "index",
"type": "registry:style",
- "dependencies": [
- "class-variance-authority",
- "lucide-react"
- ],
- "devDependencies": [
- "tw-animate-css"
- ],
- "registryDependencies": [
- "utils"
- ],
+ "dependencies": ["class-variance-authority", "lucide-react"],
+ "devDependencies": ["tw-animate-css"],
+ "registryDependencies": ["utils"],
"files": [],
"cssVars": {}
},
{
"name": "style",
"type": "registry:style",
- "dependencies": [
- "class-variance-authority",
- "lucide-react"
- ],
- "devDependencies": [
- "tw-animate-css"
- ],
- "registryDependencies": [
- "utils"
- ],
+ "dependencies": ["class-variance-authority", "lucide-react"],
+ "devDependencies": ["tw-animate-css"],
+ "registryDependencies": ["utils"],
"files": [],
"cssVars": {}
},
{
"name": "accordion",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-accordion"
- ],
+ "dependencies": ["@radix-ui/react-accordion"],
"files": [
{
"path": "registry/new-york-v4/ui/accordion.tsx",
@@ -60,12 +44,8 @@
{
"name": "alert-dialog",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-alert-dialog"
- ],
- "registryDependencies": [
- "button"
- ],
+ "dependencies": ["@radix-ui/react-alert-dialog"],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/alert-dialog.tsx",
@@ -76,9 +56,7 @@
{
"name": "aspect-ratio",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-aspect-ratio"
- ],
+ "dependencies": ["@radix-ui/react-aspect-ratio"],
"files": [
{
"path": "registry/new-york-v4/ui/aspect-ratio.tsx",
@@ -89,9 +67,7 @@
{
"name": "avatar",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-avatar"
- ],
+ "dependencies": ["@radix-ui/react-avatar"],
"files": [
{
"path": "registry/new-york-v4/ui/avatar.tsx",
@@ -102,9 +78,7 @@
{
"name": "badge",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slot"
- ],
+ "dependencies": ["@radix-ui/react-slot"],
"files": [
{
"path": "registry/new-york-v4/ui/badge.tsx",
@@ -115,9 +89,7 @@
{
"name": "breadcrumb",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slot"
- ],
+ "dependencies": ["@radix-ui/react-slot"],
"files": [
{
"path": "registry/new-york-v4/ui/breadcrumb.tsx",
@@ -128,9 +100,7 @@
{
"name": "button",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slot"
- ],
+ "dependencies": ["@radix-ui/react-slot"],
"files": [
{
"path": "registry/new-york-v4/ui/button.tsx",
@@ -141,10 +111,7 @@
{
"name": "button-group",
"type": "registry:ui",
- "registryDependencies": [
- "button",
- "separator"
- ],
+ "registryDependencies": ["button", "separator"],
"files": [
{
"path": "registry/new-york-v4/ui/button-group.tsx",
@@ -155,13 +122,8 @@
{
"name": "calendar",
"type": "registry:ui",
- "dependencies": [
- "react-day-picker@latest",
- "date-fns"
- ],
- "registryDependencies": [
- "button"
- ],
+ "dependencies": ["react-day-picker@latest", "date-fns"],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/calendar.tsx",
@@ -182,12 +144,8 @@
{
"name": "carousel",
"type": "registry:ui",
- "dependencies": [
- "embla-carousel-react"
- ],
- "registryDependencies": [
- "button"
- ],
+ "dependencies": ["embla-carousel-react"],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/carousel.tsx",
@@ -198,13 +156,8 @@
{
"name": "chart",
"type": "registry:ui",
- "dependencies": [
- "recharts@2.15.4",
- "lucide-react"
- ],
- "registryDependencies": [
- "card"
- ],
+ "dependencies": ["recharts@2.15.4", "lucide-react"],
+ "registryDependencies": ["card"],
"files": [
{
"path": "registry/new-york-v4/ui/chart.tsx",
@@ -215,9 +168,7 @@
{
"name": "checkbox",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-checkbox"
- ],
+ "dependencies": ["@radix-ui/react-checkbox"],
"files": [
{
"path": "registry/new-york-v4/ui/checkbox.tsx",
@@ -228,9 +179,7 @@
{
"name": "collapsible",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-collapsible"
- ],
+ "dependencies": ["@radix-ui/react-collapsible"],
"files": [
{
"path": "registry/new-york-v4/ui/collapsible.tsx",
@@ -241,12 +190,8 @@
{
"name": "command",
"type": "registry:ui",
- "dependencies": [
- "cmdk"
- ],
- "registryDependencies": [
- "dialog"
- ],
+ "dependencies": ["cmdk"],
+ "registryDependencies": ["dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/command.tsx",
@@ -257,9 +202,7 @@
{
"name": "context-menu",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-context-menu"
- ],
+ "dependencies": ["@radix-ui/react-context-menu"],
"files": [
{
"path": "registry/new-york-v4/ui/context-menu.tsx",
@@ -270,9 +213,7 @@
{
"name": "dialog",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-dialog"
- ],
+ "dependencies": ["@radix-ui/react-dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/dialog.tsx",
@@ -283,10 +224,7 @@
{
"name": "drawer",
"type": "registry:ui",
- "dependencies": [
- "vaul",
- "@radix-ui/react-dialog"
- ],
+ "dependencies": ["vaul", "@radix-ui/react-dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/drawer.tsx",
@@ -297,9 +235,7 @@
{
"name": "dropdown-menu",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-dropdown-menu"
- ],
+ "dependencies": ["@radix-ui/react-dropdown-menu"],
"files": [
{
"path": "registry/new-york-v4/ui/dropdown-menu.tsx",
@@ -320,10 +256,7 @@
{
"name": "field",
"type": "registry:ui",
- "registryDependencies": [
- "label",
- "separator"
- ],
+ "registryDependencies": ["label", "separator"],
"files": [
{
"path": "registry/new-york-v4/ui/field.tsx",
@@ -341,10 +274,7 @@
"zod",
"react-hook-form"
],
- "registryDependencies": [
- "button",
- "label"
- ],
+ "registryDependencies": ["button", "label"],
"files": [
{
"path": "registry/new-york-v4/ui/form.tsx",
@@ -355,9 +285,7 @@
{
"name": "hover-card",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-hover-card"
- ],
+ "dependencies": ["@radix-ui/react-hover-card"],
"files": [
{
"path": "registry/new-york-v4/ui/hover-card.tsx",
@@ -378,11 +306,7 @@
{
"name": "input-group",
"type": "registry:ui",
- "registryDependencies": [
- "button",
- "input",
- "textarea"
- ],
+ "registryDependencies": ["button", "input", "textarea"],
"files": [
{
"path": "registry/new-york-v4/ui/input-group.tsx",
@@ -393,9 +317,7 @@
{
"name": "input-otp",
"type": "registry:ui",
- "dependencies": [
- "input-otp"
- ],
+ "dependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/ui/input-otp.tsx",
@@ -406,9 +328,7 @@
{
"name": "item",
"type": "registry:ui",
- "registryDependencies": [
- "separator"
- ],
+ "registryDependencies": ["separator"],
"files": [
{
"path": "registry/new-york-v4/ui/item.tsx",
@@ -419,9 +339,7 @@
{
"name": "label",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-label"
- ],
+ "dependencies": ["@radix-ui/react-label"],
"files": [
{
"path": "registry/new-york-v4/ui/label.tsx",
@@ -432,9 +350,7 @@
{
"name": "menubar",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-menubar"
- ],
+ "dependencies": ["@radix-ui/react-menubar"],
"files": [
{
"path": "registry/new-york-v4/ui/menubar.tsx",
@@ -445,9 +361,7 @@
{
"name": "navigation-menu",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-navigation-menu"
- ],
+ "dependencies": ["@radix-ui/react-navigation-menu"],
"files": [
{
"path": "registry/new-york-v4/ui/navigation-menu.tsx",
@@ -458,9 +372,7 @@
{
"name": "pagination",
"type": "registry:ui",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/pagination.tsx",
@@ -471,9 +383,7 @@
{
"name": "popover",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-popover"
- ],
+ "dependencies": ["@radix-ui/react-popover"],
"files": [
{
"path": "registry/new-york-v4/ui/popover.tsx",
@@ -484,9 +394,7 @@
{
"name": "progress",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-progress"
- ],
+ "dependencies": ["@radix-ui/react-progress"],
"files": [
{
"path": "registry/new-york-v4/ui/progress.tsx",
@@ -497,9 +405,7 @@
{
"name": "radio-group",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-radio-group"
- ],
+ "dependencies": ["@radix-ui/react-radio-group"],
"files": [
{
"path": "registry/new-york-v4/ui/radio-group.tsx",
@@ -510,9 +416,7 @@
{
"name": "resizable",
"type": "registry:ui",
- "dependencies": [
- "react-resizable-panels"
- ],
+ "dependencies": ["react-resizable-panels"],
"files": [
{
"path": "registry/new-york-v4/ui/resizable.tsx",
@@ -523,9 +427,7 @@
{
"name": "scroll-area",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-scroll-area"
- ],
+ "dependencies": ["@radix-ui/react-scroll-area"],
"files": [
{
"path": "registry/new-york-v4/ui/scroll-area.tsx",
@@ -536,9 +438,7 @@
{
"name": "select",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-select"
- ],
+ "dependencies": ["@radix-ui/react-select"],
"files": [
{
"path": "registry/new-york-v4/ui/select.tsx",
@@ -549,9 +449,7 @@
{
"name": "separator",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-separator"
- ],
+ "dependencies": ["@radix-ui/react-separator"],
"files": [
{
"path": "registry/new-york-v4/ui/separator.tsx",
@@ -562,9 +460,7 @@
{
"name": "sheet",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-dialog"
- ],
+ "dependencies": ["@radix-ui/react-dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/sheet.tsx",
@@ -651,9 +547,7 @@
{
"name": "slider",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slider"
- ],
+ "dependencies": ["@radix-ui/react-slider"],
"files": [
{
"path": "registry/new-york-v4/ui/slider.tsx",
@@ -664,10 +558,7 @@
{
"name": "sonner",
"type": "registry:ui",
- "dependencies": [
- "sonner",
- "next-themes"
- ],
+ "dependencies": ["sonner", "next-themes"],
"files": [
{
"path": "registry/new-york-v4/ui/sonner.tsx",
@@ -678,9 +569,7 @@
{
"name": "spinner",
"type": "registry:ui",
- "dependencies": [
- "class-variance-authority"
- ],
+ "dependencies": ["class-variance-authority"],
"files": [
{
"path": "registry/new-york-v4/ui/spinner.tsx",
@@ -691,9 +580,7 @@
{
"name": "switch",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-switch"
- ],
+ "dependencies": ["@radix-ui/react-switch"],
"files": [
{
"path": "registry/new-york-v4/ui/switch.tsx",
@@ -714,9 +601,7 @@
{
"name": "tabs",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-tabs"
- ],
+ "dependencies": ["@radix-ui/react-tabs"],
"files": [
{
"path": "registry/new-york-v4/ui/tabs.tsx",
@@ -737,9 +622,7 @@
{
"name": "toggle",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-toggle"
- ],
+ "dependencies": ["@radix-ui/react-toggle"],
"files": [
{
"path": "registry/new-york-v4/ui/toggle.tsx",
@@ -750,12 +633,8 @@
{
"name": "toggle-group",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-toggle-group"
- ],
- "registryDependencies": [
- "toggle"
- ],
+ "dependencies": ["@radix-ui/react-toggle-group"],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/ui/toggle-group.tsx",
@@ -766,9 +645,7 @@
{
"name": "tooltip",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-tooltip"
- ],
+ "dependencies": ["@radix-ui/react-tooltip"],
"files": [
{
"path": "registry/new-york-v4/ui/tooltip.tsx",
@@ -871,9 +748,7 @@
"meta": {
"iframeHeight": "1000px"
},
- "categories": [
- "dashboard"
- ]
+ "categories": ["dashboard"]
},
{
"name": "sidebar-01",
@@ -905,10 +780,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-02",
@@ -940,19 +812,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-03",
"type": "registry:block",
"description": "A sidebar with submenus.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-03/page.tsx",
@@ -964,20 +830,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-04",
"type": "registry:block",
"description": "A floating sidebar with submenus.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb",
- "separator"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb", "separator"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-04/page.tsx",
@@ -989,10 +848,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-05",
@@ -1020,10 +876,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-06",
@@ -1055,10 +908,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-07",
@@ -1099,10 +949,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-08",
@@ -1143,10 +990,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-09",
@@ -1177,10 +1021,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-10",
@@ -1229,10 +1070,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-11",
@@ -1255,10 +1093,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-12",
@@ -1296,21 +1131,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-13",
"type": "registry:block",
"description": "A sidebar in a dialog.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb",
- "button",
- "dialog"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb", "button", "dialog"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-13/page.tsx",
@@ -1322,19 +1149,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-14",
"type": "registry:block",
"description": "A sidebar on the right.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-14/page.tsx",
@@ -1346,10 +1167,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-15",
@@ -1412,10 +1230,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-16",
@@ -1466,22 +1281,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "login-01",
"type": "registry:block",
"description": "A simple login form.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-01/page.tsx",
@@ -1493,21 +1299,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-02",
"type": "registry:block",
"description": "A two column login page with a cover image.",
- "registryDependencies": [
- "button",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-02/page.tsx",
@@ -1519,22 +1317,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-03",
"type": "registry:block",
"description": "A login page with a muted background color.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-03/page.tsx",
@@ -1546,22 +1335,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-04",
"type": "registry:block",
"description": "A login page with form and image.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-04/page.tsx",
@@ -1573,21 +1353,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-05",
"type": "registry:block",
"description": "A simple email-only login page.",
- "registryDependencies": [
- "button",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-05/page.tsx",
@@ -1599,18 +1371,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "calendar-01",
"type": "registry:block",
"description": "A simple calendar.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-01.tsx",
@@ -1622,18 +1389,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-02",
"type": "registry:block",
"description": "Multiple months with single selection.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-02.tsx",
@@ -1645,18 +1407,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-03",
"type": "registry:block",
"description": "Multiple months with multiple selection.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-03.tsx",
@@ -1668,18 +1425,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-04",
"type": "registry:block",
"description": "Single month with range selection",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-04.tsx",
@@ -1691,18 +1443,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0 xl:pt-28",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-05",
"type": "registry:block",
"description": "Multiple months with range selection",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-05.tsx",
@@ -1714,18 +1461,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-06",
"type": "registry:block",
"description": "Range selection with minimum days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-06.tsx",
@@ -1737,18 +1479,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-07",
"type": "registry:block",
"description": "Range selection with minimum and maximum days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-07.tsx",
@@ -1760,18 +1497,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-08",
"type": "registry:block",
"description": "Calendar with disabled days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-08.tsx",
@@ -1783,18 +1515,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-09",
"type": "registry:block",
"description": "Calendar with disabled weekends",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-09.tsx",
@@ -1806,20 +1533,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-10",
"type": "registry:block",
"description": "Today button",
- "registryDependencies": [
- "calendar",
- "card",
- "button"
- ],
+ "registryDependencies": ["calendar", "card", "button"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-10.tsx",
@@ -1831,18 +1551,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-11",
"type": "registry:block",
"description": "Start and end of month",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-11.tsx",
@@ -1854,20 +1569,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-12",
"type": "registry:block",
"description": "Localized calendar",
- "registryDependencies": [
- "calendar",
- "card",
- "select"
- ],
+ "registryDependencies": ["calendar", "card", "select"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-12.tsx",
@@ -1879,20 +1587,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-13",
"type": "registry:block",
"description": "With Month and Year Dropdown",
- "registryDependencies": [
- "calendar",
- "label",
- "select"
- ],
+ "registryDependencies": ["calendar", "label", "select"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-13.tsx",
@@ -1904,18 +1605,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-14",
"type": "registry:block",
"description": "With Booked/Unavailable Days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-14.tsx",
@@ -1927,18 +1623,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-15",
"type": "registry:block",
"description": "With Week Numbers",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-15.tsx",
@@ -1950,21 +1641,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-16",
"type": "registry:block",
"description": "With time picker",
- "registryDependencies": [
- "calendar",
- "card",
- "input",
- "label"
- ],
+ "registryDependencies": ["calendar", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-16.tsx",
@@ -1976,21 +1659,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-17",
"type": "registry:block",
"description": "With time picker inline",
- "registryDependencies": [
- "calendar",
- "card",
- "input",
- "label"
- ],
+ "registryDependencies": ["calendar", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-17.tsx",
@@ -2002,18 +1677,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-18",
"type": "registry:block",
"description": "Variable size",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-18.tsx",
@@ -2025,24 +1695,14 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-19",
"type": "registry:block",
"description": "With presets",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "calendar",
- "card",
- "input",
- "label"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["calendar", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-19.tsx",
@@ -2054,20 +1714,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-20",
"type": "registry:block",
"description": "With time presets",
- "registryDependencies": [
- "calendar",
- "card",
- "button"
- ],
+ "registryDependencies": ["calendar", "card", "button"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-20.tsx",
@@ -2079,18 +1732,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-21",
"type": "registry:block",
"description": "Custom days and formatters",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-21.tsx",
@@ -2102,21 +1750,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-22",
"type": "registry:block",
"description": "Date picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-22.tsx",
@@ -2128,21 +1768,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-23",
"type": "registry:block",
"description": "Date range picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-23.tsx",
@@ -2154,21 +1786,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-24",
"type": "registry:block",
"description": "Date and Time picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-24.tsx",
@@ -2180,21 +1804,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-25",
"type": "registry:block",
"description": "Date and Time range picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-25.tsx",
@@ -2206,10 +1822,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-26",
@@ -2233,10 +1846,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-27",
@@ -2260,10 +1870,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-28",
@@ -2287,18 +1894,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-29",
"type": "registry:block",
"description": "Natural language date picker",
- "dependencies": [
- "chrono-node"
- ],
+ "dependencies": ["chrono-node"],
"registryDependencies": [
"calendar",
"input",
@@ -2317,10 +1919,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-30",
@@ -2344,20 +1943,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-31",
"type": "registry:block",
"description": "With event slots",
- "registryDependencies": [
- "calendar",
- "card",
- "button"
- ],
+ "registryDependencies": ["calendar", "card", "button"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-31.tsx",
@@ -2369,20 +1961,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-32",
"type": "registry:block",
"description": "Date picker in a drawer",
- "registryDependencies": [
- "calendar",
- "button",
- "drawer"
- ],
+ "registryDependencies": ["calendar", "button", "drawer"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-32.tsx",
@@ -2394,21 +1979,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "signup-01",
"type": "registry:block",
"description": "A simple signup form.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label"
- ],
+ "registryDependencies": ["button", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-01/page.tsx",
@@ -2420,21 +1997,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-02",
"type": "registry:block",
"description": "A two column signup page with a cover image.",
- "registryDependencies": [
- "button",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-02/page.tsx",
@@ -2446,22 +2015,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-03",
"type": "registry:block",
"description": "A signup page with a muted background color.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-03/page.tsx",
@@ -2473,22 +2033,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-04",
"type": "registry:block",
"description": "A signup page with form and image.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-04/page.tsx",
@@ -2500,20 +2051,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-05",
"type": "registry:block",
"description": "A simple signup form with social providers.",
- "registryDependencies": [
- "button",
- "input",
- "label"
- ],
+ "registryDependencies": ["button", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-05/page.tsx",
@@ -2525,22 +2069,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "otp-01",
"type": "registry:block",
"description": "A simple OTP verification form.",
- "registryDependencies": [
- "button",
- "card",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-01/page.tsx",
@@ -2552,21 +2087,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-02",
"type": "registry:block",
"description": "A two column OTP page with a cover image.",
- "registryDependencies": [
- "button",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-02/page.tsx",
@@ -2578,22 +2105,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-03",
"type": "registry:block",
"description": "An OTP page with a muted background color.",
- "registryDependencies": [
- "button",
- "card",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-03/page.tsx",
@@ -2605,22 +2123,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-04",
"type": "registry:block",
"description": "An OTP page with form and image.",
- "registryDependencies": [
- "button",
- "card",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-04/page.tsx",
@@ -2632,21 +2141,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-05",
"type": "registry:block",
"description": "A simple OTP form with social providers.",
- "registryDependencies": [
- "button",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-05/page.tsx",
@@ -2658,10 +2159,7 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "new-components-01",
@@ -2796,1279 +2294,852 @@
"type": "registry:component"
}
],
- "categories": [
- "components",
- "showcase"
- ]
+ "categories": ["components", "showcase"]
},
{
"name": "chart-area-axes",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-axes.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-gradient",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-gradient.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-icons",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-icons.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart",
- "select"
- ],
+ "registryDependencies": ["card", "chart", "select"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-interactive.tsx",
"type": "registry:component"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-legend",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-legend.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-linear",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-linear.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-stacked-expand",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-stacked-expand.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-step",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-step.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-bar-active",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-active.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-horizontal",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-horizontal.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-interactive.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-mixed",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-mixed.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-multiple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-multiple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-negative",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-negative.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-line-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-dots-colors",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-dots-colors.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-dots-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-dots-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-dots",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-dots.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-interactive.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-linear",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-linear.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-multiple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-multiple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-step",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-step.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-pie-donut-active",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-donut-active.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-donut-text",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-donut-text.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-donut",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-donut.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-interactive.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-label-list",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-label-list.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-legend",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-legend.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-separator-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-separator-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-simple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-simple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-radar-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-dots",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-dots.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-circle-fill",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-circle-fill.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-circle-no-lines",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-circle-no-lines.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-circle",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-circle.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-fill",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-fill.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-icons",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-icons.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-legend",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-legend.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-lines-only",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-lines-only.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-multiple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-multiple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-radius",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-radius.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radial-grid",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-grid.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-shape",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-shape.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-simple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-simple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-text",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-text.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-tooltip-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-indicator-line",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-indicator-line.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-indicator-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-indicator-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-label-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-label-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-label-formatter",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-label-formatter.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-formatter",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-formatter.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-icons",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-icons.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-advanced",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-advanced.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "utils",
"type": "registry:lib",
- "dependencies": [
- "clsx",
- "tailwind-merge"
- ],
+ "dependencies": ["clsx", "tailwind-merge"],
"files": [
{
"path": "registry/new-york-v4/lib/utils.ts",
@@ -4454,9 +3525,7 @@
{
"name": "accordion-demo",
"type": "registry:example",
- "registryDependencies": [
- "accordion"
- ],
+ "registryDependencies": ["accordion"],
"files": [
{
"path": "registry/new-york-v4/examples/accordion-demo.tsx",
@@ -4467,9 +3536,7 @@
{
"name": "alert-demo",
"type": "registry:example",
- "registryDependencies": [
- "alert"
- ],
+ "registryDependencies": ["alert"],
"files": [
{
"path": "registry/new-york-v4/examples/alert-demo.tsx",
@@ -4480,9 +3547,7 @@
{
"name": "alert-destructive",
"type": "registry:example",
- "registryDependencies": [
- "alert"
- ],
+ "registryDependencies": ["alert"],
"files": [
{
"path": "registry/new-york-v4/examples/alert-destructive.tsx",
@@ -4493,10 +3558,7 @@
{
"name": "alert-dialog-demo",
"type": "registry:example",
- "registryDependencies": [
- "alert-dialog",
- "button"
- ],
+ "registryDependencies": ["alert-dialog", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/alert-dialog-demo.tsx",
@@ -4507,9 +3569,7 @@
{
"name": "aspect-ratio-demo",
"type": "registry:example",
- "registryDependencies": [
- "aspect-ratio"
- ],
+ "registryDependencies": ["aspect-ratio"],
"files": [
{
"path": "registry/new-york-v4/examples/aspect-ratio-demo.tsx",
@@ -4520,9 +3580,7 @@
{
"name": "avatar-demo",
"type": "registry:example",
- "registryDependencies": [
- "avatar"
- ],
+ "registryDependencies": ["avatar"],
"files": [
{
"path": "registry/new-york-v4/examples/avatar-demo.tsx",
@@ -4533,9 +3591,7 @@
{
"name": "badge-demo",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-demo.tsx",
@@ -4546,9 +3602,7 @@
{
"name": "badge-destructive",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-destructive.tsx",
@@ -4559,9 +3613,7 @@
{
"name": "badge-outline",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-outline.tsx",
@@ -4572,9 +3624,7 @@
{
"name": "badge-secondary",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-secondary.tsx",
@@ -4585,9 +3635,7 @@
{
"name": "breadcrumb-demo",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-demo.tsx",
@@ -4598,9 +3646,7 @@
{
"name": "breadcrumb-separator",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-separator.tsx",
@@ -4611,9 +3657,7 @@
{
"name": "breadcrumb-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-dropdown.tsx",
@@ -4624,9 +3668,7 @@
{
"name": "breadcrumb-ellipsis",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-ellipsis.tsx",
@@ -4637,9 +3679,7 @@
{
"name": "breadcrumb-link",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-link.tsx",
@@ -4650,9 +3690,7 @@
{
"name": "breadcrumb-responsive",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-responsive.tsx",
@@ -4663,9 +3701,7 @@
{
"name": "button-demo",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-demo.tsx",
@@ -4676,9 +3712,7 @@
{
"name": "button-default",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-default.tsx",
@@ -4689,9 +3723,7 @@
{
"name": "button-secondary",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-secondary.tsx",
@@ -4702,9 +3734,7 @@
{
"name": "button-destructive",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-destructive.tsx",
@@ -4715,9 +3745,7 @@
{
"name": "button-outline",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-outline.tsx",
@@ -4728,9 +3756,7 @@
{
"name": "button-ghost",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-ghost.tsx",
@@ -4741,9 +3767,7 @@
{
"name": "button-link",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-link.tsx",
@@ -4754,9 +3778,7 @@
{
"name": "button-with-icon",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-with-icon.tsx",
@@ -4767,9 +3789,7 @@
{
"name": "button-loading",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-loading.tsx",
@@ -4780,9 +3800,7 @@
{
"name": "button-icon",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-icon.tsx",
@@ -4793,9 +3811,7 @@
{
"name": "button-as-child",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-as-child.tsx",
@@ -4806,9 +3822,7 @@
{
"name": "button-rounded",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-rounded.tsx",
@@ -4819,9 +3833,7 @@
{
"name": "button-size",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-size.tsx",
@@ -4832,9 +3844,7 @@
{
"name": "button-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-demo.tsx",
@@ -4845,9 +3855,7 @@
{
"name": "button-group-nested",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-nested.tsx",
@@ -4858,9 +3866,7 @@
{
"name": "button-group-size",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-size.tsx",
@@ -4871,9 +3877,7 @@
{
"name": "button-group-separator",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-separator.tsx",
@@ -4884,9 +3888,7 @@
{
"name": "button-group-split",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-split.tsx",
@@ -4897,9 +3899,7 @@
{
"name": "button-group-input",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-input.tsx",
@@ -4910,9 +3910,7 @@
{
"name": "button-group-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-dropdown.tsx",
@@ -4923,9 +3921,7 @@
{
"name": "button-group-select",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-select.tsx",
@@ -4936,9 +3932,7 @@
{
"name": "button-group-popover",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-popover.tsx",
@@ -4949,9 +3943,7 @@
{
"name": "button-group-input-group",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-input-group.tsx",
@@ -4962,9 +3954,7 @@
{
"name": "button-group-orientation",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-orientation.tsx",
@@ -4975,9 +3965,7 @@
{
"name": "calendar-demo",
"type": "registry:example",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/examples/calendar-demo.tsx",
@@ -4988,11 +3976,7 @@
{
"name": "calendar-form",
"type": "registry:example",
- "registryDependencies": [
- "calendar",
- "form",
- "popover"
- ],
+ "registryDependencies": ["calendar", "form", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/calendar-form.tsx",
@@ -5003,11 +3987,7 @@
{
"name": "card-demo",
"type": "registry:example",
- "registryDependencies": [
- "card",
- "button",
- "switch"
- ],
+ "registryDependencies": ["card", "button", "switch"],
"files": [
{
"path": "registry/new-york-v4/examples/card-demo.tsx",
@@ -5018,13 +3998,7 @@
{
"name": "card-with-form",
"type": "registry:example",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "select"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "select"],
"files": [
{
"path": "registry/new-york-v4/examples/card-with-form.tsx",
@@ -5035,9 +4009,7 @@
{
"name": "carousel-demo",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-demo.tsx",
@@ -5048,9 +4020,7 @@
{
"name": "carousel-size",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-size.tsx",
@@ -5061,9 +4031,7 @@
{
"name": "carousel-spacing",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-spacing.tsx",
@@ -5074,9 +4042,7 @@
{
"name": "carousel-orientation",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-orientation.tsx",
@@ -5087,9 +4053,7 @@
{
"name": "carousel-api",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-api.tsx",
@@ -5100,9 +4064,7 @@
{
"name": "carousel-plugin",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-plugin.tsx",
@@ -5113,9 +4075,7 @@
{
"name": "checkbox-demo",
"type": "registry:example",
- "registryDependencies": [
- "checkbox"
- ],
+ "registryDependencies": ["checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-demo.tsx",
@@ -5126,9 +4086,7 @@
{
"name": "checkbox-disabled",
"type": "registry:example",
- "registryDependencies": [
- "checkbox"
- ],
+ "registryDependencies": ["checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-disabled.tsx",
@@ -5139,10 +4097,7 @@
{
"name": "checkbox-form-multiple",
"type": "registry:example",
- "registryDependencies": [
- "checkbox",
- "form"
- ],
+ "registryDependencies": ["checkbox", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-form-multiple.tsx",
@@ -5153,10 +4108,7 @@
{
"name": "checkbox-form-single",
"type": "registry:example",
- "registryDependencies": [
- "checkbox",
- "form"
- ],
+ "registryDependencies": ["checkbox", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-form-single.tsx",
@@ -5167,9 +4119,7 @@
{
"name": "checkbox-with-text",
"type": "registry:example",
- "registryDependencies": [
- "checkbox"
- ],
+ "registryDependencies": ["checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-with-text.tsx",
@@ -5180,9 +4130,7 @@
{
"name": "collapsible-demo",
"type": "registry:example",
- "registryDependencies": [
- "collapsible"
- ],
+ "registryDependencies": ["collapsible"],
"files": [
{
"path": "registry/new-york-v4/examples/collapsible-demo.tsx",
@@ -5193,9 +4141,7 @@
{
"name": "combobox-demo",
"type": "registry:example",
- "registryDependencies": [
- "command"
- ],
+ "registryDependencies": ["command"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-demo.tsx",
@@ -5206,11 +4152,7 @@
{
"name": "combobox-dropdown-menu",
"type": "registry:example",
- "registryDependencies": [
- "command",
- "dropdown-menu",
- "button"
- ],
+ "registryDependencies": ["command", "dropdown-menu", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-dropdown-menu.tsx",
@@ -5221,10 +4163,7 @@
{
"name": "combobox-form",
"type": "registry:example",
- "registryDependencies": [
- "command",
- "form"
- ],
+ "registryDependencies": ["command", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-form.tsx",
@@ -5235,10 +4174,7 @@
{
"name": "combobox-popover",
"type": "registry:example",
- "registryDependencies": [
- "combobox",
- "popover"
- ],
+ "registryDependencies": ["combobox", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-popover.tsx",
@@ -5249,11 +4185,7 @@
{
"name": "combobox-responsive",
"type": "registry:example",
- "registryDependencies": [
- "combobox",
- "popover",
- "drawer"
- ],
+ "registryDependencies": ["combobox", "popover", "drawer"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-responsive.tsx",
@@ -5264,9 +4196,7 @@
{
"name": "command-demo",
"type": "registry:example",
- "registryDependencies": [
- "command"
- ],
+ "registryDependencies": ["command"],
"files": [
{
"path": "registry/new-york-v4/examples/command-demo.tsx",
@@ -5277,10 +4207,7 @@
{
"name": "command-dialog",
"type": "registry:example",
- "registryDependencies": [
- "command",
- "dialog"
- ],
+ "registryDependencies": ["command", "dialog"],
"files": [
{
"path": "registry/new-york-v4/examples/command-dialog.tsx",
@@ -5291,9 +4218,7 @@
{
"name": "context-menu-demo",
"type": "registry:example",
- "registryDependencies": [
- "context-menu"
- ],
+ "registryDependencies": ["context-menu"],
"files": [
{
"path": "registry/new-york-v4/examples/context-menu-demo.tsx",
@@ -5304,9 +4229,7 @@
{
"name": "data-table-demo",
"type": "registry:example",
- "registryDependencies": [
- "data-table"
- ],
+ "registryDependencies": ["data-table"],
"files": [
{
"path": "registry/new-york-v4/examples/data-table-demo.tsx",
@@ -5317,14 +4240,8 @@
{
"name": "date-picker-demo",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "popover"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-demo.tsx",
@@ -5335,15 +4252,8 @@
{
"name": "date-picker-form",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "form",
- "popover"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "form", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-form.tsx",
@@ -5354,15 +4264,8 @@
{
"name": "date-picker-with-presets",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "popover",
- "select"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "popover", "select"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-with-presets.tsx",
@@ -5373,14 +4276,8 @@
{
"name": "date-picker-with-range",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "popover"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-with-range.tsx",
@@ -5391,9 +4288,7 @@
{
"name": "dialog-demo",
"type": "registry:example",
- "registryDependencies": [
- "dialog"
- ],
+ "registryDependencies": ["dialog"],
"files": [
{
"path": "registry/new-york-v4/examples/dialog-demo.tsx",
@@ -5404,10 +4299,7 @@
{
"name": "dialog-close-button",
"type": "registry:example",
- "registryDependencies": [
- "dialog",
- "button"
- ],
+ "registryDependencies": ["dialog", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/dialog-close-button.tsx",
@@ -5418,9 +4310,7 @@
{
"name": "drawer-demo",
"type": "registry:example",
- "registryDependencies": [
- "drawer"
- ],
+ "registryDependencies": ["drawer"],
"files": [
{
"path": "registry/new-york-v4/examples/drawer-demo.tsx",
@@ -5431,10 +4321,7 @@
{
"name": "empty-demo",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button"
- ],
+ "registryDependencies": ["empty", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-demo.tsx",
@@ -5445,9 +4332,7 @@
{
"name": "empty-icon",
"type": "registry:example",
- "registryDependencies": [
- "empty"
- ],
+ "registryDependencies": ["empty"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-icon.tsx",
@@ -5458,11 +4343,7 @@
{
"name": "empty-avatar",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button",
- "avatar"
- ],
+ "registryDependencies": ["empty", "button", "avatar"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-avatar.tsx",
@@ -5473,11 +4354,7 @@
{
"name": "empty-avatar-group",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button",
- "avatar"
- ],
+ "registryDependencies": ["empty", "button", "avatar"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-avatar-group.tsx",
@@ -5488,11 +4365,7 @@
{
"name": "empty-input-group",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button",
- "input"
- ],
+ "registryDependencies": ["empty", "button", "input"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-input-group.tsx",
@@ -5503,10 +4376,7 @@
{
"name": "empty-outline",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button"
- ],
+ "registryDependencies": ["empty", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-outline.tsx",
@@ -5517,9 +4387,7 @@
{
"name": "empty-background",
"type": "registry:example",
- "registryDependencies": [
- "empty"
- ],
+ "registryDependencies": ["empty"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-background.tsx",
@@ -5530,9 +4398,7 @@
{
"name": "field-demo",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-demo.tsx",
@@ -5543,9 +4409,7 @@
{
"name": "field-input",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-input.tsx",
@@ -5556,9 +4420,7 @@
{
"name": "field-textarea",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-textarea.tsx",
@@ -5569,9 +4431,7 @@
{
"name": "field-fieldset",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-fieldset.tsx",
@@ -5582,9 +4442,7 @@
{
"name": "field-radio",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-radio.tsx",
@@ -5595,9 +4453,7 @@
{
"name": "field-checkbox",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-checkbox.tsx",
@@ -5608,9 +4464,7 @@
{
"name": "field-switch",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-switch.tsx",
@@ -5621,9 +4475,7 @@
{
"name": "field-slider",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-slider.tsx",
@@ -5634,9 +4486,7 @@
{
"name": "field-select",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-select.tsx",
@@ -5647,9 +4497,7 @@
{
"name": "field-choice-card",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-choice-card.tsx",
@@ -5660,9 +4508,7 @@
{
"name": "field-group",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-group.tsx",
@@ -5673,9 +4519,7 @@
{
"name": "field-responsive",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-responsive.tsx",
@@ -5683,13 +4527,284 @@
}
]
},
+ {
+ "name": "form-rhf-demo",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-demo.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-input",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "input", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-input.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-select",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "select", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-select.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-checkbox",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "checkbox", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-checkbox.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-switch",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "switch", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-switch.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-textarea",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "textarea", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-textarea.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-radiogroup",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "radio-group", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-radiogroup.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-array",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-array.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-complex",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-complex.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-password",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "input-group",
+ "progress",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-password.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-demo",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-demo.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-input",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "input", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-input.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-textarea",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "textarea", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-textarea.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-select",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "select", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-select.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-checkbox",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "checkbox", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-checkbox.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-switch",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "switch", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-switch.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-radiogroup",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "radio-group", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-radiogroup.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-array",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-array.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-complex",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-complex.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
{
"name": "drawer-dialog",
"type": "registry:example",
- "registryDependencies": [
- "drawer",
- "dialog"
- ],
+ "registryDependencies": ["drawer", "dialog"],
"files": [
{
"path": "registry/new-york-v4/examples/drawer-dialog.tsx",
@@ -5700,9 +4815,7 @@
{
"name": "dropdown-menu-demo",
"type": "registry:example",
- "registryDependencies": [
- "dropdown-menu"
- ],
+ "registryDependencies": ["dropdown-menu"],
"files": [
{
"path": "registry/new-york-v4/examples/dropdown-menu-demo.tsx",
@@ -5713,10 +4826,7 @@
{
"name": "dropdown-menu-checkboxes",
"type": "registry:example",
- "registryDependencies": [
- "dropdown-menu",
- "checkbox"
- ],
+ "registryDependencies": ["dropdown-menu", "checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/dropdown-menu-checkboxes.tsx",
@@ -5727,10 +4837,7 @@
{
"name": "dropdown-menu-radio-group",
"type": "registry:example",
- "registryDependencies": [
- "dropdown-menu",
- "radio-group"
- ],
+ "registryDependencies": ["dropdown-menu", "radio-group"],
"files": [
{
"path": "registry/new-york-v4/examples/dropdown-menu-radio-group.tsx",
@@ -5741,9 +4848,7 @@
{
"name": "hover-card-demo",
"type": "registry:example",
- "registryDependencies": [
- "hover-card"
- ],
+ "registryDependencies": ["hover-card"],
"files": [
{
"path": "registry/new-york-v4/examples/hover-card-demo.tsx",
@@ -5754,9 +4859,7 @@
{
"name": "input-demo",
"type": "registry:example",
- "registryDependencies": [
- "input"
- ],
+ "registryDependencies": ["input"],
"files": [
{
"path": "registry/new-york-v4/examples/input-demo.tsx",
@@ -5767,9 +4870,7 @@
{
"name": "input-disabled",
"type": "registry:example",
- "registryDependencies": [
- "input"
- ],
+ "registryDependencies": ["input"],
"files": [
{
"path": "registry/new-york-v4/examples/input-disabled.tsx",
@@ -5780,9 +4881,7 @@
{
"name": "input-file",
"type": "registry:example",
- "registryDependencies": [
- "input"
- ],
+ "registryDependencies": ["input"],
"files": [
{
"path": "registry/new-york-v4/examples/input-file.tsx",
@@ -5793,11 +4892,7 @@
{
"name": "input-form",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button",
- "form"
- ],
+ "registryDependencies": ["input", "button", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/input-form.tsx",
@@ -5808,10 +4903,7 @@
{
"name": "input-with-button",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button"
- ],
+ "registryDependencies": ["input", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/input-with-button.tsx",
@@ -5822,11 +4914,7 @@
{
"name": "input-with-label",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button",
- "label"
- ],
+ "registryDependencies": ["input", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/input-with-label.tsx",
@@ -5837,11 +4925,7 @@
{
"name": "input-with-text",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button",
- "label"
- ],
+ "registryDependencies": ["input", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/input-with-text.tsx",
@@ -5852,9 +4936,7 @@
{
"name": "input-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-demo.tsx",
@@ -5865,10 +4947,7 @@
{
"name": "input-group-label",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "label"
- ],
+ "registryDependencies": ["input-group", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-label.tsx",
@@ -5879,9 +4958,7 @@
{
"name": "input-group-text",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-text.tsx",
@@ -5892,10 +4969,7 @@
{
"name": "input-group-tooltip",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "tooltip"
- ],
+ "registryDependencies": ["input-group", "tooltip"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-tooltip.tsx",
@@ -5906,9 +4980,7 @@
{
"name": "input-group-button",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-button.tsx",
@@ -5919,10 +4991,7 @@
{
"name": "input-group-button-group",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "button-group"
- ],
+ "registryDependencies": ["input-group", "button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-button-group.tsx",
@@ -5933,11 +5002,7 @@
{
"name": "input-group-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "dropdown-menu",
- "button"
- ],
+ "registryDependencies": ["input-group", "dropdown-menu", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-dropdown.tsx",
@@ -5948,10 +5013,7 @@
{
"name": "input-group-spinner",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "spinner"
- ],
+ "registryDependencies": ["input-group", "spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-spinner.tsx",
@@ -5962,10 +5024,7 @@
{
"name": "input-group-textarea",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "textarea"
- ],
+ "registryDependencies": ["input-group", "textarea"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-textarea.tsx",
@@ -5976,9 +5035,7 @@
{
"name": "input-group-icon",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-icon.tsx",
@@ -6006,9 +5063,7 @@
{
"name": "input-otp-demo",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-demo.tsx",
@@ -6019,9 +5074,7 @@
{
"name": "input-otp-pattern",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-pattern.tsx",
@@ -6032,9 +5085,7 @@
{
"name": "input-otp-separator",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-separator.tsx",
@@ -6045,9 +5096,7 @@
{
"name": "input-otp-controlled",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-controlled.tsx",
@@ -6058,10 +5107,7 @@
{
"name": "input-otp-form",
"type": "registry:example",
- "registryDependencies": [
- "input-otp",
- "form"
- ],
+ "registryDependencies": ["input-otp", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-form.tsx",
@@ -6072,9 +5118,7 @@
{
"name": "item-demo",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-demo.tsx",
@@ -6085,9 +5129,7 @@
{
"name": "item-size",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-size.tsx",
@@ -6098,9 +5140,7 @@
{
"name": "item-variant",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-variant.tsx",
@@ -6111,9 +5151,7 @@
{
"name": "item-icon",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-icon.tsx",
@@ -6124,9 +5162,7 @@
{
"name": "item-image",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-image.tsx",
@@ -6137,9 +5173,7 @@
{
"name": "item-avatar",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-avatar.tsx",
@@ -6150,9 +5184,7 @@
{
"name": "item-group",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-group.tsx",
@@ -6163,9 +5195,7 @@
{
"name": "item-header",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-header.tsx",
@@ -6176,9 +5206,7 @@
{
"name": "item-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-dropdown.tsx",
@@ -6189,9 +5217,7 @@
{
"name": "item-link",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-link.tsx",
@@ -6202,9 +5228,7 @@
{
"name": "kbd-demo",
"type": "registry:example",
- "registryDependencies": [
- "kbd"
- ],
+ "registryDependencies": ["kbd"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-demo.tsx",
@@ -6215,11 +5239,7 @@
{
"name": "kbd-tooltip",
"type": "registry:example",
- "registryDependencies": [
- "kbd",
- "tooltip",
- "button"
- ],
+ "registryDependencies": ["kbd", "tooltip", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-tooltip.tsx",
@@ -6230,12 +5250,7 @@
{
"name": "kbd-input-group",
"type": "registry:example",
- "registryDependencies": [
- "kbd",
- "input",
- "button",
- "label"
- ],
+ "registryDependencies": ["kbd", "input", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-input-group.tsx",
@@ -6246,10 +5261,7 @@
{
"name": "kbd-button",
"type": "registry:example",
- "registryDependencies": [
- "kbd",
- "button"
- ],
+ "registryDependencies": ["kbd", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-button.tsx",
@@ -6260,9 +5272,7 @@
{
"name": "kbd-group",
"type": "registry:example",
- "registryDependencies": [
- "kbd"
- ],
+ "registryDependencies": ["kbd"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-group.tsx",
@@ -6273,9 +5283,7 @@
{
"name": "label-demo",
"type": "registry:example",
- "registryDependencies": [
- "label"
- ],
+ "registryDependencies": ["label"],
"files": [
{
"path": "registry/new-york-v4/examples/label-demo.tsx",
@@ -6286,9 +5294,7 @@
{
"name": "menubar-demo",
"type": "registry:example",
- "registryDependencies": [
- "menubar"
- ],
+ "registryDependencies": ["menubar"],
"files": [
{
"path": "registry/new-york-v4/examples/menubar-demo.tsx",
@@ -6299,9 +5305,7 @@
{
"name": "navigation-menu-demo",
"type": "registry:example",
- "registryDependencies": [
- "navigation-menu"
- ],
+ "registryDependencies": ["navigation-menu"],
"files": [
{
"path": "registry/new-york-v4/examples/navigation-menu-demo.tsx",
@@ -6312,9 +5316,7 @@
{
"name": "pagination-demo",
"type": "registry:example",
- "registryDependencies": [
- "pagination"
- ],
+ "registryDependencies": ["pagination"],
"files": [
{
"path": "registry/new-york-v4/examples/pagination-demo.tsx",
@@ -6325,9 +5327,7 @@
{
"name": "popover-demo",
"type": "registry:example",
- "registryDependencies": [
- "popover"
- ],
+ "registryDependencies": ["popover"],
"files": [
{
"path": "registry/new-york-v4/examples/popover-demo.tsx",
@@ -6338,9 +5338,7 @@
{
"name": "progress-demo",
"type": "registry:example",
- "registryDependencies": [
- "progress"
- ],
+ "registryDependencies": ["progress"],
"files": [
{
"path": "registry/new-york-v4/examples/progress-demo.tsx",
@@ -6351,9 +5349,7 @@
{
"name": "radio-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "radio-group"
- ],
+ "registryDependencies": ["radio-group"],
"files": [
{
"path": "registry/new-york-v4/examples/radio-group-demo.tsx",
@@ -6364,10 +5360,7 @@
{
"name": "radio-group-form",
"type": "registry:example",
- "registryDependencies": [
- "radio-group",
- "form"
- ],
+ "registryDependencies": ["radio-group", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/radio-group-form.tsx",
@@ -6378,9 +5371,7 @@
{
"name": "resizable-demo",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-demo.tsx",
@@ -6391,9 +5382,7 @@
{
"name": "resizable-demo-with-handle",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-demo-with-handle.tsx",
@@ -6404,9 +5393,7 @@
{
"name": "resizable-vertical",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-vertical.tsx",
@@ -6417,9 +5404,7 @@
{
"name": "resizable-handle",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-handle.tsx",
@@ -6430,9 +5415,7 @@
{
"name": "scroll-area-demo",
"type": "registry:example",
- "registryDependencies": [
- "scroll-area"
- ],
+ "registryDependencies": ["scroll-area"],
"files": [
{
"path": "registry/new-york-v4/examples/scroll-area-demo.tsx",
@@ -6443,9 +5426,7 @@
{
"name": "scroll-area-horizontal-demo",
"type": "registry:example",
- "registryDependencies": [
- "scroll-area"
- ],
+ "registryDependencies": ["scroll-area"],
"files": [
{
"path": "registry/new-york-v4/examples/scroll-area-horizontal-demo.tsx",
@@ -6456,9 +5437,7 @@
{
"name": "select-demo",
"type": "registry:example",
- "registryDependencies": [
- "select"
- ],
+ "registryDependencies": ["select"],
"files": [
{
"path": "registry/new-york-v4/examples/select-demo.tsx",
@@ -6469,9 +5448,7 @@
{
"name": "select-scrollable",
"type": "registry:example",
- "registryDependencies": [
- "select"
- ],
+ "registryDependencies": ["select"],
"files": [
{
"path": "registry/new-york-v4/examples/select-scrollable.tsx",
@@ -6482,9 +5459,7 @@
{
"name": "select-form",
"type": "registry:example",
- "registryDependencies": [
- "select"
- ],
+ "registryDependencies": ["select"],
"files": [
{
"path": "registry/new-york-v4/examples/select-form.tsx",
@@ -6495,9 +5470,7 @@
{
"name": "separator-demo",
"type": "registry:example",
- "registryDependencies": [
- "separator"
- ],
+ "registryDependencies": ["separator"],
"files": [
{
"path": "registry/new-york-v4/examples/separator-demo.tsx",
@@ -6508,9 +5481,7 @@
{
"name": "sheet-demo",
"type": "registry:example",
- "registryDependencies": [
- "sheet"
- ],
+ "registryDependencies": ["sheet"],
"files": [
{
"path": "registry/new-york-v4/examples/sheet-demo.tsx",
@@ -6521,9 +5492,7 @@
{
"name": "sheet-side",
"type": "registry:example",
- "registryDependencies": [
- "sheet"
- ],
+ "registryDependencies": ["sheet"],
"files": [
{
"path": "registry/new-york-v4/examples/sheet-side.tsx",
@@ -6534,9 +5503,7 @@
{
"name": "skeleton-demo",
"type": "registry:example",
- "registryDependencies": [
- "skeleton"
- ],
+ "registryDependencies": ["skeleton"],
"files": [
{
"path": "registry/new-york-v4/examples/skeleton-demo.tsx",
@@ -6547,9 +5514,7 @@
{
"name": "skeleton-card",
"type": "registry:example",
- "registryDependencies": [
- "skeleton"
- ],
+ "registryDependencies": ["skeleton"],
"files": [
{
"path": "registry/new-york-v4/examples/skeleton-card.tsx",
@@ -6560,9 +5525,7 @@
{
"name": "slider-demo",
"type": "registry:example",
- "registryDependencies": [
- "slider"
- ],
+ "registryDependencies": ["slider"],
"files": [
{
"path": "registry/new-york-v4/examples/slider-demo.tsx",
@@ -6573,9 +5536,7 @@
{
"name": "sonner-demo",
"type": "registry:example",
- "registryDependencies": [
- "sonner"
- ],
+ "registryDependencies": ["sonner"],
"files": [
{
"path": "registry/new-york-v4/examples/sonner-demo.tsx",
@@ -6586,9 +5547,7 @@
{
"name": "spinner-demo",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-demo.tsx",
@@ -6599,10 +5558,7 @@
{
"name": "spinner-basic",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "button"
- ],
+ "registryDependencies": ["spinner", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-basic.tsx",
@@ -6613,10 +5569,7 @@
{
"name": "spinner-button",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "button"
- ],
+ "registryDependencies": ["spinner", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-button.tsx",
@@ -6627,10 +5580,7 @@
{
"name": "spinner-badge",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "badge"
- ],
+ "registryDependencies": ["spinner", "badge"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-badge.tsx",
@@ -6641,11 +5591,7 @@
{
"name": "spinner-input-group",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "button",
- "input"
- ],
+ "registryDependencies": ["spinner", "button", "input"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-input-group.tsx",
@@ -6656,9 +5602,7 @@
{
"name": "spinner-empty",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-empty.tsx",
@@ -6669,9 +5613,7 @@
{
"name": "spinner-color",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-color.tsx",
@@ -6682,9 +5624,7 @@
{
"name": "spinner-custom",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-custom.tsx",
@@ -6695,9 +5635,7 @@
{
"name": "spinner-size",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-size.tsx",
@@ -6708,9 +5646,7 @@
{
"name": "spinner-item",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-item.tsx",
@@ -6721,9 +5657,7 @@
{
"name": "switch-demo",
"type": "registry:example",
- "registryDependencies": [
- "switch"
- ],
+ "registryDependencies": ["switch"],
"files": [
{
"path": "registry/new-york-v4/examples/switch-demo.tsx",
@@ -6734,10 +5668,7 @@
{
"name": "switch-form",
"type": "registry:example",
- "registryDependencies": [
- "switch",
- "form"
- ],
+ "registryDependencies": ["switch", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/switch-form.tsx",
@@ -6748,9 +5679,7 @@
{
"name": "table-demo",
"type": "registry:example",
- "registryDependencies": [
- "table"
- ],
+ "registryDependencies": ["table"],
"files": [
{
"path": "registry/new-york-v4/examples/table-demo.tsx",
@@ -6761,9 +5690,7 @@
{
"name": "tabs-demo",
"type": "registry:example",
- "registryDependencies": [
- "tabs"
- ],
+ "registryDependencies": ["tabs"],
"files": [
{
"path": "registry/new-york-v4/examples/tabs-demo.tsx",
@@ -6774,9 +5701,7 @@
{
"name": "textarea-demo",
"type": "registry:example",
- "registryDependencies": [
- "textarea"
- ],
+ "registryDependencies": ["textarea"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-demo.tsx",
@@ -6787,9 +5712,7 @@
{
"name": "textarea-disabled",
"type": "registry:example",
- "registryDependencies": [
- "textarea"
- ],
+ "registryDependencies": ["textarea"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-disabled.tsx",
@@ -6800,10 +5723,7 @@
{
"name": "textarea-form",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "form"
- ],
+ "registryDependencies": ["textarea", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-form.tsx",
@@ -6814,10 +5734,7 @@
{
"name": "textarea-with-button",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "button"
- ],
+ "registryDependencies": ["textarea", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-with-button.tsx",
@@ -6828,10 +5745,7 @@
{
"name": "textarea-with-label",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "label"
- ],
+ "registryDependencies": ["textarea", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-with-label.tsx",
@@ -6842,10 +5756,7 @@
{
"name": "textarea-with-text",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "label"
- ],
+ "registryDependencies": ["textarea", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-with-text.tsx",
@@ -6856,9 +5767,7 @@
{
"name": "toggle-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-demo.tsx",
@@ -6869,9 +5778,7 @@
{
"name": "toggle-group-disabled",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-disabled.tsx",
@@ -6882,9 +5789,7 @@
{
"name": "toggle-group-lg",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-lg.tsx",
@@ -6895,9 +5800,7 @@
{
"name": "toggle-group-outline",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-outline.tsx",
@@ -6908,9 +5811,7 @@
{
"name": "toggle-group-sm",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-sm.tsx",
@@ -6921,9 +5822,7 @@
{
"name": "toggle-group-single",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-single.tsx",
@@ -6934,9 +5833,7 @@
{
"name": "toggle-demo",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-demo.tsx",
@@ -6947,9 +5844,7 @@
{
"name": "toggle-disabled",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-disabled.tsx",
@@ -6960,9 +5855,7 @@
{
"name": "toggle-lg",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-lg.tsx",
@@ -6973,9 +5866,7 @@
{
"name": "toggle-outline",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-outline.tsx",
@@ -6986,9 +5877,7 @@
{
"name": "toggle-sm",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-sm.tsx",
@@ -6999,9 +5888,7 @@
{
"name": "toggle-with-text",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-with-text.tsx",
@@ -7012,9 +5899,7 @@
{
"name": "tooltip-demo",
"type": "registry:example",
- "registryDependencies": [
- "tooltip"
- ],
+ "registryDependencies": ["tooltip"],
"files": [
{
"path": "registry/new-york-v4/examples/tooltip-demo.tsx",
@@ -7236,9 +6121,7 @@
"name": "calendar-hijri",
"type": "registry:example",
"description": "A Persian calendar.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/examples/calendar-hijri.tsx",
@@ -7250,10 +6133,7 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "sidebar-demo",
@@ -7386,4 +6266,4 @@
]
}
]
-}
\ No newline at end of file
+}
diff --git a/apps/v4/registry/__index__.tsx b/apps/v4/registry/__index__.tsx
index be8abbc331..cba25033bc 100644
--- a/apps/v4/registry/__index__.tsx
+++ b/apps/v4/registry/__index__.tsx
@@ -5520,6 +5520,348 @@ export const Index: Record = {
categories: undefined,
meta: undefined,
},
+ "form-rhf-demo": {
+ name: "form-rhf-demo",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","input","input-group","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-rhf-demo.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-rhf-demo.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-rhf-input": {
+ name: "form-rhf-input",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","input","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-rhf-input.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-rhf-input.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-rhf-select": {
+ name: "form-rhf-select",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","select","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-rhf-select.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-rhf-select.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-rhf-checkbox": {
+ name: "form-rhf-checkbox",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","checkbox","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-rhf-checkbox.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-rhf-checkbox.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-rhf-switch": {
+ name: "form-rhf-switch",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","switch","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-rhf-switch.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-rhf-switch.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-rhf-textarea": {
+ name: "form-rhf-textarea",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","textarea","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-rhf-textarea.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-rhf-textarea.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-rhf-radiogroup": {
+ name: "form-rhf-radiogroup",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","radio-group","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-rhf-radiogroup.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-rhf-radiogroup.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-rhf-array": {
+ name: "form-rhf-array",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","input","input-group","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-rhf-array.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-rhf-array.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-rhf-complex": {
+ name: "form-rhf-complex",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","button","card","checkbox","radio-group","select","switch"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-rhf-complex.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-rhf-complex.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-rhf-password": {
+ name: "form-rhf-password",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","input-group","progress","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-rhf-password.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-rhf-password.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-tanstack-demo": {
+ name: "form-tanstack-demo",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","input","input-group","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-tanstack-demo.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-tanstack-demo.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-tanstack-input": {
+ name: "form-tanstack-input",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","input","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-tanstack-input.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-tanstack-input.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-tanstack-textarea": {
+ name: "form-tanstack-textarea",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","textarea","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-tanstack-textarea.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-tanstack-textarea.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-tanstack-select": {
+ name: "form-tanstack-select",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","select","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-tanstack-select.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-tanstack-select.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-tanstack-checkbox": {
+ name: "form-tanstack-checkbox",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","checkbox","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-tanstack-checkbox.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-tanstack-checkbox.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-tanstack-switch": {
+ name: "form-tanstack-switch",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","switch","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-tanstack-switch.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-tanstack-switch.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-tanstack-radiogroup": {
+ name: "form-tanstack-radiogroup",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","radio-group","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-tanstack-radiogroup.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-tanstack-radiogroup.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-tanstack-array": {
+ name: "form-tanstack-array",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","input","input-group","button","card"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-tanstack-array.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-tanstack-array.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
+ "form-tanstack-complex": {
+ name: "form-tanstack-complex",
+ description: "",
+ type: "registry:example",
+ registryDependencies: ["field","button","card","checkbox","radio-group","select","switch"],
+ files: [{
+ path: "registry/new-york-v4/examples/form-tanstack-complex.tsx",
+ type: "registry:example",
+ target: ""
+ }],
+ component: React.lazy(async () => {
+ const mod = await import("@/registry/new-york-v4/examples/form-tanstack-complex.tsx")
+ const exportName = Object.keys(mod).find(key => typeof mod[key] === 'function' || typeof mod[key] === 'object') || item.name
+ return { default: mod.default || mod[exportName] }
+ }),
+ categories: undefined,
+ meta: undefined,
+ },
"drawer-dialog": {
name: "drawer-dialog",
description: "",
diff --git a/apps/v4/registry/new-york-v4/examples/form-next-complex-action.ts b/apps/v4/registry/new-york-v4/examples/form-next-complex-action.ts
new file mode 100644
index 0000000000..9b64670313
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-next-complex-action.ts
@@ -0,0 +1,37 @@
+"use server"
+
+import { formSchema, type FormState } from "./form-next-complex-schema"
+
+export async function complexFormAction(
+ _prevState: FormState,
+ formData: FormData
+) {
+ // Sleep for 1 second
+ await new Promise((resolve) => setTimeout(resolve, 1000))
+
+ const values = {
+ plan: formData.get("plan") as FormState["values"]["plan"],
+ billingPeriod: formData.get("billingPeriod") as string,
+ addons: formData.getAll("addons") as string[],
+ emailNotifications: formData.get("emailNotifications") === "on",
+ }
+
+ const result = formSchema.safeParse(values)
+
+ if (!result.success) {
+ return {
+ values,
+ success: false,
+ errors: result.error.flatten().fieldErrors,
+ }
+ }
+
+ // Do something with the values.
+ // Call your database or API here.
+
+ return {
+ values,
+ errors: null,
+ success: true,
+ }
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-next-complex-schema.ts b/apps/v4/registry/new-york-v4/examples/form-next-complex-schema.ts
new file mode 100644
index 0000000000..65327d4fa8
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-next-complex-schema.ts
@@ -0,0 +1,52 @@
+import { z } from "zod"
+
+export const formSchema = z.object({
+ plan: z
+ .string({
+ required_error: "Please select a subscription plan",
+ })
+ .min(1, "Please select a subscription plan")
+ .refine((value) => value === "basic" || value === "pro", {
+ message: "Invalid plan selection. Please choose Basic or Pro",
+ }),
+ billingPeriod: z
+ .string({
+ required_error: "Please select a billing period",
+ })
+ .min(1, "Please select a billing period"),
+ addons: z
+ .array(z.string())
+ .min(1, "Please select at least one add-on")
+ .max(3, "You can select up to 3 add-ons")
+ .refine(
+ (value) => value.every((addon) => addons.some((a) => a.id === addon)),
+ {
+ message: "You selected an invalid add-on",
+ }
+ ),
+ emailNotifications: z.boolean(),
+})
+
+export type FormState = {
+ values: z.infer
+ errors: null | Partial, string[]>>
+ success: boolean
+}
+
+export const addons = [
+ {
+ id: "analytics",
+ title: "Analytics",
+ description: "Advanced analytics and reporting",
+ },
+ {
+ id: "backup",
+ title: "Backup",
+ description: "Automated daily backups",
+ },
+ {
+ id: "support",
+ title: "Priority Support",
+ description: "24/7 premium customer support",
+ },
+] as const
diff --git a/apps/v4/registry/new-york-v4/examples/form-next-complex.tsx b/apps/v4/registry/new-york-v4/examples/form-next-complex.tsx
new file mode 100644
index 0000000000..5da09b25d0
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-next-complex.tsx
@@ -0,0 +1,194 @@
+"use client"
+
+import * as React from "react"
+import Form from "next/form"
+import { toast } from "sonner"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import { Card, CardContent, CardFooter } from "@/registry/new-york-v4/ui/card"
+import { Checkbox } from "@/registry/new-york-v4/ui/checkbox"
+import {
+ Field,
+ FieldContent,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+ FieldLegend,
+ FieldSeparator,
+ FieldSet,
+ FieldTitle,
+} from "@/registry/new-york-v4/ui/field"
+import {
+ RadioGroup,
+ RadioGroupItem,
+} from "@/registry/new-york-v4/ui/radio-group"
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@/registry/new-york-v4/ui/select"
+import { Spinner } from "@/registry/new-york-v4/ui/spinner"
+import { Switch } from "@/registry/new-york-v4/ui/switch"
+
+import { complexFormAction } from "./form-next-complex-action"
+import { addons, type FormState } from "./form-next-complex-schema"
+
+export default function FormNextComplex() {
+ const [formState, formAction, pending] = React.useActionState<
+ FormState,
+ FormData
+ >(complexFormAction, {
+ values: {
+ plan: "basic",
+ billingPeriod: "monthly",
+ addons: [],
+ emailNotifications: false,
+ },
+ errors: null,
+ success: false,
+ })
+
+ React.useEffect(() => {
+ if (formState.success) {
+ toast.success("Preferences saved", {
+ description: "Your subscription plan has been updated.",
+ })
+ }
+ }, [formState.success])
+
+ return (
+
+
+
+
+
+ Subscription Plan
+
+ Choose your subscription plan.
+
+
+
+
+
+ Basic
+
+ For individuals and small teams
+
+
+
+
+
+
+
+
+ Pro
+
+ For businesses with higher demands
+
+
+
+
+
+
+ {formState.errors?.plan && (
+ {formState.errors.plan[0]}
+ )}
+
+
+
+ Billing Period
+
+
+
+
+
+ Monthly
+ Yearly
+
+
+
+ Choose how often you want to be billed.
+
+ {formState.errors?.billingPeriod && (
+ {formState.errors.billingPeriod[0]}
+ )}
+
+
+
+ Add-ons
+
+ Select additional features you'd like to include.
+
+
+ {addons.map((addon) => (
+
+
+
+ {addon.title}
+ {addon.description}
+
+
+ ))}
+
+ {formState.errors?.addons && (
+ {formState.errors.addons[0]}
+ )}
+
+
+
+
+
+ Email Notifications
+
+
+ Receive email updates about your subscription
+
+
+
+
+
+
+
+
+
+
+ {pending && }
+ Save Preferences
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-next-demo-action.ts b/apps/v4/registry/new-york-v4/examples/form-next-demo-action.ts
new file mode 100644
index 0000000000..4de9ceefc6
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-next-demo-action.ts
@@ -0,0 +1,35 @@
+"use server"
+
+import { formSchema, type FormState } from "./form-next-demo-schema"
+
+export async function demoFormAction(
+ _prevState: FormState,
+ formData: FormData
+) {
+ const values = {
+ title: formData.get("title") as string,
+ description: formData.get("description") as string,
+ }
+
+ const result = formSchema.safeParse(values)
+
+ if (!result.success) {
+ return {
+ values,
+ success: false,
+ errors: result.error.flatten().fieldErrors,
+ }
+ }
+
+ // Do something with the values.
+ // Call your database or API here.
+
+ return {
+ values: {
+ title: "",
+ description: "",
+ },
+ errors: null,
+ success: true,
+ }
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-next-demo-schema.ts b/apps/v4/registry/new-york-v4/examples/form-next-demo-schema.ts
new file mode 100644
index 0000000000..d2bceda530
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-next-demo-schema.ts
@@ -0,0 +1,18 @@
+import { z } from "zod"
+
+export const formSchema = z.object({
+ title: z
+ .string()
+ .min(5, "Bug title must be at least 5 characters.")
+ .max(32, "Bug title must be at most 32 characters."),
+ description: z
+ .string()
+ .min(20, "Description must be at least 20 characters.")
+ .max(100, "Description must be at most 100 characters."),
+})
+
+export type FormState = {
+ values: z.infer
+ errors: null | Partial, string[]>>
+ success: boolean
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-next-demo.tsx b/apps/v4/registry/new-york-v4/examples/form-next-demo.tsx
new file mode 100644
index 0000000000..e265afdee0
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-next-demo.tsx
@@ -0,0 +1,128 @@
+"use client"
+
+import * as React from "react"
+import Form from "next/form"
+import { toast } from "sonner"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import { Input } from "@/registry/new-york-v4/ui/input"
+import {
+ InputGroup,
+ InputGroupAddon,
+ InputGroupText,
+ InputGroupTextarea,
+} from "@/registry/new-york-v4/ui/input-group"
+import { Spinner } from "@/registry/new-york-v4/ui/spinner"
+
+import { demoFormAction } from "./form-next-demo-action"
+import { type FormState } from "./form-next-demo-schema"
+
+export default function FormNextDemo() {
+ const [formState, formAction, pending] = React.useActionState<
+ FormState,
+ FormData
+ >(demoFormAction, {
+ values: {
+ title: "",
+ description: "",
+ },
+ errors: null,
+ success: false,
+ })
+ const [descriptionLength, setDescriptionLength] = React.useState(0)
+
+ React.useEffect(() => {
+ if (formState.success) {
+ toast("Thank you for your feedback", {
+ description: "We'll review your report and get back to you soon.",
+ })
+ }
+ }, [formState.success])
+
+ React.useEffect(() => {
+ setDescriptionLength(formState.values.description.length)
+ }, [formState.values.description])
+
+ return (
+
+
+ Bug Report
+
+ Help us improve by reporting bugs you encounter.
+
+
+
+
+
+
+ Bug Title
+
+ {formState.errors?.title && (
+ {formState.errors.title[0]}
+ )}
+
+
+ Description
+
+ setDescriptionLength(e.target.value.length)}
+ />
+
+
+ {descriptionLength}/100 characters
+
+
+
+
+ Include steps to reproduce, expected behavior, and what actually
+ happened.
+
+ {formState.errors?.description && (
+ {formState.errors.description[0]}
+ )}
+
+
+
+
+
+
+
+ {pending && }
+ Submit
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-rhf-array.tsx b/apps/v4/registry/new-york-v4/examples/form-rhf-array.tsx
new file mode 100644
index 0000000000..a46f98a474
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-rhf-array.tsx
@@ -0,0 +1,160 @@
+"use client"
+
+import * as React from "react"
+import { zodResolver } from "@hookform/resolvers/zod"
+import { XIcon } from "lucide-react"
+import { Controller, useFieldArray, useForm } from "react-hook-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldContent,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLegend,
+ FieldSet,
+} from "@/registry/new-york-v4/ui/field"
+import {
+ InputGroup,
+ InputGroupAddon,
+ InputGroupButton,
+ InputGroupInput,
+} from "@/registry/new-york-v4/ui/input-group"
+
+const formSchema = z.object({
+ emails: z
+ .array(
+ z.object({
+ address: z.string().email("Enter a valid email address."),
+ })
+ )
+ .min(1, "Add at least one email address.")
+ .max(5, "You can add up to 5 email addresses."),
+})
+
+export default function FormRhfArray() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ emails: [{ address: "" }, { address: "" }],
+ },
+ })
+
+ const { fields, append, remove } = useFieldArray({
+ control: form.control,
+ name: "emails",
+ })
+
+ function onSubmit(data: z.infer) {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(data, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ }
+
+ return (
+
+
+ Contact Emails
+ Manage your contact email addresses.
+
+
+
+
+ Email Addresses
+
+ Add up to 5 email addresses where we can contact you.
+
+
+ {fields.map((field, index) => (
+ (
+
+
+
+
+ {fields.length > 1 && (
+
+ remove(index)}
+ aria-label={`Remove email ${index + 1}`}
+ >
+
+
+
+ )}
+
+ {fieldState.invalid && (
+
+ )}
+
+
+ )}
+ />
+ ))}
+ append({ address: "" })}
+ disabled={fields.length >= 5}
+ >
+ Add Email Address
+
+
+ {form.formState.errors.emails?.root && (
+
+ )}
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-rhf-checkbox.tsx b/apps/v4/registry/new-york-v4/examples/form-rhf-checkbox.tsx
new file mode 100644
index 0000000000..bf6d88ace0
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-rhf-checkbox.tsx
@@ -0,0 +1,181 @@
+"use client"
+
+import * as React from "react"
+import { zodResolver } from "@hookform/resolvers/zod"
+import { Controller, useForm } from "react-hook-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import { Checkbox } from "@/registry/new-york-v4/ui/checkbox"
+import {
+ Field,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+ FieldLegend,
+ FieldSeparator,
+ FieldSet,
+} from "@/registry/new-york-v4/ui/field"
+
+const tasks = [
+ {
+ id: "push",
+ label: "Push notifications",
+ },
+ {
+ id: "email",
+ label: "Email notifications",
+ },
+] as const
+
+const formSchema = z.object({
+ responses: z.boolean(),
+ tasks: z
+ .array(z.string())
+ .min(1, "Please select at least one notification type.")
+ .refine(
+ (value) => value.every((task) => tasks.some((t) => t.id === task)),
+ {
+ message: "Invalid notification type selected.",
+ }
+ ),
+})
+
+export default function FormRhfCheckbox() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ responses: true,
+ tasks: [],
+ },
+ })
+
+ function onSubmit(data: z.infer) {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(data, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ }
+
+ return (
+
+
+ Notifications
+ Manage your notification preferences.
+
+
+
+
+ (
+
+ Responses
+
+ Get notified for requests that take time, like research or
+ image generation.
+
+
+
+
+
+ Push notifications
+
+
+
+ {fieldState.invalid && (
+
+ )}
+
+ )}
+ />
+
+ (
+
+ Tasks
+
+ Get notified when tasks you've created have updates.
+
+
+ {tasks.map((task) => (
+
+ {
+ const newValue = checked
+ ? [...field.value, task.id]
+ : field.value.filter((value) => value !== task.id)
+ field.onChange(newValue)
+ }}
+ />
+
+ {task.label}
+
+
+ ))}
+
+ {fieldState.invalid && (
+
+ )}
+
+ )}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-rhf-complex.tsx b/apps/v4/registry/new-york-v4/examples/form-rhf-complex.tsx
new file mode 100644
index 0000000000..2c2e9ba96d
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-rhf-complex.tsx
@@ -0,0 +1,307 @@
+"use client"
+
+import * as React from "react"
+import { zodResolver } from "@hookform/resolvers/zod"
+import { Controller, useForm } from "react-hook-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import { Checkbox } from "@/registry/new-york-v4/ui/checkbox"
+import {
+ Field,
+ FieldContent,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+ FieldLegend,
+ FieldSeparator,
+ FieldSet,
+ FieldTitle,
+} from "@/registry/new-york-v4/ui/field"
+import {
+ RadioGroup,
+ RadioGroupItem,
+} from "@/registry/new-york-v4/ui/radio-group"
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@/registry/new-york-v4/ui/select"
+import { Switch } from "@/registry/new-york-v4/ui/switch"
+
+const addons = [
+ {
+ id: "analytics",
+ title: "Analytics",
+ description: "Advanced analytics and reporting",
+ },
+ {
+ id: "backup",
+ title: "Backup",
+ description: "Automated daily backups",
+ },
+ {
+ id: "support",
+ title: "Priority Support",
+ description: "24/7 premium customer support",
+ },
+] as const
+
+const formSchema = z.object({
+ plan: z
+ .string({
+ required_error: "Please select a subscription plan",
+ })
+ .min(1, "Please select a subscription plan")
+ .refine((value) => value === "basic" || value === "pro", {
+ message: "Invalid plan selection. Please choose Basic or Pro",
+ }),
+ billingPeriod: z
+ .string({
+ required_error: "Please select a billing period",
+ })
+ .min(1, "Please select a billing period"),
+ addons: z
+ .array(z.string())
+ .min(1, "Please select at least one add-on")
+ .max(3, "You can select up to 3 add-ons")
+ .refine(
+ (value) => value.every((addon) => addons.some((a) => a.id === addon)),
+ {
+ message: "You selected an invalid add-on",
+ }
+ ),
+ emailNotifications: z.boolean(),
+})
+
+export default function FormRhfComplex() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ plan: "basic",
+ billingPeriod: "",
+ addons: [],
+ emailNotifications: false,
+ },
+ })
+
+ function onSubmit(data: z.infer) {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(data, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ }
+
+ return (
+
+
+ You're almost there!
+
+ Choose your subscription plan and billing period.
+
+
+
+
+
+ {
+ const isInvalid = fieldState.invalid
+ return (
+
+ Subscription Plan
+
+ Choose your subscription plan.
+
+
+
+
+
+ Basic
+
+ For individuals and small teams
+
+
+
+
+
+
+
+
+ Pro
+
+ For businesses with higher demands
+
+
+
+
+
+
+ {isInvalid && }
+
+ )
+ }}
+ />
+
+ (
+
+
+ Billing Period
+
+
+
+
+
+
+ Monthly
+ Yearly
+
+
+
+ Choose how often you want to be billed.
+
+ {fieldState.invalid && (
+
+ )}
+
+ )}
+ />
+
+ (
+
+ Add-ons
+
+ Select additional features you'd like to include.
+
+
+ {addons.map((addon) => (
+
+ {
+ const newValue = checked
+ ? [...field.value, addon.id]
+ : field.value.filter(
+ (value) => value !== addon.id
+ )
+ field.onChange(newValue)
+ field.onBlur()
+ }}
+ />
+
+
+ {addon.title}
+
+
+ {addon.description}
+
+
+
+ ))}
+
+ {fieldState.invalid && (
+
+ )}
+
+ )}
+ />
+
+ (
+
+
+
+ Email Notifications
+
+
+ Receive email updates about your subscription
+
+
+
+ {fieldState.invalid && (
+
+ )}
+
+ )}
+ />
+
+
+
+
+
+
+ Save Preferences
+
+ form.reset()}>
+ Reset
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-rhf-demo.tsx b/apps/v4/registry/new-york-v4/examples/form-rhf-demo.tsx
new file mode 100644
index 0000000000..0833edf66e
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-rhf-demo.tsx
@@ -0,0 +1,150 @@
+"use client"
+
+import * as React from "react"
+import { zodResolver } from "@hookform/resolvers/zod"
+import { Controller, useForm } from "react-hook-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import { Input } from "@/registry/new-york-v4/ui/input"
+import {
+ InputGroup,
+ InputGroupAddon,
+ InputGroupText,
+ InputGroupTextarea,
+} from "@/registry/new-york-v4/ui/input-group"
+
+const formSchema = z.object({
+ title: z
+ .string()
+ .min(5, "Bug title must be at least 5 characters.")
+ .max(32, "Bug title must be at most 32 characters."),
+ description: z
+ .string()
+ .min(20, "Description must be at least 20 characters.")
+ .max(100, "Description must be at most 100 characters."),
+})
+
+export default function BugReportForm() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ title: "",
+ description: "",
+ },
+ })
+
+ function onSubmit(data: z.infer) {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(data, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ }
+
+ return (
+
+
+ Bug Report
+
+ Help us improve by reporting bugs you encounter.
+
+
+
+
+
+ (
+
+
+ Bug Title
+
+
+ {fieldState.invalid && (
+
+ )}
+
+ )}
+ />
+ (
+
+
+ Description
+
+
+
+
+
+ {field.value.length}/100 characters
+
+
+
+
+ Include steps to reproduce, expected behavior, and what
+ actually happened.
+
+ {fieldState.invalid && (
+
+ )}
+
+ )}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Submit
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-rhf-input.tsx b/apps/v4/registry/new-york-v4/examples/form-rhf-input.tsx
new file mode 100644
index 0000000000..c3bdb4ffbe
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-rhf-input.tsx
@@ -0,0 +1,114 @@
+"use client"
+
+import { zodResolver } from "@hookform/resolvers/zod"
+import { Controller, useForm } from "react-hook-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import { Input } from "@/registry/new-york-v4/ui/input"
+
+const formSchema = z.object({
+ username: z
+ .string()
+ .min(3, "Username must be at least 3 characters.")
+ .max(10, "Username must be at most 10 characters.")
+ .regex(
+ /^[a-zA-Z0-9_]+$/,
+ "Username can only contain letters, numbers, and underscores."
+ ),
+})
+
+export default function FormRhfInput() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ username: "",
+ },
+ })
+
+ function onSubmit(data: z.infer) {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(data, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ }
+
+ return (
+
+
+ Profile Settings
+
+ Update your profile information below.
+
+
+
+
+
+ (
+
+
+ Username
+
+
+
+ This is your public display name. Must be between 3 and 10
+ characters. Must only contain letters, numbers, and
+ underscores.
+
+ {fieldState.invalid && (
+
+ )}
+
+ )}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-rhf-password.tsx b/apps/v4/registry/new-york-v4/examples/form-rhf-password.tsx
new file mode 100644
index 0000000000..d89959bf10
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-rhf-password.tsx
@@ -0,0 +1,221 @@
+"use client"
+
+import * as React from "react"
+import { zodResolver } from "@hookform/resolvers/zod"
+import { CheckIcon } from "lucide-react"
+import { Controller, useForm } from "react-hook-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import {
+ InputGroup,
+ InputGroupAddon,
+ InputGroupInput,
+} from "@/registry/new-york-v4/ui/input-group"
+import { Progress } from "@/registry/new-york-v4/ui/progress"
+
+const passwordRequirements = [
+ {
+ id: "length",
+ label: "At least 8 characters",
+ test: (val: string) => val.length >= 8,
+ },
+ {
+ id: "lowercase",
+ label: "One lowercase letter",
+ test: (val: string) => /[a-z]/.test(val),
+ },
+ {
+ id: "uppercase",
+ label: "One uppercase letter",
+ test: (val: string) => /[A-Z]/.test(val),
+ },
+ { id: "number", label: "One number", test: (val: string) => /\d/.test(val) },
+ {
+ id: "special",
+ label: "One special character",
+ test: (val: string) => /[!@#$%^&*(),.?":{}|<>]/.test(val),
+ },
+]
+
+const formSchema = z.object({
+ password: z
+ .string()
+ .min(8, "Password must be at least 8 characters")
+ .refine(
+ (val) => /[a-z]/.test(val),
+ "Password must contain at least one lowercase letter"
+ )
+ .refine(
+ (val) => /[A-Z]/.test(val),
+ "Password must contain at least one uppercase letter"
+ )
+ .refine(
+ (val) => /\d/.test(val),
+ "Password must contain at least one number"
+ )
+ .refine(
+ (val) => /[!@#$%^&*(),.?":{}|<>]/.test(val),
+ "Password must contain at least one special character"
+ ),
+})
+
+export default function FormRhfPassword() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ password: "",
+ },
+ })
+
+ const password = form.watch("password")
+
+ // Calculate password strength.
+ const metRequirements = passwordRequirements.filter((req) =>
+ req.test(password || "")
+ )
+ const strengthPercentage =
+ (metRequirements.length / passwordRequirements.length) * 100
+
+ // Determine strength level and color.
+ const getStrengthColor = () => {
+ if (strengthPercentage === 0) return "bg-neutral-200"
+ if (strengthPercentage <= 40) return "bg-red-500"
+ if (strengthPercentage <= 80) return "bg-yellow-500"
+ return "bg-green-500"
+ }
+
+ const allRequirementsMet =
+ metRequirements.length === passwordRequirements.length
+
+ function onSubmit(data: z.infer) {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(data, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ }
+
+ return (
+
+
+ Create Password
+
+ Choose a strong password to secure your account.
+
+
+
+
+
+ (
+
+
+ Password
+
+
+
+
+
+
+
+
+ {/* Password strength meter. */}
+
+
+
+ {/* Requirements list. */}
+
+ {passwordRequirements.map((requirement) => {
+ const isMet = requirement.test(password || "")
+ return (
+
+
+
+ {requirement.label}
+
+
+ )
+ })}
+
+
+
+ {fieldState.invalid && (
+
+ )}
+
+ )}
+ />
+
+
+
+
+
+
+ Create Password
+
+ form.reset()}>
+ Reset
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-rhf-radiogroup.tsx b/apps/v4/registry/new-york-v4/examples/form-rhf-radiogroup.tsx
new file mode 100644
index 0000000000..272efa59d6
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-rhf-radiogroup.tsx
@@ -0,0 +1,152 @@
+"use client"
+
+import * as React from "react"
+import { zodResolver } from "@hookform/resolvers/zod"
+import { Controller, useForm } from "react-hook-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldContent,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+ FieldLegend,
+ FieldSet,
+ FieldTitle,
+} from "@/registry/new-york-v4/ui/field"
+import {
+ RadioGroup,
+ RadioGroupItem,
+} from "@/registry/new-york-v4/ui/radio-group"
+
+const plans = [
+ {
+ id: "starter",
+ title: "Starter (100K tokens/month)",
+ description: "For everyday use with basic features.",
+ },
+ {
+ id: "pro",
+ title: "Pro (1M tokens/month)",
+ description: "For advanced AI usage with more features.",
+ },
+ {
+ id: "enterprise",
+ title: "Enterprise (Unlimited tokens)",
+ description: "For large teams and heavy usage.",
+ },
+] as const
+
+const formSchema = z.object({
+ plan: z.string().min(1, "You must select a subscription plan to continue."),
+})
+
+export default function FormRhfRadioGroup() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ plan: "",
+ },
+ })
+
+ function onSubmit(data: z.infer) {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(data, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ }
+
+ return (
+
+
+ Subscription Plan
+
+ See pricing and features for each plan.
+
+
+
+
+
+ (
+
+ Plan
+
+ You can upgrade or downgrade your plan at any time.
+
+
+ {plans.map((plan) => (
+
+
+
+ {plan.title}
+
+ {plan.description}
+
+
+
+
+
+ ))}
+
+ {fieldState.invalid && (
+
+ )}
+
+ )}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-rhf-select.tsx b/apps/v4/registry/new-york-v4/examples/form-rhf-select.tsx
new file mode 100644
index 0000000000..326a32e83e
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-rhf-select.tsx
@@ -0,0 +1,150 @@
+"use client"
+
+import * as React from "react"
+import { zodResolver } from "@hookform/resolvers/zod"
+import { Controller, useForm } from "react-hook-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldContent,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectSeparator,
+ SelectTrigger,
+ SelectValue,
+} from "@/registry/new-york-v4/ui/select"
+
+const spokenLanguages = [
+ { label: "English", value: "en" },
+ { label: "Spanish", value: "es" },
+ { label: "French", value: "fr" },
+ { label: "German", value: "de" },
+ { label: "Italian", value: "it" },
+ { label: "Chinese", value: "zh" },
+ { label: "Japanese", value: "ja" },
+] as const
+
+const formSchema = z.object({
+ language: z
+ .string()
+ .min(1, "Please select your spoken language.")
+ .refine((val) => val !== "auto", {
+ message:
+ "Auto-detection is not allowed. Please select a specific language.",
+ }),
+})
+
+export default function FormRhfSelect() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ language: "",
+ },
+ })
+
+ function onSubmit(data: z.infer) {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(data, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ }
+
+ return (
+
+
+ Language Preferences
+
+ Select your preferred spoken language.
+
+
+
+
+
+ (
+
+
+
+ Spoken Language
+
+
+ For best results, select the language you speak.
+
+ {fieldState.invalid && (
+
+ )}
+
+
+
+
+
+
+ Auto
+
+ {spokenLanguages.map((language) => (
+
+ {language.label}
+
+ ))}
+
+
+
+ )}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-rhf-switch.tsx b/apps/v4/registry/new-york-v4/examples/form-rhf-switch.tsx
new file mode 100644
index 0000000000..0cb9e8236d
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-rhf-switch.tsx
@@ -0,0 +1,114 @@
+"use client"
+
+import * as React from "react"
+import { zodResolver } from "@hookform/resolvers/zod"
+import { Controller, useForm } from "react-hook-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldContent,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import { Switch } from "@/registry/new-york-v4/ui/switch"
+
+const formSchema = z.object({
+ twoFactor: z.boolean().refine((val) => val === true, {
+ message: "It is highly recommended to enable two-factor authentication.",
+ }),
+})
+
+export default function FormRhfSwitch() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ twoFactor: false,
+ },
+ })
+
+ function onSubmit(data: z.infer) {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(data, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ }
+
+ return (
+
+
+ Security Settings
+
+ Manage your account security preferences.
+
+
+
+
+
+ (
+
+
+
+ Multi-factor authentication
+
+
+ Enable multi-factor authentication to secure your account.
+
+ {fieldState.invalid && (
+
+ )}
+
+
+
+ )}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-rhf-textarea.tsx b/apps/v4/registry/new-york-v4/examples/form-rhf-textarea.tsx
new file mode 100644
index 0000000000..ea540dac69
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-rhf-textarea.tsx
@@ -0,0 +1,110 @@
+"use client"
+
+import * as React from "react"
+import { zodResolver } from "@hookform/resolvers/zod"
+import { Controller, useForm } from "react-hook-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import { Textarea } from "@/registry/new-york-v4/ui/textarea"
+
+const formSchema = z.object({
+ about: z
+ .string()
+ .min(10, "Please provide at least 10 characters.")
+ .max(200, "Please keep it under 200 characters."),
+})
+
+export default function FormRhfTextarea() {
+ const form = useForm>({
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ about: "",
+ },
+ })
+
+ function onSubmit(data: z.infer) {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(data, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ }
+
+ return (
+
+
+ Personalization
+
+ Customize your experience by telling us more about yourself.
+
+
+
+
+
+ (
+
+
+ More about you
+
+
+
+ Tell us more about yourself. This will be used to help us
+ personalize your experience.
+
+ {fieldState.invalid && (
+
+ )}
+
+ )}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-tanstack-array.tsx b/apps/v4/registry/new-york-v4/examples/form-tanstack-array.tsx
new file mode 100644
index 0000000000..981f31fce7
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-tanstack-array.tsx
@@ -0,0 +1,179 @@
+/* eslint-disable react/no-children-prop */
+"use client"
+
+import * as React from "react"
+import { useForm } from "@tanstack/react-form"
+import { XIcon } from "lucide-react"
+import { toast } from "sonner"
+import { z } from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldContent,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLegend,
+ FieldSet,
+} from "@/registry/new-york-v4/ui/field"
+import {
+ InputGroup,
+ InputGroupAddon,
+ InputGroupButton,
+ InputGroupInput,
+} from "@/registry/new-york-v4/ui/input-group"
+
+const formSchema = z.object({
+ emails: z
+ .array(
+ z.object({
+ address: z.string().email("Enter a valid email address."),
+ })
+ )
+ .min(1, "Add at least one email address.")
+ .max(5, "You can add up to 5 email addresses."),
+})
+
+export default function FormTanstackArray() {
+ const form = useForm({
+ defaultValues: {
+ emails: [{ address: "" }],
+ },
+ validators: {
+ onBlur: formSchema,
+ },
+ onSubmit: async ({ value }) => {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(value, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ },
+ })
+
+ return (
+
+
+ Contact Emails
+ Manage your contact email addresses.
+
+
+ {
+ e.preventDefault()
+ form.handleSubmit()
+ }}
+ >
+
+ {(field) => {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Email Addresses
+
+ Add up to 5 email addresses where we can contact you.
+
+
+ {field.state.value.map((_, index) => (
+ {
+ const isSubFieldInvalid =
+ subField.state.meta.isTouched &&
+ !subField.state.meta.isValid
+ return (
+
+
+
+
+ subField.handleChange(e.target.value)
+ }
+ aria-invalid={isSubFieldInvalid}
+ placeholder="name@example.com"
+ type="email"
+ autoComplete="email"
+ />
+ {field.state.value.length > 1 && (
+
+ field.removeValue(index)}
+ aria-label={`Remove email ${index + 1}`}
+ >
+
+
+
+ )}
+
+ {isSubFieldInvalid && (
+
+ )}
+
+
+ )
+ }}
+ />
+ ))}
+ field.pushValue({ address: "" })}
+ disabled={field.state.value.length >= 5}
+ >
+ Add Email Address
+
+
+ {isInvalid && }
+
+ )
+ }}
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-tanstack-checkbox.tsx b/apps/v4/registry/new-york-v4/examples/form-tanstack-checkbox.tsx
new file mode 100644
index 0000000000..58ee80e7e1
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-tanstack-checkbox.tsx
@@ -0,0 +1,200 @@
+/* eslint-disable react/no-children-prop */
+"use client"
+
+import { useForm } from "@tanstack/react-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import { Checkbox } from "@/registry/new-york-v4/ui/checkbox"
+import {
+ Field,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+ FieldLegend,
+ FieldSeparator,
+ FieldSet,
+} from "@/registry/new-york-v4/ui/field"
+
+const tasks = [
+ {
+ id: "push",
+ label: "Push notifications",
+ },
+ {
+ id: "email",
+ label: "Email notifications",
+ },
+] as const
+
+const formSchema = z.object({
+ responses: z.boolean(),
+ tasks: z
+ .array(z.string())
+ .min(1, "Please select at least one notification type.")
+ .refine(
+ (value) => value.every((task) => tasks.some((t) => t.id === task)),
+ {
+ message: "Invalid notification type selected.",
+ }
+ ),
+})
+
+export default function FormTanstackCheckbox() {
+ const form = useForm({
+ defaultValues: {
+ responses: true,
+ tasks: [] as string[],
+ },
+ validators: {
+ onSubmit: formSchema,
+ },
+ onSubmit: async ({ value }) => {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(value, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ },
+ })
+
+ return (
+
+
+ Notifications
+ Manage your notification preferences.
+
+
+ {
+ e.preventDefault()
+ form.handleSubmit()
+ }}
+ >
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Responses
+
+ Get notified for requests that take time, like research or
+ image generation.
+
+
+
+
+ field.handleChange(checked === true)
+ }
+ disabled
+ />
+
+ Push notifications
+
+
+
+ {isInvalid && (
+
+ )}
+
+ )
+ }}
+ />
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Tasks
+
+ Get notified when tasks you've created have updates.
+
+
+ {tasks.map((task) => (
+
+ {
+ if (checked) {
+ field.pushValue(task.id)
+ } else {
+ const index = field.state.value.indexOf(task.id)
+ if (index > -1) {
+ field.removeValue(index)
+ }
+ }
+ }}
+ />
+
+ {task.label}
+
+
+ ))}
+
+ {isInvalid && (
+
+ )}
+
+ )
+ }}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-tanstack-complex.tsx b/apps/v4/registry/new-york-v4/examples/form-tanstack-complex.tsx
new file mode 100644
index 0000000000..031afd0c47
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-tanstack-complex.tsx
@@ -0,0 +1,313 @@
+/* eslint-disable react/no-children-prop */
+"use client"
+
+import * as React from "react"
+import { useForm } from "@tanstack/react-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import { Card, CardContent, CardFooter } from "@/registry/new-york-v4/ui/card"
+import { Checkbox } from "@/registry/new-york-v4/ui/checkbox"
+import {
+ Field,
+ FieldContent,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+ FieldLegend,
+ FieldSeparator,
+ FieldSet,
+ FieldTitle,
+} from "@/registry/new-york-v4/ui/field"
+import {
+ RadioGroup,
+ RadioGroupItem,
+} from "@/registry/new-york-v4/ui/radio-group"
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@/registry/new-york-v4/ui/select"
+import { Switch } from "@/registry/new-york-v4/ui/switch"
+
+const addons = [
+ {
+ id: "analytics",
+ title: "Analytics",
+ description: "Advanced analytics and reporting",
+ },
+ {
+ id: "backup",
+ title: "Backup",
+ description: "Automated daily backups",
+ },
+ {
+ id: "support",
+ title: "Priority Support",
+ description: "24/7 premium customer support",
+ },
+] as const
+
+const formSchema = z.object({
+ plan: z
+ .string({
+ required_error: "Please select a subscription plan",
+ })
+ .min(1, "Please select a subscription plan")
+ .refine((value) => value === "basic" || value === "pro", {
+ message: "Invalid plan selection. Please choose Basic or Pro",
+ }),
+ billingPeriod: z
+ .string({
+ required_error: "Please select a billing period",
+ })
+ .min(1, "Please select a billing period"),
+ addons: z
+ .array(z.string())
+ .min(1, "Please select at least one add-on")
+ .max(3, "You can select up to 3 add-ons")
+ .refine(
+ (value) => value.every((addon) => addons.some((a) => a.id === addon)),
+ {
+ message: "You selected an invalid add-on",
+ }
+ ),
+ emailNotifications: z.boolean(),
+})
+
+export default function FormTanstackComplex() {
+ const form = useForm({
+ defaultValues: {
+ plan: "basic",
+ billingPeriod: "monthly",
+ addons: [] as string[],
+ emailNotifications: false,
+ },
+ validators: {
+ onSubmit: formSchema,
+ },
+ onSubmit: async ({ value }) => {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(value, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ },
+ })
+
+ return (
+
+
+ {
+ e.preventDefault()
+ form.handleSubmit()
+ }}
+ >
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Subscription Plan
+
+ Choose your subscription plan.
+
+
+
+
+
+ Basic
+
+ For individuals and small teams
+
+
+
+
+
+
+
+
+ Pro
+
+ For businesses with higher demands
+
+
+
+
+
+
+ {isInvalid && (
+
+ )}
+
+ )
+ }}
+ />
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Billing Period
+
+
+
+
+
+ Monthly
+ Yearly
+
+
+
+ Choose how often you want to be billed.
+
+ {isInvalid && (
+
+ )}
+
+ )
+ }}
+ />
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Add-ons
+
+ Select additional features you'd like to include.
+
+
+ {addons.map((addon) => (
+
+ {
+ if (checked) {
+ field.pushValue(addon.id)
+ } else {
+ const index = field.state.value.indexOf(
+ addon.id
+ )
+ if (index > -1) {
+ field.removeValue(index)
+ }
+ }
+ }}
+ />
+
+
+ {addon.title}
+
+
+ {addon.description}
+
+
+
+ ))}
+
+ {isInvalid && (
+
+ )}
+
+ )
+ }}
+ />
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+
+
+ Email Notifications
+
+
+ Receive email updates about your subscription
+
+
+
+ {isInvalid && (
+
+ )}
+
+ )
+ }}
+ />
+
+
+
+
+
+
+ Save Preferences
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-tanstack-demo.tsx b/apps/v4/registry/new-york-v4/examples/form-tanstack-demo.tsx
new file mode 100644
index 0000000000..54aa5989f2
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-tanstack-demo.tsx
@@ -0,0 +1,165 @@
+/* eslint-disable react/no-children-prop */
+"use client"
+
+import * as React from "react"
+import { useForm } from "@tanstack/react-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import { Input } from "@/registry/new-york-v4/ui/input"
+import {
+ InputGroup,
+ InputGroupAddon,
+ InputGroupText,
+ InputGroupTextarea,
+} from "@/registry/new-york-v4/ui/input-group"
+
+const formSchema = z.object({
+ title: z
+ .string()
+ .min(5, "Bug title must be at least 5 characters.")
+ .max(32, "Bug title must be at most 32 characters."),
+ description: z
+ .string()
+ .min(20, "Description must be at least 20 characters.")
+ .max(100, "Description must be at most 100 characters."),
+})
+
+export default function BugReportForm() {
+ const form = useForm({
+ defaultValues: {
+ title: "",
+ description: "",
+ },
+ validators: {
+ onSubmit: formSchema,
+ },
+ onSubmit: async ({ value }) => {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(value, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ },
+ })
+
+ return (
+
+
+ Bug Report
+
+ Help us improve by reporting bugs you encounter.
+
+
+
+ {
+ e.preventDefault()
+ form.handleSubmit()
+ }}
+ >
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Bug Title
+ field.handleChange(e.target.value)}
+ aria-invalid={isInvalid}
+ placeholder="Login button not working on mobile"
+ autoComplete="off"
+ />
+ {isInvalid && (
+
+ )}
+
+ )
+ }}
+ />
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Description
+
+ field.handleChange(e.target.value)}
+ placeholder="I'm having an issue with the login button on mobile."
+ rows={6}
+ className="min-h-24 resize-none"
+ aria-invalid={isInvalid}
+ />
+
+
+ {field.state.value.length}/100 characters
+
+
+
+
+ Include steps to reproduce, expected behavior, and what
+ actually happened.
+
+ {isInvalid && (
+
+ )}
+
+ )
+ }}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Submit
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-tanstack-input.tsx b/apps/v4/registry/new-york-v4/examples/form-tanstack-input.tsx
new file mode 100644
index 0000000000..927894e903
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-tanstack-input.tsx
@@ -0,0 +1,127 @@
+/* eslint-disable react/no-children-prop */
+"use client"
+
+import { useForm } from "@tanstack/react-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import { Input } from "@/registry/new-york-v4/ui/input"
+
+const formSchema = z.object({
+ username: z
+ .string()
+ .min(3, "Username must be at least 3 characters.")
+ .max(10, "Username must be at most 10 characters.")
+ .regex(
+ /^[a-zA-Z0-9_]+$/,
+ "Username can only contain letters, numbers, and underscores."
+ ),
+})
+
+export default function FormTanstackInput() {
+ const form = useForm({
+ defaultValues: {
+ username: "",
+ },
+ validators: {
+ onSubmit: formSchema,
+ },
+ onSubmit: async ({ value }) => {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(value, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ },
+ })
+
+ return (
+
+
+ Profile Settings
+
+ Update your profile information below.
+
+
+
+ {
+ e.preventDefault()
+ form.handleSubmit()
+ }}
+ >
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+
+ Username
+
+ field.handleChange(e.target.value)}
+ aria-invalid={isInvalid}
+ placeholder="shadcn"
+ autoComplete="username"
+ />
+
+ This is your public display name. Must be between 3 and 10
+ characters. Must only contain letters, numbers, and
+ underscores.
+
+ {isInvalid && (
+
+ )}
+
+ )
+ }}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-tanstack-radiogroup.tsx b/apps/v4/registry/new-york-v4/examples/form-tanstack-radiogroup.tsx
new file mode 100644
index 0000000000..a78405c976
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-tanstack-radiogroup.tsx
@@ -0,0 +1,160 @@
+/* eslint-disable react/no-children-prop */
+"use client"
+
+import { useForm } from "@tanstack/react-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldContent,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+ FieldLegend,
+ FieldSet,
+ FieldTitle,
+} from "@/registry/new-york-v4/ui/field"
+import {
+ RadioGroup,
+ RadioGroupItem,
+} from "@/registry/new-york-v4/ui/radio-group"
+
+const plans = [
+ {
+ id: "starter",
+ title: "Starter (100K tokens/month)",
+ description: "For everyday use with basic features.",
+ },
+ {
+ id: "pro",
+ title: "Pro (1M tokens/month)",
+ description: "For advanced AI usage with more features.",
+ },
+ {
+ id: "enterprise",
+ title: "Enterprise (Unlimited tokens)",
+ description: "For large teams and heavy usage.",
+ },
+] as const
+
+const formSchema = z.object({
+ plan: z.string().min(1, "You must select a subscription plan to continue."),
+})
+
+export default function FormTanstackRadioGroup() {
+ const form = useForm({
+ defaultValues: {
+ plan: "",
+ },
+ validators: {
+ onSubmit: formSchema,
+ },
+ onSubmit: async ({ value }) => {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(value, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ },
+ })
+
+ return (
+
+
+ Subscription Plan
+
+ See pricing and features for each plan.
+
+
+
+ {
+ e.preventDefault()
+ form.handleSubmit()
+ }}
+ >
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+ Plan
+
+ You can upgrade or downgrade your plan at any time.
+
+
+ {plans.map((plan) => (
+
+
+
+ {plan.title}
+
+ {plan.description}
+
+
+
+
+
+ ))}
+
+ {isInvalid && (
+
+ )}
+
+ )
+ }}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-tanstack-select.tsx b/apps/v4/registry/new-york-v4/examples/form-tanstack-select.tsx
new file mode 100644
index 0000000000..db579081c7
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-tanstack-select.tsx
@@ -0,0 +1,159 @@
+/* eslint-disable react/no-children-prop */
+"use client"
+
+import { useForm } from "@tanstack/react-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldContent,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectSeparator,
+ SelectTrigger,
+ SelectValue,
+} from "@/registry/new-york-v4/ui/select"
+
+const spokenLanguages = [
+ { label: "English", value: "en" },
+ { label: "Spanish", value: "es" },
+ { label: "French", value: "fr" },
+ { label: "German", value: "de" },
+ { label: "Italian", value: "it" },
+ { label: "Chinese", value: "zh" },
+ { label: "Japanese", value: "ja" },
+] as const
+
+const formSchema = z.object({
+ language: z
+ .string()
+ .min(1, "Please select your spoken language.")
+ .refine((val) => val !== "auto", {
+ message:
+ "Auto-detection is not allowed. Please select a specific language.",
+ }),
+})
+
+export default function FormTanstackSelect() {
+ const form = useForm({
+ defaultValues: {
+ language: "",
+ },
+ validators: {
+ onSubmit: formSchema,
+ },
+ onSubmit: async ({ value }) => {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(value, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ },
+ })
+
+ return (
+
+
+ Language Preferences
+
+ Select your preferred spoken language.
+
+
+
+ {
+ e.preventDefault()
+ form.handleSubmit()
+ }}
+ >
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+
+
+ Spoken Language
+
+
+ For best results, select the language you speak.
+
+ {isInvalid && (
+
+ )}
+
+
+
+
+
+
+ Auto
+
+ {spokenLanguages.map((language) => (
+
+ {language.label}
+
+ ))}
+
+
+
+ )
+ }}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-tanstack-switch.tsx b/apps/v4/registry/new-york-v4/examples/form-tanstack-switch.tsx
new file mode 100644
index 0000000000..dcbb64876a
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-tanstack-switch.tsx
@@ -0,0 +1,121 @@
+/* eslint-disable react/no-children-prop */
+"use client"
+
+import { useForm } from "@tanstack/react-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldContent,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import { Switch } from "@/registry/new-york-v4/ui/switch"
+
+const formSchema = z.object({
+ twoFactor: z.boolean().refine((val) => val === true, {
+ message: "It is highly recommended to enable two-factor authentication.",
+ }),
+})
+
+export default function FormTanstackSwitch() {
+ const form = useForm({
+ defaultValues: {
+ twoFactor: false,
+ },
+ validators: {
+ onSubmit: formSchema,
+ },
+ onSubmit: async ({ value }) => {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(value, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ },
+ })
+
+ return (
+
+
+ Security Settings
+
+ Manage your account security preferences.
+
+
+
+ {
+ e.preventDefault()
+ form.handleSubmit()
+ }}
+ >
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+
+
+ Multi-factor authentication
+
+
+ Enable multi-factor authentication to secure your
+ account.
+
+ {isInvalid && (
+
+ )}
+
+
+
+ )
+ }}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/new-york-v4/examples/form-tanstack-textarea.tsx b/apps/v4/registry/new-york-v4/examples/form-tanstack-textarea.tsx
new file mode 100644
index 0000000000..9b2f2ca54c
--- /dev/null
+++ b/apps/v4/registry/new-york-v4/examples/form-tanstack-textarea.tsx
@@ -0,0 +1,122 @@
+/* eslint-disable react/no-children-prop */
+"use client"
+
+import { useForm } from "@tanstack/react-form"
+import { toast } from "sonner"
+import * as z from "zod"
+
+import { Button } from "@/registry/new-york-v4/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/registry/new-york-v4/ui/card"
+import {
+ Field,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLabel,
+} from "@/registry/new-york-v4/ui/field"
+import { Textarea } from "@/registry/new-york-v4/ui/textarea"
+
+const formSchema = z.object({
+ about: z
+ .string()
+ .min(10, "Please provide at least 10 characters.")
+ .max(200, "Please keep it under 200 characters."),
+})
+
+export default function FormTanstackTextarea() {
+ const form = useForm({
+ defaultValues: {
+ about: "",
+ },
+ validators: {
+ onSubmit: formSchema,
+ },
+ onSubmit: async ({ value }) => {
+ toast("You submitted the following values:", {
+ description: (
+
+ {JSON.stringify(value, null, 2)}
+
+ ),
+ position: "bottom-right",
+ classNames: {
+ content: "flex flex-col gap-2",
+ },
+ style: {
+ "--border-radius": "calc(var(--radius) + 4px)",
+ } as React.CSSProperties,
+ })
+ },
+ })
+
+ return (
+
+
+ Personalization
+
+ Customize your experience by telling us more about yourself.
+
+
+
+ {
+ e.preventDefault()
+ form.handleSubmit()
+ }}
+ >
+
+ {
+ const isInvalid =
+ field.state.meta.isTouched && !field.state.meta.isValid
+ return (
+
+
+ More about you
+
+ field.handleChange(e.target.value)}
+ aria-invalid={isInvalid}
+ placeholder="I'm a software engineer..."
+ className="min-h-[120px]"
+ />
+
+ Tell us more about yourself. This will be used to help us
+ personalize your experience.
+
+ {isInvalid && (
+
+ )}
+
+ )
+ }}
+ />
+
+
+
+
+
+ form.reset()}>
+ Reset
+
+
+ Save
+
+
+
+
+ )
+}
diff --git a/apps/v4/registry/registry-examples.ts b/apps/v4/registry/registry-examples.ts
index ef29d08899..7082a11411 100644
--- a/apps/v4/registry/registry-examples.ts
+++ b/apps/v4/registry/registry-examples.ts
@@ -1006,6 +1006,256 @@ export const examples: Registry["items"] = [
},
],
},
+ {
+ name: "form-rhf-demo",
+ type: "registry:example",
+ registryDependencies: ["field", "input", "input-group", "button", "card"],
+ files: [
+ {
+ path: "examples/form-rhf-demo.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["react-hook-form", "@hookform/resolvers", "zod"],
+ },
+ {
+ name: "form-rhf-input",
+ type: "registry:example",
+ registryDependencies: ["field", "input", "button", "card"],
+ files: [
+ {
+ path: "examples/form-rhf-input.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["react-hook-form", "@hookform/resolvers", "zod"],
+ },
+ {
+ name: "form-rhf-select",
+ type: "registry:example",
+ registryDependencies: ["field", "select", "button", "card"],
+ files: [
+ {
+ path: "examples/form-rhf-select.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["react-hook-form", "@hookform/resolvers", "zod"],
+ },
+ {
+ name: "form-rhf-checkbox",
+ type: "registry:example",
+ registryDependencies: ["field", "checkbox", "button", "card"],
+ files: [
+ {
+ path: "examples/form-rhf-checkbox.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["react-hook-form", "@hookform/resolvers", "zod"],
+ },
+ {
+ name: "form-rhf-switch",
+ type: "registry:example",
+ registryDependencies: ["field", "switch", "button", "card"],
+ files: [
+ {
+ path: "examples/form-rhf-switch.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["react-hook-form", "@hookform/resolvers", "zod"],
+ },
+ {
+ name: "form-rhf-textarea",
+ type: "registry:example",
+ registryDependencies: ["field", "textarea", "button", "card"],
+ files: [
+ {
+ path: "examples/form-rhf-textarea.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["react-hook-form", "@hookform/resolvers", "zod"],
+ },
+ {
+ name: "form-rhf-radiogroup",
+ type: "registry:example",
+ registryDependencies: ["field", "radio-group", "button", "card"],
+ files: [
+ {
+ path: "examples/form-rhf-radiogroup.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["react-hook-form", "@hookform/resolvers", "zod"],
+ },
+ {
+ name: "form-rhf-array",
+ type: "registry:example",
+ registryDependencies: ["field", "input", "input-group", "button", "card"],
+ files: [
+ {
+ path: "examples/form-rhf-array.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["react-hook-form", "@hookform/resolvers", "zod"],
+ },
+ {
+ name: "form-rhf-complex",
+ type: "registry:example",
+ registryDependencies: [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch",
+ ],
+ files: [
+ {
+ path: "examples/form-rhf-complex.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["react-hook-form", "@hookform/resolvers", "zod"],
+ },
+ {
+ name: "form-rhf-password",
+ type: "registry:example",
+ registryDependencies: [
+ "field",
+ "input-group",
+ "progress",
+ "button",
+ "card",
+ ],
+ files: [
+ {
+ path: "examples/form-rhf-password.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["react-hook-form", "@hookform/resolvers", "zod"],
+ },
+ {
+ name: "form-tanstack-demo",
+ type: "registry:example",
+ registryDependencies: ["field", "input", "input-group", "button", "card"],
+ files: [
+ {
+ path: "examples/form-tanstack-demo.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["@tanstack/react-form", "zod"],
+ },
+ {
+ name: "form-tanstack-input",
+ type: "registry:example",
+ registryDependencies: ["field", "input", "button", "card"],
+ files: [
+ {
+ path: "examples/form-tanstack-input.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["@tanstack/react-form", "zod"],
+ },
+ {
+ name: "form-tanstack-textarea",
+ type: "registry:example",
+ registryDependencies: ["field", "textarea", "button", "card"],
+ files: [
+ {
+ path: "examples/form-tanstack-textarea.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["@tanstack/react-form", "zod"],
+ },
+ {
+ name: "form-tanstack-select",
+ type: "registry:example",
+ registryDependencies: ["field", "select", "button", "card"],
+ files: [
+ {
+ path: "examples/form-tanstack-select.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["@tanstack/react-form", "zod"],
+ },
+ {
+ name: "form-tanstack-checkbox",
+ type: "registry:example",
+ registryDependencies: ["field", "checkbox", "button", "card"],
+ files: [
+ {
+ path: "examples/form-tanstack-checkbox.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["@tanstack/react-form", "zod"],
+ },
+ {
+ name: "form-tanstack-switch",
+ type: "registry:example",
+ registryDependencies: ["field", "switch", "button", "card"],
+ files: [
+ {
+ path: "examples/form-tanstack-switch.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["@tanstack/react-form", "zod"],
+ },
+ {
+ name: "form-tanstack-radiogroup",
+ type: "registry:example",
+ registryDependencies: ["field", "radio-group", "button", "card"],
+ files: [
+ {
+ path: "examples/form-tanstack-radiogroup.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["@tanstack/react-form", "zod"],
+ },
+ {
+ name: "form-tanstack-array",
+ type: "registry:example",
+ registryDependencies: ["field", "input", "input-group", "button", "card"],
+ files: [
+ {
+ path: "examples/form-tanstack-array.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["@tanstack/react-form", "zod"],
+ },
+ {
+ name: "form-tanstack-complex",
+ type: "registry:example",
+ registryDependencies: [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch",
+ ],
+ files: [
+ {
+ path: "examples/form-tanstack-complex.tsx",
+ type: "registry:example",
+ },
+ ],
+ dependencies: ["@tanstack/react-form", "zod"],
+ },
{
name: "drawer-dialog",
type: "registry:example",
diff --git a/apps/www/public/r/registries.json b/apps/www/public/r/registries.json
index 96b6a92d44..372d4ae662 100644
--- a/apps/www/public/r/registries.json
+++ b/apps/www/public/r/registries.json
@@ -27,15 +27,21 @@
"@billingsdk": "https://billingsdk.com/r/{name}.json",
"@elements": "https://tryelements.dev/r/{name}.json",
"@nativeui": "https://nativeui.io/registry/{name}.json",
+ "@scrollxui": "https://www.scrollxui.dev/registry/{name}.json",
"@smoothui": "https://smoothui.dev/r/{name}.json",
"@svgl": "https://svgl.app/r/{name}.json",
"@formcn": "https://formcn.dev/r/{name}.json",
"@limeplay": "https://limeplay.winoffrg.dev/r/{name}.json",
"@skiper-ui": "https://skiper-ui.com/registry/{name}.json",
+ "@shadcnblocks": "https://shadcnblocks.com/r/{name}.json",
"@shadcn-editor": "https://shadcn-editor.vercel.app/r/{name}.json",
"@shadcn-studio": "https://shadcnstudio.com/r/{name}.json",
"@rigidui": "https://rigidui.com/r/{name}.json",
+ "@skyr": "https://ui-play.skyroc.me/r/{name}.json",
"@retroui": "https://retroui.dev/r/{name}.json",
"@wds": "https://wds-shadcn-registry.netlify.app/r/{name}.json",
- "@97cn": "https://97cn.itzik.co/r/{name}.json"
+ "@97cn": "https://97cn.itzik.co/r/{name}.json",
+ "@better-upload": "https://better-upload.com/r/{name}.json",
+ "@zippystarter": "https://zippystarter.com/r/{name}.json",
+ "@elevenlabs-ui": "https://ui.elevenlabs.io/r/{name}.json"
}
diff --git a/apps/www/public/r/styles/new-york-v4/form-next-complex.json b/apps/www/public/r/styles/new-york-v4/form-next-complex.json
new file mode 100644
index 0000000000..9c4b29bb2d
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-next-complex.json
@@ -0,0 +1,35 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-next-complex",
+ "type": "registry:example",
+ "registryDependencies": [
+ "field",
+ "input",
+ "textarea",
+ "button",
+ "card",
+ "spinner",
+ "checkbox",
+ "dialog",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-next-complex.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport Form from \"next/form\"\nimport { toast } from \"sonner\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport { Card, CardContent, CardFooter } from \"@/registry/new-york-v4/ui/card\"\nimport { Checkbox } from \"@/registry/new-york-v4/ui/checkbox\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/new-york-v4/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/new-york-v4/ui/select\"\nimport { Spinner } from \"@/registry/new-york-v4/ui/spinner\"\nimport { Switch } from \"@/registry/new-york-v4/ui/switch\"\n\nimport { complexFormAction } from \"./form-next-complex-action\"\nimport { addons, type FormState } from \"./form-next-complex-schema\"\n\nexport default function FormNextComplex() {\n const [formState, formAction, pending] = React.useActionState<\n FormState,\n FormData\n >(complexFormAction, {\n values: {\n plan: \"basic\",\n billingPeriod: \"monthly\",\n addons: [],\n emailNotifications: false,\n },\n errors: null,\n success: false,\n })\n\n React.useEffect(() => {\n if (formState.success) {\n toast.success(\"Preferences saved\", {\n description: \"Your subscription plan has been updated.\",\n })\n }\n }, [formState.success])\n\n return (\n \n \n \n \n \n Subscription Plan \n \n Choose your subscription plan.\n \n \n \n \n \n Basic \n \n For individuals and small teams\n \n \n \n \n \n \n \n \n Pro \n \n For businesses with higher demands\n \n \n \n \n \n \n {formState.errors?.plan && (\n {formState.errors.plan[0]} \n )}\n \n \n \n Billing Period \n \n \n \n \n \n Monthly \n Yearly \n \n \n \n Choose how often you want to be billed.\n \n {formState.errors?.billingPeriod && (\n {formState.errors.billingPeriod[0]} \n )}\n \n \n \n Add-ons \n \n Select additional features you'd like to include.\n \n \n {addons.map((addon) => (\n \n \n \n {addon.title} \n {addon.description} \n \n \n ))}\n \n {formState.errors?.addons && (\n {formState.errors.addons[0]} \n )}\n \n \n \n \n \n Email Notifications\n \n \n Receive email updates about your subscription\n \n \n \n \n \n \n \n \n \n \n {pending && }\n Save Preferences\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ },
+ {
+ "path": "registry/new-york-v4/examples/form-next-complex-schema.ts",
+ "content": "import { z } from \"zod\"\n\nexport const formSchema = z.object({\n plan: z\n .string({\n required_error: \"Please select a subscription plan\",\n })\n .min(1, \"Please select a subscription plan\")\n .refine((value) => value === \"basic\" || value === \"pro\", {\n message: \"Invalid plan selection. Please choose Basic or Pro\",\n }),\n billingPeriod: z\n .string({\n required_error: \"Please select a billing period\",\n })\n .min(1, \"Please select a billing period\"),\n addons: z\n .array(z.string())\n .min(1, \"Please select at least one add-on\")\n .max(3, \"You can select up to 3 add-ons\")\n .refine(\n (value) => value.every((addon) => addons.some((a) => a.id === addon)),\n {\n message: \"You selected an invalid add-on\",\n }\n ),\n emailNotifications: z.boolean(),\n})\n\nexport type FormState = {\n values: z.infer\n errors: null | Partial, string[]>>\n success: boolean\n}\n\nexport const addons = [\n {\n id: \"analytics\",\n title: \"Analytics\",\n description: \"Advanced analytics and reporting\",\n },\n {\n id: \"backup\",\n title: \"Backup\",\n description: \"Automated daily backups\",\n },\n {\n id: \"support\",\n title: \"Priority Support\",\n description: \"24/7 premium customer support\",\n },\n] as const\n",
+ "type": "registry:example"
+ },
+ {
+ "path": "registry/new-york-v4/examples/form-next-complex-action.ts",
+ "content": "\"use server\"\n\nimport { formSchema, type FormState } from \"./form-next-complex-schema\"\n\nexport async function complexFormAction(\n _prevState: FormState,\n formData: FormData\n) {\n // Sleep for 1 second\n await new Promise((resolve) => setTimeout(resolve, 1000))\n\n const values = {\n plan: formData.get(\"plan\") as FormState[\"values\"][\"plan\"],\n billingPeriod: formData.get(\"billingPeriod\") as string,\n addons: formData.getAll(\"addons\") as string[],\n emailNotifications: formData.get(\"emailNotifications\") === \"on\",\n }\n\n const result = formSchema.safeParse(values)\n\n if (!result.success) {\n return {\n values,\n success: false,\n errors: result.error.flatten().fieldErrors,\n }\n }\n\n // Do something with the values.\n // Call your database or API here.\n\n return {\n values,\n errors: null,\n success: true,\n }\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-next-demo.json b/apps/www/public/r/styles/new-york-v4/form-next-demo.json
new file mode 100644
index 0000000000..b0d0325ad7
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-next-demo.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-next-demo",
+ "type": "registry:example",
+ "registryDependencies": [
+ "field",
+ "input",
+ "textarea",
+ "button",
+ "card",
+ "spinner"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-next-demo.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport Form from \"next/form\"\nimport { toast } from \"sonner\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Input } from \"@/registry/new-york-v4/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/new-york-v4/ui/input-group\"\nimport { Spinner } from \"@/registry/new-york-v4/ui/spinner\"\n\nimport { demoFormAction } from \"./form-next-demo-action\"\nimport { type FormState } from \"./form-next-demo-schema\"\n\nexport default function FormNextDemo() {\n const [formState, formAction, pending] = React.useActionState<\n FormState,\n FormData\n >(demoFormAction, {\n values: {\n title: \"\",\n description: \"\",\n },\n errors: null,\n success: false,\n })\n const [descriptionLength, setDescriptionLength] = React.useState(0)\n\n React.useEffect(() => {\n if (formState.success) {\n toast(\"Thank you for your feedback\", {\n description: \"We'll review your report and get back to you soon.\",\n })\n }\n }, [formState.success])\n\n React.useEffect(() => {\n setDescriptionLength(formState.values.description.length)\n }, [formState.values.description])\n\n return (\n \n \n Bug Report \n \n Help us improve by reporting bugs you encounter.\n \n \n \n \n \n \n Bug Title \n \n {formState.errors?.title && (\n {formState.errors.title[0]} \n )}\n \n \n Description \n \n setDescriptionLength(e.target.value.length)}\n />\n \n \n {descriptionLength}/100 characters\n \n \n \n \n Include steps to reproduce, expected behavior, and what actually\n happened.\n \n {formState.errors?.description && (\n {formState.errors.description[0]} \n )}\n \n \n \n \n \n \n \n {pending && }\n Submit\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-rhf-array.json b/apps/www/public/r/styles/new-york-v4/form-rhf-array.json
new file mode 100644
index 0000000000..359b3f6d0c
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-rhf-array.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-array",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-array.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { XIcon } from \"lucide-react\"\nimport { Controller, useFieldArray, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSet,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/new-york-v4/ui/input-group\"\n\nconst formSchema = z.object({\n emails: z\n .array(\n z.object({\n address: z.string().email(\"Enter a valid email address.\"),\n })\n )\n .min(1, \"Add at least one email address.\")\n .max(5, \"You can add up to 5 email addresses.\"),\n})\n\nexport default function FormRhfArray() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n emails: [{ address: \"\" }, { address: \"\" }],\n },\n })\n\n const { fields, append, remove } = useFieldArray({\n control: form.control,\n name: \"emails\",\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Contact Emails \n Manage your contact email addresses. \n \n \n \n \n Email Addresses \n \n Add up to 5 email addresses where we can contact you.\n \n \n {fields.map((field, index) => (\n (\n \n \n \n \n {fields.length > 1 && (\n \n remove(index)}\n aria-label={`Remove email ${index + 1}`}\n >\n \n \n \n )}\n \n {fieldState.invalid && (\n \n )}\n \n \n )}\n />\n ))}\n append({ address: \"\" })}\n disabled={fields.length >= 5}\n >\n Add Email Address\n \n \n {form.formState.errors.emails?.root && (\n \n )}\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-rhf-checkbox.json b/apps/www/public/r/styles/new-york-v4/form-rhf-checkbox.json
new file mode 100644
index 0000000000..59b91b5873
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-rhf-checkbox.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-checkbox",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "checkbox",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-checkbox.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport { Checkbox } from \"@/registry/new-york-v4/ui/checkbox\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n} from \"@/registry/new-york-v4/ui/field\"\n\nconst tasks = [\n {\n id: \"push\",\n label: \"Push notifications\",\n },\n {\n id: \"email\",\n label: \"Email notifications\",\n },\n] as const\n\nconst formSchema = z.object({\n responses: z.boolean(),\n tasks: z\n .array(z.string())\n .min(1, \"Please select at least one notification type.\")\n .refine(\n (value) => value.every((task) => tasks.some((t) => t.id === task)),\n {\n message: \"Invalid notification type selected.\",\n }\n ),\n})\n\nexport default function FormRhfCheckbox() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n responses: true,\n tasks: [],\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Notifications \n Manage your notification preferences. \n \n \n \n \n (\n \n Responses \n \n Get notified for requests that take time, like research or\n image generation.\n \n \n \n \n \n Push notifications\n \n \n \n {fieldState.invalid && (\n \n )}\n \n )}\n />\n \n (\n \n Tasks \n \n Get notified when tasks you've created have updates.\n \n \n {tasks.map((task) => (\n \n {\n const newValue = checked\n ? [...field.value, task.id]\n : field.value.filter((value) => value !== task.id)\n field.onChange(newValue)\n }}\n />\n \n {task.label}\n \n \n ))}\n \n {fieldState.invalid && (\n \n )}\n \n )}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-rhf-complex.json b/apps/www/public/r/styles/new-york-v4/form-rhf-complex.json
new file mode 100644
index 0000000000..f5c35ceb8a
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-rhf-complex.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-complex",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-complex.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport { Checkbox } from \"@/registry/new-york-v4/ui/checkbox\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/new-york-v4/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/new-york-v4/ui/select\"\nimport { Switch } from \"@/registry/new-york-v4/ui/switch\"\n\nconst addons = [\n {\n id: \"analytics\",\n title: \"Analytics\",\n description: \"Advanced analytics and reporting\",\n },\n {\n id: \"backup\",\n title: \"Backup\",\n description: \"Automated daily backups\",\n },\n {\n id: \"support\",\n title: \"Priority Support\",\n description: \"24/7 premium customer support\",\n },\n] as const\n\nconst formSchema = z.object({\n plan: z\n .string({\n required_error: \"Please select a subscription plan\",\n })\n .min(1, \"Please select a subscription plan\")\n .refine((value) => value === \"basic\" || value === \"pro\", {\n message: \"Invalid plan selection. Please choose Basic or Pro\",\n }),\n billingPeriod: z\n .string({\n required_error: \"Please select a billing period\",\n })\n .min(1, \"Please select a billing period\"),\n addons: z\n .array(z.string())\n .min(1, \"Please select at least one add-on\")\n .max(3, \"You can select up to 3 add-ons\")\n .refine(\n (value) => value.every((addon) => addons.some((a) => a.id === addon)),\n {\n message: \"You selected an invalid add-on\",\n }\n ),\n emailNotifications: z.boolean(),\n})\n\nexport default function FormRhfComplex() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n plan: \"basic\",\n billingPeriod: \"\",\n addons: [],\n emailNotifications: false,\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n You're almost there! \n \n Choose your subscription plan and billing period.\n \n \n \n \n \n {\n const isInvalid = fieldState.invalid\n return (\n \n Subscription Plan \n \n Choose your subscription plan.\n \n \n \n \n \n Basic \n \n For individuals and small teams\n \n \n \n \n \n \n \n \n Pro \n \n For businesses with higher demands\n \n \n \n \n \n \n {isInvalid && }\n \n )\n }}\n />\n \n (\n \n \n Billing Period\n \n \n \n \n \n \n Monthly \n Yearly \n \n \n \n Choose how often you want to be billed.\n \n {fieldState.invalid && (\n \n )}\n \n )}\n />\n \n (\n \n Add-ons \n \n Select additional features you'd like to include.\n \n \n {addons.map((addon) => (\n \n {\n const newValue = checked\n ? [...field.value, addon.id]\n : field.value.filter(\n (value) => value !== addon.id\n )\n field.onChange(newValue)\n field.onBlur()\n }}\n />\n \n \n {addon.title}\n \n \n {addon.description}\n \n \n \n ))}\n \n {fieldState.invalid && (\n \n )}\n \n )}\n />\n \n (\n \n \n \n Email Notifications\n \n \n Receive email updates about your subscription\n \n \n \n {fieldState.invalid && (\n \n )}\n \n )}\n />\n \n \n \n \n \n \n Save Preferences\n \n form.reset()}>\n Reset\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-rhf-demo.json b/apps/www/public/r/styles/new-york-v4/form-rhf-demo.json
new file mode 100644
index 0000000000..c4ee4aba16
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-rhf-demo.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-demo",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-demo.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Input } from \"@/registry/new-york-v4/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/new-york-v4/ui/input-group\"\n\nconst formSchema = z.object({\n title: z\n .string()\n .min(5, \"Bug title must be at least 5 characters.\")\n .max(32, \"Bug title must be at most 32 characters.\"),\n description: z\n .string()\n .min(20, \"Description must be at least 20 characters.\")\n .max(100, \"Description must be at most 100 characters.\"),\n})\n\nexport default function BugReportForm() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n title: \"\",\n description: \"\",\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Bug Report \n \n Help us improve by reporting bugs you encounter.\n \n \n \n \n \n (\n \n \n Bug Title\n \n \n {fieldState.invalid && (\n \n )}\n \n )}\n />\n (\n \n \n Description\n \n \n \n \n \n {field.value.length}/100 characters\n \n \n \n \n Include steps to reproduce, expected behavior, and what\n actually happened.\n \n {fieldState.invalid && (\n \n )}\n \n )}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Submit\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-rhf-input.json b/apps/www/public/r/styles/new-york-v4/form-rhf-input.json
new file mode 100644
index 0000000000..095cdeefae
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-rhf-input.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-input",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-input.tsx",
+ "content": "\"use client\"\n\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Input } from \"@/registry/new-york-v4/ui/input\"\n\nconst formSchema = z.object({\n username: z\n .string()\n .min(3, \"Username must be at least 3 characters.\")\n .max(10, \"Username must be at most 10 characters.\")\n .regex(\n /^[a-zA-Z0-9_]+$/,\n \"Username can only contain letters, numbers, and underscores.\"\n ),\n})\n\nexport default function FormRhfInput() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n username: \"\",\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Profile Settings \n \n Update your profile information below.\n \n \n \n \n \n (\n \n \n Username\n \n \n \n This is your public display name. Must be between 3 and 10\n characters. Must only contain letters, numbers, and\n underscores.\n \n {fieldState.invalid && (\n \n )}\n \n )}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-rhf-password.json b/apps/www/public/r/styles/new-york-v4/form-rhf-password.json
new file mode 100644
index 0000000000..897a1df7d2
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-rhf-password.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-password",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input-group",
+ "progress",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-password.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { CheckIcon } from \"lucide-react\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/new-york-v4/ui/input-group\"\nimport { Progress } from \"@/registry/new-york-v4/ui/progress\"\n\nconst passwordRequirements = [\n {\n id: \"length\",\n label: \"At least 8 characters\",\n test: (val: string) => val.length >= 8,\n },\n {\n id: \"lowercase\",\n label: \"One lowercase letter\",\n test: (val: string) => /[a-z]/.test(val),\n },\n {\n id: \"uppercase\",\n label: \"One uppercase letter\",\n test: (val: string) => /[A-Z]/.test(val),\n },\n { id: \"number\", label: \"One number\", test: (val: string) => /\\d/.test(val) },\n {\n id: \"special\",\n label: \"One special character\",\n test: (val: string) => /[!@#$%^&*(),.?\":{}|<>]/.test(val),\n },\n]\n\nconst formSchema = z.object({\n password: z\n .string()\n .min(8, \"Password must be at least 8 characters\")\n .refine(\n (val) => /[a-z]/.test(val),\n \"Password must contain at least one lowercase letter\"\n )\n .refine(\n (val) => /[A-Z]/.test(val),\n \"Password must contain at least one uppercase letter\"\n )\n .refine(\n (val) => /\\d/.test(val),\n \"Password must contain at least one number\"\n )\n .refine(\n (val) => /[!@#$%^&*(),.?\":{}|<>]/.test(val),\n \"Password must contain at least one special character\"\n ),\n})\n\nexport default function FormRhfPassword() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n password: \"\",\n },\n })\n\n const password = form.watch(\"password\")\n\n // Calculate password strength.\n const metRequirements = passwordRequirements.filter((req) =>\n req.test(password || \"\")\n )\n const strengthPercentage =\n (metRequirements.length / passwordRequirements.length) * 100\n\n // Determine strength level and color.\n const getStrengthColor = () => {\n if (strengthPercentage === 0) return \"bg-neutral-200\"\n if (strengthPercentage <= 40) return \"bg-red-500\"\n if (strengthPercentage <= 80) return \"bg-yellow-500\"\n return \"bg-green-500\"\n }\n\n const allRequirementsMet =\n metRequirements.length === passwordRequirements.length\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Create Password \n \n Choose a strong password to secure your account.\n \n \n \n \n \n (\n \n \n Password\n \n \n \n \n \n \n \n\n {/* Password strength meter. */}\n \n
\n\n {/* Requirements list. */}\n
\n {passwordRequirements.map((requirement) => {\n const isMet = requirement.test(password || \"\")\n return (\n
\n \n \n {requirement.label}\n \n
\n )\n })}\n
\n
\n\n {fieldState.invalid && (\n \n )}\n \n )}\n />\n \n \n \n \n \n \n Create Password\n \n form.reset()}>\n Reset\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-rhf-radiogroup.json b/apps/www/public/r/styles/new-york-v4/form-rhf-radiogroup.json
new file mode 100644
index 0000000000..e48f503d16
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-rhf-radiogroup.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-radiogroup",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "radio-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-radiogroup.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSet,\n FieldTitle,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/new-york-v4/ui/radio-group\"\n\nconst plans = [\n {\n id: \"starter\",\n title: \"Starter (100K tokens/month)\",\n description: \"For everyday use with basic features.\",\n },\n {\n id: \"pro\",\n title: \"Pro (1M tokens/month)\",\n description: \"For advanced AI usage with more features.\",\n },\n {\n id: \"enterprise\",\n title: \"Enterprise (Unlimited tokens)\",\n description: \"For large teams and heavy usage.\",\n },\n] as const\n\nconst formSchema = z.object({\n plan: z.string().min(1, \"You must select a subscription plan to continue.\"),\n})\n\nexport default function FormRhfRadioGroup() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n plan: \"\",\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Subscription Plan \n \n See pricing and features for each plan.\n \n \n \n \n \n (\n \n Plan \n \n You can upgrade or downgrade your plan at any time.\n \n \n {plans.map((plan) => (\n \n \n \n {plan.title} \n \n {plan.description}\n \n \n \n \n \n ))}\n \n {fieldState.invalid && (\n \n )}\n \n )}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-rhf-select.json b/apps/www/public/r/styles/new-york-v4/form-rhf-select.json
new file mode 100644
index 0000000000..1e25c452ce
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-rhf-select.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-select",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "select",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-select.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/new-york-v4/ui/select\"\n\nconst spokenLanguages = [\n { label: \"English\", value: \"en\" },\n { label: \"Spanish\", value: \"es\" },\n { label: \"French\", value: \"fr\" },\n { label: \"German\", value: \"de\" },\n { label: \"Italian\", value: \"it\" },\n { label: \"Chinese\", value: \"zh\" },\n { label: \"Japanese\", value: \"ja\" },\n] as const\n\nconst formSchema = z.object({\n language: z\n .string()\n .min(1, \"Please select your spoken language.\")\n .refine((val) => val !== \"auto\", {\n message:\n \"Auto-detection is not allowed. Please select a specific language.\",\n }),\n})\n\nexport default function FormRhfSelect() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n language: \"\",\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Language Preferences \n \n Select your preferred spoken language.\n \n \n \n \n \n (\n \n \n \n Spoken Language\n \n \n For best results, select the language you speak.\n \n {fieldState.invalid && (\n \n )}\n \n \n \n \n \n \n Auto \n \n {spokenLanguages.map((language) => (\n \n {language.label}\n \n ))}\n \n \n \n )}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-rhf-switch.json b/apps/www/public/r/styles/new-york-v4/form-rhf-switch.json
new file mode 100644
index 0000000000..683ba9890a
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-rhf-switch.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-switch",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "switch",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-switch.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Switch } from \"@/registry/new-york-v4/ui/switch\"\n\nconst formSchema = z.object({\n twoFactor: z.boolean().refine((val) => val === true, {\n message: \"It is highly recommended to enable two-factor authentication.\",\n }),\n})\n\nexport default function FormRhfSwitch() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n twoFactor: false,\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Security Settings \n \n Manage your account security preferences.\n \n \n \n \n \n (\n \n \n \n Multi-factor authentication\n \n \n Enable multi-factor authentication to secure your account.\n \n {fieldState.invalid && (\n \n )}\n \n \n \n )}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-rhf-textarea.json b/apps/www/public/r/styles/new-york-v4/form-rhf-textarea.json
new file mode 100644
index 0000000000..2a8f7ef6cf
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-rhf-textarea.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-rhf-textarea",
+ "type": "registry:example",
+ "dependencies": [
+ "react-hook-form",
+ "@hookform/resolvers",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "textarea",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-textarea.tsx",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { zodResolver } from \"@hookform/resolvers/zod\"\nimport { Controller, useForm } from \"react-hook-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Textarea } from \"@/registry/new-york-v4/ui/textarea\"\n\nconst formSchema = z.object({\n about: z\n .string()\n .min(10, \"Please provide at least 10 characters.\")\n .max(200, \"Please keep it under 200 characters.\"),\n})\n\nexport default function FormRhfTextarea() {\n const form = useForm>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n about: \"\",\n },\n })\n\n function onSubmit(data: z.infer) {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(data, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n }\n\n return (\n \n \n Personalization \n \n Customize your experience by telling us more about yourself.\n \n \n \n \n \n (\n \n \n More about you\n \n \n \n Tell us more about yourself. This will be used to help us\n personalize your experience.\n \n {fieldState.invalid && (\n \n )}\n \n )}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-tanstack-array.json b/apps/www/public/r/styles/new-york-v4/form-tanstack-array.json
new file mode 100644
index 0000000000..64f90fdc63
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-tanstack-array.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-array",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-array.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport * as React from \"react\"\nimport { useForm } from \"@tanstack/react-form\"\nimport { XIcon } from \"lucide-react\"\nimport { toast } from \"sonner\"\nimport { z } from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSet,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/new-york-v4/ui/input-group\"\n\nconst formSchema = z.object({\n emails: z\n .array(\n z.object({\n address: z.string().email(\"Enter a valid email address.\"),\n })\n )\n .min(1, \"Add at least one email address.\")\n .max(5, \"You can add up to 5 email addresses.\"),\n})\n\nexport default function FormTanstackArray() {\n const form = useForm({\n defaultValues: {\n emails: [{ address: \"\" }],\n },\n validators: {\n onBlur: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Contact Emails \n Manage your contact email addresses. \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {(field) => {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Email Addresses \n \n Add up to 5 email addresses where we can contact you.\n \n \n {field.state.value.map((_, index) => (\n {\n const isSubFieldInvalid =\n subField.state.meta.isTouched &&\n !subField.state.meta.isValid\n return (\n \n \n \n \n subField.handleChange(e.target.value)\n }\n aria-invalid={isSubFieldInvalid}\n placeholder=\"name@example.com\"\n type=\"email\"\n autoComplete=\"email\"\n />\n {field.state.value.length > 1 && (\n \n field.removeValue(index)}\n aria-label={`Remove email ${index + 1}`}\n >\n \n \n \n )}\n \n {isSubFieldInvalid && (\n \n )}\n \n \n )\n }}\n />\n ))}\n field.pushValue({ address: \"\" })}\n disabled={field.state.value.length >= 5}\n >\n Add Email Address\n \n \n {isInvalid && }\n \n )\n }}\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-tanstack-checkbox.json b/apps/www/public/r/styles/new-york-v4/form-tanstack-checkbox.json
new file mode 100644
index 0000000000..aa54873851
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-tanstack-checkbox.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-checkbox",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "checkbox",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-checkbox.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport { Checkbox } from \"@/registry/new-york-v4/ui/checkbox\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n} from \"@/registry/new-york-v4/ui/field\"\n\nconst tasks = [\n {\n id: \"push\",\n label: \"Push notifications\",\n },\n {\n id: \"email\",\n label: \"Email notifications\",\n },\n] as const\n\nconst formSchema = z.object({\n responses: z.boolean(),\n tasks: z\n .array(z.string())\n .min(1, \"Please select at least one notification type.\")\n .refine(\n (value) => value.every((task) => tasks.some((t) => t.id === task)),\n {\n message: \"Invalid notification type selected.\",\n }\n ),\n})\n\nexport default function FormTanstackCheckbox() {\n const form = useForm({\n defaultValues: {\n responses: true,\n tasks: [] as string[],\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Notifications \n Manage your notification preferences. \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Responses \n \n Get notified for requests that take time, like research or\n image generation.\n \n \n \n \n field.handleChange(checked === true)\n }\n disabled\n />\n \n Push notifications\n \n \n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Tasks \n \n Get notified when tasks you've created have updates.\n \n \n {tasks.map((task) => (\n \n {\n if (checked) {\n field.pushValue(task.id)\n } else {\n const index = field.state.value.indexOf(task.id)\n if (index > -1) {\n field.removeValue(index)\n }\n }\n }}\n />\n \n {task.label}\n \n \n ))}\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-tanstack-complex.json b/apps/www/public/r/styles/new-york-v4/form-tanstack-complex.json
new file mode 100644
index 0000000000..5b99c6fc72
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-tanstack-complex.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-complex",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-complex.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport * as React from \"react\"\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport { Card, CardContent, CardFooter } from \"@/registry/new-york-v4/ui/card\"\nimport { Checkbox } from \"@/registry/new-york-v4/ui/checkbox\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/new-york-v4/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/new-york-v4/ui/select\"\nimport { Switch } from \"@/registry/new-york-v4/ui/switch\"\n\nconst addons = [\n {\n id: \"analytics\",\n title: \"Analytics\",\n description: \"Advanced analytics and reporting\",\n },\n {\n id: \"backup\",\n title: \"Backup\",\n description: \"Automated daily backups\",\n },\n {\n id: \"support\",\n title: \"Priority Support\",\n description: \"24/7 premium customer support\",\n },\n] as const\n\nconst formSchema = z.object({\n plan: z\n .string({\n required_error: \"Please select a subscription plan\",\n })\n .min(1, \"Please select a subscription plan\")\n .refine((value) => value === \"basic\" || value === \"pro\", {\n message: \"Invalid plan selection. Please choose Basic or Pro\",\n }),\n billingPeriod: z\n .string({\n required_error: \"Please select a billing period\",\n })\n .min(1, \"Please select a billing period\"),\n addons: z\n .array(z.string())\n .min(1, \"Please select at least one add-on\")\n .max(3, \"You can select up to 3 add-ons\")\n .refine(\n (value) => value.every((addon) => addons.some((a) => a.id === addon)),\n {\n message: \"You selected an invalid add-on\",\n }\n ),\n emailNotifications: z.boolean(),\n})\n\nexport default function FormTanstackComplex() {\n const form = useForm({\n defaultValues: {\n plan: \"basic\",\n billingPeriod: \"monthly\",\n addons: [] as string[],\n emailNotifications: false,\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Subscription Plan \n \n Choose your subscription plan.\n \n \n \n \n \n Basic \n \n For individuals and small teams\n \n \n \n \n \n \n \n \n Pro \n \n For businesses with higher demands\n \n \n \n \n \n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Billing Period \n \n \n \n \n \n Monthly \n Yearly \n \n \n \n Choose how often you want to be billed.\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Add-ons \n \n Select additional features you'd like to include.\n \n \n {addons.map((addon) => (\n \n {\n if (checked) {\n field.pushValue(addon.id)\n } else {\n const index = field.state.value.indexOf(\n addon.id\n )\n if (index > -1) {\n field.removeValue(index)\n }\n }\n }}\n />\n \n \n {addon.title}\n \n \n {addon.description}\n \n \n \n ))}\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n \n \n Email Notifications\n \n \n Receive email updates about your subscription\n \n \n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n \n Save Preferences\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-tanstack-demo.json b/apps/www/public/r/styles/new-york-v4/form-tanstack-demo.json
new file mode 100644
index 0000000000..a6253220fc
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-tanstack-demo.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-demo",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-demo.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport * as React from \"react\"\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Input } from \"@/registry/new-york-v4/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/new-york-v4/ui/input-group\"\n\nconst formSchema = z.object({\n title: z\n .string()\n .min(5, \"Bug title must be at least 5 characters.\")\n .max(32, \"Bug title must be at most 32 characters.\"),\n description: z\n .string()\n .min(20, \"Description must be at least 20 characters.\")\n .max(100, \"Description must be at most 100 characters.\"),\n})\n\nexport default function BugReportForm() {\n const form = useForm({\n defaultValues: {\n title: \"\",\n description: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Bug Report \n \n Help us improve by reporting bugs you encounter.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Bug Title \n field.handleChange(e.target.value)}\n aria-invalid={isInvalid}\n placeholder=\"Login button not working on mobile\"\n autoComplete=\"off\"\n />\n {isInvalid && (\n \n )}\n \n )\n }}\n />\n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Description \n \n field.handleChange(e.target.value)}\n placeholder=\"I'm having an issue with the login button on mobile.\"\n rows={6}\n className=\"min-h-24 resize-none\"\n aria-invalid={isInvalid}\n />\n \n \n {field.state.value.length}/100 characters\n \n \n \n \n Include steps to reproduce, expected behavior, and what\n actually happened.\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Submit\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-tanstack-input.json b/apps/www/public/r/styles/new-york-v4/form-tanstack-input.json
new file mode 100644
index 0000000000..84c0b734eb
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-tanstack-input.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-input",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "input",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-input.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Input } from \"@/registry/new-york-v4/ui/input\"\n\nconst formSchema = z.object({\n username: z\n .string()\n .min(3, \"Username must be at least 3 characters.\")\n .max(10, \"Username must be at most 10 characters.\")\n .regex(\n /^[a-zA-Z0-9_]+$/,\n \"Username can only contain letters, numbers, and underscores.\"\n ),\n})\n\nexport default function FormTanstackInput() {\n const form = useForm({\n defaultValues: {\n username: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Profile Settings \n \n Update your profile information below.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n \n Username\n \n field.handleChange(e.target.value)}\n aria-invalid={isInvalid}\n placeholder=\"shadcn\"\n autoComplete=\"username\"\n />\n \n This is your public display name. Must be between 3 and 10\n characters. Must only contain letters, numbers, and\n underscores.\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-tanstack-radiogroup.json b/apps/www/public/r/styles/new-york-v4/form-tanstack-radiogroup.json
new file mode 100644
index 0000000000..6be49f151a
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-tanstack-radiogroup.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-radiogroup",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "radio-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-radiogroup.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSet,\n FieldTitle,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/new-york-v4/ui/radio-group\"\n\nconst plans = [\n {\n id: \"starter\",\n title: \"Starter (100K tokens/month)\",\n description: \"For everyday use with basic features.\",\n },\n {\n id: \"pro\",\n title: \"Pro (1M tokens/month)\",\n description: \"For advanced AI usage with more features.\",\n },\n {\n id: \"enterprise\",\n title: \"Enterprise (Unlimited tokens)\",\n description: \"For large teams and heavy usage.\",\n },\n] as const\n\nconst formSchema = z.object({\n plan: z.string().min(1, \"You must select a subscription plan to continue.\"),\n})\n\nexport default function FormTanstackRadioGroup() {\n const form = useForm({\n defaultValues: {\n plan: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Subscription Plan \n \n See pricing and features for each plan.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n Plan \n \n You can upgrade or downgrade your plan at any time.\n \n \n {plans.map((plan) => (\n \n \n \n {plan.title} \n \n {plan.description}\n \n \n \n \n \n ))}\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-tanstack-select.json b/apps/www/public/r/styles/new-york-v4/form-tanstack-select.json
new file mode 100644
index 0000000000..96d85ad75b
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-tanstack-select.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-select",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "select",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-select.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/new-york-v4/ui/select\"\n\nconst spokenLanguages = [\n { label: \"English\", value: \"en\" },\n { label: \"Spanish\", value: \"es\" },\n { label: \"French\", value: \"fr\" },\n { label: \"German\", value: \"de\" },\n { label: \"Italian\", value: \"it\" },\n { label: \"Chinese\", value: \"zh\" },\n { label: \"Japanese\", value: \"ja\" },\n] as const\n\nconst formSchema = z.object({\n language: z\n .string()\n .min(1, \"Please select your spoken language.\")\n .refine((val) => val !== \"auto\", {\n message:\n \"Auto-detection is not allowed. Please select a specific language.\",\n }),\n})\n\nexport default function FormTanstackSelect() {\n const form = useForm({\n defaultValues: {\n language: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Language Preferences \n \n Select your preferred spoken language.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n \n \n Spoken Language\n \n \n For best results, select the language you speak.\n \n {isInvalid && (\n \n )}\n \n \n \n \n \n \n Auto \n \n {spokenLanguages.map((language) => (\n \n {language.label}\n \n ))}\n \n \n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-tanstack-switch.json b/apps/www/public/r/styles/new-york-v4/form-tanstack-switch.json
new file mode 100644
index 0000000000..3d33eb91b4
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-tanstack-switch.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-switch",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "switch",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-switch.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Switch } from \"@/registry/new-york-v4/ui/switch\"\n\nconst formSchema = z.object({\n twoFactor: z.boolean().refine((val) => val === true, {\n message: \"It is highly recommended to enable two-factor authentication.\",\n }),\n})\n\nexport default function FormTanstackSwitch() {\n const form = useForm({\n defaultValues: {\n twoFactor: false,\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Security Settings \n \n Manage your account security preferences.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n \n \n Multi-factor authentication\n \n \n Enable multi-factor authentication to secure your\n account.\n \n {isInvalid && (\n \n )}\n \n \n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/form-tanstack-textarea.json b/apps/www/public/r/styles/new-york-v4/form-tanstack-textarea.json
new file mode 100644
index 0000000000..e8c44c875f
--- /dev/null
+++ b/apps/www/public/r/styles/new-york-v4/form-tanstack-textarea.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "form-tanstack-textarea",
+ "type": "registry:example",
+ "dependencies": [
+ "@tanstack/react-form",
+ "zod"
+ ],
+ "registryDependencies": [
+ "field",
+ "textarea",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-textarea.tsx",
+ "content": "/* eslint-disable react/no-children-prop */\n\"use client\"\n\nimport { useForm } from \"@tanstack/react-form\"\nimport { toast } from \"sonner\"\nimport * as z from \"zod\"\n\nimport { Button } from \"@/registry/new-york-v4/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/new-york-v4/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/new-york-v4/ui/field\"\nimport { Textarea } from \"@/registry/new-york-v4/ui/textarea\"\n\nconst formSchema = z.object({\n about: z\n .string()\n .min(10, \"Please provide at least 10 characters.\")\n .max(200, \"Please keep it under 200 characters.\"),\n})\n\nexport default function FormTanstackTextarea() {\n const form = useForm({\n defaultValues: {\n about: \"\",\n },\n validators: {\n onSubmit: formSchema,\n },\n onSubmit: async ({ value }) => {\n toast(\"You submitted the following values:\", {\n description: (\n \n {JSON.stringify(value, null, 2)}\n \n ),\n position: \"bottom-right\",\n classNames: {\n content: \"flex flex-col gap-2\",\n },\n style: {\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties,\n })\n },\n })\n\n return (\n \n \n Personalization \n \n Customize your experience by telling us more about yourself.\n \n \n \n {\n e.preventDefault()\n form.handleSubmit()\n }}\n >\n \n {\n const isInvalid =\n field.state.meta.isTouched && !field.state.meta.isValid\n return (\n \n \n More about you\n \n field.handleChange(e.target.value)}\n aria-invalid={isInvalid}\n placeholder=\"I'm a software engineer...\"\n className=\"min-h-[120px]\"\n />\n \n Tell us more about yourself. This will be used to help us\n personalize your experience.\n \n {isInvalid && (\n \n )}\n \n )\n }}\n />\n \n \n \n \n \n form.reset()}>\n Reset\n \n \n Save\n \n \n \n \n )\n}\n",
+ "type": "registry:example"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/www/public/r/styles/new-york-v4/registry.json b/apps/www/public/r/styles/new-york-v4/registry.json
index 87d84120d0..ae12fd8a78 100644
--- a/apps/www/public/r/styles/new-york-v4/registry.json
+++ b/apps/www/public/r/styles/new-york-v4/registry.json
@@ -5,41 +5,25 @@
{
"name": "index",
"type": "registry:style",
- "dependencies": [
- "class-variance-authority",
- "lucide-react"
- ],
- "devDependencies": [
- "tw-animate-css"
- ],
- "registryDependencies": [
- "utils"
- ],
+ "dependencies": ["class-variance-authority", "lucide-react"],
+ "devDependencies": ["tw-animate-css"],
+ "registryDependencies": ["utils"],
"files": [],
"cssVars": {}
},
{
"name": "style",
"type": "registry:style",
- "dependencies": [
- "class-variance-authority",
- "lucide-react"
- ],
- "devDependencies": [
- "tw-animate-css"
- ],
- "registryDependencies": [
- "utils"
- ],
+ "dependencies": ["class-variance-authority", "lucide-react"],
+ "devDependencies": ["tw-animate-css"],
+ "registryDependencies": ["utils"],
"files": [],
"cssVars": {}
},
{
"name": "accordion",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-accordion"
- ],
+ "dependencies": ["@radix-ui/react-accordion"],
"files": [
{
"path": "registry/new-york-v4/ui/accordion.tsx",
@@ -60,12 +44,8 @@
{
"name": "alert-dialog",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-alert-dialog"
- ],
- "registryDependencies": [
- "button"
- ],
+ "dependencies": ["@radix-ui/react-alert-dialog"],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/alert-dialog.tsx",
@@ -76,9 +56,7 @@
{
"name": "aspect-ratio",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-aspect-ratio"
- ],
+ "dependencies": ["@radix-ui/react-aspect-ratio"],
"files": [
{
"path": "registry/new-york-v4/ui/aspect-ratio.tsx",
@@ -89,9 +67,7 @@
{
"name": "avatar",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-avatar"
- ],
+ "dependencies": ["@radix-ui/react-avatar"],
"files": [
{
"path": "registry/new-york-v4/ui/avatar.tsx",
@@ -102,9 +78,7 @@
{
"name": "badge",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slot"
- ],
+ "dependencies": ["@radix-ui/react-slot"],
"files": [
{
"path": "registry/new-york-v4/ui/badge.tsx",
@@ -115,9 +89,7 @@
{
"name": "breadcrumb",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slot"
- ],
+ "dependencies": ["@radix-ui/react-slot"],
"files": [
{
"path": "registry/new-york-v4/ui/breadcrumb.tsx",
@@ -128,9 +100,7 @@
{
"name": "button",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slot"
- ],
+ "dependencies": ["@radix-ui/react-slot"],
"files": [
{
"path": "registry/new-york-v4/ui/button.tsx",
@@ -141,10 +111,7 @@
{
"name": "button-group",
"type": "registry:ui",
- "registryDependencies": [
- "button",
- "separator"
- ],
+ "registryDependencies": ["button", "separator"],
"files": [
{
"path": "registry/new-york-v4/ui/button-group.tsx",
@@ -155,13 +122,8 @@
{
"name": "calendar",
"type": "registry:ui",
- "dependencies": [
- "react-day-picker@latest",
- "date-fns"
- ],
- "registryDependencies": [
- "button"
- ],
+ "dependencies": ["react-day-picker@latest", "date-fns"],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/calendar.tsx",
@@ -182,12 +144,8 @@
{
"name": "carousel",
"type": "registry:ui",
- "dependencies": [
- "embla-carousel-react"
- ],
- "registryDependencies": [
- "button"
- ],
+ "dependencies": ["embla-carousel-react"],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/carousel.tsx",
@@ -198,13 +156,8 @@
{
"name": "chart",
"type": "registry:ui",
- "dependencies": [
- "recharts@2.15.4",
- "lucide-react"
- ],
- "registryDependencies": [
- "card"
- ],
+ "dependencies": ["recharts@2.15.4", "lucide-react"],
+ "registryDependencies": ["card"],
"files": [
{
"path": "registry/new-york-v4/ui/chart.tsx",
@@ -215,9 +168,7 @@
{
"name": "checkbox",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-checkbox"
- ],
+ "dependencies": ["@radix-ui/react-checkbox"],
"files": [
{
"path": "registry/new-york-v4/ui/checkbox.tsx",
@@ -228,9 +179,7 @@
{
"name": "collapsible",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-collapsible"
- ],
+ "dependencies": ["@radix-ui/react-collapsible"],
"files": [
{
"path": "registry/new-york-v4/ui/collapsible.tsx",
@@ -241,12 +190,8 @@
{
"name": "command",
"type": "registry:ui",
- "dependencies": [
- "cmdk"
- ],
- "registryDependencies": [
- "dialog"
- ],
+ "dependencies": ["cmdk"],
+ "registryDependencies": ["dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/command.tsx",
@@ -257,9 +202,7 @@
{
"name": "context-menu",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-context-menu"
- ],
+ "dependencies": ["@radix-ui/react-context-menu"],
"files": [
{
"path": "registry/new-york-v4/ui/context-menu.tsx",
@@ -270,9 +213,7 @@
{
"name": "dialog",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-dialog"
- ],
+ "dependencies": ["@radix-ui/react-dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/dialog.tsx",
@@ -283,10 +224,7 @@
{
"name": "drawer",
"type": "registry:ui",
- "dependencies": [
- "vaul",
- "@radix-ui/react-dialog"
- ],
+ "dependencies": ["vaul", "@radix-ui/react-dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/drawer.tsx",
@@ -297,9 +235,7 @@
{
"name": "dropdown-menu",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-dropdown-menu"
- ],
+ "dependencies": ["@radix-ui/react-dropdown-menu"],
"files": [
{
"path": "registry/new-york-v4/ui/dropdown-menu.tsx",
@@ -320,10 +256,7 @@
{
"name": "field",
"type": "registry:ui",
- "registryDependencies": [
- "label",
- "separator"
- ],
+ "registryDependencies": ["label", "separator"],
"files": [
{
"path": "registry/new-york-v4/ui/field.tsx",
@@ -341,10 +274,7 @@
"zod",
"react-hook-form"
],
- "registryDependencies": [
- "button",
- "label"
- ],
+ "registryDependencies": ["button", "label"],
"files": [
{
"path": "registry/new-york-v4/ui/form.tsx",
@@ -355,9 +285,7 @@
{
"name": "hover-card",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-hover-card"
- ],
+ "dependencies": ["@radix-ui/react-hover-card"],
"files": [
{
"path": "registry/new-york-v4/ui/hover-card.tsx",
@@ -378,11 +306,7 @@
{
"name": "input-group",
"type": "registry:ui",
- "registryDependencies": [
- "button",
- "input",
- "textarea"
- ],
+ "registryDependencies": ["button", "input", "textarea"],
"files": [
{
"path": "registry/new-york-v4/ui/input-group.tsx",
@@ -393,9 +317,7 @@
{
"name": "input-otp",
"type": "registry:ui",
- "dependencies": [
- "input-otp"
- ],
+ "dependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/ui/input-otp.tsx",
@@ -406,9 +328,7 @@
{
"name": "item",
"type": "registry:ui",
- "registryDependencies": [
- "separator"
- ],
+ "registryDependencies": ["separator"],
"files": [
{
"path": "registry/new-york-v4/ui/item.tsx",
@@ -419,9 +339,7 @@
{
"name": "label",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-label"
- ],
+ "dependencies": ["@radix-ui/react-label"],
"files": [
{
"path": "registry/new-york-v4/ui/label.tsx",
@@ -432,9 +350,7 @@
{
"name": "menubar",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-menubar"
- ],
+ "dependencies": ["@radix-ui/react-menubar"],
"files": [
{
"path": "registry/new-york-v4/ui/menubar.tsx",
@@ -445,9 +361,7 @@
{
"name": "navigation-menu",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-navigation-menu"
- ],
+ "dependencies": ["@radix-ui/react-navigation-menu"],
"files": [
{
"path": "registry/new-york-v4/ui/navigation-menu.tsx",
@@ -458,9 +372,7 @@
{
"name": "pagination",
"type": "registry:ui",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/ui/pagination.tsx",
@@ -471,9 +383,7 @@
{
"name": "popover",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-popover"
- ],
+ "dependencies": ["@radix-ui/react-popover"],
"files": [
{
"path": "registry/new-york-v4/ui/popover.tsx",
@@ -484,9 +394,7 @@
{
"name": "progress",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-progress"
- ],
+ "dependencies": ["@radix-ui/react-progress"],
"files": [
{
"path": "registry/new-york-v4/ui/progress.tsx",
@@ -497,9 +405,7 @@
{
"name": "radio-group",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-radio-group"
- ],
+ "dependencies": ["@radix-ui/react-radio-group"],
"files": [
{
"path": "registry/new-york-v4/ui/radio-group.tsx",
@@ -510,9 +416,7 @@
{
"name": "resizable",
"type": "registry:ui",
- "dependencies": [
- "react-resizable-panels"
- ],
+ "dependencies": ["react-resizable-panels"],
"files": [
{
"path": "registry/new-york-v4/ui/resizable.tsx",
@@ -523,9 +427,7 @@
{
"name": "scroll-area",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-scroll-area"
- ],
+ "dependencies": ["@radix-ui/react-scroll-area"],
"files": [
{
"path": "registry/new-york-v4/ui/scroll-area.tsx",
@@ -536,9 +438,7 @@
{
"name": "select",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-select"
- ],
+ "dependencies": ["@radix-ui/react-select"],
"files": [
{
"path": "registry/new-york-v4/ui/select.tsx",
@@ -549,9 +449,7 @@
{
"name": "separator",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-separator"
- ],
+ "dependencies": ["@radix-ui/react-separator"],
"files": [
{
"path": "registry/new-york-v4/ui/separator.tsx",
@@ -562,9 +460,7 @@
{
"name": "sheet",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-dialog"
- ],
+ "dependencies": ["@radix-ui/react-dialog"],
"files": [
{
"path": "registry/new-york-v4/ui/sheet.tsx",
@@ -651,9 +547,7 @@
{
"name": "slider",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-slider"
- ],
+ "dependencies": ["@radix-ui/react-slider"],
"files": [
{
"path": "registry/new-york-v4/ui/slider.tsx",
@@ -664,10 +558,7 @@
{
"name": "sonner",
"type": "registry:ui",
- "dependencies": [
- "sonner",
- "next-themes"
- ],
+ "dependencies": ["sonner", "next-themes"],
"files": [
{
"path": "registry/new-york-v4/ui/sonner.tsx",
@@ -678,9 +569,7 @@
{
"name": "spinner",
"type": "registry:ui",
- "dependencies": [
- "class-variance-authority"
- ],
+ "dependencies": ["class-variance-authority"],
"files": [
{
"path": "registry/new-york-v4/ui/spinner.tsx",
@@ -691,9 +580,7 @@
{
"name": "switch",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-switch"
- ],
+ "dependencies": ["@radix-ui/react-switch"],
"files": [
{
"path": "registry/new-york-v4/ui/switch.tsx",
@@ -714,9 +601,7 @@
{
"name": "tabs",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-tabs"
- ],
+ "dependencies": ["@radix-ui/react-tabs"],
"files": [
{
"path": "registry/new-york-v4/ui/tabs.tsx",
@@ -737,9 +622,7 @@
{
"name": "toggle",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-toggle"
- ],
+ "dependencies": ["@radix-ui/react-toggle"],
"files": [
{
"path": "registry/new-york-v4/ui/toggle.tsx",
@@ -750,12 +633,8 @@
{
"name": "toggle-group",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-toggle-group"
- ],
- "registryDependencies": [
- "toggle"
- ],
+ "dependencies": ["@radix-ui/react-toggle-group"],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/ui/toggle-group.tsx",
@@ -766,9 +645,7 @@
{
"name": "tooltip",
"type": "registry:ui",
- "dependencies": [
- "@radix-ui/react-tooltip"
- ],
+ "dependencies": ["@radix-ui/react-tooltip"],
"files": [
{
"path": "registry/new-york-v4/ui/tooltip.tsx",
@@ -871,9 +748,7 @@
"meta": {
"iframeHeight": "1000px"
},
- "categories": [
- "dashboard"
- ]
+ "categories": ["dashboard"]
},
{
"name": "sidebar-01",
@@ -905,10 +780,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-02",
@@ -940,19 +812,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-03",
"type": "registry:block",
"description": "A sidebar with submenus.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-03/page.tsx",
@@ -964,20 +830,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-04",
"type": "registry:block",
"description": "A floating sidebar with submenus.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb",
- "separator"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb", "separator"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-04/page.tsx",
@@ -989,10 +848,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-05",
@@ -1020,10 +876,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-06",
@@ -1055,10 +908,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-07",
@@ -1099,10 +949,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-08",
@@ -1143,10 +990,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-09",
@@ -1177,10 +1021,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-10",
@@ -1229,10 +1070,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-11",
@@ -1255,10 +1093,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-12",
@@ -1296,21 +1131,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-13",
"type": "registry:block",
"description": "A sidebar in a dialog.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb",
- "button",
- "dialog"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb", "button", "dialog"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-13/page.tsx",
@@ -1322,19 +1149,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-14",
"type": "registry:block",
"description": "A sidebar on the right.",
- "registryDependencies": [
- "sidebar",
- "breadcrumb"
- ],
+ "registryDependencies": ["sidebar", "breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/blocks/sidebar-14/page.tsx",
@@ -1346,10 +1167,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-15",
@@ -1412,10 +1230,7 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "sidebar-16",
@@ -1466,22 +1281,13 @@
"type": "registry:component"
}
],
- "categories": [
- "sidebar",
- "dashboard"
- ]
+ "categories": ["sidebar", "dashboard"]
},
{
"name": "login-01",
"type": "registry:block",
"description": "A simple login form.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-01/page.tsx",
@@ -1493,21 +1299,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-02",
"type": "registry:block",
"description": "A two column login page with a cover image.",
- "registryDependencies": [
- "button",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-02/page.tsx",
@@ -1519,22 +1317,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-03",
"type": "registry:block",
"description": "A login page with a muted background color.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-03/page.tsx",
@@ -1546,22 +1335,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-04",
"type": "registry:block",
"description": "A login page with form and image.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-04/page.tsx",
@@ -1573,21 +1353,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "login-05",
"type": "registry:block",
"description": "A simple email-only login page.",
- "registryDependencies": [
- "button",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/login-05/page.tsx",
@@ -1599,18 +1371,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "login"
- ]
+ "categories": ["authentication", "login"]
},
{
"name": "calendar-01",
"type": "registry:block",
"description": "A simple calendar.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-01.tsx",
@@ -1622,18 +1389,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-02",
"type": "registry:block",
"description": "Multiple months with single selection.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-02.tsx",
@@ -1645,18 +1407,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-03",
"type": "registry:block",
"description": "Multiple months with multiple selection.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-03.tsx",
@@ -1668,18 +1425,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-04",
"type": "registry:block",
"description": "Single month with range selection",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-04.tsx",
@@ -1691,18 +1443,13 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0 xl:pt-28",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-05",
"type": "registry:block",
"description": "Multiple months with range selection",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-05.tsx",
@@ -1714,18 +1461,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-06",
"type": "registry:block",
"description": "Range selection with minimum days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-06.tsx",
@@ -1737,18 +1479,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-07",
"type": "registry:block",
"description": "Range selection with minimum and maximum days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-07.tsx",
@@ -1760,18 +1497,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-08",
"type": "registry:block",
"description": "Calendar with disabled days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-08.tsx",
@@ -1783,18 +1515,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-09",
"type": "registry:block",
"description": "Calendar with disabled weekends",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-09.tsx",
@@ -1806,20 +1533,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-10",
"type": "registry:block",
"description": "Today button",
- "registryDependencies": [
- "calendar",
- "card",
- "button"
- ],
+ "registryDependencies": ["calendar", "card", "button"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-10.tsx",
@@ -1831,18 +1551,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-11",
"type": "registry:block",
"description": "Start and end of month",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-11.tsx",
@@ -1854,20 +1569,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-12",
"type": "registry:block",
"description": "Localized calendar",
- "registryDependencies": [
- "calendar",
- "card",
- "select"
- ],
+ "registryDependencies": ["calendar", "card", "select"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-12.tsx",
@@ -1879,20 +1587,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-13",
"type": "registry:block",
"description": "With Month and Year Dropdown",
- "registryDependencies": [
- "calendar",
- "label",
- "select"
- ],
+ "registryDependencies": ["calendar", "label", "select"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-13.tsx",
@@ -1904,18 +1605,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-14",
"type": "registry:block",
"description": "With Booked/Unavailable Days",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-14.tsx",
@@ -1927,18 +1623,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-15",
"type": "registry:block",
"description": "With Week Numbers",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-15.tsx",
@@ -1950,21 +1641,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-16",
"type": "registry:block",
"description": "With time picker",
- "registryDependencies": [
- "calendar",
- "card",
- "input",
- "label"
- ],
+ "registryDependencies": ["calendar", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-16.tsx",
@@ -1976,21 +1659,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-17",
"type": "registry:block",
"description": "With time picker inline",
- "registryDependencies": [
- "calendar",
- "card",
- "input",
- "label"
- ],
+ "registryDependencies": ["calendar", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-17.tsx",
@@ -2002,18 +1677,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-18",
"type": "registry:block",
"description": "Variable size",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-18.tsx",
@@ -2025,24 +1695,14 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-19",
"type": "registry:block",
"description": "With presets",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "calendar",
- "card",
- "input",
- "label"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["calendar", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-19.tsx",
@@ -2054,20 +1714,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-20",
"type": "registry:block",
"description": "With time presets",
- "registryDependencies": [
- "calendar",
- "card",
- "button"
- ],
+ "registryDependencies": ["calendar", "card", "button"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-20.tsx",
@@ -2079,18 +1732,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-21",
"type": "registry:block",
"description": "Custom days and formatters",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-21.tsx",
@@ -2102,21 +1750,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-22",
"type": "registry:block",
"description": "Date picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-22.tsx",
@@ -2128,21 +1768,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-23",
"type": "registry:block",
"description": "Date range picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-23.tsx",
@@ -2154,21 +1786,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-24",
"type": "registry:block",
"description": "Date and Time picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-24.tsx",
@@ -2180,21 +1804,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-25",
"type": "registry:block",
"description": "Date and Time range picker",
- "registryDependencies": [
- "calendar",
- "popover",
- "button",
- "label"
- ],
+ "registryDependencies": ["calendar", "popover", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-25.tsx",
@@ -2206,10 +1822,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-26",
@@ -2233,10 +1846,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-27",
@@ -2260,10 +1870,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-28",
@@ -2287,18 +1894,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-29",
"type": "registry:block",
"description": "Natural language date picker",
- "dependencies": [
- "chrono-node"
- ],
+ "dependencies": ["chrono-node"],
"registryDependencies": [
"calendar",
"input",
@@ -2317,10 +1919,7 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-30",
@@ -2344,20 +1943,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-31",
"type": "registry:block",
"description": "With event slots",
- "registryDependencies": [
- "calendar",
- "card",
- "button"
- ],
+ "registryDependencies": ["calendar", "card", "button"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-31.tsx",
@@ -2369,20 +1961,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "calendar-32",
"type": "registry:block",
"description": "Date picker in a drawer",
- "registryDependencies": [
- "calendar",
- "button",
- "drawer"
- ],
+ "registryDependencies": ["calendar", "button", "drawer"],
"files": [
{
"path": "registry/new-york-v4/blocks/calendar-32.tsx",
@@ -2394,21 +1979,13 @@
"container": "w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "signup-01",
"type": "registry:block",
"description": "A simple signup form.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label"
- ],
+ "registryDependencies": ["button", "card", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-01/page.tsx",
@@ -2420,21 +1997,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-02",
"type": "registry:block",
"description": "A two column signup page with a cover image.",
- "registryDependencies": [
- "button",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-02/page.tsx",
@@ -2446,22 +2015,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-03",
"type": "registry:block",
"description": "A signup page with a muted background color.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-03/page.tsx",
@@ -2473,22 +2033,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-04",
"type": "registry:block",
"description": "A signup page with form and image.",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-04/page.tsx",
@@ -2500,20 +2051,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "signup-05",
"type": "registry:block",
"description": "A simple signup form with social providers.",
- "registryDependencies": [
- "button",
- "input",
- "label"
- ],
+ "registryDependencies": ["button", "input", "label"],
"files": [
{
"path": "registry/new-york-v4/blocks/signup-05/page.tsx",
@@ -2525,22 +2069,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "signup"
- ]
+ "categories": ["authentication", "signup"]
},
{
"name": "otp-01",
"type": "registry:block",
"description": "A simple OTP verification form.",
- "registryDependencies": [
- "button",
- "card",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-01/page.tsx",
@@ -2552,21 +2087,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-02",
"type": "registry:block",
"description": "A two column OTP page with a cover image.",
- "registryDependencies": [
- "button",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-02/page.tsx",
@@ -2578,22 +2105,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-03",
"type": "registry:block",
"description": "An OTP page with a muted background color.",
- "registryDependencies": [
- "button",
- "card",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-03/page.tsx",
@@ -2605,22 +2123,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-04",
"type": "registry:block",
"description": "An OTP page with form and image.",
- "registryDependencies": [
- "button",
- "card",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "card", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-04/page.tsx",
@@ -2632,21 +2141,13 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "otp-05",
"type": "registry:block",
"description": "A simple OTP form with social providers.",
- "registryDependencies": [
- "button",
- "input-otp",
- "label",
- "field"
- ],
+ "registryDependencies": ["button", "input-otp", "label", "field"],
"files": [
{
"path": "registry/new-york-v4/blocks/otp-05/page.tsx",
@@ -2658,10 +2159,7 @@
"type": "registry:component"
}
],
- "categories": [
- "authentication",
- "otp"
- ]
+ "categories": ["authentication", "otp"]
},
{
"name": "new-components-01",
@@ -2796,1279 +2294,852 @@
"type": "registry:component"
}
],
- "categories": [
- "components",
- "showcase"
- ]
+ "categories": ["components", "showcase"]
},
{
"name": "chart-area-axes",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-axes.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-gradient",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-gradient.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-icons",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-icons.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart",
- "select"
- ],
+ "registryDependencies": ["card", "chart", "select"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-interactive.tsx",
"type": "registry:component"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-legend",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-legend.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-linear",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-linear.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-stacked-expand",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-stacked-expand.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-area-step",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-area-step.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-area"
- ]
+ "categories": ["charts", "charts-area"]
},
{
"name": "chart-bar-active",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-active.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-horizontal",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-horizontal.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-interactive.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-mixed",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-mixed.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-multiple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-multiple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-negative",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-negative.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-bar-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-bar-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-bar"
- ]
+ "categories": ["charts", "charts-bar"]
},
{
"name": "chart-line-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-dots-colors",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-dots-colors.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-dots-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-dots-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-dots",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-dots.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-interactive.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-linear",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-linear.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-multiple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-multiple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-line-step",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-line-step.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-line"
- ]
+ "categories": ["charts", "charts-line"]
},
{
"name": "chart-pie-donut-active",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-donut-active.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-donut-text",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-donut-text.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-donut",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-donut.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-interactive",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-interactive.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-label-list",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-label-list.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-legend",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-legend.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-separator-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-separator-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-simple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-simple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-pie-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-pie-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-pie"
- ]
+ "categories": ["charts", "charts-pie"]
},
{
"name": "chart-radar-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-dots",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-dots.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-circle-fill",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-circle-fill.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-circle-no-lines",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-circle-no-lines.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-circle",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-circle.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-fill",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-fill.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-grid-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-grid-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-icons",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-icons.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-legend",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-legend.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-lines-only",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-lines-only.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-multiple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-multiple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radar-radius",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radar-radius.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radar"
- ]
+ "categories": ["charts", "charts-radar"]
},
{
"name": "chart-radial-grid",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-grid.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-label",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-label.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-shape",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-shape.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-simple",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-simple.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-stacked",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-stacked.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-radial-text",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-radial-text.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-radial"
- ]
+ "categories": ["charts", "charts-radial"]
},
{
"name": "chart-tooltip-default",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-default.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-indicator-line",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-indicator-line.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-indicator-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-indicator-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-label-none",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-label-none.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-label-custom",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-label-custom.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-label-formatter",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-label-formatter.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-formatter",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-formatter.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-icons",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-icons.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "chart-tooltip-advanced",
"type": "registry:block",
- "registryDependencies": [
- "card",
- "chart"
- ],
+ "registryDependencies": ["card", "chart"],
"files": [
{
"path": "registry/new-york-v4/charts/chart-tooltip-advanced.tsx",
"type": "registry:block"
}
],
- "categories": [
- "charts",
- "charts-tooltip"
- ]
+ "categories": ["charts", "charts-tooltip"]
},
{
"name": "utils",
"type": "registry:lib",
- "dependencies": [
- "clsx",
- "tailwind-merge"
- ],
+ "dependencies": ["clsx", "tailwind-merge"],
"files": [
{
"path": "registry/new-york-v4/lib/utils.ts",
@@ -4454,9 +3525,7 @@
{
"name": "accordion-demo",
"type": "registry:example",
- "registryDependencies": [
- "accordion"
- ],
+ "registryDependencies": ["accordion"],
"files": [
{
"path": "registry/new-york-v4/examples/accordion-demo.tsx",
@@ -4467,9 +3536,7 @@
{
"name": "alert-demo",
"type": "registry:example",
- "registryDependencies": [
- "alert"
- ],
+ "registryDependencies": ["alert"],
"files": [
{
"path": "registry/new-york-v4/examples/alert-demo.tsx",
@@ -4480,9 +3547,7 @@
{
"name": "alert-destructive",
"type": "registry:example",
- "registryDependencies": [
- "alert"
- ],
+ "registryDependencies": ["alert"],
"files": [
{
"path": "registry/new-york-v4/examples/alert-destructive.tsx",
@@ -4493,10 +3558,7 @@
{
"name": "alert-dialog-demo",
"type": "registry:example",
- "registryDependencies": [
- "alert-dialog",
- "button"
- ],
+ "registryDependencies": ["alert-dialog", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/alert-dialog-demo.tsx",
@@ -4507,9 +3569,7 @@
{
"name": "aspect-ratio-demo",
"type": "registry:example",
- "registryDependencies": [
- "aspect-ratio"
- ],
+ "registryDependencies": ["aspect-ratio"],
"files": [
{
"path": "registry/new-york-v4/examples/aspect-ratio-demo.tsx",
@@ -4520,9 +3580,7 @@
{
"name": "avatar-demo",
"type": "registry:example",
- "registryDependencies": [
- "avatar"
- ],
+ "registryDependencies": ["avatar"],
"files": [
{
"path": "registry/new-york-v4/examples/avatar-demo.tsx",
@@ -4533,9 +3591,7 @@
{
"name": "badge-demo",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-demo.tsx",
@@ -4546,9 +3602,7 @@
{
"name": "badge-destructive",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-destructive.tsx",
@@ -4559,9 +3613,7 @@
{
"name": "badge-outline",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-outline.tsx",
@@ -4572,9 +3624,7 @@
{
"name": "badge-secondary",
"type": "registry:example",
- "registryDependencies": [
- "badge"
- ],
+ "registryDependencies": ["badge"],
"files": [
{
"path": "registry/new-york-v4/examples/badge-secondary.tsx",
@@ -4585,9 +3635,7 @@
{
"name": "breadcrumb-demo",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-demo.tsx",
@@ -4598,9 +3646,7 @@
{
"name": "breadcrumb-separator",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-separator.tsx",
@@ -4611,9 +3657,7 @@
{
"name": "breadcrumb-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-dropdown.tsx",
@@ -4624,9 +3668,7 @@
{
"name": "breadcrumb-ellipsis",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-ellipsis.tsx",
@@ -4637,9 +3679,7 @@
{
"name": "breadcrumb-link",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-link.tsx",
@@ -4650,9 +3690,7 @@
{
"name": "breadcrumb-responsive",
"type": "registry:example",
- "registryDependencies": [
- "breadcrumb"
- ],
+ "registryDependencies": ["breadcrumb"],
"files": [
{
"path": "registry/new-york-v4/examples/breadcrumb-responsive.tsx",
@@ -4663,9 +3701,7 @@
{
"name": "button-demo",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-demo.tsx",
@@ -4676,9 +3712,7 @@
{
"name": "button-default",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-default.tsx",
@@ -4689,9 +3723,7 @@
{
"name": "button-secondary",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-secondary.tsx",
@@ -4702,9 +3734,7 @@
{
"name": "button-destructive",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-destructive.tsx",
@@ -4715,9 +3745,7 @@
{
"name": "button-outline",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-outline.tsx",
@@ -4728,9 +3756,7 @@
{
"name": "button-ghost",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-ghost.tsx",
@@ -4741,9 +3767,7 @@
{
"name": "button-link",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-link.tsx",
@@ -4754,9 +3778,7 @@
{
"name": "button-with-icon",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-with-icon.tsx",
@@ -4767,9 +3789,7 @@
{
"name": "button-loading",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-loading.tsx",
@@ -4780,9 +3800,7 @@
{
"name": "button-icon",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-icon.tsx",
@@ -4793,9 +3811,7 @@
{
"name": "button-as-child",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-as-child.tsx",
@@ -4806,9 +3822,7 @@
{
"name": "button-rounded",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-rounded.tsx",
@@ -4819,9 +3833,7 @@
{
"name": "button-size",
"type": "registry:example",
- "registryDependencies": [
- "button"
- ],
+ "registryDependencies": ["button"],
"files": [
{
"path": "registry/new-york-v4/examples/button-size.tsx",
@@ -4832,9 +3844,7 @@
{
"name": "button-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-demo.tsx",
@@ -4845,9 +3855,7 @@
{
"name": "button-group-nested",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-nested.tsx",
@@ -4858,9 +3866,7 @@
{
"name": "button-group-size",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-size.tsx",
@@ -4871,9 +3877,7 @@
{
"name": "button-group-separator",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-separator.tsx",
@@ -4884,9 +3888,7 @@
{
"name": "button-group-split",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-split.tsx",
@@ -4897,9 +3899,7 @@
{
"name": "button-group-input",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-input.tsx",
@@ -4910,9 +3910,7 @@
{
"name": "button-group-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-dropdown.tsx",
@@ -4923,9 +3921,7 @@
{
"name": "button-group-select",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-select.tsx",
@@ -4936,9 +3932,7 @@
{
"name": "button-group-popover",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-popover.tsx",
@@ -4949,9 +3943,7 @@
{
"name": "button-group-input-group",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-input-group.tsx",
@@ -4962,9 +3954,7 @@
{
"name": "button-group-orientation",
"type": "registry:example",
- "registryDependencies": [
- "button-group"
- ],
+ "registryDependencies": ["button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/button-group-orientation.tsx",
@@ -4975,9 +3965,7 @@
{
"name": "calendar-demo",
"type": "registry:example",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/examples/calendar-demo.tsx",
@@ -4988,11 +3976,7 @@
{
"name": "calendar-form",
"type": "registry:example",
- "registryDependencies": [
- "calendar",
- "form",
- "popover"
- ],
+ "registryDependencies": ["calendar", "form", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/calendar-form.tsx",
@@ -5003,11 +3987,7 @@
{
"name": "card-demo",
"type": "registry:example",
- "registryDependencies": [
- "card",
- "button",
- "switch"
- ],
+ "registryDependencies": ["card", "button", "switch"],
"files": [
{
"path": "registry/new-york-v4/examples/card-demo.tsx",
@@ -5018,13 +3998,7 @@
{
"name": "card-with-form",
"type": "registry:example",
- "registryDependencies": [
- "button",
- "card",
- "input",
- "label",
- "select"
- ],
+ "registryDependencies": ["button", "card", "input", "label", "select"],
"files": [
{
"path": "registry/new-york-v4/examples/card-with-form.tsx",
@@ -5035,9 +4009,7 @@
{
"name": "carousel-demo",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-demo.tsx",
@@ -5048,9 +4020,7 @@
{
"name": "carousel-size",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-size.tsx",
@@ -5061,9 +4031,7 @@
{
"name": "carousel-spacing",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-spacing.tsx",
@@ -5074,9 +4042,7 @@
{
"name": "carousel-orientation",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-orientation.tsx",
@@ -5087,9 +4053,7 @@
{
"name": "carousel-api",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-api.tsx",
@@ -5100,9 +4064,7 @@
{
"name": "carousel-plugin",
"type": "registry:example",
- "registryDependencies": [
- "carousel"
- ],
+ "registryDependencies": ["carousel"],
"files": [
{
"path": "registry/new-york-v4/examples/carousel-plugin.tsx",
@@ -5113,9 +4075,7 @@
{
"name": "checkbox-demo",
"type": "registry:example",
- "registryDependencies": [
- "checkbox"
- ],
+ "registryDependencies": ["checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-demo.tsx",
@@ -5126,9 +4086,7 @@
{
"name": "checkbox-disabled",
"type": "registry:example",
- "registryDependencies": [
- "checkbox"
- ],
+ "registryDependencies": ["checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-disabled.tsx",
@@ -5139,10 +4097,7 @@
{
"name": "checkbox-form-multiple",
"type": "registry:example",
- "registryDependencies": [
- "checkbox",
- "form"
- ],
+ "registryDependencies": ["checkbox", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-form-multiple.tsx",
@@ -5153,10 +4108,7 @@
{
"name": "checkbox-form-single",
"type": "registry:example",
- "registryDependencies": [
- "checkbox",
- "form"
- ],
+ "registryDependencies": ["checkbox", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-form-single.tsx",
@@ -5167,9 +4119,7 @@
{
"name": "checkbox-with-text",
"type": "registry:example",
- "registryDependencies": [
- "checkbox"
- ],
+ "registryDependencies": ["checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/checkbox-with-text.tsx",
@@ -5180,9 +4130,7 @@
{
"name": "collapsible-demo",
"type": "registry:example",
- "registryDependencies": [
- "collapsible"
- ],
+ "registryDependencies": ["collapsible"],
"files": [
{
"path": "registry/new-york-v4/examples/collapsible-demo.tsx",
@@ -5193,9 +4141,7 @@
{
"name": "combobox-demo",
"type": "registry:example",
- "registryDependencies": [
- "command"
- ],
+ "registryDependencies": ["command"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-demo.tsx",
@@ -5206,11 +4152,7 @@
{
"name": "combobox-dropdown-menu",
"type": "registry:example",
- "registryDependencies": [
- "command",
- "dropdown-menu",
- "button"
- ],
+ "registryDependencies": ["command", "dropdown-menu", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-dropdown-menu.tsx",
@@ -5221,10 +4163,7 @@
{
"name": "combobox-form",
"type": "registry:example",
- "registryDependencies": [
- "command",
- "form"
- ],
+ "registryDependencies": ["command", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-form.tsx",
@@ -5235,10 +4174,7 @@
{
"name": "combobox-popover",
"type": "registry:example",
- "registryDependencies": [
- "combobox",
- "popover"
- ],
+ "registryDependencies": ["combobox", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-popover.tsx",
@@ -5249,11 +4185,7 @@
{
"name": "combobox-responsive",
"type": "registry:example",
- "registryDependencies": [
- "combobox",
- "popover",
- "drawer"
- ],
+ "registryDependencies": ["combobox", "popover", "drawer"],
"files": [
{
"path": "registry/new-york-v4/examples/combobox-responsive.tsx",
@@ -5264,9 +4196,7 @@
{
"name": "command-demo",
"type": "registry:example",
- "registryDependencies": [
- "command"
- ],
+ "registryDependencies": ["command"],
"files": [
{
"path": "registry/new-york-v4/examples/command-demo.tsx",
@@ -5277,10 +4207,7 @@
{
"name": "command-dialog",
"type": "registry:example",
- "registryDependencies": [
- "command",
- "dialog"
- ],
+ "registryDependencies": ["command", "dialog"],
"files": [
{
"path": "registry/new-york-v4/examples/command-dialog.tsx",
@@ -5291,9 +4218,7 @@
{
"name": "context-menu-demo",
"type": "registry:example",
- "registryDependencies": [
- "context-menu"
- ],
+ "registryDependencies": ["context-menu"],
"files": [
{
"path": "registry/new-york-v4/examples/context-menu-demo.tsx",
@@ -5304,9 +4229,7 @@
{
"name": "data-table-demo",
"type": "registry:example",
- "registryDependencies": [
- "data-table"
- ],
+ "registryDependencies": ["data-table"],
"files": [
{
"path": "registry/new-york-v4/examples/data-table-demo.tsx",
@@ -5317,14 +4240,8 @@
{
"name": "date-picker-demo",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "popover"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-demo.tsx",
@@ -5335,15 +4252,8 @@
{
"name": "date-picker-form",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "form",
- "popover"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "form", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-form.tsx",
@@ -5354,15 +4264,8 @@
{
"name": "date-picker-with-presets",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "popover",
- "select"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "popover", "select"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-with-presets.tsx",
@@ -5373,14 +4276,8 @@
{
"name": "date-picker-with-range",
"type": "registry:example",
- "dependencies": [
- "date-fns"
- ],
- "registryDependencies": [
- "button",
- "calendar",
- "popover"
- ],
+ "dependencies": ["date-fns"],
+ "registryDependencies": ["button", "calendar", "popover"],
"files": [
{
"path": "registry/new-york-v4/examples/date-picker-with-range.tsx",
@@ -5391,9 +4288,7 @@
{
"name": "dialog-demo",
"type": "registry:example",
- "registryDependencies": [
- "dialog"
- ],
+ "registryDependencies": ["dialog"],
"files": [
{
"path": "registry/new-york-v4/examples/dialog-demo.tsx",
@@ -5404,10 +4299,7 @@
{
"name": "dialog-close-button",
"type": "registry:example",
- "registryDependencies": [
- "dialog",
- "button"
- ],
+ "registryDependencies": ["dialog", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/dialog-close-button.tsx",
@@ -5418,9 +4310,7 @@
{
"name": "drawer-demo",
"type": "registry:example",
- "registryDependencies": [
- "drawer"
- ],
+ "registryDependencies": ["drawer"],
"files": [
{
"path": "registry/new-york-v4/examples/drawer-demo.tsx",
@@ -5431,10 +4321,7 @@
{
"name": "empty-demo",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button"
- ],
+ "registryDependencies": ["empty", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-demo.tsx",
@@ -5445,9 +4332,7 @@
{
"name": "empty-icon",
"type": "registry:example",
- "registryDependencies": [
- "empty"
- ],
+ "registryDependencies": ["empty"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-icon.tsx",
@@ -5458,11 +4343,7 @@
{
"name": "empty-avatar",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button",
- "avatar"
- ],
+ "registryDependencies": ["empty", "button", "avatar"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-avatar.tsx",
@@ -5473,11 +4354,7 @@
{
"name": "empty-avatar-group",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button",
- "avatar"
- ],
+ "registryDependencies": ["empty", "button", "avatar"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-avatar-group.tsx",
@@ -5488,11 +4365,7 @@
{
"name": "empty-input-group",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button",
- "input"
- ],
+ "registryDependencies": ["empty", "button", "input"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-input-group.tsx",
@@ -5503,10 +4376,7 @@
{
"name": "empty-outline",
"type": "registry:example",
- "registryDependencies": [
- "empty",
- "button"
- ],
+ "registryDependencies": ["empty", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-outline.tsx",
@@ -5517,9 +4387,7 @@
{
"name": "empty-background",
"type": "registry:example",
- "registryDependencies": [
- "empty"
- ],
+ "registryDependencies": ["empty"],
"files": [
{
"path": "registry/new-york-v4/examples/empty-background.tsx",
@@ -5530,9 +4398,7 @@
{
"name": "field-demo",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-demo.tsx",
@@ -5543,9 +4409,7 @@
{
"name": "field-input",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-input.tsx",
@@ -5556,9 +4420,7 @@
{
"name": "field-textarea",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-textarea.tsx",
@@ -5569,9 +4431,7 @@
{
"name": "field-fieldset",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-fieldset.tsx",
@@ -5582,9 +4442,7 @@
{
"name": "field-radio",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-radio.tsx",
@@ -5595,9 +4453,7 @@
{
"name": "field-checkbox",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-checkbox.tsx",
@@ -5608,9 +4464,7 @@
{
"name": "field-switch",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-switch.tsx",
@@ -5621,9 +4475,7 @@
{
"name": "field-slider",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-slider.tsx",
@@ -5634,9 +4486,7 @@
{
"name": "field-select",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-select.tsx",
@@ -5647,9 +4497,7 @@
{
"name": "field-choice-card",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-choice-card.tsx",
@@ -5660,9 +4508,7 @@
{
"name": "field-group",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-group.tsx",
@@ -5673,9 +4519,7 @@
{
"name": "field-responsive",
"type": "registry:example",
- "registryDependencies": [
- "field"
- ],
+ "registryDependencies": ["field"],
"files": [
{
"path": "registry/new-york-v4/examples/field-responsive.tsx",
@@ -5683,13 +4527,284 @@
}
]
},
+ {
+ "name": "form-rhf-demo",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-demo.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-input",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "input", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-input.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-select",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "select", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-select.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-checkbox",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "checkbox", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-checkbox.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-switch",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "switch", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-switch.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-textarea",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "textarea", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-textarea.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-radiogroup",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": ["field", "radio-group", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-radiogroup.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-array",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-array.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-complex",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-complex.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-rhf-password",
+ "type": "registry:example",
+ "dependencies": ["react-hook-form", "@hookform/resolvers", "zod"],
+ "registryDependencies": [
+ "field",
+ "input-group",
+ "progress",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-rhf-password.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-demo",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-demo.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-input",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "input", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-input.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-textarea",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "textarea", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-textarea.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-select",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "select", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-select.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-checkbox",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "checkbox", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-checkbox.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-switch",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "switch", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-switch.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-radiogroup",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": ["field", "radio-group", "button", "card"],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-radiogroup.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-array",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": [
+ "field",
+ "input",
+ "input-group",
+ "button",
+ "card"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-array.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
+ {
+ "name": "form-tanstack-complex",
+ "type": "registry:example",
+ "dependencies": ["@tanstack/react-form", "zod"],
+ "registryDependencies": [
+ "field",
+ "button",
+ "card",
+ "checkbox",
+ "radio-group",
+ "select",
+ "switch"
+ ],
+ "files": [
+ {
+ "path": "registry/new-york-v4/examples/form-tanstack-complex.tsx",
+ "type": "registry:example"
+ }
+ ]
+ },
{
"name": "drawer-dialog",
"type": "registry:example",
- "registryDependencies": [
- "drawer",
- "dialog"
- ],
+ "registryDependencies": ["drawer", "dialog"],
"files": [
{
"path": "registry/new-york-v4/examples/drawer-dialog.tsx",
@@ -5700,9 +4815,7 @@
{
"name": "dropdown-menu-demo",
"type": "registry:example",
- "registryDependencies": [
- "dropdown-menu"
- ],
+ "registryDependencies": ["dropdown-menu"],
"files": [
{
"path": "registry/new-york-v4/examples/dropdown-menu-demo.tsx",
@@ -5713,10 +4826,7 @@
{
"name": "dropdown-menu-checkboxes",
"type": "registry:example",
- "registryDependencies": [
- "dropdown-menu",
- "checkbox"
- ],
+ "registryDependencies": ["dropdown-menu", "checkbox"],
"files": [
{
"path": "registry/new-york-v4/examples/dropdown-menu-checkboxes.tsx",
@@ -5727,10 +4837,7 @@
{
"name": "dropdown-menu-radio-group",
"type": "registry:example",
- "registryDependencies": [
- "dropdown-menu",
- "radio-group"
- ],
+ "registryDependencies": ["dropdown-menu", "radio-group"],
"files": [
{
"path": "registry/new-york-v4/examples/dropdown-menu-radio-group.tsx",
@@ -5741,9 +4848,7 @@
{
"name": "hover-card-demo",
"type": "registry:example",
- "registryDependencies": [
- "hover-card"
- ],
+ "registryDependencies": ["hover-card"],
"files": [
{
"path": "registry/new-york-v4/examples/hover-card-demo.tsx",
@@ -5754,9 +4859,7 @@
{
"name": "input-demo",
"type": "registry:example",
- "registryDependencies": [
- "input"
- ],
+ "registryDependencies": ["input"],
"files": [
{
"path": "registry/new-york-v4/examples/input-demo.tsx",
@@ -5767,9 +4870,7 @@
{
"name": "input-disabled",
"type": "registry:example",
- "registryDependencies": [
- "input"
- ],
+ "registryDependencies": ["input"],
"files": [
{
"path": "registry/new-york-v4/examples/input-disabled.tsx",
@@ -5780,9 +4881,7 @@
{
"name": "input-file",
"type": "registry:example",
- "registryDependencies": [
- "input"
- ],
+ "registryDependencies": ["input"],
"files": [
{
"path": "registry/new-york-v4/examples/input-file.tsx",
@@ -5793,11 +4892,7 @@
{
"name": "input-form",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button",
- "form"
- ],
+ "registryDependencies": ["input", "button", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/input-form.tsx",
@@ -5808,10 +4903,7 @@
{
"name": "input-with-button",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button"
- ],
+ "registryDependencies": ["input", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/input-with-button.tsx",
@@ -5822,11 +4914,7 @@
{
"name": "input-with-label",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button",
- "label"
- ],
+ "registryDependencies": ["input", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/input-with-label.tsx",
@@ -5837,11 +4925,7 @@
{
"name": "input-with-text",
"type": "registry:example",
- "registryDependencies": [
- "input",
- "button",
- "label"
- ],
+ "registryDependencies": ["input", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/input-with-text.tsx",
@@ -5852,9 +4936,7 @@
{
"name": "input-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-demo.tsx",
@@ -5865,10 +4947,7 @@
{
"name": "input-group-label",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "label"
- ],
+ "registryDependencies": ["input-group", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-label.tsx",
@@ -5879,9 +4958,7 @@
{
"name": "input-group-text",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-text.tsx",
@@ -5892,10 +4969,7 @@
{
"name": "input-group-tooltip",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "tooltip"
- ],
+ "registryDependencies": ["input-group", "tooltip"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-tooltip.tsx",
@@ -5906,9 +4980,7 @@
{
"name": "input-group-button",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-button.tsx",
@@ -5919,10 +4991,7 @@
{
"name": "input-group-button-group",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "button-group"
- ],
+ "registryDependencies": ["input-group", "button-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-button-group.tsx",
@@ -5933,11 +5002,7 @@
{
"name": "input-group-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "dropdown-menu",
- "button"
- ],
+ "registryDependencies": ["input-group", "dropdown-menu", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-dropdown.tsx",
@@ -5948,10 +5013,7 @@
{
"name": "input-group-spinner",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "spinner"
- ],
+ "registryDependencies": ["input-group", "spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-spinner.tsx",
@@ -5962,10 +5024,7 @@
{
"name": "input-group-textarea",
"type": "registry:example",
- "registryDependencies": [
- "input-group",
- "textarea"
- ],
+ "registryDependencies": ["input-group", "textarea"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-textarea.tsx",
@@ -5976,9 +5035,7 @@
{
"name": "input-group-icon",
"type": "registry:example",
- "registryDependencies": [
- "input-group"
- ],
+ "registryDependencies": ["input-group"],
"files": [
{
"path": "registry/new-york-v4/examples/input-group-icon.tsx",
@@ -6006,9 +5063,7 @@
{
"name": "input-otp-demo",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-demo.tsx",
@@ -6019,9 +5074,7 @@
{
"name": "input-otp-pattern",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-pattern.tsx",
@@ -6032,9 +5085,7 @@
{
"name": "input-otp-separator",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-separator.tsx",
@@ -6045,9 +5096,7 @@
{
"name": "input-otp-controlled",
"type": "registry:example",
- "registryDependencies": [
- "input-otp"
- ],
+ "registryDependencies": ["input-otp"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-controlled.tsx",
@@ -6058,10 +5107,7 @@
{
"name": "input-otp-form",
"type": "registry:example",
- "registryDependencies": [
- "input-otp",
- "form"
- ],
+ "registryDependencies": ["input-otp", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/input-otp-form.tsx",
@@ -6072,9 +5118,7 @@
{
"name": "item-demo",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-demo.tsx",
@@ -6085,9 +5129,7 @@
{
"name": "item-size",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-size.tsx",
@@ -6098,9 +5140,7 @@
{
"name": "item-variant",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-variant.tsx",
@@ -6111,9 +5151,7 @@
{
"name": "item-icon",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-icon.tsx",
@@ -6124,9 +5162,7 @@
{
"name": "item-image",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-image.tsx",
@@ -6137,9 +5173,7 @@
{
"name": "item-avatar",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-avatar.tsx",
@@ -6150,9 +5184,7 @@
{
"name": "item-group",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-group.tsx",
@@ -6163,9 +5195,7 @@
{
"name": "item-header",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-header.tsx",
@@ -6176,9 +5206,7 @@
{
"name": "item-dropdown",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-dropdown.tsx",
@@ -6189,9 +5217,7 @@
{
"name": "item-link",
"type": "registry:example",
- "registryDependencies": [
- "item"
- ],
+ "registryDependencies": ["item"],
"files": [
{
"path": "registry/new-york-v4/examples/item-link.tsx",
@@ -6202,9 +5228,7 @@
{
"name": "kbd-demo",
"type": "registry:example",
- "registryDependencies": [
- "kbd"
- ],
+ "registryDependencies": ["kbd"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-demo.tsx",
@@ -6215,11 +5239,7 @@
{
"name": "kbd-tooltip",
"type": "registry:example",
- "registryDependencies": [
- "kbd",
- "tooltip",
- "button"
- ],
+ "registryDependencies": ["kbd", "tooltip", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-tooltip.tsx",
@@ -6230,12 +5250,7 @@
{
"name": "kbd-input-group",
"type": "registry:example",
- "registryDependencies": [
- "kbd",
- "input",
- "button",
- "label"
- ],
+ "registryDependencies": ["kbd", "input", "button", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-input-group.tsx",
@@ -6246,10 +5261,7 @@
{
"name": "kbd-button",
"type": "registry:example",
- "registryDependencies": [
- "kbd",
- "button"
- ],
+ "registryDependencies": ["kbd", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-button.tsx",
@@ -6260,9 +5272,7 @@
{
"name": "kbd-group",
"type": "registry:example",
- "registryDependencies": [
- "kbd"
- ],
+ "registryDependencies": ["kbd"],
"files": [
{
"path": "registry/new-york-v4/examples/kbd-group.tsx",
@@ -6273,9 +5283,7 @@
{
"name": "label-demo",
"type": "registry:example",
- "registryDependencies": [
- "label"
- ],
+ "registryDependencies": ["label"],
"files": [
{
"path": "registry/new-york-v4/examples/label-demo.tsx",
@@ -6286,9 +5294,7 @@
{
"name": "menubar-demo",
"type": "registry:example",
- "registryDependencies": [
- "menubar"
- ],
+ "registryDependencies": ["menubar"],
"files": [
{
"path": "registry/new-york-v4/examples/menubar-demo.tsx",
@@ -6299,9 +5305,7 @@
{
"name": "navigation-menu-demo",
"type": "registry:example",
- "registryDependencies": [
- "navigation-menu"
- ],
+ "registryDependencies": ["navigation-menu"],
"files": [
{
"path": "registry/new-york-v4/examples/navigation-menu-demo.tsx",
@@ -6312,9 +5316,7 @@
{
"name": "pagination-demo",
"type": "registry:example",
- "registryDependencies": [
- "pagination"
- ],
+ "registryDependencies": ["pagination"],
"files": [
{
"path": "registry/new-york-v4/examples/pagination-demo.tsx",
@@ -6325,9 +5327,7 @@
{
"name": "popover-demo",
"type": "registry:example",
- "registryDependencies": [
- "popover"
- ],
+ "registryDependencies": ["popover"],
"files": [
{
"path": "registry/new-york-v4/examples/popover-demo.tsx",
@@ -6338,9 +5338,7 @@
{
"name": "progress-demo",
"type": "registry:example",
- "registryDependencies": [
- "progress"
- ],
+ "registryDependencies": ["progress"],
"files": [
{
"path": "registry/new-york-v4/examples/progress-demo.tsx",
@@ -6351,9 +5349,7 @@
{
"name": "radio-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "radio-group"
- ],
+ "registryDependencies": ["radio-group"],
"files": [
{
"path": "registry/new-york-v4/examples/radio-group-demo.tsx",
@@ -6364,10 +5360,7 @@
{
"name": "radio-group-form",
"type": "registry:example",
- "registryDependencies": [
- "radio-group",
- "form"
- ],
+ "registryDependencies": ["radio-group", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/radio-group-form.tsx",
@@ -6378,9 +5371,7 @@
{
"name": "resizable-demo",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-demo.tsx",
@@ -6391,9 +5382,7 @@
{
"name": "resizable-demo-with-handle",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-demo-with-handle.tsx",
@@ -6404,9 +5393,7 @@
{
"name": "resizable-vertical",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-vertical.tsx",
@@ -6417,9 +5404,7 @@
{
"name": "resizable-handle",
"type": "registry:example",
- "registryDependencies": [
- "resizable"
- ],
+ "registryDependencies": ["resizable"],
"files": [
{
"path": "registry/new-york-v4/examples/resizable-handle.tsx",
@@ -6430,9 +5415,7 @@
{
"name": "scroll-area-demo",
"type": "registry:example",
- "registryDependencies": [
- "scroll-area"
- ],
+ "registryDependencies": ["scroll-area"],
"files": [
{
"path": "registry/new-york-v4/examples/scroll-area-demo.tsx",
@@ -6443,9 +5426,7 @@
{
"name": "scroll-area-horizontal-demo",
"type": "registry:example",
- "registryDependencies": [
- "scroll-area"
- ],
+ "registryDependencies": ["scroll-area"],
"files": [
{
"path": "registry/new-york-v4/examples/scroll-area-horizontal-demo.tsx",
@@ -6456,9 +5437,7 @@
{
"name": "select-demo",
"type": "registry:example",
- "registryDependencies": [
- "select"
- ],
+ "registryDependencies": ["select"],
"files": [
{
"path": "registry/new-york-v4/examples/select-demo.tsx",
@@ -6469,9 +5448,7 @@
{
"name": "select-scrollable",
"type": "registry:example",
- "registryDependencies": [
- "select"
- ],
+ "registryDependencies": ["select"],
"files": [
{
"path": "registry/new-york-v4/examples/select-scrollable.tsx",
@@ -6482,9 +5459,7 @@
{
"name": "select-form",
"type": "registry:example",
- "registryDependencies": [
- "select"
- ],
+ "registryDependencies": ["select"],
"files": [
{
"path": "registry/new-york-v4/examples/select-form.tsx",
@@ -6495,9 +5470,7 @@
{
"name": "separator-demo",
"type": "registry:example",
- "registryDependencies": [
- "separator"
- ],
+ "registryDependencies": ["separator"],
"files": [
{
"path": "registry/new-york-v4/examples/separator-demo.tsx",
@@ -6508,9 +5481,7 @@
{
"name": "sheet-demo",
"type": "registry:example",
- "registryDependencies": [
- "sheet"
- ],
+ "registryDependencies": ["sheet"],
"files": [
{
"path": "registry/new-york-v4/examples/sheet-demo.tsx",
@@ -6521,9 +5492,7 @@
{
"name": "sheet-side",
"type": "registry:example",
- "registryDependencies": [
- "sheet"
- ],
+ "registryDependencies": ["sheet"],
"files": [
{
"path": "registry/new-york-v4/examples/sheet-side.tsx",
@@ -6534,9 +5503,7 @@
{
"name": "skeleton-demo",
"type": "registry:example",
- "registryDependencies": [
- "skeleton"
- ],
+ "registryDependencies": ["skeleton"],
"files": [
{
"path": "registry/new-york-v4/examples/skeleton-demo.tsx",
@@ -6547,9 +5514,7 @@
{
"name": "skeleton-card",
"type": "registry:example",
- "registryDependencies": [
- "skeleton"
- ],
+ "registryDependencies": ["skeleton"],
"files": [
{
"path": "registry/new-york-v4/examples/skeleton-card.tsx",
@@ -6560,9 +5525,7 @@
{
"name": "slider-demo",
"type": "registry:example",
- "registryDependencies": [
- "slider"
- ],
+ "registryDependencies": ["slider"],
"files": [
{
"path": "registry/new-york-v4/examples/slider-demo.tsx",
@@ -6573,9 +5536,7 @@
{
"name": "sonner-demo",
"type": "registry:example",
- "registryDependencies": [
- "sonner"
- ],
+ "registryDependencies": ["sonner"],
"files": [
{
"path": "registry/new-york-v4/examples/sonner-demo.tsx",
@@ -6586,9 +5547,7 @@
{
"name": "spinner-demo",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-demo.tsx",
@@ -6599,10 +5558,7 @@
{
"name": "spinner-basic",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "button"
- ],
+ "registryDependencies": ["spinner", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-basic.tsx",
@@ -6613,10 +5569,7 @@
{
"name": "spinner-button",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "button"
- ],
+ "registryDependencies": ["spinner", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-button.tsx",
@@ -6627,10 +5580,7 @@
{
"name": "spinner-badge",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "badge"
- ],
+ "registryDependencies": ["spinner", "badge"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-badge.tsx",
@@ -6641,11 +5591,7 @@
{
"name": "spinner-input-group",
"type": "registry:example",
- "registryDependencies": [
- "spinner",
- "button",
- "input"
- ],
+ "registryDependencies": ["spinner", "button", "input"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-input-group.tsx",
@@ -6656,9 +5602,7 @@
{
"name": "spinner-empty",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-empty.tsx",
@@ -6669,9 +5613,7 @@
{
"name": "spinner-color",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-color.tsx",
@@ -6682,9 +5624,7 @@
{
"name": "spinner-custom",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-custom.tsx",
@@ -6695,9 +5635,7 @@
{
"name": "spinner-size",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-size.tsx",
@@ -6708,9 +5646,7 @@
{
"name": "spinner-item",
"type": "registry:example",
- "registryDependencies": [
- "spinner"
- ],
+ "registryDependencies": ["spinner"],
"files": [
{
"path": "registry/new-york-v4/examples/spinner-item.tsx",
@@ -6721,9 +5657,7 @@
{
"name": "switch-demo",
"type": "registry:example",
- "registryDependencies": [
- "switch"
- ],
+ "registryDependencies": ["switch"],
"files": [
{
"path": "registry/new-york-v4/examples/switch-demo.tsx",
@@ -6734,10 +5668,7 @@
{
"name": "switch-form",
"type": "registry:example",
- "registryDependencies": [
- "switch",
- "form"
- ],
+ "registryDependencies": ["switch", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/switch-form.tsx",
@@ -6748,9 +5679,7 @@
{
"name": "table-demo",
"type": "registry:example",
- "registryDependencies": [
- "table"
- ],
+ "registryDependencies": ["table"],
"files": [
{
"path": "registry/new-york-v4/examples/table-demo.tsx",
@@ -6761,9 +5690,7 @@
{
"name": "tabs-demo",
"type": "registry:example",
- "registryDependencies": [
- "tabs"
- ],
+ "registryDependencies": ["tabs"],
"files": [
{
"path": "registry/new-york-v4/examples/tabs-demo.tsx",
@@ -6774,9 +5701,7 @@
{
"name": "textarea-demo",
"type": "registry:example",
- "registryDependencies": [
- "textarea"
- ],
+ "registryDependencies": ["textarea"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-demo.tsx",
@@ -6787,9 +5712,7 @@
{
"name": "textarea-disabled",
"type": "registry:example",
- "registryDependencies": [
- "textarea"
- ],
+ "registryDependencies": ["textarea"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-disabled.tsx",
@@ -6800,10 +5723,7 @@
{
"name": "textarea-form",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "form"
- ],
+ "registryDependencies": ["textarea", "form"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-form.tsx",
@@ -6814,10 +5734,7 @@
{
"name": "textarea-with-button",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "button"
- ],
+ "registryDependencies": ["textarea", "button"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-with-button.tsx",
@@ -6828,10 +5745,7 @@
{
"name": "textarea-with-label",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "label"
- ],
+ "registryDependencies": ["textarea", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-with-label.tsx",
@@ -6842,10 +5756,7 @@
{
"name": "textarea-with-text",
"type": "registry:example",
- "registryDependencies": [
- "textarea",
- "label"
- ],
+ "registryDependencies": ["textarea", "label"],
"files": [
{
"path": "registry/new-york-v4/examples/textarea-with-text.tsx",
@@ -6856,9 +5767,7 @@
{
"name": "toggle-group-demo",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-demo.tsx",
@@ -6869,9 +5778,7 @@
{
"name": "toggle-group-disabled",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-disabled.tsx",
@@ -6882,9 +5789,7 @@
{
"name": "toggle-group-lg",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-lg.tsx",
@@ -6895,9 +5800,7 @@
{
"name": "toggle-group-outline",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-outline.tsx",
@@ -6908,9 +5811,7 @@
{
"name": "toggle-group-sm",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-sm.tsx",
@@ -6921,9 +5822,7 @@
{
"name": "toggle-group-single",
"type": "registry:example",
- "registryDependencies": [
- "toggle-group"
- ],
+ "registryDependencies": ["toggle-group"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-group-single.tsx",
@@ -6934,9 +5833,7 @@
{
"name": "toggle-demo",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-demo.tsx",
@@ -6947,9 +5844,7 @@
{
"name": "toggle-disabled",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-disabled.tsx",
@@ -6960,9 +5855,7 @@
{
"name": "toggle-lg",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-lg.tsx",
@@ -6973,9 +5866,7 @@
{
"name": "toggle-outline",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-outline.tsx",
@@ -6986,9 +5877,7 @@
{
"name": "toggle-sm",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-sm.tsx",
@@ -6999,9 +5888,7 @@
{
"name": "toggle-with-text",
"type": "registry:example",
- "registryDependencies": [
- "toggle"
- ],
+ "registryDependencies": ["toggle"],
"files": [
{
"path": "registry/new-york-v4/examples/toggle-with-text.tsx",
@@ -7012,9 +5899,7 @@
{
"name": "tooltip-demo",
"type": "registry:example",
- "registryDependencies": [
- "tooltip"
- ],
+ "registryDependencies": ["tooltip"],
"files": [
{
"path": "registry/new-york-v4/examples/tooltip-demo.tsx",
@@ -7236,9 +6121,7 @@
"name": "calendar-hijri",
"type": "registry:example",
"description": "A Persian calendar.",
- "registryDependencies": [
- "calendar"
- ],
+ "registryDependencies": ["calendar"],
"files": [
{
"path": "registry/new-york-v4/examples/calendar-hijri.tsx",
@@ -7250,10 +6133,7 @@
"container": "w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0",
"mobile": "component"
},
- "categories": [
- "calendar",
- "date"
- ]
+ "categories": ["calendar", "date"]
},
{
"name": "sidebar-demo",
@@ -7386,4 +6266,4 @@
]
}
]
-}
\ No newline at end of file
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e2f6894b58..b5d8ad759d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -272,7 +272,7 @@ importers:
version: 2.0.0
fumadocs-mdx:
specifier: 11.6.3
- version: 11.6.3(acorn@8.15.0)(fumadocs-core@15.3.1(@types/react@19.1.2)(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))
+ version: 11.6.3(fumadocs-core@15.3.1(@types/react@19.1.2)(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))
fumadocs-ui:
specifier: 15.3.1
version: 15.3.1(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.11)
@@ -546,7 +546,7 @@ importers:
version: 1.1.1(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
contentlayer2:
specifier: ^0.4.6
- version: 0.4.6(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ version: 0.4.6(esbuild@0.25.8)(markdown-wasm@1.2.0)
date-fns:
specifier: ^2.30.0
version: 2.30.0
@@ -585,7 +585,7 @@ importers:
version: 14.3.0-canary.43(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-contentlayer2:
specifier: ^0.4.6
- version: 0.4.6(acorn@8.15.0)(contentlayer2@0.4.6(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0))(esbuild@0.25.8)(markdown-wasm@1.2.0)(next@14.3.0-canary.43(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 0.4.6(contentlayer2@0.4.6(esbuild@0.25.8)(markdown-wasm@1.2.0))(esbuild@0.25.8)(markdown-wasm@1.2.0)(next@14.3.0-canary.43(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-themes:
specifier: ^0.4.3
version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -1268,6 +1268,12 @@ packages:
cpu: [ppc64]
os: [aix]
+ '@esbuild/aix-ppc64@0.25.10':
+ resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/aix-ppc64@0.25.8':
resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==}
engines: {node: '>=18'}
@@ -1280,6 +1286,12 @@ packages:
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm64@0.25.10':
+ resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm64@0.25.8':
resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==}
engines: {node: '>=18'}
@@ -1292,6 +1304,12 @@ packages:
cpu: [arm]
os: [android]
+ '@esbuild/android-arm@0.25.10':
+ resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-arm@0.25.8':
resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==}
engines: {node: '>=18'}
@@ -1304,6 +1322,12 @@ packages:
cpu: [x64]
os: [android]
+ '@esbuild/android-x64@0.25.10':
+ resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/android-x64@0.25.8':
resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==}
engines: {node: '>=18'}
@@ -1316,6 +1340,12 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-arm64@0.25.10':
+ resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-arm64@0.25.8':
resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==}
engines: {node: '>=18'}
@@ -1328,6 +1358,12 @@ packages:
cpu: [x64]
os: [darwin]
+ '@esbuild/darwin-x64@0.25.10':
+ resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.25.8':
resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==}
engines: {node: '>=18'}
@@ -1340,6 +1376,12 @@ packages:
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-arm64@0.25.10':
+ resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-arm64@0.25.8':
resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==}
engines: {node: '>=18'}
@@ -1352,6 +1394,12 @@ packages:
cpu: [x64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.25.10':
+ resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.25.8':
resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==}
engines: {node: '>=18'}
@@ -1364,6 +1412,12 @@ packages:
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm64@0.25.10':
+ resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm64@0.25.8':
resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==}
engines: {node: '>=18'}
@@ -1376,6 +1430,12 @@ packages:
cpu: [arm]
os: [linux]
+ '@esbuild/linux-arm@0.25.10':
+ resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-arm@0.25.8':
resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==}
engines: {node: '>=18'}
@@ -1388,6 +1448,12 @@ packages:
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-ia32@0.25.10':
+ resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-ia32@0.25.8':
resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==}
engines: {node: '>=18'}
@@ -1400,6 +1466,12 @@ packages:
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-loong64@0.25.10':
+ resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-loong64@0.25.8':
resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==}
engines: {node: '>=18'}
@@ -1412,6 +1484,12 @@ packages:
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-mips64el@0.25.10':
+ resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.25.8':
resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==}
engines: {node: '>=18'}
@@ -1424,6 +1502,12 @@ packages:
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-ppc64@0.25.10':
+ resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.25.8':
resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==}
engines: {node: '>=18'}
@@ -1436,6 +1520,12 @@ packages:
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-riscv64@0.25.10':
+ resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.25.8':
resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==}
engines: {node: '>=18'}
@@ -1448,6 +1538,12 @@ packages:
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-s390x@0.25.10':
+ resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-s390x@0.25.8':
resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==}
engines: {node: '>=18'}
@@ -1460,12 +1556,24 @@ packages:
cpu: [x64]
os: [linux]
+ '@esbuild/linux-x64@0.25.10':
+ resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/linux-x64@0.25.8':
resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
+ '@esbuild/netbsd-arm64@0.25.10':
+ resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
'@esbuild/netbsd-arm64@0.25.8':
resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==}
engines: {node: '>=18'}
@@ -1478,12 +1586,24 @@ packages:
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.25.10':
+ resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.25.8':
resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
+ '@esbuild/openbsd-arm64@0.25.10':
+ resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-arm64@0.25.8':
resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==}
engines: {node: '>=18'}
@@ -1496,12 +1616,24 @@ packages:
cpu: [x64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.25.10':
+ resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.25.8':
resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
+ '@esbuild/openharmony-arm64@0.25.10':
+ resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
'@esbuild/openharmony-arm64@0.25.8':
resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==}
engines: {node: '>=18'}
@@ -1514,6 +1646,12 @@ packages:
cpu: [x64]
os: [sunos]
+ '@esbuild/sunos-x64@0.25.10':
+ resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/sunos-x64@0.25.8':
resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==}
engines: {node: '>=18'}
@@ -1526,6 +1664,12 @@ packages:
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-arm64@0.25.10':
+ resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-arm64@0.25.8':
resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==}
engines: {node: '>=18'}
@@ -1538,6 +1682,12 @@ packages:
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-ia32@0.25.10':
+ resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-ia32@0.25.8':
resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==}
engines: {node: '>=18'}
@@ -1550,6 +1700,12 @@ packages:
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.25.10':
+ resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@esbuild/win32-x64@0.25.8':
resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==}
engines: {node: '>=18'}
@@ -1615,17 +1771,26 @@ packages:
'@floating-ui/dom@1.7.3':
resolution: {integrity: sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==}
+ '@floating-ui/dom@1.7.4':
+ resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
+
'@floating-ui/react-dom@2.1.5':
resolution: {integrity: sha512-HDO/1/1oH9fjj4eLgegrlH3dklZpHtUYYFiVwMUwfGvk9jWDRWqkklA2/NFScknrcNSspbV868WjXORvreDX+Q==}
peerDependencies:
react: '>=16.8.0'
react-dom: '>=16.8.0'
+ '@floating-ui/react-dom@2.1.6':
+ resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
'@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
- '@formatjs/intl-localematcher@0.6.1':
- resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==}
+ '@formatjs/intl-localematcher@0.6.2':
+ resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==}
'@grpc/grpc-js@1.13.4':
resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==}
@@ -2064,8 +2229,8 @@ packages:
peerDependencies:
esbuild: '>=0.14.0'
- '@mdx-js/mdx@3.1.0':
- resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==}
+ '@mdx-js/mdx@3.1.1':
+ resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
'@modelcontextprotocol/sdk@1.17.2':
resolution: {integrity: sha512-EFLRNXR/ixpXQWu6/3Cu30ndDFIFNaqUXcTqsGebujeMan9FzhAaFFswLRiFj61rgygDRr8WO1N+UijjgRxX9g==}
@@ -2346,8 +2511,8 @@ packages:
resolution: {integrity: sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ==}
engines: {node: '>=14'}
- '@orama/orama@3.1.11':
- resolution: {integrity: sha512-Szki0cgFiXE5F9RLx2lUyEtJllnuCSQ4B8RLDwIjXkVit6qZjoDAxH+xhJs29MjKLDz0tbPLdKFa6QrQ/qoGGA==}
+ '@orama/orama@3.1.14':
+ resolution: {integrity: sha512-Iq4RxYC7y0pA/hLgcUGpYYs5Vze4qNmJk0Qi1uIrg2bHGpm6A06nbjWcH9h4HQsddkDFFlanLj/zYBH3Sxdb4w==}
engines: {node: '>= 20.0.0'}
'@oxc-transform/binding-darwin-arm64@0.53.0':
@@ -2435,6 +2600,9 @@ packages:
'@radix-ui/primitive@1.1.2':
resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==}
+ '@radix-ui/primitive@1.1.3':
+ resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
+
'@radix-ui/react-accessible-icon@1.1.7':
resolution: {integrity: sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==}
peerDependencies:
@@ -2461,6 +2629,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-accordion@1.2.12':
+ resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-alert-dialog@1.1.14':
resolution: {integrity: sha512-IOZfZ3nPvN6lXpJTBCunFQPRSvK8MDgSc1FB85xnIpUKOw9en0dJj8JmCAxV7BiZdtYlUpmrQjoTFkVYtdoWzQ==}
peerDependencies:
@@ -2539,6 +2720,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-collapsible@1.1.12':
+ resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-collection@1.1.7':
resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
peerDependencies:
@@ -2596,6 +2790,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-dialog@1.1.15':
+ resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-direction@1.1.1':
resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
peerDependencies:
@@ -2618,6 +2825,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-dismissable-layer@1.1.11':
+ resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-dropdown-menu@2.1.15':
resolution: {integrity: sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==}
peerDependencies:
@@ -2640,6 +2860,15 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-focus-guards@1.1.3':
+ resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-focus-scope@1.1.7':
resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
peerDependencies:
@@ -2732,6 +2961,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-navigation-menu@1.2.14':
+ resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-popover@1.1.14':
resolution: {integrity: sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==}
peerDependencies:
@@ -2745,6 +2987,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-popover@1.1.15':
+ resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-popper@1.2.7':
resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==}
peerDependencies:
@@ -2758,6 +3013,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-popper@1.2.8':
+ resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-portal@1.1.9':
resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
peerDependencies:
@@ -2784,6 +3052,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-presence@1.1.5':
+ resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-primitive@2.1.3':
resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
peerDependencies:
@@ -2836,6 +3117,32 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-roving-focus@1.1.11':
+ resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-scroll-area@1.2.10':
+ resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-scroll-area@1.2.9':
resolution: {integrity: sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==}
peerDependencies:
@@ -2923,6 +3230,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-tabs@1.1.13':
+ resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-toast@1.2.14':
resolution: {integrity: sha512-nAP5FBxBJGQ/YfUB+r+O6USFVkWq3gAInkxyEnmvEV5jtSbfDhfa4hwX8CraCnbjMLsE7XSf/K75l9xXY7joWg==}
peerDependencies:
@@ -3191,47 +3511,47 @@ packages:
'@shikijs/core@1.29.2':
resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==}
- '@shikijs/core@3.9.2':
- resolution: {integrity: sha512-3q/mzmw09B2B6PgFNeiaN8pkNOixWS726IHmJEpjDAcneDPMQmUg2cweT9cWXY4XcyQS3i6mOOUgQz9RRUP6HA==}
+ '@shikijs/core@3.13.0':
+ resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==}
'@shikijs/engine-javascript@1.29.2':
resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==}
- '@shikijs/engine-javascript@3.9.2':
- resolution: {integrity: sha512-kUTRVKPsB/28H5Ko6qEsyudBiWEDLst+Sfi+hwr59E0GLHV0h8RfgbQU7fdN5Lt9A8R1ulRiZyTvAizkROjwDA==}
+ '@shikijs/engine-javascript@3.13.0':
+ resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==}
'@shikijs/engine-oniguruma@1.29.2':
resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==}
- '@shikijs/engine-oniguruma@3.9.2':
- resolution: {integrity: sha512-Vn/w5oyQ6TUgTVDIC/BrpXwIlfK6V6kGWDVVz2eRkF2v13YoENUvaNwxMsQU/t6oCuZKzqp9vqtEtEzKl9VegA==}
+ '@shikijs/engine-oniguruma@3.13.0':
+ resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==}
'@shikijs/langs@1.29.2':
resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==}
- '@shikijs/langs@3.9.2':
- resolution: {integrity: sha512-X1Q6wRRQXY7HqAuX3I8WjMscjeGjqXCg/Sve7J2GWFORXkSrXud23UECqTBIdCSNKJioFtmUGJQNKtlMMZMn0w==}
+ '@shikijs/langs@3.13.0':
+ resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==}
- '@shikijs/rehype@3.9.2':
- resolution: {integrity: sha512-obHyTWAUp5cpgpr4v7T9sjEHkLUMvBHvcpYAtdB1yuWU4/IeJ8boDMpnGUvvnxVpDwARlkvBA4Hr+BISo3zwjg==}
+ '@shikijs/rehype@3.13.0':
+ resolution: {integrity: sha512-dxvB5gXEpiTI3beGwOPEwxFxQNmUWM4cwOWbvUmL6DnQJGl18/+cCjVHZK2OnasmU0v7SvM39Zh3iliWdwfBDA==}
'@shikijs/themes@1.29.2':
resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==}
- '@shikijs/themes@3.9.2':
- resolution: {integrity: sha512-6z5lBPBMRfLyyEsgf6uJDHPa6NAGVzFJqH4EAZ+03+7sedYir2yJBRu2uPZOKmj43GyhVHWHvyduLDAwJQfDjA==}
+ '@shikijs/themes@3.13.0':
+ resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==}
'@shikijs/transformers@1.29.2':
resolution: {integrity: sha512-NHQuA+gM7zGuxGWP9/Ub4vpbwrYCrho9nQCLcCPfOe3Yc7LOYwmSuhElI688oiqIXk9dlZwDiyAG9vPBTuPJMA==}
- '@shikijs/transformers@3.9.2':
- resolution: {integrity: sha512-MW5hT4TyUp6bNAgTExRYLk1NNasVQMTCw1kgbxHcEC0O5cbepPWaB+1k+JzW9r3SP2/R8kiens8/3E6hGKfgsA==}
+ '@shikijs/transformers@3.13.0':
+ resolution: {integrity: sha512-833lcuVzcRiG+fXvgslWsM2f4gHpjEgui1ipIknSizRuTgMkNZupiXE5/TVJ6eSYfhNBFhBZKkReKWO2GgYmqA==}
'@shikijs/types@1.29.2':
resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==}
- '@shikijs/types@3.9.2':
- resolution: {integrity: sha512-/M5L0Uc2ljyn2jKvj4Yiah7ow/W+DJSglVafvWAJ/b8AZDeeRAdMu3c2riDzB7N42VD+jSnWxeP9AKtd4TfYVw==}
+ '@shikijs/types@3.13.0':
+ resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
@@ -4597,6 +4917,15 @@ packages:
supports-color:
optional: true
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
decamelize-keys@1.1.1:
resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
engines: {node: '>=0.10.0'}
@@ -4884,6 +5213,11 @@ packages:
engines: {node: '>=12'}
hasBin: true
+ esbuild@0.25.10:
+ resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
esbuild@0.25.8:
resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==}
engines: {node: '>=18'}
@@ -6338,8 +6672,8 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.1.0:
- resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==}
+ lru-cache@11.2.2:
+ resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==}
engines: {node: 20 || >=22}
lru-cache@4.1.5:
@@ -7181,9 +7515,8 @@ packages:
path-to-regexp@6.3.0:
resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
- path-to-regexp@8.2.0:
- resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
- engines: {node: '>=16'}
+ path-to-regexp@8.3.0:
+ resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
@@ -7522,8 +7855,8 @@ packages:
react-is@18.3.1:
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
- react-medium-image-zoom@5.3.0:
- resolution: {integrity: sha512-RCIzVlsKqy3BYgGgYbolUfuvx0aSKC7YhX/IJGEp+WJxsqdIVYJHkBdj++FAj6VD7RiWj6VVmdCfa/9vJE9hZg==}
+ react-medium-image-zoom@5.4.0:
+ resolution: {integrity: sha512-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -7741,8 +8074,8 @@ packages:
remark-mdx-frontmatter@4.0.0:
resolution: {integrity: sha512-PZzAiDGOEfv1Ua7exQ8S5kKxkD8CDaSb4nM+1Mprs6u8dyvQifakh+kCj6NovfGXW+bTvrhjaR3srzjS2qJHKg==}
- remark-mdx@3.1.0:
- resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==}
+ remark-mdx@3.1.1:
+ resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==}
remark-parse@10.0.2:
resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==}
@@ -7963,8 +8296,8 @@ packages:
shiki@1.29.2:
resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==}
- shiki@3.9.2:
- resolution: {integrity: sha512-t6NKl5e/zGTvw/IyftLcumolgOczhuroqwXngDeMqJ3h3EQiTY/7wmfgPlsmloD8oYfqkEDqxiaH37Pjm1zUhQ==}
+ shiki@3.13.0:
+ resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==}
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
@@ -9570,36 +9903,34 @@ snapshots:
dependencies:
chalk: 4.1.2
- '@contentlayer2/cli@0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)':
+ '@contentlayer2/cli@0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)':
dependencies:
- '@contentlayer2/core': 0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ '@contentlayer2/core': 0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)
'@contentlayer2/utils': 0.4.3
clipanion: 3.2.1(typanion@3.14.0)
typanion: 3.14.0
transitivePeerDependencies:
- '@effect-ts/otel-node'
- - acorn
- esbuild
- markdown-wasm
- supports-color
- '@contentlayer2/client@0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)':
+ '@contentlayer2/client@0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)':
dependencies:
- '@contentlayer2/core': 0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ '@contentlayer2/core': 0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)
transitivePeerDependencies:
- '@effect-ts/otel-node'
- - acorn
- esbuild
- markdown-wasm
- supports-color
- '@contentlayer2/core@0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)':
+ '@contentlayer2/core@0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)':
dependencies:
'@contentlayer2/utils': 0.4.3
camel-case: 4.1.2
comment-json: 4.2.5
gray-matter: 4.0.3
- mdx-bundler: 10.1.1(acorn@8.15.0)(esbuild@0.25.8)
+ mdx-bundler: 10.1.1(esbuild@0.25.8)
rehype-stringify: 10.0.1
remark-frontmatter: 5.0.0
remark-parse: 11.0.0
@@ -9612,12 +9943,11 @@ snapshots:
markdown-wasm: 1.2.0
transitivePeerDependencies:
- '@effect-ts/otel-node'
- - acorn
- supports-color
- '@contentlayer2/source-files@0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)':
+ '@contentlayer2/source-files@0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)':
dependencies:
- '@contentlayer2/core': 0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ '@contentlayer2/core': 0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)
'@contentlayer2/utils': 0.4.3
chokidar: 3.6.0
fast-glob: 3.3.3
@@ -9630,19 +9960,17 @@ snapshots:
zod: 3.25.76
transitivePeerDependencies:
- '@effect-ts/otel-node'
- - acorn
- esbuild
- markdown-wasm
- supports-color
- '@contentlayer2/source-remote-files@0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)':
+ '@contentlayer2/source-remote-files@0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)':
dependencies:
- '@contentlayer2/core': 0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
- '@contentlayer2/source-files': 0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ '@contentlayer2/core': 0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ '@contentlayer2/source-files': 0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)
'@contentlayer2/utils': 0.4.3
transitivePeerDependencies:
- '@effect-ts/otel-node'
- - acorn
- esbuild
- markdown-wasm
- supports-color
@@ -9811,147 +10139,225 @@ snapshots:
'@esbuild/aix-ppc64@0.21.5':
optional: true
+ '@esbuild/aix-ppc64@0.25.10':
+ optional: true
+
'@esbuild/aix-ppc64@0.25.8':
optional: true
'@esbuild/android-arm64@0.21.5':
optional: true
+ '@esbuild/android-arm64@0.25.10':
+ optional: true
+
'@esbuild/android-arm64@0.25.8':
optional: true
'@esbuild/android-arm@0.21.5':
optional: true
+ '@esbuild/android-arm@0.25.10':
+ optional: true
+
'@esbuild/android-arm@0.25.8':
optional: true
'@esbuild/android-x64@0.21.5':
optional: true
+ '@esbuild/android-x64@0.25.10':
+ optional: true
+
'@esbuild/android-x64@0.25.8':
optional: true
'@esbuild/darwin-arm64@0.21.5':
optional: true
+ '@esbuild/darwin-arm64@0.25.10':
+ optional: true
+
'@esbuild/darwin-arm64@0.25.8':
optional: true
'@esbuild/darwin-x64@0.21.5':
optional: true
+ '@esbuild/darwin-x64@0.25.10':
+ optional: true
+
'@esbuild/darwin-x64@0.25.8':
optional: true
'@esbuild/freebsd-arm64@0.21.5':
optional: true
+ '@esbuild/freebsd-arm64@0.25.10':
+ optional: true
+
'@esbuild/freebsd-arm64@0.25.8':
optional: true
'@esbuild/freebsd-x64@0.21.5':
optional: true
+ '@esbuild/freebsd-x64@0.25.10':
+ optional: true
+
'@esbuild/freebsd-x64@0.25.8':
optional: true
'@esbuild/linux-arm64@0.21.5':
optional: true
+ '@esbuild/linux-arm64@0.25.10':
+ optional: true
+
'@esbuild/linux-arm64@0.25.8':
optional: true
'@esbuild/linux-arm@0.21.5':
optional: true
+ '@esbuild/linux-arm@0.25.10':
+ optional: true
+
'@esbuild/linux-arm@0.25.8':
optional: true
'@esbuild/linux-ia32@0.21.5':
optional: true
+ '@esbuild/linux-ia32@0.25.10':
+ optional: true
+
'@esbuild/linux-ia32@0.25.8':
optional: true
'@esbuild/linux-loong64@0.21.5':
optional: true
+ '@esbuild/linux-loong64@0.25.10':
+ optional: true
+
'@esbuild/linux-loong64@0.25.8':
optional: true
'@esbuild/linux-mips64el@0.21.5':
optional: true
+ '@esbuild/linux-mips64el@0.25.10':
+ optional: true
+
'@esbuild/linux-mips64el@0.25.8':
optional: true
'@esbuild/linux-ppc64@0.21.5':
optional: true
+ '@esbuild/linux-ppc64@0.25.10':
+ optional: true
+
'@esbuild/linux-ppc64@0.25.8':
optional: true
'@esbuild/linux-riscv64@0.21.5':
optional: true
+ '@esbuild/linux-riscv64@0.25.10':
+ optional: true
+
'@esbuild/linux-riscv64@0.25.8':
optional: true
'@esbuild/linux-s390x@0.21.5':
optional: true
+ '@esbuild/linux-s390x@0.25.10':
+ optional: true
+
'@esbuild/linux-s390x@0.25.8':
optional: true
'@esbuild/linux-x64@0.21.5':
optional: true
+ '@esbuild/linux-x64@0.25.10':
+ optional: true
+
'@esbuild/linux-x64@0.25.8':
optional: true
+ '@esbuild/netbsd-arm64@0.25.10':
+ optional: true
+
'@esbuild/netbsd-arm64@0.25.8':
optional: true
'@esbuild/netbsd-x64@0.21.5':
optional: true
+ '@esbuild/netbsd-x64@0.25.10':
+ optional: true
+
'@esbuild/netbsd-x64@0.25.8':
optional: true
+ '@esbuild/openbsd-arm64@0.25.10':
+ optional: true
+
'@esbuild/openbsd-arm64@0.25.8':
optional: true
'@esbuild/openbsd-x64@0.21.5':
optional: true
+ '@esbuild/openbsd-x64@0.25.10':
+ optional: true
+
'@esbuild/openbsd-x64@0.25.8':
optional: true
+ '@esbuild/openharmony-arm64@0.25.10':
+ optional: true
+
'@esbuild/openharmony-arm64@0.25.8':
optional: true
'@esbuild/sunos-x64@0.21.5':
optional: true
+ '@esbuild/sunos-x64@0.25.10':
+ optional: true
+
'@esbuild/sunos-x64@0.25.8':
optional: true
'@esbuild/win32-arm64@0.21.5':
optional: true
+ '@esbuild/win32-arm64@0.25.10':
+ optional: true
+
'@esbuild/win32-arm64@0.25.8':
optional: true
'@esbuild/win32-ia32@0.21.5':
optional: true
+ '@esbuild/win32-ia32@0.25.10':
+ optional: true
+
'@esbuild/win32-ia32@0.25.8':
optional: true
'@esbuild/win32-x64@0.21.5':
optional: true
+ '@esbuild/win32-x64@0.25.10':
+ optional: true
+
'@esbuild/win32-x64@0.25.8':
optional: true
@@ -10033,6 +10439,11 @@ snapshots:
'@floating-ui/core': 1.7.3
'@floating-ui/utils': 0.2.10
+ '@floating-ui/dom@1.7.4':
+ dependencies:
+ '@floating-ui/core': 1.7.3
+ '@floating-ui/utils': 0.2.10
+
'@floating-ui/react-dom@2.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@floating-ui/dom': 1.7.3
@@ -10045,9 +10456,15 @@ snapshots:
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
+ '@floating-ui/react-dom@2.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@floating-ui/dom': 1.7.4
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+
'@floating-ui/utils@0.2.10': {}
- '@formatjs/intl-localematcher@0.6.1':
+ '@formatjs/intl-localematcher@0.6.2':
dependencies:
tslib: 2.8.1
@@ -10438,24 +10855,24 @@ snapshots:
jju: 1.4.0
js-yaml: 4.1.0
- '@mdx-js/esbuild@3.1.0(acorn@8.15.0)(esbuild@0.25.8)':
+ '@mdx-js/esbuild@3.1.0(esbuild@0.25.8)':
dependencies:
- '@mdx-js/mdx': 3.1.0(acorn@8.15.0)
+ '@mdx-js/mdx': 3.1.1
'@types/unist': 3.0.3
esbuild: 0.25.8
source-map: 0.7.6
vfile: 6.0.3
vfile-message: 4.0.3
transitivePeerDependencies:
- - acorn
- supports-color
- '@mdx-js/mdx@3.1.0(acorn@8.15.0)':
+ '@mdx-js/mdx@3.1.1':
dependencies:
'@types/estree': 1.0.8
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.4
'@types/mdx': 2.0.13
+ acorn: 8.15.0
collapse-white-space: 2.1.0
devlop: 1.1.0
estree-util-is-identifier-name: 3.0.0
@@ -10467,7 +10884,7 @@ snapshots:
recma-jsx: 1.0.1(acorn@8.15.0)
recma-stringify: 1.0.0
rehype-recma: 1.0.0
- remark-mdx: 3.1.0
+ remark-mdx: 3.1.1
remark-parse: 11.0.0
remark-rehype: 11.1.2
source-map: 0.7.6
@@ -10477,7 +10894,6 @@ snapshots:
unist-util-visit: 5.0.0
vfile: 6.0.3
transitivePeerDependencies:
- - acorn
- supports-color
'@modelcontextprotocol/sdk@1.17.2':
@@ -10726,7 +11142,7 @@ snapshots:
'@opentelemetry/semantic-conventions@1.36.0': {}
- '@orama/orama@3.1.11': {}
+ '@orama/orama@3.1.14': {}
'@oxc-transform/binding-darwin-arm64@0.53.0':
optional: true
@@ -10796,6 +11212,8 @@ snapshots:
'@radix-ui/primitive@1.1.2': {}
+ '@radix-ui/primitive@1.1.3': {}
+
'@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -10848,6 +11266,23 @@ snapshots:
'@types/react': 19.1.2
'@types/react-dom': 19.1.2(@types/react@19.1.2)
+ '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
'@radix-ui/react-alert-dialog@1.1.14(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/primitive': 1.1.2
@@ -11002,6 +11437,22 @@ snapshots:
'@types/react': 19.1.2
'@types/react-dom': 19.1.2(@types/react@19.1.2)
+ '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
'@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@18.3.1)
@@ -11122,6 +11573,28 @@ snapshots:
'@types/react': 19.1.2
'@types/react-dom': 19.1.2(@types/react@19.1.2)
+ '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0)
+ aria-hidden: 1.2.6
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ react-remove-scroll: 2.7.1(@types/react@19.1.2)(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
'@radix-ui/react-direction@1.1.1(@types/react@18.3.23)(react@18.3.1)':
dependencies:
react: 18.3.1
@@ -11160,6 +11633,19 @@ snapshots:
'@types/react': 19.1.2
'@types/react-dom': 19.1.2(@types/react@19.1.2)
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
'@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/primitive': 1.1.2
@@ -11202,6 +11688,12 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.2
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.2)(react@19.1.0)':
+ dependencies:
+ react: 19.1.0
+ optionalDependencies:
+ '@types/react': 19.1.2
+
'@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@18.3.1)
@@ -11430,6 +11922,28 @@ snapshots:
'@types/react': 19.1.2
'@types/react-dom': 19.1.2(@types/react@19.1.2)
+ '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
'@radix-ui/react-popover@1.1.14(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/primitive': 1.1.2
@@ -11476,6 +11990,29 @@ snapshots:
'@types/react': 19.1.2
'@types/react-dom': 19.1.2(@types/react@19.1.2)
+ '@radix-ui/react-popover@1.1.15(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0)
+ aria-hidden: 1.2.6
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ react-remove-scroll: 2.7.1(@types/react@19.1.2)(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
'@radix-ui/react-popper@1.2.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@floating-ui/react-dom': 2.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -11512,6 +12049,24 @@ snapshots:
'@types/react': 19.1.2
'@types/react-dom': 19.1.2(@types/react@19.1.2)
+ '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/rect': 1.1.1
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
'@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -11552,6 +12107,16 @@ snapshots:
'@types/react': 19.1.2
'@types/react-dom': 19.1.2(@types/react@19.1.2)
+ '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
'@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/react-slot': 1.2.3(@types/react@18.3.23)(react@18.3.1)
@@ -11660,6 +12225,40 @@ snapshots:
'@types/react': 19.1.2
'@types/react-dom': 19.1.2(@types/react@19.1.2)
+ '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
+ '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
'@radix-ui/react-scroll-area@1.2.9(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/number': 1.1.1
@@ -11884,6 +12483,22 @@ snapshots:
'@types/react': 19.1.2
'@types/react-dom': 19.1.2(@types/react@19.1.2)
+ '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.2
+ '@types/react-dom': 19.1.2(@types/react@19.1.2)
+
'@radix-ui/react-toast@1.2.14(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/primitive': 1.1.2
@@ -12245,9 +12860,9 @@ snapshots:
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
- '@shikijs/core@3.9.2':
+ '@shikijs/core@3.13.0':
dependencies:
- '@shikijs/types': 3.9.2
+ '@shikijs/types': 3.13.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
@@ -12258,9 +12873,9 @@ snapshots:
'@shikijs/vscode-textmate': 10.0.2
oniguruma-to-es: 2.3.0
- '@shikijs/engine-javascript@3.9.2':
+ '@shikijs/engine-javascript@3.13.0':
dependencies:
- '@shikijs/types': 3.9.2
+ '@shikijs/types': 3.13.0
'@shikijs/vscode-textmate': 10.0.2
oniguruma-to-es: 4.3.3
@@ -12269,25 +12884,25 @@ snapshots:
'@shikijs/types': 1.29.2
'@shikijs/vscode-textmate': 10.0.2
- '@shikijs/engine-oniguruma@3.9.2':
+ '@shikijs/engine-oniguruma@3.13.0':
dependencies:
- '@shikijs/types': 3.9.2
+ '@shikijs/types': 3.13.0
'@shikijs/vscode-textmate': 10.0.2
'@shikijs/langs@1.29.2':
dependencies:
'@shikijs/types': 1.29.2
- '@shikijs/langs@3.9.2':
+ '@shikijs/langs@3.13.0':
dependencies:
- '@shikijs/types': 3.9.2
+ '@shikijs/types': 3.13.0
- '@shikijs/rehype@3.9.2':
+ '@shikijs/rehype@3.13.0':
dependencies:
- '@shikijs/types': 3.9.2
+ '@shikijs/types': 3.13.0
'@types/hast': 3.0.4
hast-util-to-string: 3.0.1
- shiki: 3.9.2
+ shiki: 3.13.0
unified: 11.0.5
unist-util-visit: 5.0.0
@@ -12295,26 +12910,26 @@ snapshots:
dependencies:
'@shikijs/types': 1.29.2
- '@shikijs/themes@3.9.2':
+ '@shikijs/themes@3.13.0':
dependencies:
- '@shikijs/types': 3.9.2
+ '@shikijs/types': 3.13.0
'@shikijs/transformers@1.29.2':
dependencies:
'@shikijs/core': 1.29.2
'@shikijs/types': 1.29.2
- '@shikijs/transformers@3.9.2':
+ '@shikijs/transformers@3.13.0':
dependencies:
- '@shikijs/core': 3.9.2
- '@shikijs/types': 3.9.2
+ '@shikijs/core': 3.13.0
+ '@shikijs/types': 3.13.0
'@shikijs/types@1.29.2':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
- '@shikijs/types@3.9.2':
+ '@shikijs/types@3.13.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@@ -13496,17 +14111,16 @@ snapshots:
content-type@1.0.5: {}
- contentlayer2@0.4.6(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0):
+ contentlayer2@0.4.6(esbuild@0.25.8)(markdown-wasm@1.2.0):
dependencies:
- '@contentlayer2/cli': 0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
- '@contentlayer2/client': 0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
- '@contentlayer2/core': 0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
- '@contentlayer2/source-files': 0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
- '@contentlayer2/source-remote-files': 0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ '@contentlayer2/cli': 0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ '@contentlayer2/client': 0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ '@contentlayer2/core': 0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ '@contentlayer2/source-files': 0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ '@contentlayer2/source-remote-files': 0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)
'@contentlayer2/utils': 0.4.3
transitivePeerDependencies:
- '@effect-ts/otel-node'
- - acorn
- esbuild
- markdown-wasm
- supports-color
@@ -13682,6 +14296,10 @@ snapshots:
dependencies:
ms: 2.1.3
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
decamelize-keys@1.1.1:
dependencies:
decamelize: 1.2.0
@@ -14022,6 +14640,35 @@ snapshots:
'@esbuild/win32-ia32': 0.21.5
'@esbuild/win32-x64': 0.21.5
+ esbuild@0.25.10:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.10
+ '@esbuild/android-arm': 0.25.10
+ '@esbuild/android-arm64': 0.25.10
+ '@esbuild/android-x64': 0.25.10
+ '@esbuild/darwin-arm64': 0.25.10
+ '@esbuild/darwin-x64': 0.25.10
+ '@esbuild/freebsd-arm64': 0.25.10
+ '@esbuild/freebsd-x64': 0.25.10
+ '@esbuild/linux-arm': 0.25.10
+ '@esbuild/linux-arm64': 0.25.10
+ '@esbuild/linux-ia32': 0.25.10
+ '@esbuild/linux-loong64': 0.25.10
+ '@esbuild/linux-mips64el': 0.25.10
+ '@esbuild/linux-ppc64': 0.25.10
+ '@esbuild/linux-riscv64': 0.25.10
+ '@esbuild/linux-s390x': 0.25.10
+ '@esbuild/linux-x64': 0.25.10
+ '@esbuild/netbsd-arm64': 0.25.10
+ '@esbuild/netbsd-x64': 0.25.10
+ '@esbuild/openbsd-arm64': 0.25.10
+ '@esbuild/openbsd-x64': 0.25.10
+ '@esbuild/openharmony-arm64': 0.25.10
+ '@esbuild/sunos-x64': 0.25.10
+ '@esbuild/win32-arm64': 0.25.10
+ '@esbuild/win32-ia32': 0.25.10
+ '@esbuild/win32-x64': 0.25.10
+
esbuild@0.25.8:
optionalDependencies:
'@esbuild/aix-ppc64': 0.25.8
@@ -14822,10 +15469,10 @@ snapshots:
fumadocs-core@15.3.1(@types/react@19.1.2)(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
- '@formatjs/intl-localematcher': 0.6.1
- '@orama/orama': 3.1.11
- '@shikijs/rehype': 3.9.2
- '@shikijs/transformers': 3.9.2
+ '@formatjs/intl-localematcher': 0.6.2
+ '@orama/orama': 3.1.14
+ '@shikijs/rehype': 3.13.0
+ '@shikijs/transformers': 3.13.0
github-slugger: 2.0.0
hast-util-to-estree: 3.1.3
hast-util-to-jsx-runtime: 2.3.6
@@ -14835,7 +15482,7 @@ snapshots:
remark: 15.0.1
remark-gfm: 4.0.1
scroll-into-view-if-needed: 3.1.0
- shiki: 3.9.2
+ shiki: 3.13.0
unist-util-visit: 5.0.0
optionalDependencies:
next: 15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -14854,39 +15501,38 @@ snapshots:
unist-util-visit: 5.0.0
zod: 3.25.76
- fumadocs-mdx@11.6.3(acorn@8.15.0)(fumadocs-core@15.3.1(@types/react@19.1.2)(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)):
+ fumadocs-mdx@11.6.3(fumadocs-core@15.3.1(@types/react@19.1.2)(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)):
dependencies:
- '@mdx-js/mdx': 3.1.0(acorn@8.15.0)
+ '@mdx-js/mdx': 3.1.1
'@standard-schema/spec': 1.0.0
chokidar: 4.0.3
cross-spawn: 7.0.6
- esbuild: 0.25.8
+ esbuild: 0.25.10
estree-util-value-to-estree: 3.4.0
fast-glob: 3.3.3
fumadocs-core: 15.3.1(@types/react@19.1.2)(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
gray-matter: 4.0.3
js-yaml: 4.1.0
- lru-cache: 11.1.0
+ lru-cache: 11.2.2
next: 15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
picocolors: 1.1.1
unist-util-visit: 5.0.0
zod: 3.25.76
transitivePeerDependencies:
- - acorn
- supports-color
fumadocs-ui@15.3.1(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.11):
dependencies:
- '@radix-ui/react-accordion': 1.2.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-collapsible': 1.1.11(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-dialog': 1.1.14(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0)
- '@radix-ui/react-navigation-menu': 1.2.13(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-popover': 1.1.14(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-scroll-area': 1.2.9(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-slot': 1.2.3(@types/react@19.1.2)(react@19.1.0)
- '@radix-ui/react-tabs': 1.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
class-variance-authority: 0.7.1
fumadocs-core: 15.3.1(@types/react@19.1.2)(next@15.3.1(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
lodash.merge: 4.6.2
@@ -14895,7 +15541,7 @@ snapshots:
postcss-selector-parser: 7.1.0
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
- react-medium-image-zoom: 5.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react-medium-image-zoom: 5.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react-remove-scroll: 2.7.1(@types/react@19.1.2)(react@19.1.0)
tailwind-merge: 3.3.1
optionalDependencies:
@@ -15859,7 +16505,7 @@ snapshots:
lru-cache@10.4.3: {}
- lru-cache@11.1.0: {}
+ lru-cache@11.2.2: {}
lru-cache@4.1.5:
dependencies:
@@ -16125,12 +16771,12 @@ snapshots:
unist-util-is: 5.2.1
unist-util-visit: 4.1.2
- mdx-bundler@10.1.1(acorn@8.15.0)(esbuild@0.25.8):
+ mdx-bundler@10.1.1(esbuild@0.25.8):
dependencies:
'@babel/runtime': 7.28.2
'@esbuild-plugins/node-resolve': 0.2.2(esbuild@0.25.8)
'@fal-works/esbuild-plugin-global-externals': 2.1.2
- '@mdx-js/esbuild': 3.1.0(acorn@8.15.0)(esbuild@0.25.8)
+ '@mdx-js/esbuild': 3.1.0(esbuild@0.25.8)
esbuild: 0.25.8
gray-matter: 4.0.3
remark-frontmatter: 5.0.0
@@ -16138,7 +16784,6 @@ snapshots:
uuid: 9.0.1
vfile: 6.0.3
transitivePeerDependencies:
- - acorn
- supports-color
media-typer@1.1.0: {}
@@ -16555,7 +17200,7 @@ snapshots:
micromark@4.0.2:
dependencies:
'@types/debug': 4.1.12
- debug: 4.4.1
+ debug: 4.4.3
decode-named-character-reference: 1.2.0
devlop: 1.1.0
micromark-core-commonmark: 2.0.3
@@ -16726,17 +17371,16 @@ snapshots:
netmask@2.0.2: {}
- next-contentlayer2@0.4.6(acorn@8.15.0)(contentlayer2@0.4.6(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0))(esbuild@0.25.8)(markdown-wasm@1.2.0)(next@14.3.0-canary.43(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next-contentlayer2@0.4.6(contentlayer2@0.4.6(esbuild@0.25.8)(markdown-wasm@1.2.0))(esbuild@0.25.8)(markdown-wasm@1.2.0)(next@14.3.0-canary.43(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- '@contentlayer2/core': 0.4.3(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ '@contentlayer2/core': 0.4.3(esbuild@0.25.8)(markdown-wasm@1.2.0)
'@contentlayer2/utils': 0.4.3
- contentlayer2: 0.4.6(acorn@8.15.0)(esbuild@0.25.8)(markdown-wasm@1.2.0)
+ contentlayer2: 0.4.6(esbuild@0.25.8)(markdown-wasm@1.2.0)
next: 14.3.0-canary.43(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
transitivePeerDependencies:
- '@effect-ts/otel-node'
- - acorn
- esbuild
- markdown-wasm
- supports-color
@@ -17108,12 +17752,12 @@ snapshots:
path-scurry@2.0.0:
dependencies:
- lru-cache: 11.1.0
+ lru-cache: 11.2.2
minipass: 7.1.2
path-to-regexp@6.3.0: {}
- path-to-regexp@8.2.0: {}
+ path-to-regexp@8.3.0: {}
path-type@4.0.0: {}
@@ -17426,7 +18070,7 @@ snapshots:
react-is@18.3.1: {}
- react-medium-image-zoom@5.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ react-medium-image-zoom@5.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
@@ -17815,7 +18459,7 @@ snapshots:
unified: 11.0.5
yaml: 2.8.1
- remark-mdx@3.1.0:
+ remark-mdx@3.1.1:
dependencies:
mdast-util-mdx: 3.0.0
micromark-extension-mdxjs: 3.0.0
@@ -17963,7 +18607,7 @@ snapshots:
depd: 2.0.0
is-promise: 4.0.0
parseurl: 1.3.3
- path-to-regexp: 8.2.0
+ path-to-regexp: 8.3.0
transitivePeerDependencies:
- supports-color
@@ -18186,14 +18830,14 @@ snapshots:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
- shiki@3.9.2:
+ shiki@3.13.0:
dependencies:
- '@shikijs/core': 3.9.2
- '@shikijs/engine-javascript': 3.9.2
- '@shikijs/engine-oniguruma': 3.9.2
- '@shikijs/langs': 3.9.2
- '@shikijs/themes': 3.9.2
- '@shikijs/types': 3.9.2
+ '@shikijs/core': 3.13.0
+ '@shikijs/engine-javascript': 3.13.0
+ '@shikijs/engine-oniguruma': 3.13.0
+ '@shikijs/langs': 3.13.0
+ '@shikijs/themes': 3.13.0
+ '@shikijs/types': 3.13.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4