{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "item", "title": "Item", "description": "Generic list item primitive for building consistent list-based interfaces.", "dependencies": [ "@base-ui/react", "class-variance-authority" ], "files": [ { "path": "packages/ui/src/item.tsx", "content": "import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// ItemGroup\n// ---------------------------------------------------------------------------\n\nfunction ItemGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\n// ---------------------------------------------------------------------------\n// ItemSeparator\n// ---------------------------------------------------------------------------\n\nfunction ItemSeparator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\n// ---------------------------------------------------------------------------\n// Variants\n// ---------------------------------------------------------------------------\n\nconst itemVariants = cva(\n \"group/item flex w-full flex-wrap items-center rounded-lg border text-sm transition-colors duration-100 focus:ring-0 focus:ring-offset-0 focus-visible:outline-2 focus-visible:outline-ring/50 focus-visible:outline-offset-2 [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 px-2.5 py-2\",\n xs: \"gap-2 in-data-[slot=dropdown-menu-content]:p-0 px-2.5 py-2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\n// ---------------------------------------------------------------------------\n// Item\n// ---------------------------------------------------------------------------\n\nfunction Item({\n className,\n variant = \"default\",\n size = \"default\",\n render,\n ...props\n}: useRender.ComponentProps<\"div\"> & VariantProps) {\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(itemVariants({ variant, size, className })),\n },\n props\n ),\n render,\n state: {\n slot: \"item\",\n variant,\n size,\n },\n });\n}\n\n// ---------------------------------------------------------------------------\n// ItemMedia\n// ---------------------------------------------------------------------------\n\nconst 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\nfunction ItemMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps) {\n return (\n \n );\n}\n\n// ---------------------------------------------------------------------------\n// ItemContent\n// ---------------------------------------------------------------------------\n\nfunction ItemContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\n// ---------------------------------------------------------------------------\n// ItemTitle\n// ---------------------------------------------------------------------------\n\nfunction ItemTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\n// ---------------------------------------------------------------------------\n// ItemDescription\n// ---------------------------------------------------------------------------\n\nfunction ItemDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n a]:underline [&>a]:underline-offset-4 [&>a]:hover:text-primary\",\n className\n )}\n data-slot=\"item-description\"\n {...props}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// ItemActions\n// ---------------------------------------------------------------------------\n\nfunction ItemActions({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\n// ---------------------------------------------------------------------------\n// ItemHeader\n// ---------------------------------------------------------------------------\n\nfunction ItemHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\n// ---------------------------------------------------------------------------\n// ItemFooter\n// ---------------------------------------------------------------------------\n\nfunction ItemFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n \n );\n}\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemFooter,\n ItemGroup,\n ItemHeader,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n itemMediaVariants,\n itemVariants,\n};\n", "type": "registry:ui" } ], "type": "registry:ui" }