{
const svgBackgroundColor = "#152c33",
fontFamily = "helvetica",
svg = d3.create("svg")
.attr("width", width)
.attr("height", height)
.style("background-color", svgBackgroundColor),
container = svg.append("g")
.attr("transform", `translate(${width/2},${height/2})`),
update = (data) => {
let t = d3.transition()
.duration(650).delay((d,i) => i * 10);
container.selectAll("path")
.data(data, d => d.id)
.join(
enter => enter.append("path")
.attr("fill", d => {return Math.random() < .5 ? "#b5179e" : "#fca311"})
.attr("d", arc)
.attr("stroke", d => "#f72585")
.style("opacity", d => {let rand = Math.random(); return rand < minOpacity ? minOpacity : rand})
,
update => update.call(e => e.transition(t)
.style("opacity", d => {let rand = Math.random(); return rand < minOpacity ? minOpacity : rand})
.attr("fill", d => {return Math.random() < .5 ? "#b5179e" : "#fca311"})
.attrTween("d", d => {
let oldInner = d.start;
let oldOuter = d.end;
let randomNew = Math.random();
let randomNewEnd = Math.random();
let i = d3.interpolate(oldInner, randomNew);
let u = d3.interpolate(oldOuter,randomNewEnd);
return t => {
d.end = u(t);
d.start = i(t);
return arc(d);
};
}
)
)
)
}
update(data);
yield svg.node();
d3.interval(function() {
update(data);
}, 500)
}