{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "input",
  "title": "Input",
  "description": "RN TextInput 기반 유니버설 입력창 — forwardRef로 focus()/blur() 노출, 웹 관용 disabled prop 치환 지원.",
  "dependencies": [
    "@unikit-bridge/ui",
    "class-variance-authority",
    "clsx",
    "tailwind-merge",
    "tailwindcss"
  ],
  "registryDependencies": [
    "utils"
  ],
  "files": [
    {
      "path": "registry/ui/input.tsx",
      "content": "// Input — docs/sdd/02-design.md v2 §3.3 그대로.\n// forwardRef로 입력 인스턴스（focus（）·blur（））를 노출 — §3.4 Label의\n// onPress → ref.focus（） 라벨-입력창 클릭 연결용.\nimport { forwardRef } from \"react\";\nimport {\n  TextInput,\n  type BridgeTextInputRef,\n  type TextInputProps,\n} from \"@unikit-bridge/ui/primitives\";\nimport { cva } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\n// 원본 base 값 정비（사이클 71）: h-9·px-3 py-1·min-w-0·shadow-xs·selection·md:text-sm.\n// 미지원（로드맵）: file:*（file 입력 없음）·aria-invalid:*（InputGroup 경유 처리）.\n// dark:bg-input/30은 원본 자체 클래스（다크 입력 가시성 보정 — checkbox와 같은 사례）.\n// web:md:text-sm은 웹 한정 — 네이티브는 상시 text-base（브리지 텍스트 스케일 규약）.\n//   제한은 위 라인 외에 별도 분기 없음（G3 리뷰 지적 반영 기록）.\n// focus 링은 원본 규격（ring-3 · ring-ring/50 · 무오프셋）을 준수한다（사이클 72）\n// — 무접두 유지: uniwind가 ring을 네이티브 box-shadow로 구동해 네이티브 링이 보존된다.\nconst inputVariants = cva(\n  \"font-sans h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base text-foreground web:transition-all web:outline-none web:selection:bg-primary web:selection:text-primary-foreground web:md:text-sm web:disabled:cursor-not-allowed placeholder:text-muted-foreground dark:bg-input/30 focus:border-ring focus:ring-3 focus:ring-ring/50 web:focus-visible:border-ring disabled:opacity-50\",\n);\n\n// InputProps — TextInputProps 그대로. 웹 관용 disabled의 치환 계약\n// （native: 아래 editable={false} · web: input［disabled］ + aria-disabled）은\n// bridge/types.ts의 disabled 주석이 단일 출처다.\nexport type InputProps = TextInputProps;\n\nconst Input = forwardRef<BridgeTextInputRef, InputProps>(\n  ({ className, disabled, editable, ...props }, ref) => (\n    <TextInput\n      ref={ref}\n      editable={disabled ? false : editable}\n      aria-disabled={disabled ? true : undefined}\n      className={cn(inputVariants(), className)}\n      {...props}\n      // 브리지 계약에는 editable 치환으로 이미 반영됐으므로 disabled는 그대로 전달\n      // （웹 input［disabled］ · RN은 위 editable={false}가 차단）\n      disabled={disabled}\n    />\n  ),\n);\nInput.displayName = \"Input\";\n\nexport { Input, inputVariants };\n",
      "type": "registry:ui",
      "target": "components/unikit/input.tsx"
    }
  ],
  "type": "registry:ui"
}
