sy-wafer-map

Wafer Map

Show status and measurements at die coordinates on a wafer.

sy-wafer-map

Inspect spatial patterns in bins, yield, and parameters.

Match diameter, dieWidth, dieHeight, and the coordinate origin to the actual measurement system. Do not treat missing dies as passes.

Base chart tier: Community. Features such as additional renderers and custom branding have separate entitlement requirements.

InputData description
valuesAn array of dies as { col, row, bin?, value? }.
modeChoose grid, bin, binary, or value.
passBinThe bin interpreted as a pass.

Complete implementation example

html
<div id="chart-container" style="width: 100%; min-width: 0;"></div>

<script type="module">
  import { defineCustomElement as define0 } from '@syidax/advanced/components/sy-wafer-map.js';
  define0();

  const specs = [
    {
      "id": "example-chart",
      "tag": "sy-wafer-map",
      "props": {
        "engine": "standard",
        "values": [
          {
            "col": -6,
            "row": -6,
            "bin": 2,
            "value": 95
          },
          {
            "col": -5,
            "row": -6,
            "bin": 1,
            "value": 96.93
          },
          {
            "col": -4,
            "row": -6,
            "bin": 1,
            "value": 97.96
          },
          {
            "col": -3,
            "row": -6,
            "bin": 1,
            "value": 97.59
          },
          {
            "col": -2,
            "row": -6,
            "bin": 1,
            "value": 96
          },
          {
            "col": -1,
            "row": -6,
            "bin": 1,
            "value": 93.95
          },
          {
            "col": 0,
            "row": -6,
            "bin": 1,
            "value": 92.39
          },
          {
            "col": 1,
            "row": -6,
            "bin": 1,
            "value": 92.05
          },
          {
            "col": 2,
            "row": -6,
            "bin": 1,
            "value": 93.11
          },
          {
            "col": 3,
            "row": -6,
            "bin": 1,
            "value": 95.05
          },
          {
            "col": 4,
            "row": -6,
            "bin": 1,
            "value": 96.97
          },
          {
            "col": 5,
            "row": -6,
            "bin": 1,
            "value": 97.96
          },
          {
            "col": 6,
            "row": -6,
            "bin": 1,
            "value": 97.56
          },
          {
            "col": -6,
            "row": -5,
            "bin": 1,
            "value": 95.96
          },
          {
            "col": -5,
            "row": -5,
            "bin": 1,
            "value": 93.9
          },
          {
            "col": -4,
            "row": -5,
            "bin": 1,
            "value": 92.36
          },
          {
            "col": -3,
            "row": -5,
            "bin": 1,
            "value": 92.06
          },
          {
            "col": -2,
            "row": -5,
            "bin": 2,
            "value": 93.15
          },
          {
            "col": -1,
            "row": -5,
            "bin": 1,
            "value": 95.1
          },
          {
            "col": 0,
            "row": -5,
            "bin": 1,
            "value": 97.01
          },
          {
            "col": 1,
            "row": -5,
            "bin": 1,
            "value": 97.97
          },
          {
            "col": 2,
            "row": -5,
            "bin": 1,
            "value": 97.54
          },
          {
            "col": 3,
            "row": -5,
            "bin": 1,
            "value": 95.91
          },
          {
            "col": 4,
            "row": -5,
            "bin": 1,
            "value": 93.85
          },
          {
            "col": 5,
            "row": -5,
            "bin": 1,
            "value": 92.34
          },
          {
            "col": 6,
            "row": -5,
            "bin": 1,
            "value": 92.07
          },
          {
            "col": -6,
            "row": -4,
            "bin": 1,
            "value": 93.19
          },
          {
            "col": -5,
            "row": -4,
            "bin": 1,
            "value": 95.15
          },
          {
            "col": -4,
            "row": -4,
            "bin": 1,
            "value": 97.05
          },
          {
            "col": -3,
            "row": -4,
            "bin": 1,
            "value": 97.98
          },
          {
            "col": -2,
            "row": -4,
            "bin": 1,
            "value": 97.51
          },
          {
            "col": -1,
            "row": -4,
            "bin": 1,
            "value": 95.86
          },
          {
            "col": 0,
            "row": -4,
            "bin": 1,
            "value": 93.81
          },
          {
            "col": 1,
            "row": -4,
            "bin": 1,
            "value": 92.31
          },
          {
            "col": 2,
            "row": -4,
            "bin": 2,
            "value": 92.08
          },
          {
            "col": 3,
            "row": -4,
            "bin": 1,
            "value": 93.23
          },
          {
            "col": 4,
            "row": -4,
            "bin": 1,
            "value": 95.2
          },
          {
            "col": 5,
            "row": -4,
            "bin": 1,
            "value": 97.08
          },
          {
            "col": 6,
            "row": -4,
            "bin": 1,
            "value": 97.98
          },
          {
            "col": -6,
            "row": -3,
            "bin": 1,
            "value": 97.48
          },
          {
            "col": -5,
            "row": -3,
            "bin": 1,
            "value": 95.81
          },
          {
            "col": -4,
            "row": -3,
            "bin": 1,
            "value": 93.76
          },
          {
            "col": -3,
            "row": -3,
            "bin": 1,
            "value": 92.29
          },
          {
            "col": -2,
            "row": -3,
            "bin": 1,
            "value": 92.1
          },
          {
            "col": -1,
            "row": -3,
            "bin": 1,
            "value": 93.27
          },
          {
            "col": 0,
            "row": -3,
            "bin": 1,
            "value": 95.25
          },
          {
            "col": 1,
            "row": -3,
            "bin": 1,
            "value": 97.12
          },
          {
            "col": 2,
            "row": -3,
            "bin": 1,
            "value": 97.99
          },
          {
            "col": 3,
            "row": -3,
            "bin": 1,
            "value": 97.45
          },
          {
            "col": 4,
            "row": -3,
            "bin": 1,
            "value": 95.76
          },
          {
            "col": 5,
            "row": -3,
            "bin": 1,
            "value": 93.72
          },
          {
            "col": 6,
            "row": -3,
            "bin": 2,
            "value": 92.27
          },
          {
            "col": -6,
            "row": -2,
            "bin": 1,
            "value": 92.11
          },
          {
            "col": -5,
            "row": -2,
            "bin": 1,
            "value": 93.31
          },
          {
            "col": -4,
            "row": -2,
            "bin": 1,
            "value": 95.3
          },
          {
            "col": -3,
            "row": -2,
            "bin": 1,
            "value": 97.15
          },
          {
            "col": -2,
            "row": -2,
            "bin": 1,
            "value": 97.99
          },
          {
            "col": -1,
            "row": -2,
            "bin": 1,
            "value": 97.42
          },
          {
            "col": 0,
            "row": -2,
            "bin": 1,
            "value": 95.72
          },
          {
            "col": 1,
            "row": -2,
            "bin": 1,
            "value": 93.67
          },
          {
            "col": 2,
            "row": -2,
            "bin": 1,
            "value": 92.25
          },
          {
            "col": 3,
            "row": -2,
            "bin": 1,
            "value": 92.12
          },
          {
            "col": 4,
            "row": -2,
            "bin": 1,
            "value": 93.35
          },
          {
            "col": 5,
            "row": -2,
            "bin": 1,
            "value": 95.35
          },
          {
            "col": 6,
            "row": -2,
            "bin": 1,
            "value": 97.19
          },
          {
            "col": -6,
            "row": -1,
            "bin": 1,
            "value": 98
          },
          {
            "col": -5,
            "row": -1,
            "bin": 1,
            "value": 97.39
          },
          {
            "col": -4,
            "row": -1,
            "bin": 1,
            "value": 95.67
          },
          {
            "col": -3,
            "row": -1,
            "bin": 2,
            "value": 93.63
          },
          {
            "col": -2,
            "row": -1,
            "bin": 1,
            "value": 92.23
          },
          {
            "col": -1,
            "row": -1,
            "bin": 1,
            "value": 92.14
          },
          {
            "col": 0,
            "row": -1,
            "bin": 1,
            "value": 93.39
          },
          {
            "col": 1,
            "row": -1,
            "bin": 1,
            "value": 95.4
          },
          {
            "col": 2,
            "row": -1,
            "bin": 1,
            "value": 97.22
          },
          {
            "col": 3,
            "row": -1,
            "bin": 1,
            "value": 98
          },
          {
            "col": 4,
            "row": -1,
            "bin": 1,
            "value": 97.36
          },
          {
            "col": 5,
            "row": -1,
            "bin": 1,
            "value": 95.62
          },
          {
            "col": 6,
            "row": -1,
            "bin": 1,
            "value": 93.58
          },
          {
            "col": -6,
            "row": 0,
            "bin": 1,
            "value": 92.21
          },
          {
            "col": -5,
            "row": 0,
            "bin": 1,
            "value": 92.15
          },
          {
            "col": -4,
            "row": 0,
            "bin": 1,
            "value": 93.44
          },
          {
            "col": -3,
            "row": 0,
            "bin": 1,
            "value": 95.45
          },
          {
            "col": -2,
            "row": 0,
            "bin": 1,
            "value": 97.26
          },
          {
            "col": -1,
            "row": 0,
            "bin": 1,
            "value": 98
          },
          {
            "col": 0,
            "row": 0,
            "bin": 1,
            "value": 97.33
          },
          {
            "col": 1,
            "row": 0,
            "bin": 2,
            "value": 95.57
          },
          {
            "col": 2,
            "row": 0,
            "bin": 1,
            "value": 93.54
          },
          {
            "col": 3,
            "row": 0,
            "bin": 1,
            "value": 92.19
          },
          {
            "col": 4,
            "row": 0,
            "bin": 1,
            "value": 92.17
          },
          {
            "col": 5,
            "row": 0,
            "bin": 1,
            "value": 93.48
          },
          {
            "col": 6,
            "row": 0,
            "bin": 1,
            "value": 95.5
          },
          {
            "col": -6,
            "row": 1,
            "bin": 1,
            "value": 97.29
          },
          {
            "col": -5,
            "row": 1,
            "bin": 1,
            "value": 98
          },
          {
            "col": -4,
            "row": 1,
            "bin": 1,
            "value": 97.3
          },
          {
            "col": -3,
            "row": 1,
            "bin": 1,
            "value": 95.52
          },
          {
            "col": -2,
            "row": 1,
            "bin": 1,
            "value": 93.49
          },
          {
            "col": -1,
            "row": 1,
            "bin": 1,
            "value": 92.18
          },
          {
            "col": 0,
            "row": 1,
            "bin": 1,
            "value": 92.19
          },
          {
            "col": 1,
            "row": 1,
            "bin": 1,
            "value": 93.52
          },
          {
            "col": 2,
            "row": 1,
            "bin": 1,
            "value": 95.55
          },
          {
            "col": 3,
            "row": 1,
            "bin": 1,
            "value": 97.32
          },
          {
            "col": 4,
            "row": 1,
            "bin": 1,
            "value": 98
          },
          {
            "col": 5,
            "row": 1,
            "bin": 2,
            "value": 97.27
          },
          {
            "col": 6,
            "row": 1,
            "bin": 1,
            "value": 95.47
          },
          {
            "col": -6,
            "row": 2,
            "bin": 1,
            "value": 93.45
          },
          {
            "col": -5,
            "row": 2,
            "bin": 1,
            "value": 92.16
          },
          {
            "col": -4,
            "row": 2,
            "bin": 1,
            "value": 92.21
          },
          {
            "col": -3,
            "row": 2,
            "bin": 1,
            "value": 93.57
          },
          {
            "col": -2,
            "row": 2,
            "bin": 1,
            "value": 95.6
          },
          {
            "col": -1,
            "row": 2,
            "bin": 1,
            "value": 97.35
          },
          {
            "col": 0,
            "row": 2,
            "bin": 1,
            "value": 98
          },
          {
            "col": 1,
            "row": 2,
            "bin": 1,
            "value": 97.23
          },
          {
            "col": 2,
            "row": 2,
            "bin": 1,
            "value": 95.42
          },
          {
            "col": 3,
            "row": 2,
            "bin": 1,
            "value": 93.41
          },
          {
            "col": 4,
            "row": 2,
            "bin": 1,
            "value": 92.14
          },
          {
            "col": 5,
            "row": 2,
            "bin": 1,
            "value": 92.22
          },
          {
            "col": 6,
            "row": 2,
            "bin": 1,
            "value": 93.61
          },
          {
            "col": -6,
            "row": 3,
            "bin": 1,
            "value": 95.65
          },
          {
            "col": -5,
            "row": 3,
            "bin": 1,
            "value": 97.38
          },
          {
            "col": -4,
            "row": 3,
            "bin": 2,
            "value": 98
          },
          {
            "col": -3,
            "row": 3,
            "bin": 1,
            "value": 97.2
          },
          {
            "col": -2,
            "row": 3,
            "bin": 1,
            "value": 95.37
          },
          {
            "col": -1,
            "row": 3,
            "bin": 1,
            "value": 93.36
          },
          {
            "col": 0,
            "row": 3,
            "bin": 1,
            "value": 92.13
          },
          {
            "col": 1,
            "row": 3,
            "bin": 1,
            "value": 92.24
          },
          {
            "col": 2,
            "row": 3,
            "bin": 1,
            "value": 93.66
          },
          {
            "col": 3,
            "row": 3,
            "bin": 1,
            "value": 95.7
          },
          {
            "col": 4,
            "row": 3,
            "bin": 1,
            "value": 97.41
          },
          {
            "col": 5,
            "row": 3,
            "bin": 1,
            "value": 97.99
          },
          {
            "col": 6,
            "row": 3,
            "bin": 1,
            "value": 97.16
          },
          {
            "col": -6,
            "row": 4,
            "bin": 1,
            "value": 95.32
          },
          {
            "col": -5,
            "row": 4,
            "bin": 1,
            "value": 93.32
          },
          {
            "col": -4,
            "row": 4,
            "bin": 1,
            "value": 92.11
          },
          {
            "col": -3,
            "row": 4,
            "bin": 1,
            "value": 92.26
          },
          {
            "col": -2,
            "row": 4,
            "bin": 1,
            "value": 93.7
          },
          {
            "col": -1,
            "row": 4,
            "bin": 1,
            "value": 95.75
          },
          {
            "col": 0,
            "row": 4,
            "bin": 2,
            "value": 97.44
          },
          {
            "col": 1,
            "row": 4,
            "bin": 1,
            "value": 97.99
          },
          {
            "col": 2,
            "row": 4,
            "bin": 1,
            "value": 97.13
          },
          {
            "col": 3,
            "row": 4,
            "bin": 1,
            "value": 95.27
          },
          {
            "col": 4,
            "row": 4,
            "bin": 1,
            "value": 93.28
          },
          {
            "col": 5,
            "row": 4,
            "bin": 1,
            "value": 92.1
          },
          {
            "col": 6,
            "row": 4,
            "bin": 1,
            "value": 92.29
          },
          {
            "col": -6,
            "row": 5,
            "bin": 1,
            "value": 93.75
          },
          {
            "col": -5,
            "row": 5,
            "bin": 1,
            "value": 95.8
          },
          {
            "col": -4,
            "row": 5,
            "bin": 1,
            "value": 97.47
          },
          {
            "col": -3,
            "row": 5,
            "bin": 1,
            "value": 97.99
          },
          {
            "col": -2,
            "row": 5,
            "bin": 1,
            "value": 97.09
          },
          {
            "col": -1,
            "row": 5,
            "bin": 1,
            "value": 95.22
          },
          {
            "col": 0,
            "row": 5,
            "bin": 1,
            "value": 93.24
          },
          {
            "col": 1,
            "row": 5,
            "bin": 1,
            "value": 92.09
          },
          {
            "col": 2,
            "row": 5,
            "bin": 1,
            "value": 92.31
          },
          {
            "col": 3,
            "row": 5,
            "bin": 1,
            "value": 93.79
          },
          {
            "col": 4,
            "row": 5,
            "bin": 2,
            "value": 95.85
          },
          {
            "col": 5,
            "row": 5,
            "bin": 1,
            "value": 97.5
          },
          {
            "col": 6,
            "row": 5,
            "bin": 1,
            "value": 97.98
          },
          {
            "col": -6,
            "row": 6,
            "bin": 1,
            "value": 97.06
          },
          {
            "col": -5,
            "row": 6,
            "bin": 1,
            "value": 95.17
          },
          {
            "col": -4,
            "row": 6,
            "bin": 1,
            "value": 93.2
          },
          {
            "col": -3,
            "row": 6,
            "bin": 1,
            "value": 92.08
          },
          {
            "col": -2,
            "row": 6,
            "bin": 1,
            "value": 92.33
          },
          {
            "col": -1,
            "row": 6,
            "bin": 1,
            "value": 93.84
          },
          {
            "col": 0,
            "row": 6,
            "bin": 1,
            "value": 95.89
          },
          {
            "col": 1,
            "row": 6,
            "bin": 1,
            "value": 97.53
          },
          {
            "col": 2,
            "row": 6,
            "bin": 1,
            "value": 97.97
          },
          {
            "col": 3,
            "row": 6,
            "bin": 1,
            "value": 97.02
          },
          {
            "col": 4,
            "row": 6,
            "bin": 1,
            "value": 95.12
          },
          {
            "col": 5,
            "row": 6,
            "bin": 1,
            "value": 93.16
          },
          {
            "col": 6,
            "row": 6,
            "bin": 1,
            "value": 92.07
          }
        ],
        "diameter": 150,
        "dieWidth": 10,
        "dieHeight": 10,
        "mode": "bin",
        "passBin": 1,
        "width": 640,
        "height": 420,
        "brandPosition": "bottom-right",
        "brandLogo": ""
      }
    }
  ];
  const container = document.querySelector('#chart-container');
  const elements = specs.map(({ tag, id, props }) => {
    const element = document.createElement(tag);
    element.id = id;
    Object.assign(element, props);
    element.setAttribute('aria-label', 'wafer-map example chart');
    return element;
  });
  container.replaceChildren(...elements);
  const chart = elements.at(-1);
  const onEvent = event => {
    console.log('dieClick', event.detail);
  };
  chart.addEventListener('dieClick', onEvent);
  const observer = new ResizeObserver(([entry]) => {
    const width = Math.max(160, Math.floor(entry.contentRect.width));
    elements.forEach(element => { element.width = width; });
  });
  observer.observe(container);

  // In an SPA, call this function when the view is disposed.
  function disposeChart() {
    observer.disconnect();
    chart.removeEventListener('dieClick', onEvent);
    container.replaceChildren();
  }
</script>

Properties

width

Chart width in pixels. If the container width changes, update width from a ResizeObserver.

ItemValue
JavaScript propertywidth
HTML attributewidth
Typenumber
Default520

height

Chart height in pixels. Allow space for axes, titles, and the legend.

ItemValue
JavaScript propertyheight
HTML attributeheight
Typenumber
Default500

brandPosition

The corner where the logo is anchored. Community and Pro both support all four corners, using the same position on screen and in image exports.

ItemValue
JavaScript propertybrandPosition
HTML attributebrand-position
Type'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'
Default'bottom-right'
Allowed valuestop-left, top-right, bottom-left, bottom-right

diameter

Wafer diameter in mm (default 300).

ItemValue
JavaScript propertydiameter
HTML attributediameter
Typenumber
Default300

edgeExclusion

Unusable edge band in mm (default 3).

ItemValue
JavaScript propertyedgeExclusion
HTML attributeedge-exclusion
Typenumber
Default3

indicator

Orientation-mark kind: notch (300 mm standard) / flat (legacy) / none.

ItemValue
JavaScript propertyindicator
HTML attributeindicator
TypeWaferIndicator
Default'notch'
Allowed valuesnone, flat, notch

orientation

Where the mark points (fab standard: down).

ItemValue
JavaScript propertyorientation
HTML attributeorientation
TypeWaferOrientation
Default'down'
Allowed valuesleft, right, down, up

flatLength

Flat chord length in mm (default diameter × 0.2).

ItemValue
JavaScript propertyflatLength
HTML attributeflat-length
Typenumber
Defaultundefined

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

notchDepth

Notch depth in mm (default 2.5).

ItemValue
JavaScript propertynotchDepth
HTML attributenotch-depth
Typenumber
Defaultundefined

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

dieWidth

Die size in mm (defaults 10 × 10).

ItemValue
JavaScript propertydieWidth
HTML attributedie-width
Typenumber
Default10

dieHeight

Set as an HTML attribute or JavaScript property. type: number.

ItemValue
JavaScript propertydieHeight
HTML attributedie-height
Typenumber
Default10

scribeX

Scribe-street widths in mm (defaults 0.2).

ItemValue
JavaScript propertyscribeX
HTML attributescribe-x
Typenumber
Default0.2

scribeY

Set as an HTML attribute or JavaScript property. type: number.

ItemValue
JavaScript propertyscribeY
HTML attributescribe-y
Typenumber
Default0.2

offsetX

Grid shift in mm relative to the centred lattice.

ItemValue
JavaScript propertyoffsetX
HTML attributeoffset-x
Typenumber
Default0

offsetY

Set as an HTML attribute or JavaScript property. type: number.

ItemValue
JavaScript propertyoffsetY
HTML attributeoffset-y
Typenumber
Default0

values

An array of dies as { col, row, bin?, value? }.

ItemValue
JavaScript propertyvalues
HTML attributePass objects, arrays, and callbacks as JavaScript properties
TypeWaferMapData
Defaultundefined

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

mode

Choose grid, bin, binary, or value.

ItemValue
JavaScript propertymode
HTML attributemode
TypeWaferMapMode
Default'grid'
Allowed valuesvalue, grid, bin, binary

binColors

Explicit per-bin colours ({ [bin]: colour }) — bin mode only.

ItemValue
JavaScript propertybinColors
HTML attributePass objects, arrays, and callbacks as JavaScript properties
TypeReadonly<Record<string, string>>
Defaultundefined

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

passBin

The bin interpreted as a pass.

ItemValue
JavaScript propertypassBin
HTML attributePass objects, arrays, and callbacks as JavaScript properties
Typenumber | string
Default1

passColor

Pass-bin fill.

ItemValue
JavaScript propertypassColor
HTML attributepass-color
Typestring
Default'#16a34a'

failColor

Fail fill (mode="binary" — every non-pass bin).

ItemValue
JavaScript propertyfailColor
HTML attributefail-color
Typestring
Default'#dc2626'

colorAxis

Value-axis config for mode="value": auto (data extent, blues) or {min, max, scheme, minColor, maxColor, stops, center} — a diverging scheme name (rdbu, spectral, …) anchors its midpoint on center.

ItemValue
JavaScript propertycolorAxis
HTML attributePass objects, arrays, and callbacks as JavaScript properties
TypeWaferValueAxisInput
Default'auto'
Literals in the typeauto

showStats

Show the min/mean/σ/median statistics line under the value legend.

ItemValue
JavaScript propertyshowStats
HTML attributeshow-stats
Typeboolean
Defaulttrue

overlay

Overlay layer on top of any mode: none / defect.

ItemValue
JavaScript propertyoverlay
HTML attributeoverlay
Type'none' | 'defect'
Default'none'
Allowed valuesnone, defect

grid

Grid chrome: die (scribe streets only) or shot (+ reticle boundaries).

ItemValue
JavaScript propertygrid
HTML attributegrid
Type'die' | 'shot'
Default'die'
Allowed valuesdie, shot

shotCols

Dies per exposure shot (defaults 3 × 2).

ItemValue
JavaScript propertyshotCols
HTML attributeshot-cols
Typenumber
Default3

shotRows

Set as an HTML attribute or JavaScript property. type: number.

ItemValue
JavaScript propertyshotRows
HTML attributeshot-rows
Typenumber
Default2

shotOffsetX

Shot-grid alignment shift in whole dies.

ItemValue
JavaScript propertyshotOffsetX
HTML attributeshot-offset-x
Typenumber
Default0

shotOffsetY

Set as an HTML attribute or JavaScript property. type: number.

ItemValue
JavaScript propertyshotOffsetY
HTML attributeshot-offset-y
Typenumber
Default0

shotColor

Shot boundary stroke.

ItemValue
JavaScript propertyshotColor
HTML attributeshot-color
Typestring
Default'#334155'

defects

Inspection defects ({x, y, class?, size?}, wafer mm, notch frame).

ItemValue
JavaScript propertydefects
HTML attributePass objects, arrays, and callbacks as JavaScript properties
TypeWaferDefectData
Defaultundefined

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

defectColor

Dot colour for unclassified defects (classes cycle the palette).

ItemValue
JavaScript propertydefectColor
HTML attributedefect-color
Typestring
Default'#0f172a'

palette

Categorical palette cycled over fail bins (sorted order).

ItemValue
JavaScript propertypalette
HTML attributepalette
Typekeyof typeof categorical
Default'tableau10'
Allowed valuestableau10, tableau20, observable10, paired12, set3_12

binLegend

Show the bin legend under the wafer (bin mode).

ItemValue
JavaScript propertybinLegend
HTML attributebin-legend
Typeboolean
Defaulttrue

legendPosition

Storybook parity (2026-09-10) — where the bin legend (mode="bin"; the pass / fail readout of mode="binary" follows it) sits: docked on an edge of the stage (top / bottom / left / right; the band is taken off the wafer) or float — an overlay box inside the drawing rectangle anchored by legend-float-align / legend-float-vertical-align. The line chart's legend contract. The parameter map's gradient + statistics panel (mode="value") keeps its footer.

ItemValue
JavaScript propertylegendPosition
HTML attributelegend-position
TypeWaferMapLegendPosition
Default'bottom'
Allowed valuestop, bottom, left, right, float

legendFloatAlign

legend-position="float": the overlay's horizontal anchor inside the drawing rectangle.

ItemValue
JavaScript propertylegendFloatAlign
HTML attributelegend-float-align
Type'start' | 'center' | 'end'
Default'end'
Allowed valuesstart, center, end

legendFloatVerticalAlign

legend-position="float": the overlay's vertical anchor inside the drawing rectangle.

ItemValue
JavaScript propertylegendFloatVerticalAlign
HTML attributelegend-float-vertical-align
Type'top' | 'middle' | 'bottom'
Default'top'
Allowed valuestop, bottom, middle

legendDraggable

legend-position="float": the floating legend can be dragged inside the chart bounds.

ItemValue
JavaScript propertylegendDraggable
HTML attributelegend-draggable
Typeboolean
Defaultfalse

showPartial

Draw edge (partial) dies.

ItemValue
JavaScript propertyshowPartial
HTML attributeshow-partial
Typeboolean
Defaulttrue

showExclusion

Draw the dashed edge-exclusion ring.

ItemValue
JavaScript propertyshowExclusion
HTML attributeshow-exclusion
Typeboolean
Defaulttrue

dieIndexOrigin

Die-index convention (fab map formats): top-left counts from the lattice bounding-box corner, center keeps signed notch-frame coordinates. Indices are notch-frame-stable — the view orientation never renumbers a die.

ItemValue
JavaScript propertydieIndexOrigin
HTML attributedie-index-origin
TypeDieIndexOrigin
Default'top-left'
Allowed valuestop-left, center

dieIndexBase

First index value (0 or 1).

ItemValue
JavaScript propertydieIndexBase
HTML attributedie-index-base
Typenumber
Default0

showDieIndex

Print ix,iy inside each die (auto-hides when dies get too small).

ItemValue
JavaScript propertyshowDieIndex
HTML attributeshow-die-index
Typeboolean
Defaultfalse

waferColor

Substrate disc fill.

ItemValue
JavaScript propertywaferColor
HTML attributePass objects, arrays, and callbacks as JavaScript properties
Typestring | ReadonlyArray<string>
Default'#eef2f7'

dieColor

Full (probeable) die fill.

ItemValue
JavaScript propertydieColor
HTML attributePass objects, arrays, and callbacks as JavaScript properties
Typestring | ReadonlyArray<string>
Default'#cbd5e1'

partialColor

Edge (partial) die fill.

ItemValue
JavaScript propertypartialColor
HTML attributePass objects, arrays, and callbacks as JavaScript properties
Typestring | ReadonlyArray<string>
Default'#e2e8f0'

dataColor

Fill for dies that carry data (until the mode days colour by it).

ItemValue
JavaScript propertydataColor
HTML attributePass objects, arrays, and callbacks as JavaScript properties
Typestring | ReadonlyArray<string>
Default'#2563eb'

edgeColor

Scribe-street stroke between dies.

ItemValue
JavaScript propertyedgeColor
HTML attributeedge-color
Typestring
Default'rgba(255,255,255,0.9)'

outlineColor

Wafer outline stroke.

ItemValue
JavaScript propertyoutlineColor
HTML attributeoutline-color
Typestring
Default'#64748b'

chartTitle

The title inside the chart. Explain the data's unit and meaning alongside it.

ItemValue
JavaScript propertychartTitle
HTML attributechart-title
Typestring
Defaultundefined

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

chartSubtitle

The subtitle inside the chart.

ItemValue
JavaScript propertychartSubtitle
HTML attributechart-subtitle
Typestring
Defaultundefined

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

tooltipShow

Die tooltip on hover ().

ItemValue
JavaScript propertytooltipShow
HTML attributetooltip-show
Typeboolean
Defaulttrue

tooltipFormat

Custom tooltip text (return a string; default: index · bin/value · shot).

ItemValue
JavaScript propertytooltipFormat
HTML attributePass objects, arrays, and callbacks as JavaScript properties
Type(detail: WaferDieEventDetail) => string
Defaultundefined

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

zoom

Storybook parity (2026-09-10) — viewport zoom: 'x' | 'y' | 'xy' | true (x) enable the drag rectangle, the pan, Ctrl + wheel, the pinch and the keyboard (+ / - / Escape) over the wafer's drawing rectangle (the stage minus the title block and the legend band; x 0 → 1 left → right, y 0 → 1 bottom → top, like a cartesian plot); an object refines mode / drag / keyboard / minRangePx / resetButton / pan / wheel / pinch / inside. Off by default. zoomTo / zoomBy / panBy / resetZoom work regardless of the gesture switches. Property-only.

ItemValue
JavaScript propertyzoom
HTML attributePass objects, arrays, and callbacks as JavaScript properties
TypeCartesianZoomInput
Defaultundefined
Literals in the typeauto, off, true, false, x, y, xy, inside

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

streamSource

A bound die ring (script-set): the chart renders ITS tracked dies on top of values and follows its events; unset, the chart keeps an internal ring that the stream methods feed.

ItemValue
JavaScript propertystreamSource
HTML attributePass objects, arrays, and callbacks as JavaScript properties
TypeWaferMapStreamSource
Defaultundefined

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

streamMax

Streamed dies tracked at most (the ring's capacity, default 1,000,000): past it the OLDEST streamed dies leave (windowSlid) and revert to the base map. A re-sent cell replaces its result and moves to the newest position.

ItemValue
JavaScript propertystreamMax
HTML attributestream-max
Typenumber
Defaultundefined

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

streamWindow

The newest N streamed dies the chart renders on top of values (every tracked die when unset); older streamed dies revert to the base map — or to "no data" where the base has none.

ItemValue
JavaScript propertystreamWindow
HTML attributestream-window
Typenumber
Defaultundefined

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

animated

Animate: the initial reveal grows the dies into place from the wafer centre outward; a values change and every stream event cross-fade each die whose colour changed from the colour it showed to the next one.

ItemValue
JavaScript propertyanimated
HTML attributeanimate
Typeboolean
Defaultfalse

animationDuration

Animation duration in milliseconds.

ItemValue
JavaScript propertyanimationDuration
HTML attributeanimation-duration
Typenumber
Default600

animationEasing

Allowed values: linear, ease-out, ease-in, ease-in-out. Default: 'ease-out'.

ItemValue
JavaScript propertyanimationEasing
HTML attributeanimation-easing
TypeWaferMapEasing
Default'ease-out'
Allowed valueslinear, ease-out, ease-in, ease-in-out

animationType

initial = the reveal only; update = the change morph only; unset = both.

ItemValue
JavaScript propertyanimationType
HTML attributeanimation-type
TypeWaferMapAnimationType
Defaultundefined
Allowed valuesinitial, update

undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.

engine

Renderer selection: auto, standard, or pro. Engine selection is separate from permission to use a Pro chart type.

ItemValue
JavaScript propertyengine
HTML attributeengine
TypeWaferMapEngineMode
Default'auto'
Allowed valuesauto, standard, pro

unavailable

Allowed values: fallback, error, throw. Default: 'fallback'.

ItemValue
JavaScript propertyunavailable
HTML attributeunavailable
TypeWaferMapUnavailableBehaviour
Default'fallback'
Allowed valuesfallback, error, throw

Events

rendered

Emits rendering results in detail when chart drawing completes.

Event name: rendered. Names are case-sensitive. Read the payload from detail on CustomEvent<WaferMapRenderResult & { tier: WaferMapEngineTier }>.

javascript
chart.addEventListener('rendered', event => {
  console.log(event.detail); // WaferMapRenderResult & { tier: WaferMapEngineTier }
});

dieHover

Pointer entered/left a die (null on leave).

Event name: dieHover. Names are case-sensitive. Read the payload from detail on CustomEvent<WaferDieEventDetail | null>.

javascript
chart.addEventListener('dieHover', event => {
  console.log(event.detail); // WaferDieEventDetail | null
});

dieClick

A die was clicked.

Event name: dieClick. Names are case-sensitive. Read the payload from detail on CustomEvent<WaferDieEventDetail>.

javascript
chart.addEventListener('dieClick', event => {
  console.log(event.detail); // WaferDieEventDetail
});

dieSelect

Selection changed (click toggles; null when cleared).

Event name: dieSelect. Names are case-sensitive. Read the payload from detail on CustomEvent<WaferDieEventDetail | null>.

javascript
chart.addEventListener('dieSelect', event => {
  console.log(event.detail); // WaferDieEventDetail | null
});

pointContextMenu

A die was right-clicked (the shared point context-menu detail: the die + the pointer's local / viewport position).

Event name: pointContextMenu. Names are case-sensitive. Read the payload from detail on CustomEvent<ChartPointContextMenuEventDetail<WaferDieEventDetail>>.

javascript
chart.addEventListener('pointContextMenu', event => {
  console.log(event.detail); // ChartPointContextMenuEventDetail<WaferDieEventDetail>
});

appended

Dies streamed in (appendPoint / appendDie / appendBatch / updateDie): the dies the ring stored.

Event name: appended. Names are case-sensitive. Read the payload from detail on CustomEvent<{ count: number }>.

javascript
chart.addEventListener('appended', event => {
  console.log(event.detail); // { count: number }
});

windowSlid

The oldest streamed dies left the ring (stream-max) or were shifted out — they revert to the base map.

Event name: windowSlid. Names are case-sensitive. Read the payload from detail on CustomEvent<{ dropped: number }>.

javascript
chart.addEventListener('windowSlid', event => {
  console.log(event.detail); // { dropped: number }
});

chartAnimationStart

CustomEvent.detail type: void. Event names are case-sensitive.

Event name: chartAnimationStart. Names are case-sensitive. Read the payload from detail on CustomEvent<void>.

javascript
chart.addEventListener('chartAnimationStart', event => {
  console.log(event.detail); // void
});

chartAnimationEnd

CustomEvent.detail type: void. Event names are case-sensitive.

Event name: chartAnimationEnd. Names are case-sensitive. Read the payload from detail on CustomEvent<void>.

javascript
chart.addEventListener('chartAnimationEnd', event => {
  console.log(event.detail); // void
});

chartAnimationInterrupted

CustomEvent.detail type: void. Event names are case-sensitive.

Event name: chartAnimationInterrupted. Names are case-sensitive. Read the payload from detail on CustomEvent<void>.

javascript
chart.addEventListener('chartAnimationInterrupted', event => {
  console.log(event.detail); // void
});

binChanged

An upsert CHANGED an already-probed die's bin (a re-test flipping the verdict) — the signal a live yield display keys on.

Event name: binChanged. Names are case-sensitive. Read the payload from detail on `CustomEvent<{ col: number; row: number; ix: number; iy: number; previousBin: number | string; bin: number | string; }>`.

javascript
chart.addEventListener('binChanged', event => {
  console.log(event.detail); // {
    col: number; row: number; ix: number; iy: number;
    previousBin: number | string; bin: number | string;
  }
});

zoomChange

Storybook parity (2026-09-10) — fired after every zoom change (drag / pan / wheel / pinch / keyboard / api / reset) with the new state.

Event name: zoomChange. Names are case-sensitive. Read the payload from detail on CustomEvent<CartesianZoomChangeEventDetail>.

javascript
chart.addEventListener('zoomChange', event => {
  console.log(event.detail); // CartesianZoomChangeEventDetail
});

Methods

getDefectSummary

Per-class defect counts over the on-wafer points (overlay="defect").

typescript
getDefectSummary(): Promise<{ total: number; offWafer: number; byClass: Array<{ key: string; count: number }> }>

Return type: Promise<{ total: number; offWafer: number; byClass: Array<{ key: string; count: number }> }>. Call the method after element registration and await its Promise result.

getShotOf

Shot (reticle exposure) coordinate of a lattice cell.

typescript
getShotOf(col: number, row: number): Promise<{ shotCol: number; shotRow: number }>
ArgumentsTypeRequired
colnumberRequired
rownumberRequired

Return type: Promise<{ shotCol: number; shotRow: number }>. Call the method after element registration and await its Promise result.

hitTestDie

Die under a component-local CSS point, or null (streets, off-wafer).

typescript
hitTestDie(cssX: number, cssY: number): Promise<WaferDieEventDetail | null>
ArgumentsTypeRequired
cssXnumberRequired
cssYnumberRequired

Return type: Promise<WaferDieEventDetail | null>. Call the method after element registration and await its Promise result.

selectDie

Select a die programmatically (null-safe no-op off the lattice).

typescript
selectDie(col: number, row: number): Promise<WaferDieEventDetail | null>
ArgumentsTypeRequired
colnumberRequired
rownumberRequired

Return type: Promise<WaferDieEventDetail | null>. Call the method after element registration and await its Promise result.

clearDieSelection

Wafer map: clear the die selection.

typescript
clearDieSelection(): Promise<void>

Return type: Promise<void>. Call the method after element registration and await its Promise result.

getSelectedDie

The current selection (null when none).

typescript
getSelectedDie(): Promise<WaferDieEventDetail | null>

Return type: Promise<WaferDieEventDetail | null>. Call the method after element registration and await its Promise result.

zoomTo

Zoom to explicit windows of the drawing (x / y as { min, max } or [min, max] fractions 0 … 1; null clears that orientation).

typescript
zoomTo(request: CartesianZoomRequest): Promise<CartesianZoomChangeEventDetail | null>
ArgumentsTypeRequired
requestCartesianZoomRequestRequired

Return type: Promise<CartesianZoomChangeEventDetail | null>. Call the method after element registration and await its Promise result.

zoomBy

Scale the current windows by factor (< 1 zooms in) around anchorFraction (0..1, default centre).

typescript
zoomBy(factor: number, anchorFraction?: number): Promise<CartesianZoomChangeEventDetail | null>
ArgumentsTypeRequired
factornumberRequired
anchorFractionnumberOptional

Return type: Promise<CartesianZoomChangeEventDetail | null>. Call the method after element registration and await its Promise result.

panBy

Slide the zoomed windows by fractions of the drawing ({ x?, y? }); a no-op at the full extent.

typescript
panBy(delta: { x?: number; y?: number }): Promise<CartesianZoomChangeEventDetail | null>
ArgumentsTypeRequired
delta{ x?: number; y?: number }Required

Return type: Promise<CartesianZoomChangeEventDetail | null>. Call the method after element registration and await its Promise result.

resetZoom

Reset the zoomed or panned range to the original data range.

typescript
resetZoom(): Promise<CartesianZoomChangeEventDetail | null>

Return type: Promise<CartesianZoomChangeEventDetail | null>. Call the method after element registration and await its Promise result.

getZoom

Read the current zoom range. Check the return type's nullability and the range for each axis.

typescript
getZoom(): Promise<CartesianZoomState | null>

Return type: Promise<CartesianZoomState | null>. Call the method after element registration and await its Promise result.

getZoomExtent

The full extent of the viewport axes ([0, 1] each, key '0').

typescript
getZoomExtent(request?: CartesianZoomExtentRequest): Promise<CartesianZoomExtentDetail | null>
ArgumentsTypeRequired
requestCartesianZoomExtentRequestOptional

Return type: Promise<CartesianZoomExtentDetail | null>. Call the method after element registration and await its Promise result.

setData

Replace the die data set (facade setData route) — the base map; the streamed dies stay on top of it.

typescript
setData(values: WaferMapData): Promise<void>
ArgumentsTypeRequired
valuesWaferMapDataRequired

Return type: Promise<void>. Call the method after element registration and await its Promise result.

appendPoint

Append one value to the stream. Check the argument type and the licensing requirements for streaming.

typescript
appendPoint(datum: WaferDieDatum): Promise<void>
ArgumentsTypeRequired
datumWaferDieDatumRequired

Return type: Promise<void>. Call the method after element registration and await its Promise result.

appendDie

Stream one probe result in () — the wafer's name for appendPoint.

typescript
appendDie(datum: WaferDieDatum): Promise<void>
ArgumentsTypeRequired
datumWaferDieDatumRequired

Return type: Promise<void>. Call the method after element registration and await its Promise result.

appendBatch

Append multiple values to the stream. Check the argument type and the licensing requirements for streaming.

typescript
appendBatch(data: WaferMapData): Promise<void>
ArgumentsTypeRequired
dataWaferMapDataRequired

Return type: Promise<void>. Call the method after element registration and await its Promise result.

shift

Drop the count oldest streamed dies (windowSlid); they revert to the base map. Without chart.streaming there is no streamed set apart from the base, and the base never leaves: nothing is dropped.

typescript
shift(count: number): Promise<void>
ArgumentsTypeRequired
countnumberRequired

Return type: Promise<void>. Call the method after element registration and await its Promise result.

replace

Swap the streamed set (replace([]) clears it); the base values never leave. Without chart.streaming the dies upsert into the base like a batch (quietly: no appended, no binChanged, as a ring replace).

typescript
replace(data: WaferMapData): Promise<void>
ArgumentsTypeRequired
dataWaferMapDataRequired

Return type: Promise<void>. Call the method after element registration and await its Promise result.

getStreamSource

The die ring in use: the bound stream-source, else the internal one (undefined before the first push, and without chart.streaming).

typescript
getStreamSource(): Promise<WaferMapStreamSource | undefined>

Return type: Promise<WaferMapStreamSource | undefined>. Call the method after element registration and await its Promise result.

updateDie

Patch an existing die's data (creates the cell when absent — a late probe log is still a probe log): the merged result streams in through the ring. Returns the resulting detail.

typescript
updateDie(col: number, row: number, patch: { bin?: number | string; value?: number }): Promise<WaferDieEventDetail | null>
ArgumentsTypeRequired
colnumberRequired
rownumberRequired
patch{ bin?: number | string; value?: number }Required

Return type: Promise<WaferDieEventDetail | null>. Call the method after element registration and await its Promise result.

setAnimation

An asynchronous method. Check the argument and return types below.

typescript
setAnimation(options: { duration?: number; easing?: WaferMapEasing; enabled?: boolean; type?: WaferMapAnimationType }): Promise<void>
ArgumentsTypeRequired
options{ duration?: number; easing?: WaferMapEasing; enabled?: boolean; type?: WaferMapAnimationType }Required

Return type: Promise<void>. Call the method after element registration and await its Promise result.

pauseAnimation

Pause the current animation.

typescript
pauseAnimation(): Promise<void>

Return type: Promise<void>. Call the method after element registration and await its Promise result.

resumeAnimation

Resume a paused animation.

typescript
resumeAnimation(): Promise<void>

Return type: Promise<void>. Call the method after element registration and await its Promise result.

replayAnimation

Run the reveal again.

typescript
replayAnimation(): Promise<void>

Return type: Promise<void>. Call the method after element registration and await its Promise result.

getDieCounts

Layout + grid summary for tooling/specs.

typescript
getDieCounts(): Promise<{ dies: number; fullDies: number; partialDies: number }>

Return type: Promise<{ dies: number; fullDies: number; partialDies: number }>. Call the method after element registration and await its Promise result.

getYield

Pass/fail/yield summary over the probed dies (any mode).

typescript
getYield(): Promise<BinarySummary>

Return type: Promise<BinarySummary>. Call the method after element registration and await its Promise result.

getValueStats

Descriptive statistics over the measured on-wafer values (any mode).

typescript
getValueStats(): Promise<WaferValueStats>

Return type: Promise<WaferValueStats>. Call the method after element registration and await its Promise result.

getDieIndex

Map index of a notch-frame lattice cell, or null when off the wafer.

typescript
getDieIndex(col: number, row: number): Promise<DieIndexEntry | null>
ArgumentsTypeRequired
colnumberRequired
rownumberRequired

Return type: Promise<DieIndexEntry | null>. Call the method after element registration and await its Promise result.

getDieByIndex

Die entry addressed by its map index, or null.

typescript
getDieByIndex(ix: number, iy: number): Promise<DieIndexEntry | null>
ArgumentsTypeRequired
ixnumberRequired
iynumberRequired

Return type: Promise<DieIndexEntry | null>. Call the method after element registration and await its Promise result.

getActiveTier

An asynchronous method. Check the argument and return types below.

typescript
getActiveTier(): Promise<WaferMapEngineTier>

Return type: Promise<WaferMapEngineTier>. Call the method after element registration and await its Promise result.

redraw

Redraw the chart using its current data and options. Inspect the rendered result after the returned Promise resolves.

typescript
redraw(): Promise<WaferMapRenderResult>

Return type: Promise<WaferMapRenderResult>. Call the method after element registration and await its Promise result.

getEngineStatus

Requested engine vs what runs, and why (CHART-ADD-08): always Standard (this type has no WebGPU renderer); read without side effects, never consults the license.

typescript
getEngineStatus(): Promise<ChartEngineStatus>

Return type: Promise<ChartEngineStatus>. Call the method after element registration and await its Promise result.