From f46e247ba31c5ce32f669260b78824fda9fd0c35 Mon Sep 17 00:00:00 2001 From: Mark Tolmacs Date: Sun, 27 Jul 2025 15:06:23 +0200 Subject: [PATCH] Fix transparent shape binding --- packages/element/src/binding.ts | 1 + packages/element/src/collision.ts | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/element/src/binding.ts b/packages/element/src/binding.ts index 9b64ffc459..967a36b9f5 100644 --- a/packages/element/src/binding.ts +++ b/packages/element/src/binding.ts @@ -313,6 +313,7 @@ const bindingStrategyForEndpointDragging = ( elements, elementsMap, zoom, + true, ); // If the global bind mode is in free binding mode, just bind diff --git a/packages/element/src/collision.ts b/packages/element/src/collision.ts index d1f71ee5ca..a7cda59d43 100644 --- a/packages/element/src/collision.ts +++ b/packages/element/src/collision.ts @@ -103,6 +103,7 @@ export type HitTestArgs = { threshold: number; elementsMap: ElementsMap; frameNameBound?: FrameNameBounds | null; + overrideShouldTestInside?: boolean; }; export const hitElementItself = ({ @@ -111,6 +112,7 @@ export const hitElementItself = ({ threshold, elementsMap, frameNameBound = null, + overrideShouldTestInside = false, }: HitTestArgs) => { // Hit test against a frame's name const hitFrameName = frameNameBound @@ -143,7 +145,9 @@ export const hitElementItself = ({ } // Do the precise (and relatively costly) hit test - const hitElement = shouldTestInside(element) + const hitElement = ( + overrideShouldTestInside ? true : shouldTestInside(element) + ) ? // Since `inShape` tests STRICTLY againt the insides of a shape // we would need `onShape` as well to include the "borders" isPointInElement(point, element, elementsMap) || @@ -314,6 +318,7 @@ export const getHoveredElementForBindingAndIfItsPrecise = ( elements: readonly Ordered[], elementsMap: NonDeletedSceneElementsMap, zoom: AppState["zoom"], + shouldTestInside: boolean = true, ): { hovered: NonDeleted | null; hit: boolean; @@ -332,6 +337,7 @@ export const getHoveredElementForBindingAndIfItsPrecise = ( elementsMap, point, threshold: 0, + overrideShouldTestInside: shouldTestInside, }); return { hovered: hoveredElement, hit };