Point clouds: pointTargets[layerId][i] is the element drawing the layer's
data[i] — the table in the layer's own data order, not a grouping of it.
MAIDR names a cloud's selection by data index (see
NavigateCallback.pointIndices), because a scatter selects a set of
points and no row/column pair can name one. Keeping the table in data order
is what lets this adapter answer that without re-deriving the model's
x-bucketing or its grid binning, which would drift from the model silently.
Each entry names its own dataset rather than the layer naming one for all of them, because a merged volcano or Manhattan is a single layer drawn from several datasets — one per chromosome, typically.
Bar/line: barLineIndices[layerId][row][col] is the original Chart.js element index (gaps skipped).
Heatmap: heatmapIndices[layerId] maps "x\0y" to the flat Chart.js element index.
Gantt: ganttTargets[layerId][lane][interval] is the element drawing it.
Treemap: treemapIndices[layerId] maps "depth\0index" to the flat
Chart.js element index.
TreemapTrace addresses a node by depth and by its position within that
depth across parents, and the position is the order the nodes were
declared in. The extractor emits one point per drawn rectangle in the
plugin's own layout order, so counting the points per depth reproduces
exactly the addresses the model will use -- without re-deriving the tree,
which would drift from the model silently.
Per-layer lookups that translate a MAIDR navigation position into the original Chart.js element index. MAIDR extraction skips gap markers, so these maps re-derive the raw indices from the chart to keep highlights aligned.