ticks = (g) =>
g
.selectAll("g")
.data(
(d) => d,
(d) => d.tick
)
.join(
(enter) => {
const tickGroups = enter
.append("g")
.attr("class", "tick")
.attr("transform", (tick) => `translate(${tick.position})`);
tickGroups
.append("text")
.attr("text-anchor", (tick) => tick.textAnchor)
.attr("transform", (tick) => `rotate(${tick.angle})`)
.attr(
"dx",
(tick) => (-tick.size - 5) * (tick.textAnchor === "start" ? -1 : 1)
)
.attr("dy", ".5em")
.text((tick) => tick.tick);
tickGroups
.append("line")
.attr("transform", (d) => `rotate(${d.angle + 90})`)
.attr(
"y2",
(tick) => tick.size * (tick.textAnchor === "start" ? -1 : 1)
)
.attr("stroke", "grey");
return tickGroups;
},
(update) =>
update.attr("transform", (tick) => `translate(${tick.position})`),
(exit) => exit.attr("opacity", 0.0001).remove()
)