| 
														
															@@ -46,6 +46,7 @@ export const bindOrUnbindLinearElement = ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   bindOrUnbindLinearElementEdge( 
														 | 
														
														 | 
														
															   bindOrUnbindLinearElementEdge( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     linearElement, 
														 | 
														
														 | 
														
															     linearElement, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     startBindingElement, 
														 | 
														
														 | 
														
															     startBindingElement, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    endBindingElement, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     "start", 
														 | 
														
														 | 
														
															     "start", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     boundToElementIds, 
														 | 
														
														 | 
														
															     boundToElementIds, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     unboundFromElementIds, 
														 | 
														
														 | 
														
															     unboundFromElementIds, 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -53,6 +54,7 @@ export const bindOrUnbindLinearElement = ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   bindOrUnbindLinearElementEdge( 
														 | 
														
														 | 
														
															   bindOrUnbindLinearElementEdge( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     linearElement, 
														 | 
														
														 | 
														
															     linearElement, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     endBindingElement, 
														 | 
														
														 | 
														
															     endBindingElement, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    startBindingElement, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     "end", 
														 | 
														
														 | 
														
															     "end", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     boundToElementIds, 
														 | 
														
														 | 
														
															     boundToElementIds, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     unboundFromElementIds, 
														 | 
														
														 | 
														
															     unboundFromElementIds, 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -75,6 +77,7 @@ export const bindOrUnbindLinearElement = ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 const bindOrUnbindLinearElementEdge = ( 
														 | 
														
														 | 
														
															 const bindOrUnbindLinearElementEdge = ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   linearElement: NonDeleted<ExcalidrawLinearElement>, 
														 | 
														
														 | 
														
															   linearElement: NonDeleted<ExcalidrawLinearElement>, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   bindableElement: ExcalidrawBindableElement | null | "keep", 
														 | 
														
														 | 
														
															   bindableElement: ExcalidrawBindableElement | null | "keep", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  otherEdgeBindableElement: ExcalidrawBindableElement | null | "keep", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   startOrEnd: "start" | "end", 
														 | 
														
														 | 
														
															   startOrEnd: "start" | "end", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   // Is mutated 
														 | 
														
														 | 
														
															   // Is mutated 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   boundToElementIds: Set<ExcalidrawBindableElement["id"]>, 
														 | 
														
														 | 
														
															   boundToElementIds: Set<ExcalidrawBindableElement["id"]>, 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -83,8 +86,22 @@ const bindOrUnbindLinearElementEdge = ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 ): void => { 
														 | 
														
														 | 
														
															 ): void => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   if (bindableElement !== "keep") { 
														 | 
														
														 | 
														
															   if (bindableElement !== "keep") { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if (bindableElement != null) { 
														 | 
														
														 | 
														
															     if (bindableElement != null) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-      bindLinearElement(linearElement, bindableElement, startOrEnd); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-      boundToElementIds.add(bindableElement.id); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      // Don't bind if we're trying to bind or are already bound to the same 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      // element on the other edge already ("start" edge takes precedence). 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      if ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        otherEdgeBindableElement == null || 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        (otherEdgeBindableElement === "keep" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+          ? !isLinearElementSimpleAndAlreadyBoundOnOppositeEdge( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+              linearElement, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+              bindableElement, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+              startOrEnd, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+          : startOrEnd === "start" || 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            otherEdgeBindableElement.id !== bindableElement.id) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      ) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        bindLinearElement(linearElement, bindableElement, startOrEnd); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        boundToElementIds.add(bindableElement.id); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } else { 
														 | 
														
														 | 
														
															     } else { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       const unbound = unbindLinearElement(linearElement, startOrEnd); 
														 | 
														
														 | 
														
															       const unbound = unbindLinearElement(linearElement, startOrEnd); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       if (unbound != null) { 
														 | 
														
														 | 
														
															       if (unbound != null) { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -110,7 +127,7 @@ export const bindOrUnbindSelectedElements = ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   }); 
														 | 
														
														 | 
														
															   }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }; 
														 | 
														
														 | 
														
															 }; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-export const maybeBindBindableElement = ( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+const maybeBindBindableElement = ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   bindableElement: NonDeleted<ExcalidrawBindableElement>, 
														 | 
														
														 | 
														
															   bindableElement: NonDeleted<ExcalidrawBindableElement>, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 ): void => { 
														 | 
														
														 | 
														
															 ): void => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   getElligibleElementsForBindableElementAndWhere( 
														 | 
														
														 | 
														
															   getElligibleElementsForBindableElementAndWhere( 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -134,7 +151,14 @@ export const maybeBindLinearElement = ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     bindLinearElement(linearElement, appState.startBoundElement, "start"); 
														 | 
														
														 | 
														
															     bindLinearElement(linearElement, appState.startBoundElement, "start"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   } 
														 | 
														
														 | 
														
															   } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   const hoveredElement = getHoveredElementForBinding(pointerCoords, scene); 
														 | 
														
														 | 
														
															   const hoveredElement = getHoveredElementForBinding(pointerCoords, scene); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  if (hoveredElement != null) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  if ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    hoveredElement != null && 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    !isLinearElementSimpleAndAlreadyBoundOnOppositeEdge( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      linearElement, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      hoveredElement, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+      "end", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  ) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     bindLinearElement(linearElement, hoveredElement, "end"); 
														 | 
														
														 | 
														
															     bindLinearElement(linearElement, hoveredElement, "end"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   } 
														 | 
														
														 | 
														
															   } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }; 
														 | 
														
														 | 
														
															 }; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -144,15 +168,6 @@ const bindLinearElement = ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   hoveredElement: ExcalidrawBindableElement, 
														 | 
														
														 | 
														
															   hoveredElement: ExcalidrawBindableElement, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   startOrEnd: "start" | "end", 
														 | 
														
														 | 
														
															   startOrEnd: "start" | "end", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 ): void => { 
														 | 
														
														 | 
														
															 ): void => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  if ( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    isLinearElementSimpleAndAlreadyBoundOnOppositeEdge( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-      linearElement, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-      hoveredElement, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-      startOrEnd, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    ) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  ) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    return; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  } 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   mutateElement(linearElement, { 
														 | 
														
														 | 
														
															   mutateElement(linearElement, { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     [startOrEnd === "start" ? "startBinding" : "endBinding"]: { 
														 | 
														
														 | 
														
															     [startOrEnd === "start" ? "startBinding" : "endBinding"]: { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															       elementId: hoveredElement.id, 
														 | 
														
														 | 
														
															       elementId: hoveredElement.id, 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -442,40 +457,10 @@ const getElligibleElementForBindingElement = ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   linearElement: NonDeleted<ExcalidrawLinearElement>, 
														 | 
														
														 | 
														
															   linearElement: NonDeleted<ExcalidrawLinearElement>, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   startOrEnd: "start" | "end", 
														 | 
														
														 | 
														
															   startOrEnd: "start" | "end", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 ): NonDeleted<ExcalidrawBindableElement> | null => { 
														 | 
														
														 | 
														
															 ): NonDeleted<ExcalidrawBindableElement> | null => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  return getElligibleElementForBindingElementAtCoors( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    linearElement, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    startOrEnd, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  return getHoveredElementForBinding( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     getLinearElementEdgeCoors(linearElement, startOrEnd), 
														 | 
														
														 | 
														
															     getLinearElementEdgeCoors(linearElement, startOrEnd), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  ); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-}; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-export const getElligibleElementForBindingElementAtCoors = ( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  linearElement: NonDeleted<ExcalidrawLinearElement>, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  startOrEnd: "start" | "end", 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  pointerCoords: { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    x: number; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    y: number; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  }, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-): NonDeleted<ExcalidrawBindableElement> | null => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  const bindableElement = getHoveredElementForBinding( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    pointerCoords, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     Scene.getScene(linearElement)!, 
														 | 
														
														 | 
														
															     Scene.getScene(linearElement)!, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   ); 
														 | 
														
														 | 
														
															   ); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  if (bindableElement == null) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    return null; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  } 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  // Note: We could push this check inside a version of 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  // `getHoveredElementForBinding`, but it's unlikely this is needed. 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  if ( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    isLinearElementSimpleAndAlreadyBoundOnOppositeEdge( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-      linearElement, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-      bindableElement, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-      startOrEnd, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    ) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  ) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    return null; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  } 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  return bindableElement; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }; 
														 | 
														
														 | 
														
															 }; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 const getLinearElementEdgeCoors = ( 
														 | 
														
														 | 
														
															 const getLinearElementEdgeCoors = ( 
														 |