Componentes
Cada componente con sus variantes, sus estados y un ejemplo de composición real. Todo construido con los tokens del sistema.
Card
Brillo radial de acento en hover, arriba a la izquierda
Arquitectura
Límites de módulos, acoplamiento y decisiones difíciles de revertir.
Elevada
Superficie elevada, para bandas destacadas.
Sin brillo
Para rejillas densas donde el hover distrae.
Ver código
<Card>
<CardTitle>Arquitectura</CardTitle>
<CardBody>Límites de módulos y acoplamiento.</CardBody>
</Card>Eyebrow
Mono, mayúsculas, punto de acento de 6px
Revisión de código por humanos
Sin punto
Ver código
<Eyebrow>Revisión de código por humanos</Eyebrow>Metric
Cifra en mono a 48px con etiqueta apagada
Ver código
<Metric value="< 24h" label="de respuesta" accent />Badge
Chip de borde fino, mono 12px
Ver código
<Badge variant="accent">Más elegido</Badge>Input · Textarea · Field
Etiqueta en mono, mensaje de error en destructivo
Ver código
<Field label="Empresa" htmlFor="empresa">
<Input id="empresa" placeholder="Northlane" />
</Field>Select
Sobre Radix Select, con marca de acento en el elemento activo
Ver código
<Select>
<SelectTrigger><SelectValue placeholder="Selecciona" /></SelectTrigger>
<SelectContent><SelectItem value="20-50">20 a 50</SelectItem></SelectContent>
</Select>Dialog
Única superficie con sombra permitida
Ver código
<Dialog>
<DialogTrigger asChild><Button>Abrir</Button></DialogTrigger>
<DialogContent><DialogTitle>Título</DialogTitle></DialogContent>
</Dialog>Tabs
Subrayado de acento en la pestaña activa
Ver código
<Tabs defaultValue="a"><TabsList><TabsTrigger value="a">A</TabsTrigger></TabsList></Tabs>Tooltip
Texto en mono a 12px
Ver código
<Tooltip><TooltipTrigger asChild><Button /></TooltipTrigger><TooltipContent>…</TooltipContent></Tooltip>Accordion
Icono de más que rota a cruz al abrir
Ver código
<Accordion type="single" collapsible>…</Accordion>Table
Cabeceras en mono; cifras en mono
| Incluye | Equipo | Escala |
|---|---|---|
| PR al mes | 40 | 160 |
| Revisores | 1 | 2 |
Ver código
<Table><TableHead>…</TableHead><TableBody>…</TableBody></Table>CodeBlock · ReviewComment
Números de línea apagados y resaltado de diff
1 const invoice = await db.invoice.find(id)2-await gateway.charge(invoice.total)3+const key = idempotencyKey(invoice)4+await gateway.charge(invoice.total, { key })El cobro no es idempotente: si el webhook reintenta, el cliente paga dos veces.
Ver código
<CodeBlock filename="billing/charge.ts" lines={[{ text: "…", kind: "added" }]} />
<ReviewComment author="Diego Salas" comment="…" />ReviewerCard
Avatar en gris que se colorea en hover
Ana Restrepo
Staff Engineer · 12 años
Diego Salas
Principal Engineer · 15 años
Marta Nieves
Senior Security · 10 años
Ver código
<ReviewerCard name="Ana Restrepo" seniority="Staff Engineer" stacks={["Go"]} />Testimonial
Cita a 24px, sin comillas decorativas
Dejamos de discutir estilo y empezamos a discutir decisiones.
Ver código
<Testimonial quote="…" author="Valeria Ocampo" role="VP of Engineering" />DiffReview
Micro-animación del hero; se detiene con prefers-reduced-motion
Cobro sin idempotencia: un reintento duplica el cargo.
Envolver cobro y marcado en una transacción.
Ver código
<DiffReview />Layout · SectionHeading · BentoGrid
Container 1200px, secciones de 128/80px, rejilla de 12 columnas
Alcance
Qué revisamos
Una o dos palabras en acento por titular, nunca más.
Seguridad
Span de 8 columnas.
Arquitectura
Span de 4 columnas.
Rendimiento
Span de 6 columnas.
Deuda técnica
Span de 6 columnas.
Section con superficie elevada: reservada para una sola banda por página.
Ver código
<Section><Container><SectionHeading title={<>Qué <em>revisamos</em></>} /></Container></Section>Reveal
Fundido y 12px de desplazamiento, una sola vez, escalonado 60ms
Retardo 0ms
Aparece al entrar en pantalla.
Retardo 60ms
Aparece al entrar en pantalla.
Retardo 120ms
Aparece al entrar en pantalla.
Ver código
<Reveal index={1}><Card /></Reveal>Toaster
Se monta una vez por aplicación
Ver código
toast("Mensaje enviado", { description: "…" })