{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "select-editor-demo",
  "title": "Select Editor Form",
  "description": "A form with a select editor component for managing labels.",
  "dependencies": [
    "@platejs/tag"
  ],
  "registryDependencies": [
    "form",
    "button",
    "https://platejs.org/r/select-editor.json"
  ],
  "files": [
    {
      "path": "src/registry/examples/select-editor-demo.tsx",
      "content": "'use client';\n\nimport * as React from 'react';\nimport { useForm, useWatch } from 'react-hook-form';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { CheckIcon, PlusIcon } from 'lucide-react';\nimport * as z from 'zod';\n\nimport { Button } from '@/components/ui/button';\nimport {\n  Form,\n  FormControl,\n  FormField,\n  FormItem,\n  FormMessage,\n} from '@/components/ui/form';\nimport {\n  type SelectItem,\n  SelectEditor,\n  SelectEditorCombobox,\n  SelectEditorContent,\n  SelectEditorInput,\n} from '@/registry/ui/select-editor';\n\nconst LABELS = [\n  { url: '/docs/components/editor', value: 'Editor' },\n  { url: '/docs/components/select-editor', value: 'Select Editor' },\n  { url: '/docs/components/block-selection', value: 'Block Selection' },\n  { url: '/docs/components/button', value: 'Button' },\n  { url: '/docs/components/command', value: 'Command' },\n  { url: '/docs/components/dialog', value: 'Dialog' },\n  { url: '/docs/components/form', value: 'Form' },\n  { url: '/docs/components/input', value: 'Input' },\n  { url: '/docs/components/label', value: 'Label' },\n  { url: '/docs/components/popover', value: 'Popover' },\n  { url: '/docs/components/tag-node', value: 'Tag Element' },\n] satisfies (SelectItem & { url: string })[];\n\nconst formSchema = z.object({\n  labels: z\n    .array(\n      z.object({\n        value: z.string(),\n      })\n    )\n    .min(1, 'Select at least one label')\n    .max(10, 'Select up to 10 labels'),\n});\n\ntype FormValues = z.infer<typeof formSchema>;\n\nexport default function EditorSelectForm() {\n  const [readOnly, setReadOnly] = React.useState(false);\n  const form = useForm<FormValues>({\n    defaultValues: {\n      labels: [LABELS[0]],\n    },\n    resolver: zodResolver(formSchema),\n  });\n\n  const labels = useWatch({ control: form.control, name: 'labels' });\n\n  return (\n    <div className=\"mx-auto w-full max-w-2xl space-y-8 p-11 pt-24 pl-2\">\n      <Form {...form}>\n        <div className=\"space-y-6\">\n          <FormField\n            name=\"labels\"\n            control={form.control}\n            render={({ field }) => (\n              <FormItem>\n                <div className=\"flex items-start gap-2\">\n                  <Button\n                    variant=\"ghost\"\n                    className=\"h-10\"\n                    onClick={() => setReadOnly(!readOnly)}\n                    type=\"button\"\n                  >\n                    {readOnly ? (\n                      <PlusIcon className=\"size-4\" />\n                    ) : (\n                      <CheckIcon className=\"size-4\" />\n                    )}\n                  </Button>\n\n                  {readOnly && labels.length === 0 ? (\n                    <Button\n                      size=\"lg\"\n                      variant=\"ghost\"\n                      className=\"h-10\"\n                      onClick={() => {\n                        setReadOnly(false);\n                      }}\n                      type=\"button\"\n                    >\n                      Add labels\n                    </Button>\n                  ) : (\n                    <FormControl>\n                      <SelectEditor\n                        value={field.value}\n                        onValueChange={readOnly ? undefined : field.onChange}\n                        items={LABELS}\n                      >\n                        <SelectEditorContent>\n                          <SelectEditorInput\n                            readOnly={readOnly}\n                            placeholder={\n                              readOnly ? 'Empty' : 'Select labels...'\n                            }\n                          />\n                          {!readOnly && <SelectEditorCombobox />}\n                        </SelectEditorContent>\n                      </SelectEditor>\n                    </FormControl>\n                  )}\n                </div>\n                <FormMessage />\n              </FormItem>\n            )}\n          />\n        </div>\n      </Form>\n    </div>\n  );\n}\n",
      "type": "registry:example"
    }
  ],
  "meta": {
    "docs": [
      {
        "route": "/docs/multi-select"
      }
    ]
  },
  "type": "registry:example"
}