Badge
Apto para servidorA compact status or category label.
Vista previa en vivo
Renderizado desde el código fuente instalado de VEXA — los mismos archivos que recibes.
Escritorio
NeutralOutlinePrimaryActivePendingFailed
Playground
Ajusta las props y copia el JSX equivalente.
Badge
Playground
badge.tsx
<Badge>Badge</Badge>Instalación
Añade el código del componente a tu proyecto. Las dependencias del registry se resuelven automáticamente.
npx shadcn@latest add https://vexa.valfiguer.com/r/badge.jsonSe instala en components/vexa/badge.tsx
Dependencias npm
- class-variance-authority
Dependencias del registry
- @vexa/utils
Otros items de VEXA que necesita este componente. Instálalos primero — la CLI los resuelve automáticamente.
Código
Cópialo a su ruta destino, o instálalo con el comando de arriba.
components/vexa/badge.tsx
import type * as React from "react";
import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "@/lib/utils";
export const badgeVariants = cva(
[
"inline-flex items-center gap-1 whitespace-nowrap",
"rounded-vexa-sm border px-2 py-0.5 text-xs font-medium",
"[&_svg]:size-3 [&_svg]:shrink-0",
],
{
variants: {
variant: {
neutral:
"border-transparent bg-vexa-secondary text-vexa-secondary-foreground",
outline: "border-vexa-border bg-transparent text-vexa-foreground",
primary:
"border-transparent bg-vexa-primary text-vexa-primary-foreground",
success:
"border-transparent bg-vexa-success text-vexa-success-foreground",
warning:
"border-transparent bg-vexa-warning text-vexa-warning-foreground",
danger: "border-transparent bg-vexa-danger text-vexa-danger-foreground",
},
},
defaultVariants: {
variant: "neutral",
},
},
);
export interface BadgeProps
extends React.ComponentProps<"span">, VariantProps<typeof badgeVariants> {}
/**
* Badge — a compact status or category label.
*
* RSC-safe. Meaning must not rely on color alone: always include text (and,
* optionally, an icon) so status is conveyed non-visually as well.
*/
export function Badge({ className, variant, ...props }: BadgeProps) {
return (
<span
data-slot="badge"
className={cn(badgeVariants({ variant }), className)}
{...props}
/>
);
}
JSON del registryr/badge.json
r/badge.json
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "badge",
"type": "registry:ui",
"title": "Badge",
"description": "A compact status or category label.",
"dependencies": [
"class-variance-authority"
],
"registryDependencies": [
"@vexa/utils"
],
"files": [
{
"path": "registry/default/ui/badge.tsx",
"type": "registry:ui",
"target": "components/vexa/badge.tsx",
"content": "import type * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nexport const badgeVariants = cva(\n [\n \"inline-flex items-center gap-1 whitespace-nowrap\",\n \"rounded-vexa-sm border px-2 py-0.5 text-xs font-medium\",\n \"[&_svg]:size-3 [&_svg]:shrink-0\",\n ],\n {\n variants: {\n variant: {\n neutral:\n \"border-transparent bg-vexa-secondary text-vexa-secondary-foreground\",\n outline: \"border-vexa-border bg-transparent text-vexa-foreground\",\n primary:\n \"border-transparent bg-vexa-primary text-vexa-primary-foreground\",\n success:\n \"border-transparent bg-vexa-success text-vexa-success-foreground\",\n warning:\n \"border-transparent bg-vexa-warning text-vexa-warning-foreground\",\n danger: \"border-transparent bg-vexa-danger text-vexa-danger-foreground\",\n },\n },\n defaultVariants: {\n variant: \"neutral\",\n },\n },\n);\n\nexport interface BadgeProps\n extends React.ComponentProps<\"span\">, VariantProps<typeof badgeVariants> {}\n\n/**\n * Badge — a compact status or category label.\n *\n * RSC-safe. Meaning must not rely on color alone: always include text (and,\n * optionally, an icon) so status is conveyed non-visually as well.\n */\nexport function Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <span\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n}\n"
}
],
"meta": {
"frameworks": [
"react",
"next"
],
"rsc": "server-safe",
"variants": {
"variant": [
"neutral",
"outline",
"primary",
"success",
"warning",
"danger"
]
},
"cssVars": [
"--vexa-secondary",
"--vexa-secondary-foreground",
"--vexa-primary",
"--vexa-primary-foreground",
"--vexa-success",
"--vexa-warning",
"--vexa-danger",
"--vexa-border",
"--vexa-foreground"
],
"a11y": "Status is conveyed by text (and optional icon), never color alone.",
"example": "<Badge variant=\"success\">Active</Badge>",
"tests": "planned — see docs/README.md#roadmap"
}
}Detalles
Variantes
- variant
- neutraloutlineprimarysuccesswarningdanger
Accesibilidad
Status is conveyed by text (and optional icon), never color alone.