Grupo de botões de açãoActionButtonGroup
Empilha ações sugeridas depois de uma resposta, para escolher em vez de digitar.
143 entradas de @cortex-intelligence/ui e @cortex-intelligence/charts, com as variações declaradas nas stories de cada componente — a mesma fonte que o build valida.
Componentes para disparar ações e comandos — botões, menus de contexto e paleta de comandos.
ActionButtonGroupEmpilha ações sugeridas depois de uma resposta, para escolher em vez de digitar.
ActionButtonBotão de destaque com superfície em gradiente cintilante e chevron que avança no hover.
AgentChoicesDisponível para o agenteConjunto de opções clicáveis que o agente oferece quando a resposta depende de uma decisão da pessoa. Clicar reenvia o id da opção como próxima mensagem — não é visualização, é uma pergunta.
ButtonVariantes, tamanhos, tamanhos de ícone e estados do componente de botão.
IconButtonBotão quadrado só com ícone, com estado ativo — o ícone herda a cor do texto.
LanguageSwitcherMenu suspenso icon-first (globo) com grupo de rádio para trocar o idioma ativo.
CommandLista de comandos pesquisável com grupos, atalhos e separadores.
DropdownMenuMenu de contexto com itens, checkboxes e submenus.
LegacyButtonBotão da geração shadcn, mantido enquanto as telas migram para o Button em Base UI.
ThemeToggleBotão que alterna entre os temas claro e escuro da aplicação.
MenuButtonBotão de menu com o símbolo Cortex sobre uma superfície de vidro, usado na navegação mobile.
OptionSwitcherMenu suspenso icon-first com grupo de rádio para escolher uma entre N opções. O ícone e todos os rótulos vêm por prop — é a base do seletor de idioma e do seletor de conta da rail.
PanelCardDisponível para o agenteCard que, clicado, abre uma view já disponível no painel lateral do host — ex.: o perfil detalhado de um concorrente citado na conversa. Não é visualização, é um atalho para algo que já existe na tela.
SsoButtonBotão de login com provedor da organização, com ripple ao clicar.
ThreadCounterButtonBotão de ícone (raio) com um selo de contagem sobreposto, indicando quantos chats existem no módulo. Ao clicar, abre o menu com chats e artefatos salvos (menu implementado separadamente).
Campos de entrada, controles de seleção e blocos para composição de formulários.
ChatInputCampo de conversa com a Concierge. `variant` escolhe entre o painel amplo (desktop) e a pílula que expande ao toque (mobile).
Superfície desktop, o padrão. Enviar só habilita quando há texto; os nomes acessíveis dos controles vêm de `labels`.
O microfone fica ativo e a digitação é bloqueada. `labels.stopRecording` é opcional — sem ele o nome não muda e quem comunica o estado é o `aria-pressed`.
Pílula de 56px que expande em posição ao ser tocada, fechando de novo ao tocar fora enquanto está vazia. Não tem os estados `recording`/`sending` nem o seletor de arquivo — o compilador recusa essas props aqui.
Clipe e microfone só viram botões quando recebem callback. Sem ele são decoração (`aria-hidden`), fora da ordem de tabulação — um controle focável que anuncia uma ação inexistente é pior do que glifo nenhum.
CheckboxCaixa de seleção para opções booleanas independentes.
ColorPickerSeletor de cor sólida com suporte a alfa, presets e popover.
DatePickerSeletor de data única, período ou granularidades como mês e ano.
FileDropzoneÁrea de upload por arraste ou clique, com lista de arquivos.
FormSectionAgrupa campos relacionados sob um título, com variantes de destaque.
InputCampo de texto padrão para entrada de dados curtos.
InputGroupAgrupa um input com ícones, textos ou botões adjacentes.
LabelRótulo acessível para associar um texto a um campo de formulário.
MultiSelectSeletor de múltiplas opções com busca e remoção por chip.
PasswordInputCampo de senha com botão para exibir ou ocultar o valor digitado.
RichTextEditorEditor de texto rico com barra de ferramentas configurável.
SelectSeletor de uma opção entre uma lista, com variante simplificada.
SwitchAlternador para ligar ou desligar uma configuração.
TextareaCampo de texto multilinha para descrições e comentários.
Componentes para exibir status, conteúdo e estruturas hierárquicas na interface.
ActionListItemDisponível para o agenteLinha de lista de IA com superfície em gradiente cintilante e ícone de destaque.
AgentMessageResposta do agente no chat: texto do AIMessage mais indicador de streaming e slot de artefato — os dois blocos que um parágrafo não pode conter.
AIMessageResposta do assistente como parágrafo sem bolha; só a última de uma sequência recebe margem.
AudioBubbleBolha de áudio com forma de onda e play/pause, para mensagens de voz no chat.
AvatarAvatar com imagem ou iniciais, em tamanhos variados e agrupamento sobreposto.
`soft` (padrão) é o realce claro; `brand` é o gradiente da marca do avatar de persona/usuário. Cada tone fecha o par fundo + texto — não troque só o fundo por `className`, é assim que aparece branco sobre roxo claro.
BandedScaleDisponível para o agenteRégua de faixas coloridas com marcador (ex.: NPS de −100 a +100).
ChatCardCartão destacado no fluxo da conversa, arrastável para revelar a ação por trás.
`direction="from"` é para quando o usuário acabou de chegar a este módulo vindo de outro — a seta aponta para a esquerda e fica antes do ícone/título/subtítulo, em vez de depois. O texto ("Veio de..." em vez de "Ir para...") é responsabilidade de quem usa o componente, via `title`/`sub`.
`active` reflete o estado `open` do `SideDrawer` correspondente — aplique enquanto a gaveta estiver aberta e remova quando ela fechar.
O card nunca abre a gaveta sozinho — o app é quem liga `active`/`onActivate` ao `open`/`onOpenChange` do `SideDrawer`. Um clique no card fechado abre; um clique no card já ativo fecha (mesmo efeito do X interno do SideDrawer).
`label` (eyebrow) e `description` são linhas próprias, em de-ênfase, entre o título e a chamada (`sub`) — os cartões de roteiro do Concierge carregam os três, e colapsar dois deles em um perde conteúdo do script.
CheckBulletDisco com ✓ para listas de checagem — ocupa o mesmo espaço marcado ou não, então a lista não pula.
Desmarcado, o ✓ fica invisível mas continua ocupando espaço — a lista não pula ao marcar. A cor vem do consumidor porque nas listas de origem ela codifica domínio (oportunidade × sensibilidade).
ExpandableCardCard cujo corpo colapsa atrás de +/−, com cabeçalho sempre visível e uma faixa de resumo opcional que permanece nos dois estados.
HeadlineDisponível para o agenteA frase que titula um bloco de gráfico, montada de segmentos: cada pedaço pode ser realçado como medida, veredito positivo/negativo ou destaque, e o resto fica em texto corrido.
HistWaveDisponível para o agenteNavegador interativo de picos históricos (arraste, roda e teclado).
IconTileSuperfície quadrada, arredondada ou circular para abrigar um ícone, uma inicial ou um índice.
xs e sm existem para os tiles que carregam um número (posição num ranking, etapa), não um ícone.
`tone="none"` + `className` para uma cor que não existe como token do DS — é como os webapps aplicam a paleta da própria oferta sem pedir uma variante nova ao pacote.
InsightCardDeckDisponível para o agenteCartões de insight arrastáveis — deslize para avançar para o próximo da pilha.
AccordionLista de painéis expansíveis para organizar conteúdo em seções.
BadgeRótulo compacto para indicar status ou categoria.
CardSuperfície de conteúdo com cabeçalho, corpo e rodapé opcionais.
ScrollAreaÁrea com rolagem customizada para listas e conteúdos longos.
SeparatorLinha divisória horizontal ou vertical entre conteúdos.
SimpleTooltipWrapper simplificado de tooltip para textos curtos de ajuda.
SkeletonPlaceholder animado para indicar carregamento de conteúdo.
SpinnerIndicador de carregamento circular em diferentes tamanhos.
TabsNavegação por abas para alternar entre visões de conteúdo relacionado.
As abas viram botões dentro de uma cápsula. A borda inferior some: duas afordâncias de “aba ativa” ao mesmo tempo competem — aqui quem marca é a pílula clara atrás do rótulo.
TagEtiqueta colorida para marcação e classificação de itens.
TooltipDica contextual exibida ao passar o mouse sobre um elemento.
TreeEstrutura hierárquica navegável com expansão, seleção e itens desabilitados.
LegendDotPonto colorido que liga uma série do gráfico ao seu rótulo — a cor vem do dado, não de um token.
`color` é prop e não variante: em legenda a cor é DADO — vem da paleta da série e muda a cada dataset, então não há classe Tailwind para ela.
MarkdownDisponível para o agenteRenderiza markdown sanitizado (rehype-sanitize) com estilo prose e extensões GFM (tabela, riscado, lista de tarefas).
MetricTileDisponível para o agenteTile de métrica: valor grande, rótulo e variação opcional (alta/baixa).
`labelPosition="top"` sobe SÓ o rótulo, via `order-first` — inverter o bloco inteiro levaria o delta textual junto. A ordem no DOM não muda, então a leitura assistiva também não.
`deltaVariant="badge"` põe a variação como pílula ao lado do valor. A seta some: dentro da pílula, cor e sinal já dão a direção.
`surface="none"` tira fundo e padding para o tile compor dentro de um card que já os tem — é como o Pulso monta o cabeçalho do gráfico combinado.
`children` cai abaixo da métrica — o slot onde os tiles de tendência encaixam um sparkline. O bloco cinza aqui é um marcador; no app é um `TrendAreaChart`.
NotificationBadgeContador circular pequeno, com limite configurável e uso sobre ícones.
ScoreBarDisponível para o agenteBarra de progresso/score 0–100 com variantes semânticas.
StepCardCard de etapa concluída (anel de progresso) — narra o progresso de uma configuração em andamento. Puramente visual, sem afordância de clique.
StepDotsStepper de bolinhas com etapa atual, concluídas e futuras.
StepRingAnel de progresso segmentado (etapas concluídas × total).
StepTimelineTimeline vertical numerada de um setup guiado: cada etapa mostra posição, nome e o que produziu, e lê como concluída, atual ou pendente. O estado vem de um único contador `done`.
SynthesisCardDisponível para o agenteLeitura curta do analista, exibida logo após o processamento de um tema — ícone + título + texto corrido.
TimelineSequência de acontecimentos com horário e título, cada item com detalhe opcional.
É um `<ol>`: a ordem é a informação. O traço vem de uma borda no próprio `<ol>`, então não para no penúltimo item nem sobra depois do último.
UserMessageBolha da fala de quem escreve: canto inferior direito achatado, largura ajustada ao conteúdo.
Alertas, notificações e diálogos para comunicar estado, confirmações e mensagens ao usuário.
AgentStepsAs etapas de um turno do agente, na ordem em que começaram, cada uma com o seu estado. Colapsa num resumo quando a resposta começa a ser escrita.
EmptyStateEmpty-state calmo com ícone, título e descrição para áreas sem conteúdo.
`size="sm"` para o vazio de UMA LISTA — dentro de um modal ou gaveta, onde o bloco padrão (py-16, título extrabold) viraria um cabeçalho no lugar de uma nota.
AlertBanner inline para mensagens de informação ou erro, com ação opcional.
ConfirmDialogModal de confirmação pronto, com variantes destrutiva, aviso e informação.
DialogModal para formulários e confirmações que exigem foco total do usuário.
Ocupa a viewport inteira, para conteúdo que não cabe numa caixa centrada. Sobe acima da camada de sobreposição comum (`z-50`), porque tela cheia significa que nada do chrome da aplicação fica por cima — e estabelece um containing block, então um filho `position: fixed` fica preso ao modal.
PopoverPainel flutuante ancorado a um gatilho, para edições rápidas e contexto adicional.
SheetPainel deslizante ancorado às bordas da tela, para formulários e navegação.
SonnerNotificações temporárias (sonner) para sucesso, erro, aviso, info e carregamento.
StreamingIndicatorSinal de que a resposta ainda está sendo produzida — atividade nomeada enquanto há trabalho em curso, cursor enquanto há texto chegando. Os dois convivem.
O que o agente está fazendo agora — vale durante todo o turno, inclusive com a resposta já sendo escrita (quem compõe desenha esta forma acima do texto). O texto é informação, não fica `aria-hidden`.
Sem nada a anunciar: só o cursor no fim da linha, decorativo.
ThinkingIconA marca Cortex pulsando — o sinal de que o agente está trabalhando. Autocontida: os keyframes e o fallback de movimento reduzido vêm dentro do próprio SVG.
Decorativo por default (`aria-hidden`) — é assim que ele entra ao lado de um rótulo de atividade.
Sem rótulo visível ao lado, o ícone precisa de `label` para ser anunciado.
O uso real: o ícone no slot `icon` do `StreamingIndicator`, com o micro-texto da atividade em curso ao lado.
Componentes para exibir e manipular conjuntos de dados — tabelas, filtros, paginação e listas de seleção.
CompanyCardDisponível para o agenteCard de empresa do Radar de Reputação: indicadores do período com variação, relação com o tenant e quebras por veículo e por jornalista. Estático como renderable do agente, ou expansível no comparativo do onboarding.
DefinitionListPares rótulo/valor — empilhados como ficha de atributos, ou lado a lado como régua de indicadores.
A ficha de atributos: rótulo à esquerda, valor à direita.
A régua de KPIs. Parece um grid de tiles, mas emite `dl`/`dt`/`dd`: a relação rótulo→valor fica na árvore, e um leitor de tela anuncia “Positivas: 312” como um par.
DeltaBadgePílula de variação (alta/queda) comparando um valor com o período equivalente anterior.
DataTableDisponível para o agenteTabela orientada a dados com seleção de linhas, ordenação, paginação, busca e filtros por coluna.
ColumnHeaderCabeçalho de coluna do DataTable com menu de ordenação e opção de ocultar, ou apenas o título quando a coluna não é ordenável.
FilterPopover de filtro por coluna do DataTable, com variantes de texto, data, número e seleção (incluindo busca remota) e opção de filtrar por valor nulo.
PaginationControles de paginação do DataTable — navegação entre páginas, seletor de itens por página e botão opcional de atualizar.
ToolbarBarra de busca com debounce acima do DataTable, com slots para ações à esquerda e conteúdo adicional à direita.
ViewOptionsMenu suspenso para exibir/ocultar colunas do DataTable, com rótulo do botão customizável.
SelectionListLista de itens selecionáveis em formato de botões, com suporte a badges e estado desabilitado.
TableTabela base para exibição tabular de dados, com variante horizontal para pares chave/valor.
MetricStripDisponível para o agenteDois a quatro indicadores dividindo UMA moldura — o cabeçalho do Radar de Reputação e do Flash Temático. A contagem define as colunas, e cada item pode trazer a pílula de variação.
TopEntitiesCardDisponível para o agenteRanking textual "Top N" (fontes, jornalistas, porta-vozes) — nome, impressões, publicações e uma tag de tonalidade/impacto, com linha extra opcional.
Visualizações de dados sobre ECharts, temadas pelos tokens do design system e emitíveis pelo agente.
ComboBarLineChartDuas séries em eixos Y independentes — as escalas nunca competem pela mesma amplitude.
DonutChartComposição fechada do donut: paleta do DS e legenda ao lado, sem montar option.
DonutStatCardDonut pequeno, frase construída a partir da fatia de maior percentual e legenda completa.
ImpactEvolutionChartDisponível para o agenteLinhas com área para a evolução das impressões por faixa de impacto — sem eixo Y e sem grade, com a legenda de pontos embaixo. A cor vem do SIGNIFICADO da faixa (favorável/inerte/desfavorável), não da ordem em que a consulta devolveu as linhas.
ImpactStackedBarMesma leitura da barra de sentimento, mas com o total de impressões de cada segmento no tooltip.
MetricTrendDisponível para o agenteUm indicador e a sua própria série no MESMO card: valor grande, pílula de variação e uma sparkline com área embaixo. É a segunda faixa do Radar de Reputação — o que o distingue de um `metric` é justamente carregar a série do período.
SentimentStackedBarPositivo/neutro/negativo em barra fina, com legenda textual opcional. Rótulos por prop; cores dos tokens semânticos.
ShareOfVoiceBarBarra única empilhada a 100% + legenda com percentual por segmento. A frase acessível e o locale entram por prop.
ShareOfVoiceRoseDisponível para o agenteRosa de Nightingale (coordenadas polares) com a participação de cada empresa no período — uma medida só, ou quebrada nas três camadas de impacto. Irmã em rosca polar do ShareOfVoiceBar.
TopSourcesBarsBarras normalizadas pelo maior valor, com formatação do valor por prop.
TopicsGraphChartGrafo de força ligando tópicos setoriais (hub) a assuntos agrupadores (folha), dimensionados por volume.
TrendAreaChartLinha suave + área, com rótulos de eixo e tooltip. `valueSuffix` destaca o último valor; `height` ajusta entre sparkline de tile e gráfico de leitura.
VolumeBarChartBarras verticais de picos por período; os valores saem também numa lista sr-only como alternativa textual.
EChartDisponível para o agenteSéries temporais com uma ou mais linhas — evolução de métricas ao longo do tempo.
EChartMini-gráfico de barras sem o piso padrão de 200px de altura, para uso inline em cards estreitos.
EChartDisponível para o agenteComparação de valores entre categorias discretas.
EChartDisponível para o agenteComposição de uma categoria total dividida em subcategorias.
EChartDisponível para o agenteComparação entre muitas categorias com rótulos longos (ranking).
EChartDisponível para o agenteLinhas com preenchimento, empilháveis para mostrar composição ao longo do tempo.
EChartDisponível para o agenteDistribuição proporcional de um total entre categorias.
EChartDisponível para o agenteComo pizza, com centro vazio, útil para destacar um total central.
EChartDisponível para o agenteComo rosca, mas com o RAIO de cada fatia proporcional ao valor — a diferenca entre categorias aparece duas vezes (angulo e raio), o que a mantem legivel mesmo com uma fatia dominante. E o grafico que o Radar de Reputacao usa para sentimento e protagonismo, com a cor vinda do significado de cada fatia (`colorField`).
EChartDisponível para o agenteRelação entre duas variáveis numéricas a partir de pontos individuais.
EChartDisponível para o agenteDispersão com animação de onda para destacar pontos de interesse, como leads quentes.
EChartDisponível para o agenteBarras compostas por símbolos repetidos, dando um toque visual mais expressivo.
EChartDisponível para o agenteDistribuição estatística (mínimo, quartis e máximo) de uma métrica por categoria.
EChartDisponível para o agenteVariação de abertura, fechamento, mínima e máxima de uma métrica ao longo do tempo.
EChartDisponível para o agenteIntensidade de uma métrica cruzando duas dimensões categóricas, com escala de cor.
EChartDisponível para o agenteComparação de múltiplas variáveis entre categorias em um layout radial.
EChartDisponível para o agenteProgresso de um indicador em relação a uma meta, em formato de velocímetro.
EChartDisponível para o agenteRedução de volume entre estágios sequenciais de um processo.
EChartDisponível para o agenteEstrutura hierárquica pai-filho exibida como uma árvore ramificada.
EChartDisponível para o agenteComposição hierárquica de um total em retângulos proporcionais ao valor.
EChartDisponível para o agenteHierarquia representada em anéis radiais concêntricos.
EChartDisponível para o agenteFluxo e transferência de volume entre nós ao longo de etapas de um processo.
EChartDisponível para o agenteRede de nós e conexões, útil para mapear relacionamentos entre entidades.
EChartDisponível para o agenteEvolução de múltiplas séries ao longo do tempo em faixas fluidas empilhadas.
EChartDisponível para o agenteCompara vários segmentos em múltiplas métricas simultâneas, cada linha um segmento.
EChartDisponível para o agenteMapa coroplético do Brasil por estado, com escala de cor por intensidade da métrica.
EChartDisponível para o agenteTrajetos animados sobre o mapa, para representar distribuição ou movimento entre praças.
Estruturas de página — cabeçalhos, contêineres e composições de tela inteira.
AppShellTrilho de navegação à esquerda, coluna de conversa ao centro e gaveta acoplada à direita.
BreadcrumbTrilha de navegação dirigida por items[], com item atual e separador configurável.
ChatUILayout de conversa: cabeçalho fixo, histórico rolável ao centro e composer no rodapé.
AppHeaderCabeçalho fixo com menu lateral, ações de header e menu de perfil do usuário.
AuthLayoutLayout de autenticação com formulário e imagem lateral, ou variante single centralizada.
ContainerWrapper centralizado com largura máxima e padding lateral responsivo.
EntityPagePágina de entidade com cabeçalho, toolbar de busca/ações e tabela de dados.
ManagementLayoutMoldura das telas de administração: cabeçalho com título, ações e corpo em cartão.
MobileFrameMoldura de telefone para pré-visualizar telas mobile da Concierge, com menu e navegação.
NotificationPanelGaveta lateral aberta pelo sino de notificação do `ChatUi` — mostra um estado vazio por padrão, ou uma lista de itens (ex.: `ChatCard variant="modulo"`) quando há algo pendente.
SideDrawerPainel de vidro redimensionável por arraste, com alça que também expande e recolhe.
`fixedHeader` (default `true`) escolhe se o título/botão de fechar ficam parados enquanto só o corpo rola, ou se rolam junto com o resto do conteúdo (`fixedHeader={false}`) — mesmo header, só muda onde ele é renderizado. Use os controles para alternar e role o painel para ver a diferença.
Como este componente é usado na prática: sempre atrás de um `ChatCard` `variant="drawer"`, nunca de um botão genérico. Um `open` booleano no app dirige os dois — `active`/`onActivate` do card e `open`/`onOpenChange` da gaveta.
SideMenuTrilho de navegação com fluxos, itens e menu do usuário.
SlideContainerLayout de slides com scroll-snap vertical e navegador de dots lateral.