{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "badge", "title": "Badge", "description": "Small status indicator or count label for highlighting categories, statuses, or counts.", "dependencies": [ "@base-ui/react", "class-variance-authority" ], "files": [ { "path": "packages/ui/src/badge.tsx", "content": "\"use client\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Variants\n// ---------------------------------------------------------------------------\n\nconst badgeVariants = cva(\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden whitespace-nowrap rounded-full border border-transparent font-medium transition-colors focus-visible:outline-2 focus-visible:outline-ring/50 focus-visible:outline-offset-2 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3 [&_svg]:pointer-events-none [&_svg]:shrink-0 [a]:transition-colors\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n secondary:\n \"bg-secondary text-secondary-foreground [a]:hover:bg-secondary-hover\",\n destructive:\n \"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20\",\n outline: \"border-border text-foreground [a]:hover:bg-muted\",\n ghost:\n \"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-5 px-2 text-xs\",\n sm: \"h-4 px-1.5 text-[10px]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\n// ---------------------------------------------------------------------------\n// Badge\n// ---------------------------------------------------------------------------\n\ninterface BadgeProps\n extends useRender.ComponentProps<\"span\">,\n VariantProps {\n /**\n * The size of the badge.\n * @default \"default\"\n */\n size?: \"default\" | \"sm\";\n /**\n * The visual style of the badge.\n * @default \"default\"\n */\n variant?:\n | \"default\"\n | \"secondary\"\n | \"destructive\"\n | \"outline\"\n | \"ghost\"\n | \"link\";\n}\n\nfunction Badge({\n className,\n variant = \"default\",\n size,\n render,\n ...props\n}: BadgeProps) {\n return useRender({\n defaultTagName: \"span\",\n render,\n props: mergeProps<\"span\">(\n {\n className: cn(badgeVariants({ variant, size }), className),\n },\n props\n ),\n state: { slot: \"badge\", variant },\n });\n}\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport type { BadgeProps };\nexport { Badge, badgeVariants };\n", "type": "registry:ui" } ], "type": "registry:ui" }