{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "item",
  "title": "Item",
  "description": "리스트 아이템 카드 — media·내용·행동·구분·머리/바닥 10종, variant(default/outline/muted) × size(default/sm).",
  "dependencies": [
    "@unikit-bridge/ui",
    "class-variance-authority",
    "clsx",
    "tailwind-merge",
    "tailwindcss"
  ],
  "registryDependencies": [
    "utils"
  ],
  "files": [
    {
      "path": "registry/ui/item.tsx",
      "content": "// Item — shadcn/ui new-york-v4 item（193줄）을 UniKit UI 유니버설로 이식.\n//\n// 포팅 판단:\n// - asChild（radix Slot） 제거 — View 렌더 고정.\n// - data-variant/data-size 속성·group/item·group-has-·［&_svg］·［&>a］ 셀렉터\n//   제거（네이티브에 data 속성 없음）. 토큰은 cva 변형으로 그대로 보존.\n// - ItemMedia는 순수 컨테이너 — 소비자가 글리프 Text 또는 Image를 넣는다\n//   （이중 지정: 글리프 색·크기는 소비자 Text에 명시）. image 변형의\n//   ［&_img］:size-full은 내부 Image에 직접 지정하도록 안내로 대체.\n// - line-clamp-2·text-balance는 웹 전용 → web: 접두（네이티브은 전문 전체 표시）.\n// - ItemSeparator는 인라인 View（h-px bg-border） — 원본 Separator 대리\n//   （신규 파일 6종 제한）.\n// - focus-visible 링·transition은 웹 전용 → web: 접두.\nimport { forwardRef } from \"react\";\nimport {\n  Text,\n  View,\n  type BridgeTextRef,\n  type BridgeViewRef,\n  type TextProps,\n  type ViewProps,\n} from \"@unikit-bridge/ui/primitives\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\n// ---------------------------------------------------------------------------\n// ItemGroup — 리스트 묶음（role=\"list\"）.\n// ---------------------------------------------------------------------------\nexport type ItemGroupProps = ViewProps;\n\nconst ItemGroup = forwardRef<BridgeViewRef, ItemGroupProps>(\n  ({ className, ...props }, ref) => (\n    <View\n      ref={ref}\n      accessibilityRole=\"list\"\n      className={cn(\"flex flex-col\", className)}\n      {...props}\n    />\n  ),\n);\nItemGroup.displayName = \"ItemGroup\";\n\n// ---------------------------------------------------------------------------\n// ItemSeparator — 항목 사이 가로 구분선（원본 Separator 대리）.\n// ---------------------------------------------------------------------------\nexport type ItemSeparatorProps = ViewProps;\n\nconst ItemSeparator = forwardRef<BridgeViewRef, ItemSeparatorProps>(\n  ({ className, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(\"h-px w-full bg-border\", className)}\n      {...props}\n    />\n  ),\n);\nItemSeparator.displayName = \"ItemSeparator\";\n\n// ---------------------------------------------------------------------------\n// Item — 리스트 아이템 카드（원본 변형·토큰 그대로）.\n// ---------------------------------------------------------------------------\nconst itemVariants = cva(\n  // 원본은 브라우저 flex-direction:row 기본 의존 — 브리지 flex-col 기본 대응으로\n  // flex-row를 명시해 media·content·actions가 가로로 배치되게 한다.\n  \"flex flex-row flex-wrap items-center rounded-md border border-transparent text-sm web:transition-colors web:duration-100 web:outline-none web:focus-visible:border-ring web:focus-visible:ring-3 web:focus-visible:ring-ring/50\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-transparent\",\n        outline: \"border-border\",\n        muted: \"bg-muted/50\",\n      },\n      size: {\n        default: \"gap-4 p-4\",\n        sm: \"gap-2.5 px-4 py-3\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  },\n);\n\nexport type ItemProps = ViewProps & VariantProps<typeof itemVariants>;\n\nconst Item = forwardRef<BridgeViewRef, ItemProps>(\n  ({ className, variant, size, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(itemVariants({ variant, size }), className)}\n      {...props}\n    />\n  ),\n);\nItem.displayName = \"Item\";\n\n// ---------------------------------------------------------------------------\n// ItemMedia — 미디어 영역（글리프 Text 또는 Image를 소비자가 선택）.\n// ---------------------------------------------------------------------------\nconst itemMediaVariants = cva(\n  \"flex flex-row shrink-0 items-center justify-center gap-2\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-transparent\",\n        icon: \"size-8 rounded-sm border border-border bg-muted\",\n        image: \"size-10 overflow-hidden rounded-sm\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  },\n);\n\nexport type ItemMediaProps = ViewProps &\n  VariantProps<typeof itemMediaVariants>;\n\nconst ItemMedia = forwardRef<BridgeViewRef, ItemMediaProps>(\n  ({ className, variant, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(itemMediaVariants({ variant }), className)}\n      {...props}\n    />\n  ),\n);\nItemMedia.displayName = \"ItemMedia\";\n\n// ---------------------------------------------------------------------------\n// ItemContent — 제목·설명 본문 영역.\n// ---------------------------------------------------------------------------\nexport type ItemContentProps = ViewProps;\n\nconst ItemContent = forwardRef<BridgeViewRef, ItemContentProps>(\n  ({ className, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(\"flex flex-1 flex-col gap-1\", className)}\n      {...props}\n    />\n  ),\n);\nItemContent.displayName = \"ItemContent\";\n\n// ---------------------------------------------------------------------------\n// ItemTitle — 항목 제목（원본 flex/gap는 Text 레이아웃이라 제거, 토큰만 유지）.\n// ---------------------------------------------------------------------------\nexport type ItemTitleProps = TextProps;\n\nconst ItemTitle = forwardRef<BridgeTextRef, ItemTitleProps>(\n  ({ className, ...props }, ref) => (\n    <Text\n      ref={ref}\n      className={cn(\n        \"w-fit font-sans text-sm font-medium leading-snug text-foreground\",\n        className,\n      )}\n      {...props}\n    />\n  ),\n);\nItemTitle.displayName = \"ItemTitle\";\n\n// ---------------------------------------------------------------------------\n// ItemDescription — 항목 보조 설명.\n// ---------------------------------------------------------------------------\nexport type ItemDescriptionProps = TextProps;\n\nconst ItemDescription = forwardRef<BridgeTextRef, ItemDescriptionProps>(\n  ({ className, ...props }, ref) => (\n    <Text\n      ref={ref}\n      className={cn(\n        \"font-sans text-sm font-normal leading-normal text-muted-foreground web:line-clamp-2 web:text-balance\",\n        className,\n      )}\n      {...props}\n    />\n  ),\n);\nItemDescription.displayName = \"ItemDescription\";\n\n// ---------------------------------------------------------------------------\n// ItemActions — 우측 액션 영역.\n// ---------------------------------------------------------------------------\nexport type ItemActionsProps = ViewProps;\n\nconst ItemActions = forwardRef<BridgeViewRef, ItemActionsProps>(\n  ({ className, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(\"flex flex-row items-center gap-2\", className)}\n      {...props}\n    />\n  ),\n);\nItemActions.displayName = \"ItemActions\";\n\n// ---------------------------------------------------------------------------\n// ItemHeader — 항목 헤더（basis-full로 첫 줄을 차지）.\n// ---------------------------------------------------------------------------\nexport type ItemHeaderProps = ViewProps;\n\nconst ItemHeader = forwardRef<BridgeViewRef, ItemHeaderProps>(\n  ({ className, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(\n        \"flex flex-row basis-full items-center justify-between gap-2\",\n        className,\n      )}\n      {...props}\n    />\n  ),\n);\nItemHeader.displayName = \"ItemHeader\";\n\n// ---------------------------------------------------------------------------\n// ItemFooter — 항목 푸터（헤더와 동일 구조）.\n// ---------------------------------------------------------------------------\nexport type ItemFooterProps = ViewProps;\n\nconst ItemFooter = forwardRef<BridgeViewRef, ItemFooterProps>(\n  ({ className, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(\n        \"flex flex-row basis-full items-center justify-between gap-2\",\n        className,\n      )}\n      {...props}\n    />\n  ),\n);\nItemFooter.displayName = \"ItemFooter\";\n\nexport {\n  Item,\n  ItemMedia,\n  ItemContent,\n  ItemActions,\n  ItemGroup,\n  ItemSeparator,\n  ItemTitle,\n  ItemDescription,\n  ItemHeader,\n  ItemFooter,\n};\n",
      "type": "registry:ui",
      "target": "components/unikit/item.tsx"
    }
  ],
  "type": "registry:ui"
}
