chart = {
const context = DOM.context2d(width, height);
d3.select(context.canvas).call(
drag(data, context.canvas).on("start.render drag.render end.render", render)
);
d3.select(context.canvas).call(
d3
.zoom()
.scaleExtent([1, 8])
.on("zoom", () => render(d3.event.transform))
);
function render(transform = d3.zoomTransform(context.canvas)) {
context.save();
context.clearRect(0, 0, width, height);
context.translate(transform.x, transform.y);
context.scale(transform.k, transform.k);
data.forEach(({ x, y, color }, i) => {
context.beginPath();
context.moveTo(x + radius, y);
context.fillStyle = color;
context.arc(x, y, radius, 0, 2 * Math.PI);
context.fill();
});
context.restore();
}
render();
return context.canvas;
}