Chart
Gráficos do Recharts com cores do tema, um tooltip e uma legenda que leem os rótulos de uma única configuração, e navegação por teclado com um anel de foco visível.
pnpm dlx shadcn@latest add https://hextaui.com/r/chart.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add recharts cnCopie e cole o código a seguir no seu projeto.
components/ui/chart.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Você monta gráficos com componentes do Recharts e adiciona as partes de chart só onde precisar. O Recharts não é encapsulado, então a documentação e os guias de atualização dele valem como estão.
Um ChartConfig mapeia cada chave de dados para um rótulo, um ícone opcional e uma cor. Ele fica separado dos dados, então uma config pode servir a vários gráficos.
Dê a <ChartContainer /> uma altura, um min-h-* ou um aspect-* para que o gráfico possa se medir na primeira renderização. Sem isso, ele recorre a aspect-video.
Cada chave da config vira uma variável --color-KEY com escopo no seu gráfico. Aponte-a para um token de tema, para qualquer cor CSS, ou dê valores light e dark separados.
Use a variável onde quer que o Recharts aceite uma cor: em componentes, nos seus dados ou em classes do Tailwind.
O tema traz cinco tokens de gráfico, --chart-1 a --chart-5: azul, verde-azulado, âmbar, violeta e rosa. Nesta ordem, cores vizinhas permanecem distintas nas formas comuns de daltonismo, e cada uma tem contraste de pelo menos 3:1 com os fundos claro e escuro. Use-as em ordem e mantenha a legenda ou os rótulos ativados, para que a cor nunca seja a única pista.
Chaves que não são válidas em um nome CSS, como Mobile users, viram --color-Mobile-users.
Gráfico de barras
Uma grade, um eixo, <ChartTooltip /> e <ChartLegend />. O tooltip e a legenda leem seus rótulos e cores da config.
Gráfico de linhas
indicator="line" associa as chaves do tooltip às linhas que elas descrevem.
Barras empilhadas
Barras com o mesmo stackId se empilham. Arredonde apenas as pontas externas, para que a pilha seja lida como uma única barra.
Barras horizontais
Defina layout="vertical" no gráfico e troque os tipos dos eixos. <LabelList /> imprime cada valor na ponta da sua barra.
Donut
Cada fatia pega sua cor de fill nos dados. nameKey no tooltip e na legenda busca na config o rótulo de cada fatia.
Radar
Grades e eixos polares recebem os mesmos traços e rótulos discretos dos cartesianos.
Tooltip
Alterne entre os indicadores dot, line e dashed, e oculte o rótulo com hideLabel. defaultIndex em <ChartTooltip /> mostra um ponto na primeira renderização.
Formatação de valores
valueFormatter formata o número e mantém o indicador e o nome. labelFormatter faz o mesmo para o rótulo. Para substituir uma linha inteira, use formatter.
Ícones
Um icon na config substitui a chave de cor no tooltip e na legenda.
Cores clara e escura
Um objeto theme escolhe uma cor diferente em cada tema. Troque o tema do site para ver a mudança.
Valores negativos
Colora cada barra com <Cell /> e marque o zero com <ReferenceLine />.
Rótulos longos
Nomes longos de séries quebram de linha na legenda e no tooltip, e valores grandes ficam em uma só linha ao lado.
Da direita para a esquerda
O Recharts não espelha os eixos por conta própria. Defina reversed no eixo x e mova o eixo y para a direita. Passe locale ao tooltip para mostrar os dígitos do leitor.
O Recharts ativa accessibilityLayer por padrão, então o gráfico é uma única parada de tabulação pela qual você se move ponto a ponto.
| Tecla | Ação |
|---|---|
| Tab | Foca o gráfico e exibe um anel de foco. |
| ←→ | Move o tooltip para o ponto seguinte ou anterior. Em um eixo invertido, as teclas seguem a tela. |
| Enter | Mostra ou oculta o tooltip no ponto atual. |
- Para leitores de tela, os gráficos são imagens. Dê um nome a cada um com um título visível por perto ou um
aria-labelno gráfico do Recharts, e ofereça uma tabela quando as pessoas precisarem dos valores exatos. - O tooltip e a legenda nomeiam cada série em texto, então o leitor nunca precisa combinar apenas pelas cores.
- Com movimento reduzido, o Recharts pula suas animações de entrada e o tooltip salta entre os pontos em vez de deslizar.
- Os valores do tooltip são formatados em
en-US, a menos que você passelocale, para que o servidor e o navegador renderizem o mesmo texto.
As partes ficam sobre o Recharts. Toda prop do Recharts continua funcionando nos componentes de gráfico que você colocar dentro.
Fornece a config, grava as variáveis de cor e renderiza um <ResponsiveContainer /> do Recharts em volta do seu filho. Aceita todas as props de <div>.
| Prop | Tipo | Padrão |
|---|---|---|
configRótulos, ícones e cores para cada chave de dados. | ChartConfig | – |
childrenUm gráfico do Recharts, como <BarChart />. | ReactElement | – |
initialDimensionO tamanho usado antes de o contêiner ser medido. | { width: number; height: number } | { width: 320, height: 200 } |
idDá nome ao gráfico em data-chart. Gerado quando omitido. | string | – |
| Atributo | Descrição |
|---|---|
data-slot="chart" | O contêiner. |
data-chart | O id ao qual as variáveis de cor têm escopo. |
--color-KEY | Uma variável de cor por chave configurada. |
| Prop | Tipo | Padrão |
|---|---|---|
label | ReactNode | – |
iconSubstitui a chave de cor no tooltip e na legenda. | ComponentType | – |
colorQualquer cor ou variável CSS. | string | – |
themeUse no lugar de color para ter uma cor por tema. | { light: string; dark: string } | – |
O <Tooltip /> do Recharts, com um deslize mais curto entre os pontos. Aceita todas as props de tooltip do Recharts.
| Prop | Tipo | Padrão |
|---|---|---|
contentGeralmente <ChartTooltipContent />. | ReactElement | (props) => ReactNode | – |
animationDuration | number | 200 |
animationEasing | string | "ease-out" |
defaultIndexMostra o tooltip neste ponto na primeira renderização. | number | – |
| Prop | Tipo | Padrão |
|---|---|---|
indicator | "dot" | "line" | "dashed" | "dot" |
hideLabel | boolean | false |
hideIndicator | boolean | false |
labelKeyA chave da config ou dos dados a usar para o rótulo. | string | – |
nameKeyA chave da config ou dos dados a usar para cada nome. | string | – |
valueFormatterFormata cada valor e mantém o indicador e o nome. | (value, name, item) => ReactNode | – |
labelFormatter | (label, payload) => ReactNode | – |
formatterSubstitui cada linha. | (value, name, item, index, payload) => ReactNode | – |
localeFormata valores numéricos. | Intl.LocalesArgument | "en-US" |
colorUma cor de indicador para todas as linhas. | string | – |
className | string | – |
labelClassName | string | – |
| Atributo | Descrição |
|---|---|
data-slot="chart-tooltip" | A caixa. |
data-slot="chart-tooltip-label" | O rótulo. |
data-slot="chart-tooltip-item" | Uma linha por série. |
data-slot="chart-tooltip-indicator" | A chave de cor. |
data-indicator | Na chave: dot, line ou dashed. |
--chart-indicator | A cor da chave. |
O <Legend /> do Recharts. Aceita todas as props de legenda do Recharts e lista as séries na ordem em que você as declara, em vez de alfabeticamente.
| Prop | Tipo | Padrão |
|---|---|---|
contentGeralmente <ChartLegendContent />. | ReactElement | (props) => ReactNode | – |
itemSorternull mantém a ordem declarada. | "value" | "dataKey" | (item) => number | string | null | null |
| Prop | Tipo | Padrão |
|---|---|---|
hideIcon | boolean | false |
nameKeyA chave da config ou dos dados a usar para cada nome. | string | – |
className | string | – |
| Atributo | Descrição |
|---|---|
data-slot="chart-legend" | A lista. |
data-slot="chart-legend-item" | Uma entrada por série. |
data-slot="chart-legend-indicator" | A amostra de cor. |
Retorna { config } dentro de um <ChartContainer />, para criar seu próprio conteúdo de tooltip ou legenda.
- AvatarFotos de usuário com fallback de iniciais, badges de status e grupos empilhados que se recolhem em uma contagem.
- BadgeRótulos de status com pontos coloridos, tags removíveis que deslizam até fechar e contagens que rolam até o novo valor.
- CardUma superfície para agrupar conteúdo, com três variantes, mídia de ponta a ponta, raios concêntricos e links no card inteiro.
- Data tableUma tabela para dados reais, com ordenação, busca, seleção de linhas, colunas fixadas, cabeçalho fixo e paginação.
- ItemUma linha de mídia, texto e ações para listas, configurações e seletores, com uma superfície agrupada e um destaque de hover que desliza entre as linhas.
- KbdTeclas para atalhos que mostram os símbolos certos em cada plataforma, são lidas corretamente por leitores de tela e afundam com as teclas reais.
Usado em blocos
Blocos que se baseiam em Chart.
- BillingPlano e uso para um produto de IA, no estilo de Cursor, Claude e Vercel. Um medidor de uso dividido por modelo que projeta o fim do ciclo e avisa antes de os créditos acabarem, um gráfico diário que você pode percorrer, um limite de gastos com alertas que você pode pré-visualizar no medidor, mudanças de plano com proporcional exato, um formulário de cartão com validação real e faturas que baixam como PDF.
- SettingsConfigurações para um produto de IA, organizadas como no Cursor e no Claude. Uma barra lateral preenchida com busca, grupos e links externos, cards de linhas com seletores discretos e opções aninhadas, uma ilha de salvar escura que só sobe quando algo muda, ⌘S para salvar, erros de campo vindos das suas verificações ou do seu servidor e estados de carregamento com o formato do conteúdo.