chart = {
const svg = d3.create('svg').attr("viewBox", [0, 0, width, height]);
svg.append('text').attr('class', 'title').attr('y', 24).text(title);
const updateAxis = axis(svg);
const updateBars = bars(svg);
const updateLeftLabels = leftLabels(svg);
const updateRightLabels = rightLabels(svg);
const updateTicker = ticker(svg);
yield svg.node();
for (const [index, keyframe] of Object.entries(keyframes)) {
const transition = svg
.transition()
.delay(index % interpolation === 1 ? delay : 0)
.duration(transitionDuration / interpolation)
.ease(d3.easeLinear);
x.domain([0, keyframe.data[0].value]);
updateBars(keyframe, transition);
updateAxis(keyframe, transition);
updateLeftLabels(keyframe, transition);
updateRightLabels(keyframe, transition);
updateTicker(keyframe, transition);
invalidation.then(() => svg.interrupt());
await transition.end();
}
}