icon = (w = 80) => {
const h = (55 / 80) * w;
const n = 3;
const m = 4;
const dx = w / n;
const dy = h / m;
const margin = (4 / 80) * w;
const arrowhead = (12 / 80) * w;
const blue = "#6391CD";
const lightblue = "#CFDCEB";
const red = "#B75551";
const strokeWidth = Math.max((4 / 80) * w, 2);
return svg`<svg viewBox="0 0 ${w} ${h}" style="overflow: visible;" width="${w}" height="${h}">
${d3.cross(d3.range(n), d3.range(m)).map(
([x, y]) =>
svg`<rect
x="${x * dx}"
y="${y * dy}"
width="${dx}"
height="${dy}"
stroke="#bbb"
fill="${x + y < 1 ? blue : x + y > 3 ? lightblue : "white"}"
/>`
)}
<path d="M 0 0 H ${w} V ${h} H 0 Z" stroke="#666" fill="none" />
<path d="M ${dx * 2 - margin} ${dy * 3 - margin}
L ${dx + margin} ${dy + margin}
M ${dx + margin} ${dy + margin + arrowhead}
v -${arrowhead} h ${arrowhead}"
stroke="${red}"
stroke-width="${strokeWidth}"
fill="none"
/>
</svg>`;
}