{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "empty",
  "type": "registry:ui",
  "title": "Empty",
  "description": "Empty state primitives for Tile UI.",
  "devDependencies": [
    "sass"
  ],
  "registryDependencies": [
    "@tile-ui/core",
    "@tile-ui/styles"
  ],
  "files": [
    {
      "path": "packages/react/src/components/empty/empty.tsx",
      "type": "registry:ui",
      "target": "components/ui/empty/empty.tsx",
      "content": "import React from 'react';\nimport { emptyStyleKeys, getEmptyMediaVariantKey } from '../lib/core';\nimport type { EmptyMediaBaseProps } from '../lib/core';\nimport styles from './empty.module.scss';\n\nexport interface EmptyProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst Empty = React.forwardRef<HTMLDivElement, EmptyProps>(({ className = '', children, ...props }, ref) => {\n\treturn (\n\t\t<div ref={ref} data-slot=\"empty\" className={`${styles[emptyStyleKeys.root]} ${className}`} {...props}>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\nEmpty.displayName = 'Empty';\n\nexport interface EmptyHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst EmptyHeader = React.forwardRef<HTMLDivElement, EmptyHeaderProps>(({ className = '', children, ...props }, ref) => {\n\treturn (\n\t\t<div ref={ref} data-slot=\"empty-header\" className={`${styles[emptyStyleKeys.header]} ${className}`} {...props}>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\nEmptyHeader.displayName = 'EmptyHeader';\n\nexport interface EmptyMediaProps extends React.HTMLAttributes<HTMLDivElement>, EmptyMediaBaseProps {}\n\nconst EmptyMedia = React.forwardRef<HTMLDivElement, EmptyMediaProps>(({ className = '', variant = 'default', children, ...props }, ref) => {\n\tconst variantKey = getEmptyMediaVariantKey(variant);\n\tconst classes = [styles[emptyStyleKeys.media], styles[variantKey], className].filter(Boolean).join(' ');\n\n\treturn (\n\t\t<div ref={ref} data-slot=\"empty-icon\" data-variant={variant} className={classes} {...props}>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\nEmptyMedia.displayName = 'EmptyMedia';\n\nexport interface EmptyTitleProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst EmptyTitle = React.forwardRef<HTMLDivElement, EmptyTitleProps>(({ className = '', children, ...props }, ref) => {\n\treturn (\n\t\t<div ref={ref} data-slot=\"empty-title\" className={`${styles[emptyStyleKeys.title]} ${className}`} {...props}>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\nEmptyTitle.displayName = 'EmptyTitle';\n\nexport interface EmptyDescriptionProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst EmptyDescription = React.forwardRef<HTMLDivElement, EmptyDescriptionProps>(({ className = '', children, ...props }, ref) => {\n\treturn (\n\t\t<div ref={ref} data-slot=\"empty-description\" className={`${styles[emptyStyleKeys.description]} ${className}`} {...props}>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\nEmptyDescription.displayName = 'EmptyDescription';\n\nexport interface EmptyContentProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst EmptyContent = React.forwardRef<HTMLDivElement, EmptyContentProps>(({ className = '', children, ...props }, ref) => {\n\treturn (\n\t\t<div ref={ref} data-slot=\"empty-content\" className={`${styles[emptyStyleKeys.content]} ${className}`} {...props}>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\nEmptyContent.displayName = 'EmptyContent';\n\nexport { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, EmptyContent };\nexport default Empty;\n"
    },
    {
      "path": "packages/styles/scss/components/empty.module.scss",
      "type": "registry:file",
      "target": "components/ui/empty/empty.module.scss",
      "content": "@use '../../../styles/variables/colors' as *;\n\n// Empty 根容器\n.root {\n\tdisplay: flex;\n\tmin-width: 0;\n\tflex: 1;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: $spacing-6;\n\tborder-radius: var(--tile-empty-radius, $radius);\n\tborder: 1px var(--tile-empty-border-style, dashed) var(--tile-empty-border, $border);\n\tbackground-color: var(--tile-empty-background, transparent);\n\tpadding: var(--tile-empty-padding, $spacing-6);\n\ttext-align: center;\n\ttext-wrap: balance;\n\n\t// 大屏加深内边距\n\t@media (min-width: 768px) {\n\t\tpadding: var(--tile-empty-padding, $spacing-12);\n\t}\n}\n\n// 头部：媒体 + 标题 + 描述\n.header {\n\tdisplay: flex;\n\tmax-width: 24rem;\n\tflex-direction: column;\n\talign-items: center;\n\tgap: var(--tile-empty-header-gap, $spacing-2);\n\ttext-align: center;\n}\n\n// 媒体区（图标容器）\n.media {\n\tdisplay: flex;\n\tflex-shrink: 0;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-bottom: $spacing-2;\n\n\tsvg {\n\t\tpointer-events: none;\n\t\tflex-shrink: 0;\n\t}\n\n\t// 变体\n\t&.variantDefault {\n\t\tbackground-color: transparent;\n\t}\n\n\t&.variantIcon {\n\t\twidth: $spacing-10;\n\t\theight: $spacing-10;\n\t\tborder-radius: $radius;\n\t\tbackground-color: var(--tile-empty-media-background, $muted);\n\t\tcolor: $foreground;\n\n\t\tsvg {\n\t\t\twidth: $spacing-6;\n\t\t\theight: $spacing-6;\n\t\t}\n\t}\n}\n\n// 标题\n.title {\n\tfont-size: var(--tile-empty-title-size, $text-lg);\n\tfont-weight: var(--tile-empty-title-weight, $font-medium);\n\tletter-spacing: var(--tile-empty-title-tracking, -0.01em);\n}\n\n// 描述\n.description {\n\tfont-size: var(--tile-empty-description-size, $text-sm);\n\tline-height: var(--tile-empty-description-leading, $leading-relaxed);\n\tcolor: var(--tile-empty-description-color, $muted-foreground);\n\n\ta {\n\t\ttext-decoration: underline;\n\t\ttext-underline-offset: 4px;\n\t}\n\n\ta:hover {\n\t\tcolor: $primary;\n\t}\n}\n\n// 内容区（操作按钮等）\n.content {\n\tdisplay: flex;\n\twidth: 100%;\n\tmax-width: 24rem;\n\tmin-width: 0;\n\tflex-direction: column;\n\talign-items: center;\n\tgap: $spacing-4;\n\tfont-size: $text-sm;\n\ttext-wrap: balance;\n}\n"
    },
    {
      "path": "packages/react/src/components/empty/index.ts",
      "type": "registry:ui",
      "target": "components/ui/empty/index.ts",
      "content": "export {\n\tEmpty,\n\tEmptyHeader,\n\tEmptyMedia,\n\tEmptyTitle,\n\tEmptyDescription,\n\tEmptyContent,\n\ttype EmptyProps,\n\ttype EmptyHeaderProps,\n\ttype EmptyMediaProps,\n\ttype EmptyTitleProps,\n\ttype EmptyDescriptionProps,\n\ttype EmptyContentProps,\n} from './empty';\n"
    }
  ]
}
