Tabulka se sloupci jako daty. Drží scope na záhlaví, jeden zdroj pravdy pro colSpan a řádkové akce neschovává za hover.
filter, jako JSX by to byla podmínka v hlavičce a v každém řádku.<table> tomu dává význam, který nemá.columns: readonly IngotColumn<Row>[] — Sloupce jako data — přidání sloupce nerozejde colSpan. Vlastnosti sloupce viz tabulka níž.rows: readonly Row[] — Právě vykreslovaná stránka dat.rowKey: (row: Row) => string — Stabilní identita řádku.empty: ReactNode — Co ukázat místo řádků — typicky IngotEmptyState.loading: boolean — Tabulka dostane aria-busy a jeden role=status řádek.loadingLabel: string — Přeložené „Načítám…“. Povinné, když loading může nastat.actions: (row: Row) => ReactNode — Řádkové akce; přidá poslední sloupec.actionsLabel: string — Záhlaví sloupce akcí — jen pro odečítač.caption: string — Popis tabulky pro odečítač, vykreslený mimo obraz.stickyHeader: boolean — Záhlaví zůstane viditelné ve scrollboxu s omezenou výškou.density: "default" | "compact" — compact stáhne padding buňky na 8px — když se řádky na obrazovku počítají.sort: IngotSort — Aktuální řazení {key, dir}. Tabulka data neřadí — pořadí určuje pole rows.onSortChange: (sort: IngotSort) => void — Klik na řaditelnou hlavičku: neaktivní → asc, asc ↔ desc.selectedKeys: ReadonlySet<string> — Klíče vybraných řádků (rowKey). Spolu s onSelectedKeysChange zapne checkbox sloupec.onSelectedKeysChange: (keys: ReadonlySet<string>) => void — Nová množina po každé změně výběru — řádek i vybrat/zrušit vše.selectAllLabel: string — Přeložený popisek checkboxu „vybrat vše“ v hlavičce.selectRowLabel: (row: Row) => string — Přeložený popisek checkboxu řádku („Vybrat {název}“).bulkbar: ReactNode — Pruh hromadných akcí nad tabulkou; ukáže se jen s neprázdným výběrem.toolbar: ReactNode — Filtry nad tabulkou, uvnitř jejího rámečku. Zapne rámeček.footer: ReactNode — Začátek patičky — typicky počet („36 z 36 článků“). Zapne rámeček.footerEnd: ReactNode — Konec patičky — typicky IngotPagination. Zapne rámeček.groupBy: (row: Row) => string — Klíč skupiny řádku. Po sobě jdoucí řádky se stejným klíčem dostanou společný řádek sekce; pořadí určuje rows, tabulka nepřeskupuje.groupHeader: (key: string, rows: readonly Row[]) => ReactNode — Obsah řádku sekce — přeložený název a počet skládá volající. Bez něj se neseskupuje.layout: IngotTableLayout — Jak si uživatel sloupce uspořádal: pořadí, skryté sloupce, šířky. Čte se obranně — rozložení uložené pro starší sadu sloupců tabulku nerozbije.onLayoutChange: (layout: IngotTableLayout) => void — Zapne uspořádávání: výběr sloupců na konci záhlaví, menu u každého sloupce, změnu šířky a přetahování hlaviček. Uložit rozložení je věc volajícího.onLayoutReset: () => void — Ukáže ve výběru sloupců „Obnovit výchozí“ — volající zahodí uložené rozložení.keyboard: boolean — Chůze po řádcích klávesnicí, když má fokus posuvná schránka: J/K pohyb, X výběr, Enter otevřít. S patičkou vypíše zkratky. Se stickyHeader nefunguje.onRowOpen: (row: Row) => void — Enter na aktivním řádku.rowClassName: (row: Row) => string | undefined — Stav celého řádku (nevybratelný, zvýrazněný), ne styl po buňkách.rowDetail: (row: Row) => ReactNode — Detail řádku v řádku přes celou šířku přímo pod ním; null = zavřený. Co je otevřené, drží volající — tlačítko s aria-expanded patří do buňky.className: string — Průchozí třída tabulky, typicky min-w-[40rem].rowTestId: (row: Row) => string — data-testid řádku — E2E na něm na některých stránkách visí.testId: string — data-testid tabulky.