createInteractions = {
const tooltipWidth = 100
const tooltip = wrapper.append("div")
.style("position", "absolute")
.style("padding", "10px 15px")
.style("background", "white")
.style("left", "0")
.style("top", "0")
.style("width", tooltipWidth + "px")
.style("box-sizing", "border-box")
.style("border", "1px solid")
.style("font-family", "sans-serif")
.style("font-size", "12px")
.style("transition", "transform 0.1s ease-out")
.style("pointer-events", "none")
.style("opacity", 0)
bounds.append("rect")
.attr("width", dms.boundedWidth)
.attr("height", dms.boundedHeight)
.style("fill", "transparent")
.on("mousemove", function(e) {
const [mouseX, mouseY] = d3.mouse(this)
const index = delaunay.find(mouseX, mouseY)
const point = data[index]
let parsedX = x(point) + dms.marginLeft
if (parsedX > dms.width - tooltipWidth - 10) parsedX -= tooltipWidth
let parsedY = y(point) + dms.marginTop
tooltip.style("opacity", 1)
tooltip.style("transform", `translate(${parsedX}px, calc(${parsedY > dms.height - 200 ? -100 : 0}% + ${parsedY}px))`)
tooltip.html([
`<div><strong>${point["date"]}</strong></div>`,
`<div><strong>x</strong>: ${ xAccessor(point) }</div>`,
`<div><strong>y</strong>: ${ yAccessor(point) }</div>`,
].join(" "))
})
.on("mouseleave", metric => {
tooltip.style("opacity", 0)
})
}