"use client"
import { zodResolver } from "@hookform/resolvers/zod"
import { Controller, useForm } from "react-hook-form"
import { toast } from "sonner"
import { z } from "zod"
import { Button } from "@/registry/new-york/ui/button"
import {
Field,
FieldDescription,
FieldError,
FieldLabel,
} from "@/registry/new-york/ui/field"
import { Input } from "@/registry/new-york/ui/input"
const FormSchema = z.object({
username: z.string().min(2, {
message: "Username must be at least 2 characters.",
}),
})
export default function InputForm() {
const form = useForm<z.infer<typeof FormSchema>>({
resolver: zodResolver(FormSchema),
defaultValues: {
username: "",
},
})
function onSubmit(data: z.infer<typeof FormSchema>) {
toast("You submitted the following values", {
description: (
<pre className="mt-2 w-[320px] rounded-md bg-neutral-950 p-4">
<code className="text-white">{JSON.stringify(data, null, 2)}</code>
</pre>
),
})
}
return (
<form onSubmit={form.handleSubmit(onSubmit)} className="w-2/3 space-y-6">
<Controller
control={form.control}
name="username"
render={({ field, fieldState }) => {
const inputId = "input-form-username"
return (
<Field data-invalid={fieldState.invalid} className="flex flex-col">
<FieldLabel htmlFor={inputId}>Username</FieldLabel>
<Input
id={inputId}
placeholder="shadcn"
aria-invalid={fieldState.invalid}
{...field}
/>
<FieldDescription>
This is your public display name.
</FieldDescription>
{fieldState.invalid && <FieldError errors={[fieldState.error]} />}
</Field>
)
}}
/>
<Button type="submit">Submit</Button>
</form>
)
}