{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "switch",
  "title": "SwitchField",
  "description": "Switch field for BuzzForm v2.",
  "registryDependencies": [
    "@buzzform/init",
    "switch",
    "field"
  ],
  "files": [
    {
      "path": "registry/shadcn/fields/switch.tsx",
      "content": "\"use client\";\n\nimport type { SwitchField as SwitchFieldDef } from \"@buildnbuzz/form-react\";\nimport { useDataField } from \"@buildnbuzz/form-react\";\nimport { Switch } from \"@/components/ui/switch\";\nimport {\n  Field,\n  FieldContent,\n  FieldDescription,\n  FieldError,\n  FieldGroup,\n  FieldLabel,\n} from \"@/components/ui/field\";\nimport { cn } from \"@/lib/utils\";\n\ninterface SwitchUi {\n  alignment?: \"start\" | \"end\" | \"between\";\n  autoFocus?: boolean;\n  asterisk?: boolean;\n}\n\nexport function SwitchField() {\n  const {\n    fieldApi,\n    field,\n    isDisabled,\n    isReadOnly,\n    isRequired,\n    label,\n    description,\n    errors,\n    isInvalid,\n    descriptionId,\n    errorId,\n    ariaDescribedBy,\n    handleChange,\n    handleBlur,\n  } = useDataField<SwitchFieldDef>();\n\n  const value = (fieldApi.state.value as boolean) ?? false;\n  const ui = field.ui as SwitchUi | undefined;\n  const alignment = ui?.alignment ?? \"between\";\n\n  const switchElement = (\n    <Switch\n      id={fieldApi.name}\n      checked={value}\n      onCheckedChange={(checked) => {\n        if (isReadOnly) return;\n        handleChange(checked);\n        handleBlur();\n      }}\n      disabled={isDisabled}\n      aria-invalid={isInvalid}\n      aria-describedby={ariaDescribedBy}\n      aria-readonly={isReadOnly}\n      autoFocus={ui?.autoFocus}\n    />\n  );\n\n  const contentElement = (\n    <FieldContent className={alignment === \"between\" ? \"flex-1\" : undefined}>\n      {label && (\n        <FieldLabel\n          htmlFor={fieldApi.name}\n          className=\"cursor-pointer m-0 font-normal flex-none gap-1 items-baseline\"\n        >\n          {isRequired && ui?.asterisk !== false && (\n            <span className=\"text-destructive\">*</span>\n          )}\n          {label}\n        </FieldLabel>\n      )}\n\n      {description && !isInvalid && (\n        <FieldDescription id={descriptionId}>{description}</FieldDescription>\n      )}\n\n      {isInvalid && <FieldError id={errorId} errors={errors} />}\n    </FieldContent>\n  );\n\n  return (\n    <FieldGroup data-field={fieldApi.name}>\n      <Field\n        orientation=\"horizontal\"\n        className={cn(alignment === \"between\" && \"w-full justify-between\")}\n        data-invalid={isInvalid}\n        data-disabled={isDisabled}\n      >\n        {alignment === \"start\" && (\n          <>\n            {switchElement}\n            {contentElement}\n          </>\n        )}\n        {(alignment === \"end\" || alignment === \"between\") && (\n          <>\n            {contentElement}\n            {switchElement}\n          </>\n        )}\n      </Field>\n    </FieldGroup>\n  );\n}\n",
      "type": "registry:component",
      "target": "components/buzzform/fields/switch.tsx"
    }
  ],
  "type": "registry:ui"
}