fix: Distance calc with absolute distance

Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
This commit is contained in:
Mark Tolmacs
2026-05-08 10:59:41 +00:00
parent d142190796
commit d8e8d1aeda
+9 -7
View File
@@ -373,19 +373,19 @@ export const getHoveredElementForBinding = (
return candidateElements[0].element; return candidateElements[0].element;
} }
const furthestDistance = candidateElements.sort( const closestDistance = candidateElements.sort(
(a, b) => a.distance - b.distance, (a, b) => Math.abs(a.distance) - Math.abs(b.distance),
); );
const candidate = furthestDistance[furthestDistance.length - 1].element; const candidate = closestDistance[0];
const [cx1, cy1, cx2, cy2] = getElementBounds(candidate, elementsMap); const [cx1, cy1, cx2, cy2] = getElementBounds(candidate.element, elementsMap);
const candidateArea = Math.max( const candidateArea = Math.max(
0.00001, 0.00001,
Math.abs(cx2 - cx1) * Math.abs(cy2 - cy1), Math.abs(cx2 - cx1) * Math.abs(cy2 - cy1),
); );
const overlaps = furthestDistance const overlaps = closestDistance
.map((c) => { .map((c) => {
if (c.element === candidate) { if (c.element === candidate.element) {
return { ...c, overlapPercent: 0, relativeArea: 1 }; return { ...c, overlapPercent: 0, relativeArea: 1 };
} }
@@ -410,7 +410,9 @@ export const getHoveredElementForBinding = (
}) })
.filter((c) => c.overlapPercent > 0.25 && c.relativeArea < 0.75); .filter((c) => c.overlapPercent > 0.25 && c.relativeArea < 0.75);
return overlaps.length > 0 ? overlaps[0].element : candidate; return candidate.distance >= 0 && overlaps.length > 0
? overlaps[0].element
: candidate.element;
}; };
/** /**