{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "item",
  "title": "Item",
  "description": "Composable list item with media, content, title, description, and action slots.",
  "dependencies": ["@ark-ui/react", "class-variance-authority"],
  "registryDependencies": ["separator"],
  "files": [
    {
      "path": "src/components/ui/item.tsx",
      "content": "\"use client\";\n\nimport { ark } from \"@ark-ui/react/factory\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type { ComponentProps } from \"react\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { cn } from \"@/lib/utils\";\n\nexport const ItemGroup = ({\n  className,\n  ...props\n}: ComponentProps<typeof ark.div>) => {\n  return (\n    <ark.div\n      role=\"list\"\n      data-slot=\"item-group\"\n      className={cn(\n        \"group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2\",\n        className,\n      )}\n      {...props}\n    />\n  );\n};\n\nexport const ItemSeparator = ({\n  className,\n  ...props\n}: ComponentProps<typeof Separator>) => {\n  return (\n    <Separator\n      data-slot=\"item-separator\"\n      orientation=\"horizontal\"\n      className={cn(\"my-2\", className)}\n      {...props}\n    />\n  );\n};\n\nexport const itemVariants = cva(\n  \"group/item flex w-full flex-wrap items-center rounded-lg border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a&]:transition-colors [a&]:hover:bg-muted\",\n  {\n    variants: {\n      variant: {\n        default: \"border-transparent\",\n        outline: \"border-border\",\n        muted: \"border-transparent bg-muted/50\",\n      },\n      size: {\n        default: \"gap-2.5 px-3 py-2.5\",\n        sm: \"gap-2.5 px-3 py-2.5\",\n        xs: \"gap-2 px-2.5 py-2 in-data-[slot=menu-content]:p-0\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  },\n);\n\nexport interface ItemProps\n  extends ComponentProps<typeof ark.div>,\n    VariantProps<typeof itemVariants> {}\n\nexport const Item = ({\n  className,\n  variant = \"default\",\n  size = \"default\",\n  ...props\n}: ItemProps) => {\n  return (\n    <ark.div\n      data-slot=\"item\"\n      data-variant={variant}\n      data-size={size}\n      className={cn(itemVariants({ variant, size, className }))}\n      {...props}\n    />\n  );\n};\n\nexport const itemMediaVariants = cva(\n  \"flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-transparent\",\n        icon: \"[&_svg:not([class*='size-'])]:size-4\",\n        image:\n          \"size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  },\n);\n\nexport interface ItemMediaProps\n  extends ComponentProps<typeof ark.div>,\n    VariantProps<typeof itemMediaVariants> {}\n\nexport const ItemMedia = ({\n  className,\n  variant = \"default\",\n  ...props\n}: ItemMediaProps) => {\n  return (\n    <ark.div\n      data-slot=\"item-media\"\n      data-variant={variant}\n      className={cn(itemMediaVariants({ variant, className }))}\n      {...props}\n    />\n  );\n};\n\nexport const ItemContent = ({\n  className,\n  ...props\n}: ComponentProps<typeof ark.div>) => {\n  return (\n    <ark.div\n      data-slot=\"item-content\"\n      className={cn(\n        \"flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none\",\n        className,\n      )}\n      {...props}\n    />\n  );\n};\n\nexport const ItemTitle = ({\n  className,\n  ...props\n}: ComponentProps<typeof ark.div>) => {\n  return (\n    <ark.div\n      data-slot=\"item-title\"\n      className={cn(\n        \"line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4\",\n        className,\n      )}\n      {...props}\n    />\n  );\n};\n\nexport const ItemDescription = ({\n  className,\n  ...props\n}: ComponentProps<typeof ark.p>) => {\n  return (\n    <ark.p\n      data-slot=\"item-description\"\n      className={cn(\n        \"line-clamp-2 text-left text-sm leading-normal font-normal text-muted-foreground group-data-[size=xs]/item:text-xs [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\n        className,\n      )}\n      {...props}\n    />\n  );\n};\n\nexport const ItemActions = ({\n  className,\n  ...props\n}: ComponentProps<typeof ark.div>) => {\n  return (\n    <ark.div\n      data-slot=\"item-actions\"\n      className={cn(\"flex items-center gap-2\", className)}\n      {...props}\n    />\n  );\n};\n\nexport const ItemHeader = ({\n  className,\n  ...props\n}: ComponentProps<typeof ark.div>) => {\n  return (\n    <ark.div\n      data-slot=\"item-header\"\n      className={cn(\n        \"flex basis-full items-center justify-between gap-2\",\n        className,\n      )}\n      {...props}\n    />\n  );\n};\n\nexport const ItemFooter = ({\n  className,\n  ...props\n}: ComponentProps<typeof ark.div>) => {\n  return (\n    <ark.div\n      data-slot=\"item-footer\"\n      className={cn(\n        \"flex basis-full items-center justify-between gap-2\",\n        className,\n      )}\n      {...props}\n    />\n  );\n};\n",
      "type": "registry:ui",
      "target": "src/components/ui/item.tsx"
    }
  ],
  "type": "registry:ui"
}
