Badge
Atom
Badge comunica uma classificação curta. Ele não é botão, não substitui texto explicativo e não carrega decisão sozinho.
Use Badge para status, risco, origem de IA ou metadados compactos. A semântica vem antes da cor: risco usa stable / monitor / attention / high / critical; delta continua sendo movimento de métrica.
Exemplos copiáveis
React
React
import * as React from "react"
type BadgeTone = "neutral" | "stable" | "monitor" | "attention" | "high" | "critical" | "ai"
type PulsoBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {
tone?: BadgeTone
}
const toneClass: Record<BadgeTone, string> = {
neutral: "border-[var(--border)] bg-[var(--muted)] text-[var(--fg-secondary)]",
stable: "border-[var(--risk-stable-border)] bg-[var(--risk-stable-bg)] text-[var(--risk-stable-text)]",
monitor: "border-[var(--risk-monitor-border)] bg-[var(--risk-monitor-bg)] text-[var(--risk-monitor-text)]",
attention: "border-[var(--risk-attention-border)] bg-[var(--risk-attention-bg)] text-[var(--risk-attention-text)]",
high: "border-[var(--risk-high-border)] bg-[var(--risk-high-bg)] text-[var(--risk-high-text)]",
critical: "border-[var(--risk-critical-border)] bg-[var(--risk-critical-bg)] text-[var(--risk-critical-text)]",
ai: "border-[var(--border)] bg-[var(--primary-soft)] text-[var(--primary)]",
}
export function PulsoBadge({ tone = "neutral", className, children, ...props }: PulsoBadgeProps) {
return (
<span
className={[
"inline-flex items-center gap-1 rounded-[var(--radius-xs)] border px-2 py-0.5",
"font-mono text-[10.5px] font-medium uppercase tracking-[var(--tracking-kicker)]",
toneClass[tone],
className,
].filter(Boolean).join(" ")}
{...props}
>
{children}
</span>
)
}<PulsoBadge tone="high">◆ high</PulsoBadge>
<PulsoBadge tone="ai">◐ Escrito com Cris</PulsoBadge>
<PulsoBadge>12 fontes</PulsoBadge>Semânticas v3
| Uso | Tokens | Exemplo |
|---|---|---|
| Status de fluxo | componente/padrão de status | Em execução |
| Risco operacional | --risk-* | ◆ high |
| Delta de métrica | --delta-* | +18% |
| Origem de IA | marcador + trilha auditável | Escrito com Cris |
| Metadado neutro | --muted, --border | 12 fontes |
Regras
- Badge sempre precisa de label textual legível.
- Cor nunca é o único indicador.
- Badges de risco usam token
--risk-*. - Badges de métrica usam token
--delta-*. - Conteúdo da Cris exige origem explícita e trilha auditável.
- A taxonomia canônica de risco é
stable / monitor / attention / high / critical.
Last updated on