chart = {
const root = pack(group);
const svg = d3
.select(DOM.svg(width, height))
.style("font", "10px sans-serif")
.style("width", "100%")
.style("height", "auto")
.style("overflow", "visible")
.attr("class", "chart-container");
svg
.append("g")
.attr("fill", "#ccc")
.selectAll("circle")
.data(root.leaves())
.join("circle")
.attr("transform", (d) => `translate(${d.x},${d.y})`)
.attr("r", (d) => d.r)
.attr("fill", (d) => (d.data[0] == "United States" ? "#A0CAE2" : "white"))
.attr("stroke", (d) =>
d.data[0] == "United States" ? "lightblue" : "grey"
)
.attr("stroke-width", 3);
svg
.append("g")
.attr("pointer-events", "none")
.attr("text-anchor", "middle")
.selectAll("text")
.data(root.leaves().filter((d) => d.r > 15))
.join("text")
.attr("transform", (d) => `translate(${d.x},${d.y}) scale(${d.r / 30})`)
.selectAll("tspan")
.data((d) => (d.data[0] + "").split(/\s+/g))
.join("tspan")
.attr("x", 0)
.attr("y", (d, i, nodes) => `${i - nodes.length / 2 + 0.8}em`)
.text((d) => d);
return svg.node();
}