{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "badge",
  "title": "Badge",
  "description": "RN View/Text 기반 유니버설 배지 — 변형 4종(default/secondary/destructive/outline), 이중 지정 원칙(배경 View·전경 Text) 적용.",
  "dependencies": [
    "@unikit-bridge/ui",
    "class-variance-authority",
    "clsx",
    "tailwind-merge",
    "tailwindcss"
  ],
  "registryDependencies": [
    "utils"
  ],
  "files": [
    {
      "path": "registry/ui/badge.tsx",
      "content": "// Badge — shadcn/ui new-york-v4 badge를 UniKit UI 유니버설로 이식（사이클 71 원본값 정비）.\n// 이중 지정 원칙（§0.5）: 배경·테두리는 View, 전경색은 내부 Text에 명시（Button과 동일 패턴）.\n// 미지원（로드맵）: ［a&］:hover:*（링크 래퍼 조건 — 뱃지는 Pressable이 아니어서 hover\n// 배경·전경 전환·hover 밑줄이 없다）·aria-invalid:*（invalid 상태 없음）·\n// ［&>svg］:size-3（아이콘은 글리프 Text）·dark:*（다크는 토큰 값 전환 아키텍처）.\n// focus 링은 없다 — Badge는 Pressable이 아니어서 스스로 포커스를 받지 않고, 원본의\n// focus-visible:ring-［3px］도 포커스 가능 래퍼（a/button）를 통해서만 발동한다（사이클 72 정정）.\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// View（컨테이너） — 원본 w-fit은 uniwind 미지원 → self-start 치환（M-2 규약）.\nconst badgeVariants = cva(\n  \"flex flex-row self-start shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 web:transition-all\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary\",\n        secondary: \"bg-secondary\",\n        destructive: \"bg-destructive\",\n        outline: \"border-border\",\n        ghost: \"\",\n        link: \"\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  },\n);\n\n// 내부 Text — 원본 text-xs font-medium. link의 밑줄은 원본대로 hover에서만\n// （네이티브는 hover가 없어 밑줄이 없다 — 상시 밑줄은 소비자가 underline 추가）.\nconst badgeTextVariants = cva(\n  \"font-sans text-xs font-medium web:whitespace-nowrap\",\n  {\n    variants: {\n      variant: {\n        default: \"text-primary-foreground\",\n        secondary: \"text-secondary-foreground\",\n        // 원본 text-white의 토큰 동등물（--destructive-foreground = 98% 백색）.\n        destructive: \"text-destructive-foreground\",\n        outline: \"text-foreground\",\n        ghost: \"text-foreground\",\n        link: \"text-primary underline-offset-4 web:hover:underline\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  },\n);\n\nexport type BadgeProps = ViewProps & VariantProps<typeof badgeVariants>;\n\nconst Badge = forwardRef<BridgeViewRef, BadgeProps>(\n  ({ className, variant, children, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(badgeVariants({ variant }), className)}\n      {...props}\n    >\n      <Text className={cn(badgeTextVariants({ variant }))}>{children}</Text>\n    </View>\n  ),\n);\nBadge.displayName = \"Badge\";\n\nexport { Badge, badgeVariants, badgeTextVariants };\n",
      "type": "registry:ui",
      "target": "components/unikit/badge.tsx"
    }
  ],
  "type": "registry:ui"
}
