Grupo de botões de açãoActionButtonGroup
Empilha ações sugeridas depois de uma resposta, para escolher em vez de digitar.
158 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.
ButtonLinkA aparência do botão com a semântica de um link. Use quando a ação NAVEGA — o `Button` assume um `<button>` nativo e anunciaria "botão" para algo que sai da página.
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 com um selo de contagem opcional sobreposto, para o cabeçalho do chat. O glifo é do chamador (`icon`, default raio) e a superfície tem duas formas: `chip`, com o retângulo claro atrás, e `bare`, sem nada atrás — igual ao sino ao lado. Sem contagem, o selo não aparece. O painel que ele abre é 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`.
O intervalo entre o clique no microfone e a captura existir — permissão, segredo, socket. O spinner fica no MICROFONE, e a digitação continua LIBERADA (ao contrário de `recording` e `transcribing`): a permissão pode levar segundos, e travar o campo nesse intervalo pune quem só quis clicar.
A transcrição PROVISÓRIA, em cinza. É uma camada sobre o campo, não o valor dele: não pode ser submetida, não rouba clique e não é anunciada a leitor de tela. Ela é desenhada na posição do cursor, pelo mesmo cálculo que a inserção final usa — as duas concordam por construção.
O intervalo entre parar a gravação e o texto aparecer. Compare com `Sending`: o spinner fica no MICROFONE, onde a pessoa acabou de clicar, e o ícone de enviar continua sendo o de enviar — trocá-lo diria 'sua mensagem foi enviada', quando nada foi enviado.
Um turno rodando, sem `onStop`: a digitação continua liberada (mudou em 02/09/2026 — antes `sending` desabilitava tudo) e o botão segue sendo enviar, como antes da fila (compat).
Campo vazio → PARAR. Digite algo → volta a ser enviar. Envie (o campo esvazia) → PARAR de novo. `labels.stop` é o nome acessível do botão nesse estado.
A fila mora ACIMA do campo, e não na trilha da conversa: enquanto pendentes, essas mensagens ainda vão acontecer, e misturá-las ao que já aconteceu apagaria essa diferença. Cada item mostra um chip por arquivo anexado — descartar o item descarta os arquivos junto.
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.
AgentOrbitUm núcleo com a marca e os especialistas que ele aciona, ligados por conectores tracejados. Abaixo de `sm` vira uma órbita de verdade, com metade dos chips acima e metade abaixo; acima, duas colunas com o conector crescendo até o centro. Não carrega palavra nenhuma: nomes, rótulo do núcleo e ícones chegam como props.
Os seis do desenho. O fundo claro faz parte da story, não do componente — ele é transparente e serve a qualquer superfície.
Com número ímpar, o extra fica à esquerda — nenhum nó é perdido. O componente não fixa seis; a órbita compacta repete o leque quando passam disso.
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).
DailyPulseDisponível para o agenteA tela de abertura do Flash Temático: como está o noticiário hoje — a pauta do dia com o tom da cobertura — e os assuntos que a pessoa pode explorar, um card por vez, cada um com um botão que inicia a exploração. É uma tela inteira, não um indicador: emita uma vez por turno e nunca dentro de um painel.
EcosystemBandDisponível para o agenteA faixa clara que fecha a peça: manchete, o rótulo do recorte, o corpo, o diagrama de orquestração (`AgentOrbit`, que ela compõe em vez de redesenhar) e um convite para falar com o time. O CTA é um LINK — e é isso que mantém o kind fora da categoria interativa, que seria filtrada do catálogo de painel.
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.
`tone="hero"` é a MESMA frase usada como abertura de uma peça inteira, em corpo de display — troca corpo, entrelinha e tracking juntos, que é por que é um tom e não três classes copiadas pelo consumidor. `HeroBand` o compõe junto do gradiente e do topo em duas pontas; avulso, ele serve a qualquer abertura que não precise da faixa.
`tone="section"` abre uma SEÇÃO, um degrau abaixo da capa: sai da escala de display do DS (`--text-display-xl`, 30px) e — diferente do `hero` — não salta no `sm:`, porque uma abertura de seção divide a linha com o gráfico que explica e 36px em meia grade estouram a coluna. `SectionLead` o compõe junto do rótulo e do parágrafo.
HeroBandDisponível para o agenteA capa de uma peça de leitura: uma faixa com gradiente próprio carregando quem fala, o contexto à direita, a frase de abertura em display, o rótulo da leitura e o parágrafo. É um componente — e não quatro blocos numa grade — porque a grade posiciona blocos e não pinta fundo, e porque as quatro partes têm um ritmo entre si que cada consumidor recriaria à mão.
Sem eyebrow e sem aside, a linha do topo não é desenhada — a faixa não reserva espaço para o que não existe. Os rótulos e o parágrafo são todos opcionais; só a frase é obrigatória.
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.
InsightChipO vocabulário FECHADO com que o analista classifica uma recomendação — vermelho é risco a agir agora, laranja é sensibilidade a acompanhar, verde é oportunidade, roxo é assunto neutro, cinza é o não classificado. Cada variante é um par de superfície do DS com contraste AA verificado nos dois temas; o modelo emite o NOME da classificação e o design system decide a cor.
Preenchido é o chip do `InsightCardDeck`: ali ele é o único elemento colorido de um card branco e precisa do peso do preenchimento.
Contornado é o chip do `RecommendationList`: numa lista de quatro linhas, quatro pastilhas preenchidas competem entre si e com o texto que importa. O texto é o MESMO passo do par nas duas superfícies — o contorno o reusa por `currentColor`.
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.
`deltaPosition="below"` põe a pílula numa linha própria embaixo do número — a anatomia dos três cards de cabeçalho do Flash Temático, onde a leitura é rótulo, número e variação, uma coisa por linha. Ao lado do número (o default) é o que cabe na faixa de indicadores, onde o espaço horizontal é o que sobra.
`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.
PitchBandDisponível para o agenteA faixa escura que fecha uma peça de leitura: manchete em duas linhas, uma afirmação, um grid numerado do que o produto faz e um fecho em dois pesos. Existe como componente porque markdown não expressa nada disso — e porque a grade posiciona blocos e não pinta fundo.
O grid não fixa cinco: com três, o ímpar sobra na primeira coluna. O ordinal chega FORMATADO — zerar à esquerda é decisão de locale, não de layout.
RecommendationListDisponível para o agenteAs recomendações do analista como lista: uma linha cada, o chip da classificação contornado à esquerda, a frase à direita, divisórias entre elas. Mesmo conteúdo e mesma classificação do `InsightCardDeck`, leitura oposta — o baralho mostra uma por vez e serve a uma gaveta de conversa; a lista mostra todas e serve a uma peça que se lê de cima a baixo, se compartilha e se imprime.
Sem título, para quando o bloco já está sob um cabeçalho. As cinco variantes são o mesmo conjunto FECHADO do baralho — o modelo classifica e o design system decide a cor, nunca o contrário.
ScoreBarDisponível para o agenteBarra de progresso/score 0–100 com variantes semânticas.
SectionLeadDisponível para o agenteA frase em corpo de display que abre uma seção de uma peça de leitura, com as palavras medidas realçadas, um rótulo miúdo em caixa-alta embaixo e um parágrafo opcional. Existe porque o `headline` titula um gráfico em `text-sm` e a moldura da grade não desenha nada maior — sem ele, cada seção fica pequena demais ou o app copia as classes à mão.
A metade esquerda de uma seção: a frase ocupa seis colunas e o gráfico que ela explica ocupa as outras seis. É por isso que o corpo NÃO salta no `sm:` como o da capa — 36px estouram meia grade.
Com rótulo: a linha miúda em caixa-alta nomeia o recorte que o gráfico abaixo mostra. Ela é o mesmo slot que a `HeroBand` usa para o rótulo da leitura — as duas compõem este componente.
Rótulo e parágrafo são opcionais; só a frase é obrigatória. O parágrafo aceita nó pronto — quem monta o dado é quem interpola e formata os números.
`tone="hero"` é o degrau da CAPA, e é o que a `HeroBand` passa ao compor este componente — a faixa acrescenta só o gradiente e o topo em duas pontas. Avulso, ele serve a uma abertura de peça que não precise da superfície.
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.
TruncatedTextTexto de uma linha com reticências e tooltip que só aparece quando o conteúdo está realmente cortado.
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. Recolhe num resumo reabrível quando o consumidor pede — no chat, ao fim do turno.
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. Em `state="idle"` é a mesma marca parada.
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.
Lado a lado é a única forma de a diferença ser visível no catálogo. O repouso é a marca ÍNTEGRA — mesma opacidade, mesma escala —, não uma versão apagada: o que muda é só o movimento.
TurnIndicatorUma linha: marca, tempo, `·`, o que está sendo feito e as reticências que se escrevem. Parada em repouso, pulsando em atividade. Ao lado do `StreamingIndicator`, o par se lê assim: o cursor diz que TEXTO está chegando, este diz que TRABALHO está em curso.
O estado que a pessoa vê durante o turno: marca pulsando, o que está sendo feito e os segundos subindo. Um cronômetro sozinho conta sem dizer o quê.
Enquanto o agente não nomeia o que faz, sobra a marca e o tempo. Aí o `label` entra como nome acessível — sem ele, um turno em curso seria invisível para leitor de tela.
Terminado o trabalho, o tempo desaparece e sobra a marca parada — íntegra, não apagada. É o que mantém o símbolo na tela em vez de fazê-lo aparecer e sumir a cada turno.
Trabalho em background passa de um minuto com frequência, e é o formatador de quem consome que decide a forma — aqui, minuto mais segundo em vez de "137 s".
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.
DistributionTileDisponível para o agenteA categoria dominante escrita por extenso, com a distribuição inteira numa barra de 100% embaixo — a tonalidade predominante do Flash Temático. O componente elege o dominante pelo maior peso e ordena as faixas por papel (favorável → imparcial → desfavorável), para duas barras serem comparáveis entre si.
DominanceBandDisponível para o agenteDuas dominâncias lado a lado numa faixa só, separadas por uma divisória vertical — o tópico setorial que liderou o período com a fatia que detém, e a tonalidade predominante com a distribuição inteira numa barra de 100%. A divisória não é um elemento: é a borda esquerda da metade direita, então corre a altura toda sem ninguém medi-la, e o respiro vem do padding de cada metade em vez de um vão entre elas.
A segunda row do Flash Temático. As metades NÃO são simétricas de propósito: a esquerda lê de lado (nome e fatia no mesmo corpo, alinhados pela base) e a direita lê de cima para baixo (rótulo, palavra, barra), colorida pelo papel do tom.
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. Eles são distribuídos na largura da faixa (um em cada extremidade), quebram sozinhos quando ela aperta, e cada item pode trazer a pílula de variação.
O default (`xs`, 20px) foi MEDIDO na gaveta de referência e continua certo lá. `size` existe porque a mesma faixa serve duas superfícies: ao lado de uma conversa, 20px é o certo; numa peça de leitura de largura inteira — um relatório que se compartilha e se imprime — o mesmo 20px lê como legenda. Trocar o default resolveria uma e quebraria a outra.
TagListDisponível para o agenteUm card com uma nuvem de termos em pílulas — o vocabulário que a imprensa usou ao redor de uma pauta. Cada pílula é uma palavra ou uma expressão curta e NÃO carrega número: um termo não tem medida, e imprimir a frequência convidaria a ler a nuvem como ranking. As pílulas são o `Tag` do próprio pacote, no formato `pill`; o que este componente acrescenta é o embrulho — a superfície, o par título/subtítulo e a quebra de linha.
O caso do Flash Temático: superfície roxa clara, título, linha de apoio e os termos em pílulas roxas, quebrando em quantas linhas forem necessárias.
Sem título, sem subtítulo e sem superfície — para quem embrulha o componente no PRÓPRIO card. Não é um modo que o agente possa pedir: o descritor não oferece `plain`, porque o dispatcher não desenha moldura nenhuma em volta deste kind e as pílulas sairiam soltas.
A superfície neutra, para uma lista que não é o vocabulário medido da pauta. A cor da pílula é escolha de tema e nunca uma leitura do dado — um termo não é um veredito.
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.
RankedBarsDisponível para o agenteRanking horizontal com o RÓTULO à esquerda e o VALOR no fim da barra — a forma que o tipo `horizontal-bar` cru não alcança, porque ele desenha um eixo no rodapé e nenhum número por barra. Use quando a comparação é entre poucos itens nomeados e a pessoa deve ler a cifra, não medir a barra contra uma régua.
`valueUnit="share"` imprime cada valor como porcentagem da soma das linhas desenhadas. A conta fica aqui, e não em quem monta o dado, porque precisa do total — que só existe quando todas as linhas estão em mãos.
Sem `valueUnit`, o número sai como veio — a formatação é uma prop, para o pacote não cravar locale nenhum.
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.