in packages/charts/src/chart_types/partition_chart/renderer/dom/highlighter.tsx [148:222]
renderAsMask() {
const {
chartId,
canvasDimension: { width },
highlightSets,
} = this.props;
const maskId = (ind: number, ind2: number) => `echHighlighterMask__${chartId}__${ind}__${ind2}`;
const someGeometriesHighlighted = highlightSets.some(({ geometries }) => geometries.length > 0);
const renderedHighlightSet = someGeometriesHighlighted ? highlightSets : [];
return (
<>
<defs>
{renderedHighlightSet
.filter(({ geometries, outerRadius }) => geometries.length > 0 && outerRadius > 0)
.map(
({
geometries,
geometriesFoci,
diskCenter,
index,
innerIndex,
layout,
marginLeftPx,
marginTopPx,
panel: { innerWidth, innerHeight },
}) => (
<mask key={maskId(index, innerIndex)} id={maskId(index, innerIndex)}>
<rect x={marginLeftPx} y={marginTopPx} width={innerWidth} height={innerHeight} fill="white" />
<g transform={`translate(${diskCenter.x}, ${diskCenter.y})`}>
{renderGeometries(geometries, layout, { color: Colors.Black.keyword }, geometriesFoci, width)}
</g>
</mask>
),
)}
</defs>
{renderedHighlightSet
.filter(({ outerRadius }) => outerRadius > 0)
.map(
({
diskCenter,
outerRadius,
index,
innerIndex,
layout,
marginLeftPx,
marginTopPx,
panel: { innerWidth, innerHeight },
}) =>
isSunburst(layout) ? (
<circle
key={`${index}__${innerIndex}`}
cx={diskCenter.x}
cy={diskCenter.y}
r={outerRadius}
mask={`url(#${maskId(index, innerIndex)})`}
className="echHighlighter__mask"
/>
) : (
<rect
key={`${index}__${innerIndex}`}
x={marginLeftPx}
y={marginTopPx}
width={innerWidth}
height={innerHeight}
mask={`url(#${maskId(index, innerIndex)})`}
className="echHighlighter__mask"
/>
),
)}
</>
);
}