chart = {
const svg = d3
.create("svg")
.attr("viewBox", [0, 0, width, height])
.style("font", "10px sans-serif")
.attr("text-anchor", "middle")
.style("overflow", "visible");
const shadow = DOM.uid("shadow");
svg
.append("filter")
.attr("id", shadow.id)
.append("feDropShadow")
.attr("flood-opacity", 0.1)
.attr("dx", 1)
.attr("dy", 1);
const node = svg
.selectAll("g")
.data(d3.group(root.descendants(), (d) => d.height))
.join("g")
.attr("filter", shadow)
.selectAll("g")
.data((d) => d[1])
.join("g")
.attr("transform", (d) => `translate(${d.x + 1},${d.y + 1})`);
node
.append("circle")
.attr("r", (d) => d.r)
.attr("stroke", (d) =>
d.data.group ? "ghostwhite" : d.children ? "#bbb" : "none"
)
.attr("fill", (d) =>
d.children ? "none" : d.data.link ? "powderblue" : "#ddd"
);
const groupNode = node.filter((d) => d.children);
console.log({ groupNode });
const leaf = node.filter((d) => !d.children);
console.log({ leaf });
leaf.select("circle").attr("id", (d) => (d.leafUid = DOM.uid("leaf")).id);
leaf
.append("clipPath")
.attr("id", (d) => (d.clipUid = DOM.uid("clip")).id)
.append("use")
.attr("xlink:href", (d) => d.leafUid.href);
leaf
.append("text")
.attr("clip-path", (d) => d.clipUid)
.selectAll("tspan")
.data((d) => d)
.join("tspan")
.attr("x", 0)
.attr("y", 0)
.text((d) => d.data.name);
node.append("title").text(
(d) => `${d.data.name}
${d.data.description}`
);
return svg.node();
}