map4 = {
replay;
let startTime;
let frame;
let transformStr = interpolatorTransform(0);
const s = svg`<svg id="states-map" viewBox="-2 -2 ${w + 4} ${h + 4}" style="width: 100%; height: auto;">
<g id="main" transform="${transformStr}">
${statesPaths()}
</g>
</svg>`,
g = d3.select(s).select("g");
function tick(timestamp) {
if (!startTime) startTime = timestamp;
const elapsed = timestamp - startTime;
const t2 = elapsed / duration;
if (elapsed < duration) {
transformStr = interpolatorTransform(t2);
g.attr("transform", transformStr);
frame = requestAnimationFrame(tick);
}
};
requestAnimationFrame(tick);
invalidation.then(() => cancelAnimationFrame(frame));
return s;
}