in src/spatial_understanding/Content.tsx [254:285]
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);
}
}