function treeMapGenerator() {
const svg = d3
.create("svg")
.style("font-family", "sans-serif")
.attr("viewBox", [-20, -20, width + 20 * 2, 1100 + 20 * 2]);
const g = svg.append("g").attr("class", "treemap-container");
g.selectAll("text.country")
.data(root.children)
.join("text")
.attr("class", "country")
.attr("x", (d) => d.x0)
.attr("y", (d) => d.y0)
.attr("dy", "0.6em")
.attr("dx", 3)
.style("font-size", 12)
.text((d) => d.data.name);
const leaf = g
.selectAll("g.leaf")
.data(root.leaves())
.join("g")
.attr("class", "leaf")
.attr("transform", (d) => `translate(${d.x0},${d.y0})`)
.style("font-size", 10);
leaf
.append("title")
.text(
(d) =>
`${d.parent.data.name}-${d.data.name}\n${
d.value.toLocaleString() + " cases"
}`
);
leaf
.append("rect")
.attr("fill", (d) => color_Scale(d.parent.data.name))
.attr("opacity", 0.7)
.attr("width", (d) => d.x1 - d.x0)
.attr("height", (d) => d.y1 - d.y0)
.attr("rx", 3)
.attr("ry", 3);
leaf.each((d, i, arr) => {
const current = arr[i];
const left = d.x0,
right = d.x1,
width = right - left,
top = d.y0,
bottom = d.y1,
height = d.y1 - d.y0;
const tooSmall = width < 34 || height < 25;
const text = d3
.select(current)
.append("text")
.attr("opacity", tooSmall ? 0 : 0.9)
.selectAll("tspan")
.data((d) => [d.data.name, d.value.toLocaleString()])
.join("tspan")
.attr("x", 3)
.attr("y", (d, i) => (i ? "2.5em" : "1.15em"))
.text((d) => d);
});
return svg.node();
}