# Icon — Figma Assembly Rules
<!-- figma-assembly.v2
{ "schemaVersion":"figma-assembly.v2", "id":"component.icon", "level":"atom", "kind":"published", "aliases":[".IconWrapper","Icon"], "uxSpec":"specs/ux/components/atoms/icon.md", "inventoryTarget":"icon", "componentKeys":["cf1c3be399fb265ed7f2137b177987102a116855"], "dependencies":[], "optionalDependencies":[], "coveredBy":[] }
-->

Status: active Figma assembly contract.

## Scope

Use this contract for a standalone WB Logistics icon wrapper or an icon inserted
into another library component. It covers published glyph selection, size, and
semantic color only.

## Source Evidence

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

- Direct Figma evidence: `.IconWrapper`
  `1777:17132` and the published `Icon/*` registry were revalidated on
  2026-07-24.
- The registry contains the verified Figma glyph assets; aliases remain direct
  Figma evidence and must not be inferred from a nearest-match icon.

## Required Assembly

- Rule ID: `icon.published-glyph` — use `.IconWrapper` with an exact published
  `Icon/<name>` swap; never draw or approximate a glyph.
- Start with `.IconWrapper` and choose the glyph with its `Instance` swap from
  the published `Icon/<name>` registry. Never redraw or substitute a similar
  glyph by eye.
- Verified native IconButton anatomy may retain its existing direct published
  glyph instead of inserting an extra wrapper. In Drawer/v2 Close, source
  `EO9tuCsqwuHL8cZ4Eb2psR / 22167:4835` retains `Icon/cross-S` (`2245:12860`,
  key `2540a2b8191a51549ca84aab0051fea3016370ca`) inside the mapped IconButton.
  Fresh read-only inspection and screenshot verified this on 2026-09-22 in
  `LUU-427`, GitHub actor `50231562`, run `luu427-drawer-20260922`. Preserve
  this native instance; the exception does not authorize new detached glyphs.
- Select `Size` through the wrapper variant: `24`, `20`, `16`, `12`, `10`, or
  `8`. Do not scale a glyph layer manually.
- Choose the icon deliberately: the Figma defaults (`Icon/cross-M`, `24`) are
  library defaults, not a required choice for a new instance.
- Keep the fill semantic and token-bound through the owning component or local
  semantic color. A glyph name must not determine its color.

## Verification Checklist

- `icon.published-glyph`: the wrapper is canonical and the swapped glyph is an
  exact registry asset or verified alias; an intact native IconButton may use
  the exact direct-glyph exception verified above.
- The glyph is a real `Icon/*` instance, not a vector copy or a nearest-match
  substitution.
- The selected size is one of the published wrapper variants.
- Decorative icons are used inside an owning component that provides the
  necessary label or meaning.

## Maintenance

Revalidate this sidecar when the published icon registry changes. Keep
Figma-to-runtime name aliases in this direct Figma evidence.
