Table
Organism
Table é a superfície mais densa do Pulso. Use quando comparação, ordenação e leitura linha-a-linha importam mais que narrativa visual.
Tabela organiza registros operacionais: crises, menções, logs, fontes, auditorias, usuários, regras e exports. Ela deve privilegiar legibilidade, escopo e consequência.
Exemplos copiáveis
React
React
import * as React from "react"
type PulsoTableColumn<Row> = {
id: string
header: string
align?: "left" | "right"
render: (row: Row) => React.ReactNode
}
type PulsoTableProps<Row> = {
caption?: string
columns: PulsoTableColumn<Row>[]
rows: Row[]
getRowId: (row: Row) => string
emptyState?: string
}
export function PulsoTable<Row>({ caption, columns, rows, getRowId, emptyState = "Nenhum registro encontrado." }: PulsoTableProps<Row>) {
return (
<div className="overflow-x-auto rounded-[var(--radius-md)] border border-[var(--border)] bg-[var(--card)]">
<table className="w-full min-w-[720px] border-collapse text-sm text-[var(--fg)]">
{caption ? <caption className="sr-only">{caption}</caption> : null}
<thead className="border-b border-[var(--border)] bg-[var(--muted)]/45">
<tr>{columns.map((column) => <th key={column.id} scope="col" className={["px-4 py-3 text-left font-mono text-[11px] font-semibold uppercase tracking-[var(--tracking-kicker)] text-[var(--fg-muted)]", column.align === "right" ? "text-right" : ""].join(" ")}>{column.header}</th>)}</tr>
</thead>
<tbody>
{rows.length === 0 ? <tr><td colSpan={columns.length} className="px-4 py-8 text-center text-[var(--fg-muted)]">{emptyState}</td></tr> : null}
{rows.map((row) => (
<tr key={getRowId(row)} className="border-b border-[var(--border)] last:border-0 hover:bg-[var(--muted)]/35">
{columns.map((column) => <td key={column.id} className={["px-4 py-3 align-middle text-[var(--fg)]", column.align === "right" ? "text-right font-mono tabular-nums" : ""].join(" ")}>{column.render(row)}</td>)}
</tr>
))}
</tbody>
</table>
</div>
)
}<PulsoTable
caption="Casos ativos em monitoramento"
rows={rows}
getRowId={(row) => row.id}
columns={columns}
/>Regras
- Use Table para comparação por coluna, logs e auditoria.
- Números comparáveis ficam à direita com fonte mono/tabular.
- Empty/error devem diferenciar sem dados, sem permissão e falha de carregamento.
- Seleção em massa precisa explicitar escopo.
- Densidade muda ritmo, não significado.
Last updated on