{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "empty",
  "title": "Empty",
  "description": "빈 상태 안내 — Media(큰 글리프)·Title·Description·Header·Content 6종 레이아웃.",
  "dependencies": [
    "@unikit-bridge/ui",
    "class-variance-authority",
    "clsx",
    "tailwind-merge",
    "tailwindcss"
  ],
  "registryDependencies": [
    "utils"
  ],
  "files": [
    {
      "path": "registry/ui/empty.tsx",
      "content": "// Empty — shadcn/ui new-york-v4 empty를 UniKit UI 유니버설로 이식.\n//\n// 포팅 판단:\n// - 단순 레이아웃 컴포넌트군 — 엔진 의존이 없어 구조·토큰을 그대로 옮기고\n//   data-slot 속성과 ［&_svg］·［&>a］ 자식 셀렉터만 제거했다.\n// - EmptyMedia의 아이콘: 원본 svg 대신 큰 글리프（⊕ ⬚ ◻ 등）를 내부 Text로\n//   렌더한다（아이콘 금지 규칙）. children에 문자열을 넘긴다.\n// - 텍스트 정렬（text-center）은 웹은 상속되지만 네이티브은 되지 않으므로\n//   Title/Description Text에 직접 지정한다（루트의 text-center는 웹 중첩\n//   자식용으로 유지 — 네이티브 View에서는 무해한 no-op）.\n// - text-balance·md: 반응형 패딩은 웹 전용 → web: 접두.\nimport { forwardRef, type ReactNode } 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// Empty — 빈 상태 컨테이너（원본 border-dashed 토큰 보존 — 테두리 굵기는\n// 소비자 className으로 지정하는 원본 사용법과 동일）.\nexport type EmptyProps = ViewProps;\n\nconst Empty = forwardRef<BridgeViewRef, EmptyProps>(\n  ({ className, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(\n        \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center web:text-balance web:md:p-12\",\n        className,\n      )}\n      {...props}\n    />\n  ),\n);\nEmpty.displayName = \"Empty\";\n\n// EmptyHeader — 제목·설명 묶음.\nexport type EmptyHeaderProps = ViewProps;\n\nconst EmptyHeader = forwardRef<BridgeViewRef, EmptyHeaderProps>(\n  ({ className, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(\n        \"flex max-w-sm flex-col items-center gap-2 text-center\",\n        className,\n      )}\n      {...props}\n    />\n  ),\n);\nEmptyHeader.displayName = \"EmptyHeader\";\n\n// EmptyMedia — 글리프 아이콘 영역. icon 변형은 원본 bg-muted 상자（size-10）를\n// 유지하고, 글리프 크기（text-2xl ≈ 원본 svg size-6）·색은 내부 Text에 명시.\nconst emptyMediaVariants = cva(\n  \"mb-2 flex shrink-0 items-center justify-center\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-transparent\",\n        icon: \"size-10 rounded-lg bg-muted\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  },\n);\n\nexport type EmptyMediaProps = ViewProps &\n  VariantProps<typeof emptyMediaVariants> & {\n    /** 큰 글리프 문자열（⊕ ⬚ ◻ 등） — svg 아이콘 치환 */\n    children?: ReactNode;\n  };\n\nconst EmptyMedia = forwardRef<BridgeViewRef, EmptyMediaProps>(\n  ({ className, variant, children, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(emptyMediaVariants({ variant }), className)}\n      {...props}\n    >\n      <Text className=\"font-sans text-2xl leading-none text-foreground\">\n        {children}\n      </Text>\n    </View>\n  ),\n);\nEmptyMedia.displayName = \"EmptyMedia\";\n\n// EmptyTitle — 빈 상태 제목（원본 text-lg font-medium tracking-tight）.\nexport type EmptyTitleProps = TextProps & {\n  children?: ReactNode;\n};\n\nconst EmptyTitle = forwardRef<BridgeTextRef, EmptyTitleProps>(\n  ({ className, ...props }, ref) => (\n    <Text\n      ref={ref}\n      className={cn(\n        \"font-sans text-lg font-medium text-foreground text-center web:tracking-tight\",\n        className,\n      )}\n      {...props}\n    />\n  ),\n);\nEmptyTitle.displayName = \"EmptyTitle\";\n\n// EmptyDescription — 보조 설명（원본 text-sm/relaxed → text-sm + leading-relaxed）.\nexport type EmptyDescriptionProps = TextProps & {\n  children?: ReactNode;\n};\n\nconst EmptyDescription = forwardRef<BridgeTextRef, EmptyDescriptionProps>(\n  ({ className, ...props }, ref) => (\n    <Text\n      ref={ref}\n      className={cn(\n        \"font-sans text-sm leading-relaxed text-center text-muted-foreground web:text-balance\",\n        className,\n      )}\n      {...props}\n    />\n  ),\n);\nEmptyDescription.displayName = \"EmptyDescription\";\n\n// EmptyContent — 빈 상태 하단 액션 영역.\nexport type EmptyContentProps = ViewProps;\n\nconst EmptyContent = forwardRef<BridgeViewRef, EmptyContentProps>(\n  ({ className, ...props }, ref) => (\n    <View\n      ref={ref}\n      className={cn(\n        \"flex min-w-0 w-full max-w-sm flex-col items-center gap-4 text-sm web:text-balance\",\n        className,\n      )}\n      {...props}\n    />\n  ),\n);\nEmptyContent.displayName = \"EmptyContent\";\n\nexport {\n  Empty,\n  EmptyHeader,\n  EmptyTitle,\n  EmptyDescription,\n  EmptyContent,\n  EmptyMedia,\n};\n",
      "type": "registry:ui",
      "target": "components/unikit/empty.tsx"
    }
  ],
  "type": "registry:ui"
}
