Orali

Buscar

Buscá páginas y tokens del sistema de diseño.

Button

Ocho jerarquías, cuatro tamaños y estados completos.

Propósito

Iniciar una acción

Los botones disparan acciones: agregar al carrito, aplicar un cupón, confirmar una compra.

Mostrar jerarquía

Ocho jerarquías ayudan a identificar la acción principal y las secundarias en cada pantalla.

Cubrir los estados

Hover, active, foco, disabled y loading mantienen el comportamiento predecible.

Anatomía

Cada número es una parte del componente real: hacé clic para ver sus propiedades y tokens.

Hacé clic en un número para ver las propiedades y los tokens de esa parte.

Configuración

El componente real, en vivo.

Variante

La prop variant define colores, radio y peso de fuente, y comunica la jerarquía de la acción en la pantalla.

Acción principal de una sección. Una por bloque. Tamaño habitual: lg.

Tamaño

La prop size define alto, padding, gap, tipografía e ícono. Permite ajustar el peso visual de la acción a la densidad del layout.

Small: 36px de alto, tipografía 14px / 20px.

Forma

La prop shape es default (8 px) para acciones de compra y formularios, y pill solo en marketing.

Compra, formularios y Stepper.

Íconos

Un ícono (lucide) a la izquierda o a la derecha del texto refuerza el significado de la acción y hereda su color.

Cuando el ícono aporta claridad, por ejemplo un carrito antes de «Agregar».

Estado

Hover y foco los resuelve CSS. disabled y loading son props; active se muestra forzado.

Para acciones disponibles de inmediato. Probá hover, foco con Tab y click.

Ancho completo

La prop fullWidth estira el botón al ancho de su contenedor, para layouts apilados o angostos.

Para acciones en línea: se ajusta al contenido.

Props

PropTipoDescripción
variant"primary" | "add-to-cart" | "secondary" | "outline" | "neutral" | "inverse" | "outline-inverse" | "link"Jerarquía. Por defecto primary.
size"sm" | "md" | "lg" | "xl"Tamaño. Si falta, el de cada jerarquía.
shape"default" | "pill"pill solo en marketing.
fullWidthbooleanOcupa todo el ancho del contenedor.
loadingbooleanMuestra spinner, mantiene el ancho y bloquea el click.
loadingTextstringTexto mientras carga.

Tokens

Se leen en vivo del paquete de tokens.
VarianteTokenValor
Linknone
Linkunderline
Forma8px
Forma9999px
Todas2px
Todas2px
Tamaño Small36px
Tamaño Small8px
Tamaño Small12px
Tamaño Small6px
Tamaño Small14px
Tamaño Small20px
Tamaño Small16px
Tamaño Medium40px
Tamaño Medium10px
Tamaño Medium16px
Tamaño Medium8px
Tamaño Medium14px
Tamaño Medium20px
Tamaño Medium16px
Tamaño Large44px
Tamaño Large12px
Tamaño Large20px
Tamaño Large8px
Tamaño Large14px
Tamaño Large20px
Tamaño Large20px
Tamaño Extra large48px
Tamaño Extra large12px
Tamaño Extra large24px
Tamaño Extra large8px
Tamaño Extra large16px
Tamaño Extra large24px
Tamaño Extra large20px
Primary600
Primary44px
Primary32px
Primary12px
Add to cart500
Add to cart40px
Secondary500
Secondary40px
Secondary16px
Outline500
Outline44px
Outline16px
Outline12px
Neutral500
Neutral24px
Inverse500
Inverse40px
Inverse32px
Outline inversergba(255, 255, 255, 0.1)
Outline inversergba(255, 255, 255, 0.15)
Outline inversergba(255, 255, 255, 0.5)
Outline inverse500
Outline inverse44px
Outline inverse16px
Link0px
Link500
Todas0.5
Ghostrgba(255, 255, 255, 0)
Ghost500
Ghost0px
Todas#e30613
Primary#e30613
Primary#c20510
Primary#9a040d
Primary#ffffff
Primary8px
Add to cart#e30613
Add to cart#c20510
Add to cart#9a040d
Add to cart#ffffff
Add to cart8px
Secondary#1a1a1a
Secondary#6b6b6b
Secondary#404040
Secondary#ffffff
Secondary8px
Outline#ffffff
Outline#fff1f2
Outline#ffe1e3
Outline#e30613
Outline#e30613
Outline8px
Neutral#fafafa
Neutral#f5f5f5
Neutral#e4e4e4
Neutral8px
Inverse#ffffff
Inverse#f5f5f5
Inverse#e4e4e4
Inverse#1a1a1a
Inverse9999px
Outline inverse#ffffff
Outline inverse9999px
Todas#f5f5f5
Todas#d4d4d4
Todas#d4d4d4
Todas#d4d4d4
Ghost#1a1a1a
Ghost#1a1a1a
Ghost#6b6b6b
Ghost#525252
Outline#c20510
Outline#9a040d
Neutral#1a1a1a
Neutral#e4e4e4
Link#e30613
Link#c20510
Link#9a040d
Ghost#d4d4d4

Tokens por variante

Se leen en vivo del paquete de tokens. Pasá el mouse por un color para ver el token.

VarianteFondoHoverActiveTextoBorde
Primary#e30613#c20510#9a040d#ffffff—
Add to cart#e30613#c20510#9a040d#ffffff—
Secondary#1a1a1a#6b6b6b#404040#ffffff—
Outline#ffffff#fff1f2#ffe1e3#e30613#e30613
Neutral#fafafa#f5f5f5#e4e4e4#1a1a1a#e4e4e4
Inverse#ffffff#f5f5f5#e4e4e4#1a1a1a—
Outline inverse—rgba(255, 255, 255, 0.1)rgba(255, 255, 255, 0.15)#ffffffrgba(255, 255, 255, 0.5)
Link———#e30613—

Tokens por tamaño

TamañoAltoPadding (y / x)GapTipografíaÍcono
Small36px8px / 12px6px14px / 20px16px
Medium40px10px / 16px8px14px / 20px16px
Large44px12px / 20px8px14px / 20px20px
Extra large48px12px / 24px8px16px / 24px20px

Estados

Estados forzados con clases solo para mostrarlos fijos. Los botones reales responden a hover, foco con Tab y click.

Variantedefaulthoveractivefocusdisabled
Primary
Add to cart
Secondary
Outline
Neutral
Inverse
Outline inverse
Link

Uso

import { Button, buttonClasses } from "@/components/ui/button"

<Button variant="add-to-cart">Button CTA</Button>
<Button size="lg" shape="pill">Button CTA</Button>
<Button loading loadingText="Procesando…">Button CTA</Button>

// Link con estilo de botón
<Link href="/productos" className={buttonClasses({ variant: "primary", shape: "pill" })}>Ver productos</Link>