in packages/charts/src/chart_types/heatmap/layout/viewmodel/viewmodel.ts [495:598]
heatmapViewModels: getPerPanelMap(smScales, (anchor, h, v) => {
const primaryColumn = smScales.vertical.domain[0] === v;
const primaryRow = smScales.horizontal.domain[0] === h;
const lastColumn = smScales.vertical.domain.at(-1) === v;
const titles: HeatmapTitleConfig[] = [];
// TODO this should be filtered by the pageSize AND the pageNumber
const cells = [...(panelCellMap.get(getPanelKey(h, v))?.values() ?? [])];
if (primaryColumn && primaryRow) {
if (spec.xAxisTitle) {
const axisPanelTitleHeight =
groupBySpec.horizontal && axisPanelTitle.visible
? axisPanelTitle.fontSize + innerPad(axisPanelTitle.padding) / 2
: 0;
titles.push({
origin: {
x: chartDimensions.width / 2,
y:
chartDimensions.top +
chartDimensions.height +
elementSizes.xAxis.height +
axisPanelTitleHeight +
innerPad(axisTitle.padding) / 2 +
axisTitle.fontSize / 2 -
chartPaddings.top +
chartPaddings.bottom -
chartMargins.top,
},
...axisTitleFont,
text: spec.xAxisTitle,
rotation: 0,
});
}
if (spec.yAxisTitle) {
titles.push({
origin: {
x: -chartDimensions.left + axisTitle.fontSize / 2 + chartMargins.left,
y: chartDimensions.top + chartDimensions.height / 2 - chartMargins.top - chartPaddings.top,
},
...axisTitleFont,
text: spec.yAxisTitle,
rotation: -90,
});
}
}
if (primaryColumn && groupBySpec.horizontal) {
titles.push({
origin: {
x: panelSize.width / 2,
y:
chartDimensions.top +
chartDimensions.height +
elementSizes.xAxis.height +
innerPad(axisPanelTitle.padding) +
axisPanelTitle.fontSize / 2 -
chartPaddings.top +
chartPaddings.bottom -
chartMargins.top,
},
...axisPanelTitleFont,
text: getPanelTitle(false, v, h, groupBySpec),
rotation: 0,
});
}
if (primaryRow && groupBySpec.vertical) {
const axisTitleWidth = axisTitle.visible ? axisTitle.fontSize + innerPad(axisTitle.padding) : 0;
titles.push({
origin: {
x: -chartDimensions.left + axisTitleWidth + axisPanelTitle.fontSize / 2 + chartMargins.left,
y: chartDimensions.top + panelSize.height / 2 - chartMargins.top - chartPaddings.top,
},
...axisPanelTitleFont,
text: getPanelTitle(true, v, h, groupBySpec),
rotation: -90,
});
}
return {
anchor,
panelSize,
gridOrigin: {
x: anchor.x + chartDimensions.left,
y: anchor.y + chartDimensions.top,
},
gridLines: {
x: xLines,
y: yLines,
stroke: {
color: colorToRgba(heatmapTheme.grid.stroke.color),
width: gridStrokeWidth,
},
},
cells,
cellFontSize: (cell: Cell) => (heatmapTheme.cell.label.useGlobalMinFontSize ? tableMinFontSize : cell.fontSize),
xValues: lastColumn ? textXValues : [],
yValues: primaryRow ? textYValues : [],
titles,
};
}),