# Table Wrapper — Figma Assembly Rules
<!-- figma-assembly.v2
{ "schemaVersion":"figma-assembly.v2", "id":"component.table-wrapper", "level":"organism", "kind":"local-composition", "aliases":["Table","_table","table-wrapper","wbl-table"], "uxSpec":"specs/ux/components/organisms/table-wrapper.md", "inventoryTarget":"table-wrapper", "componentKeys":[], "dependencies":["component.table-header-row","component.table-row"], "optionalDependencies":[], "coveredBy":["table-wrapper"] }
-->

Status: active Figma assembly contract.

## Scope

Use this contract for the screen-local table master that composes a local header
row, local body-row masters, the Table Header molecule, and published Table
Cell atoms. It does not define a complete product-screen toolbar or data
fixture.

## Source Evidence

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

- Direct Figma evidence: inner
  table `18750:89328` passed Figma checks (`1400×168`).
- Parent `18750:89326` is composition framing; its rounded card is not part of
  the table-wrapper API.

## Required Assembly

- Dependency classification: `component.table-header-row` and
  `component.table-row` are required structural children of a valid table
  wrapper; neither may be marked Not Used when `_table` is Used.
- Rule ID: `table.local-owner` — create `_table`, `_table-header`, and every
  `_table-row` as local components owned by the current screen. Never reuse,
  clone as an instance, or depend on a feature-local table master from another
  screen or section.
- Rule ID: `table.fill-chain` — keep the supported Auto Layout chain
  horizontally `Fill`: content parent, clipped viewport, `_table`,
  `_table-header`, and every `_table-row`. Put the screen-specific content
  minimum on `_table` for horizontal scroll.
- Rule ID: `table.cell.narrowest` — choose the narrowest mapped Table Cell
  variant for each column; use Slot only for genuinely custom content.
- Use one `_table` master per screen and derive repeated rows from its local row
  masters. Put local masters under an Auto Layout component shelf before
  setting them to Fill; only a Section direct child may remain Fixed.
- Keep filter/action toolbar, divider, summary, loader, empty state, pagination,
  and expanded content in wrapper regions, not in body cells.
- Keep optional rounded card framing outside this contract unless the screen
  explicitly owns it.

## Verification Checklist

- `table.local-owner`: local table/header/row masters share the current screen
  owner and no foreign feature-local component IDs occur in the subtree.
- `table.fill-chain`: the full supported parent/viewport/table/header/row chain
  is Fill and the minimum width belongs to `_table`.
- `table.cell.narrowest`: header and body children are real mapped atoms and
  Slot appears only where no narrower cell matches.
- Column order and widths match across `_table-header` and every `_table-row`.
