{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "rhf-fields-04",
  "title": "Slider",
  "description": "Numeric slider bound via Controller, validated against a Zod range.",
  "dependencies": [
    "react-hook-form",
    "@hookform/resolvers",
    "zod",
    "sonner"
  ],
  "registryDependencies": [
    "field",
    "slider",
    "button"
  ],
  "files": [
    {
      "path": "registry/forms/react-hook-form/fields/rhf-fields-04.tsx",
      "content": "'use client'\n\nimport { Controller, useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { toast } from 'sonner'\nimport * as z from 'zod'\n\nimport { Button } from '@/components/ui/button'\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldGroup,\n  FieldLabel,\n} from '@/components/ui/field'\nimport { Slider } from '@/components/ui/slider'\n\nconst formSchema = z.object({\n  budget: z\n    .number()\n    .min(10, 'Budget must be at least $10.')\n    .max(100, 'Budget cannot exceed $100.'),\n})\n\ntype FormValues = z.infer<typeof formSchema>\n\nexport function RhfFields04() {\n  const form = useForm<FormValues>({\n    resolver: zodResolver(formSchema),\n    defaultValues: { budget: 0 },\n  })\n\n  function onSubmit(data: FormValues) {\n    toast.success('Budget set', { description: `$${data.budget} / month` })\n  }\n\n  return (\n    <form\n      onSubmit={form.handleSubmit(onSubmit)}\n      className=\"flex w-full max-w-sm flex-col gap-6\"\n    >\n      <FieldGroup>\n        <Controller\n          control={form.control}\n          name=\"budget\"\n          render={({ field, fieldState }) => (\n            <Field data-invalid={fieldState.invalid}>\n              <FieldContent>\n                <FieldLabel htmlFor=\"rhf-fields-04-budget\">\n                  Monthly budget\n                </FieldLabel>\n                <FieldDescription>${field.value} / month</FieldDescription>\n              </FieldContent>\n              <Slider\n                id=\"rhf-fields-04-budget\"\n                min={0}\n                max={100}\n                step={5}\n                value={[field.value]}\n                onValueChange={(v) => field.onChange((v as number[])[0])}\n                aria-invalid={fieldState.invalid}\n              />\n              {fieldState.invalid && <FieldError errors={[fieldState.error]} />}\n            </Field>\n          )}\n        />\n      </FieldGroup>\n      <Button type=\"submit\" size=\"sm\">\n        Save\n      </Button>\n    </form>\n  )\n}\n",
      "type": "registry:component",
      "target": "components/flx/forms/react-hook-form/rhf-fields-04.tsx"
    }
  ],
  "type": "registry:block"
}