# Table Row — Figma Assembly Rules
<!-- figma-assembly.v2
{ "schemaVersion":"figma-assembly.v2", "id":"component.table-row", "level":"molecule", "kind":"local-composition", "aliases":["_table-row","table-row","tr[wblTr]"], "uxSpec":"specs/ux/components/molecules/table-row.md", "inventoryTarget":"table-row", "componentKeys":[], "dependencies":[], "optionalDependencies":["component.table-cell-text","component.table-cell-link","component.table-cell-number","component.table-cell-actions","component.table-cell-badge","component.table-cell-slot","component.table-cell-checkbox","component.table-cell-chevron","component.table-cell-none"], "coveredBy":["table-row"] }
-->

Status: active Figma assembly contract.

## Scope

Use this contract for the local reusable body-row shell. It composes published
body-cell instances; it does not define a screen's columns, data, or toolbar.

## Source Evidence

- Identity and exposed anatomy rechecked read-only on 2026-09-05 at
  [exact node](https://www.figma.com/design/EO9tuCsqwuHL8cZ4Eb2psR/?node-id=18785-186763).
  This confirms the documented owner/reference, not every assembly predicate or runtime token parity.

- Direct Figma evidence: row frame
  `18785:186763` and parent `18298:105880` passed Figma checks. The verified row
  screenshot is `1074×62`.

## Required Assembly

- Dependency classification: every mapped `Table Cell/*` contract is optional
  at this generic row boundary because a concrete column model selects only a
  subset. List all nine in the manifest and mark only the variants present in
  the authored row as Used.
- Rule ID: `table.local-owner` — create `_table-row` under the current screen's
  `_table`; never reuse a feature-local row master from another screen.
- Rule ID: `table.body-row.top-align` — use horizontal Auto Layout with
  `counterAxisAlignItems=MIN`; every direct `Table Cell/*` instance uses
  `layoutAlign=INHERIT` and begins at `y=0`.
- Rule ID: `table.body-row.bottom-stroke-only` — set row strokes to top `0`,
  right `0`, bottom `1`, left `0`, with the bottom stroke bound to
  `stroke/secondary`. Do not create a four-sided outline.
- Rule ID: `table.body-row.opaque-base` — keep an opaque fill bound to
  `bg/level 1 base`; default rows and their instances must not be transparent.
- Compose cells in table-column order and choose the narrowest applicable
  `Table Cell/*` contract. Keep fixed-column separators on affected cells.
- Make each row instance horizontally `Fill` inside a scrolling `_table`; the
  enclosing table owns the screen-specific minimum content width.
- Use clickable/selected treatment only when the enclosing table supplies that
  interaction state. Do not invent a generic selected variant.

## Verification Checklist

- `table.local-owner`: `_table-row` belongs to the same screen-local `_table`.
- `table.body-row.top-align`: direct cells inherit cross-axis `MIN` and have
  `y=0`.
- `table.body-row.bottom-stroke-only`: only the `1px` bottom secondary stroke is
  present at row level.
- `table.body-row.opaque-base`: the default row resolves to opaque
  `bg/level 1 base`.
- Every direct child is the intended published Table Cell variant in column
  order; no unrelated frames recreate cells.
