function Voronoi() {
let x = d => d[0];
let y = d => d[1];
let size = [1, 1];
function voronoi(entries) {
const cloned = JSON.parse(JSON.stringify(entries));
const delaunay = d3.Delaunay.from(cloned, x, y);
const voronoi = delaunay.voronoi([0, 0, ...size]);
return cloned.map((d, i) => {
const polygon = voronoi.cellPolygon(i);
return polygon ? Object.assign(polygon, { data: d }) : null;
}).filter(Boolean);
}
voronoi.x = function(fn) {
return arguments.length ? ((x = fn), voronoi) : x;
};
voronoi.y = function(fn) {
return arguments.length ? ((y = fn), voronoi) : y;
};
voronoi.size = function(arr) {
return arguments.length ? ((size = arr), voronoi) : size;
};
return voronoi;
}