in spatial/src/Content.tsx [248:279]
function setHoveredBox(e: React.PointerEvent) {
const boxes = document.querySelectorAll(".bbox");
const dimensionsAndIndex = Array.from(boxes).map((box, i) => {
const { top, left, width, height } = box.getBoundingClientRect();
return {
top,
left,
width,
height,
index: i,
};
});
// Sort smallest to largest
const sorted = dimensionsAndIndex.sort(
(a, b) => a.width * a.height - b.width * b.height,
);
// Find the smallest box that contains the mouse
const { clientX, clientY } = e;
const found = sorted.find(({ top, left, width, height }) => {
return (
clientX > left &&
clientX < left + width &&
clientY > top &&
clientY < top + height
);
});
if (found) {
_setHoveredBox(found.index);
} else {
_setHoveredBox(null);
}
}