Chart
Gráficos de Recharts con colores del tema, un tooltip y una leyenda que leen las etiquetas de una sola configuración, y navegación con teclado con un anillo de foco visible.
pnpm dlx shadcn@latest add https://hextaui.com/r/chart.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add recharts cnCopia y pega el siguiente código en tu proyecto.
components/ui/chart.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Construyes los gráficos con componentes de Recharts y añades las partes de chart solo donde las necesitas. Recharts no está envuelto, así que su propia documentación y sus guías de actualización se aplican tal cual.
Un ChartConfig asigna a cada clave de datos una etiqueta, un icono opcional y un color. Permanece separado de los datos, así que una misma config puede servir a varios gráficos.
Dale a <ChartContainer /> una altura, un min-h-* o un aspect-* para que el gráfico pueda medirse a sí mismo en el primer renderizado. Sin uno, recurre a aspect-video.
Cada clave de la config se convierte en una variable --color-KEY con alcance limitado a su gráfico. Apúntala a un token del tema, a cualquier color CSS, o dale valores light y dark por separado.
Usa la variable donde Recharts acepte un color: en componentes, en tus datos o en clases de Tailwind.
El tema incluye cinco tokens de gráfico, --chart-1 a --chart-5: azul, verde azulado, ámbar, violeta y rosa. En este orden, los colores vecinos se distinguen con las formas comunes de daltonismo, y cada uno tiene al menos un contraste de 3:1 con los fondos claro y oscuro. Úsalos en orden y mantén la leyenda o las etiquetas activadas, para que el color nunca sea la única pista.
Las claves que no son válidas en un nombre CSS, como Mobile users, se convierten en --color-Mobile-users.
Gráfico de barras
Una cuadrícula, un eje, <ChartTooltip /> y <ChartLegend />. El tooltip y la leyenda leen sus etiquetas y colores de la config.
Gráfico de líneas
indicator="line" hace coincidir las claves del tooltip con las líneas que describen.
Barras apiladas
Las barras con el mismo stackId se apilan. Redondea solo los extremos exteriores, para que la pila se lea como una sola barra.
Barras horizontales
Define layout="vertical" en el gráfico e intercambia los tipos de eje. <LabelList /> imprime cada valor al final de su barra.
Donut
Cada sector toma su color de fill en los datos. nameKey en el tooltip y la leyenda busca en la config la etiqueta de cada sector.
Radar
Las cuadrículas y los ejes polares adoptan los mismos trazos y etiquetas atenuados que los cartesianos.
Tooltip
Cambia entre los indicadores dot, line y dashed, y oculta la etiqueta con hideLabel. defaultIndex en <ChartTooltip /> muestra un punto en el primer renderizado.
Dar formato a los valores
valueFormatter da formato al número y conserva el indicador y el nombre. labelFormatter hace lo mismo con la etiqueta. Para reemplazar una fila completa, usa formatter.
Iconos
Un icon en la config reemplaza la clave de color en el tooltip y la leyenda.
Colores claro y oscuro
Un objeto theme elige un color distinto en cada tema. Cambia el tema del sitio para verlo cambiar.
Valores negativos
Colorea cada barra con <Cell /> y marca el cero con <ReferenceLine />.
Etiquetas largas
Los nombres de serie largos se ajustan en la leyenda y el tooltip, y los valores grandes permanecen en una sola línea a su lado.
De derecha a izquierda
Recharts no refleja los ejes por sí solo. Define reversed en el eje x y mueve el eje y a la derecha. Pasa locale al tooltip para mostrar los dígitos del lector.
Recharts activa accessibilityLayer por defecto, así que el gráfico es una sola parada del tabulador por la que te mueves punto por punto.
| Key | Acción |
|---|---|
| Tab | Da foco al gráfico y muestra un anillo de foco. |
| ←→ | Mueve el tooltip al punto siguiente o anterior. En un eje invertido las teclas siguen la pantalla. |
| Enter | Muestra u oculta el tooltip en el punto actual. |
- Para los lectores de pantalla, los gráficos son imágenes. Nombra cada uno con un título visible cercano o un
aria-labelen el gráfico de Recharts, y ofrece una tabla cuando se necesiten los valores exactos. - El tooltip y la leyenda nombran cada serie en texto, así que el lector nunca tiene que depender solo de los colores.
- Con movimiento reducido, Recharts omite sus animaciones de entrada y el tooltip salta entre puntos en lugar de deslizarse.
- Los valores del tooltip se formatean en
en-USsalvo que paseslocale, para que el servidor y el navegador rendericen el mismo texto.
Las partes se apoyan en Recharts. Todas las props de Recharts siguen funcionando en los componentes de gráfico que pongas dentro.
Proporciona la config, escribe las variables de color y renderiza un <ResponsiveContainer /> de Recharts alrededor de su hijo. Acepta todas las props de <div>.
| Prop | Tipo | Predeterminado |
|---|---|---|
configEtiquetas, iconos y colores para cada clave de datos. | ChartConfig | – |
childrenUn gráfico de Recharts, como <BarChart />. | ReactElement | – |
initialDimensionEl tamaño usado antes de medir el contenedor. | { width: number; height: number } | { width: 320, height: 200 } |
idNombra el gráfico en data-chart. Se genera si se omite. | string | – |
| Atributo | Descripción |
|---|---|
data-slot="chart" | El contenedor. |
data-chart | El id al que se limitan las variables de color. |
--color-KEY | Una variable de color por cada clave configurada. |
| Prop | Tipo | Predeterminado |
|---|---|---|
label | ReactNode | – |
iconReemplaza la clave de color en el tooltip y la leyenda. | ComponentType | – |
colorCualquier color o variable CSS. | string | – |
themeÚsalo en lugar de color para tener un color por tema. | { light: string; dark: string } | – |
El <Tooltip /> de Recharts, con un deslizamiento más corto entre puntos. Acepta todas las props de tooltip de Recharts.
| Prop | Tipo | Predeterminado |
|---|---|---|
contentNormalmente <ChartTooltipContent />. | ReactElement | (props) => ReactNode | – |
animationDuration | number | 200 |
animationEasing | string | "ease-out" |
defaultIndexMuestra el tooltip en este punto en el primer renderizado. | number | – |
| Prop | Tipo | Predeterminado |
|---|---|---|
indicator | "dot" | "line" | "dashed" | "dot" |
hideLabel | boolean | false |
hideIndicator | boolean | false |
labelKeyLa clave de la config o de los datos que se usa para la etiqueta. | string | – |
nameKeyLa clave de la config o de los datos que se usa para cada nombre. | string | – |
valueFormatterDa formato a cada valor y conserva el indicador y el nombre. | (value, name, item) => ReactNode | – |
labelFormatter | (label, payload) => ReactNode | – |
formatterReemplaza cada fila. | (value, name, item, index, payload) => ReactNode | – |
localeDa formato a los valores numéricos. | Intl.LocalesArgument | "en-US" |
colorUn color de indicador para todas las filas. | string | – |
className | string | – |
labelClassName | string | – |
| Atributo | Descripción |
|---|---|
data-slot="chart-tooltip" | La caja. |
data-slot="chart-tooltip-label" | La etiqueta. |
data-slot="chart-tooltip-item" | Una fila por serie. |
data-slot="chart-tooltip-indicator" | La clave de color. |
data-indicator | En la clave: dot, line o dashed. |
--chart-indicator | El color de la clave. |
El <Legend /> de Recharts. Acepta todas las props de leyenda de Recharts y lista las series en el orden en que las declaras en lugar de alfabéticamente.
| Prop | Tipo | Predeterminado |
|---|---|---|
contentNormalmente <ChartLegendContent />. | ReactElement | (props) => ReactNode | – |
itemSorternull conserva el orden declarado. | "value" | "dataKey" | (item) => number | string | null | null |
| Prop | Tipo | Predeterminado |
|---|---|---|
hideIcon | boolean | false |
nameKeyLa clave de la config o de los datos que se usa para cada nombre. | string | – |
className | string | – |
| Atributo | Descripción |
|---|---|
data-slot="chart-legend" | La lista. |
data-slot="chart-legend-item" | Una entrada por serie. |
data-slot="chart-legend-indicator" | La muestra de color. |
Devuelve { config } dentro de un <ChartContainer />, para construir tu propio contenido de tooltip o leyenda.
- AvatarFotos de usuario con iniciales como alternativa, insignias de estado y grupos apilados que se colapsan en un contador.
- BadgeEtiquetas de estado con puntos de color, tags eliminables que se deslizan al cerrarse y contadores que ruedan hasta su nuevo valor.
- CardUna superficie para agrupar contenido, con tres variantes, contenido multimedia de borde a borde, radios concéntricos y enlaces en toda la tarjeta.
- Data tableUna tabla para datos reales, con ordenación, búsqueda, selección de filas, columnas fijadas, un encabezado fijo y paginación.
- ItemUna fila de contenido multimedia, texto y acciones para listas, ajustes y selectores, con una superficie agrupada y un resaltado al pasar el cursor que se desliza entre filas.
- KbdTeclas para atajos que muestran los símbolos correctos en cada plataforma, se leen en voz alta correctamente y se hunden como las teclas reales.
Usado en bloques
Bloques que se construyen sobre Chart.
- BillingPlan y uso para un producto de IA, al estilo de Cursor, Claude y Vercel. Un medidor de uso dividido por modelo que proyecta el final del ciclo y avisa antes de que se agoten los créditos, un gráfico diario por el que puedes desplazarte, un límite de gasto con alertas que puedes previsualizar en el medidor, cambios de plan con prorrateo exacto, un formulario de tarjeta con validación real y facturas descargables en PDF.
- SettingsAjustes para un producto de IA, con un diseño como el de Cursor y Claude. Una barra lateral rellena con búsqueda, grupos y enlaces externos, tarjetas de filas con selectores discretos y opciones anidadas, una isla de guardado oscura que sube solo cuando algo cambió, ⌘S para guardar, errores de campo desde tus comprobaciones o tu servidor y estados de carga con la forma del contenido.