@html-graph/html-graph 9.1.0 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -187,6 +187,7 @@ export declare class CanvasBuilder {
187
187
  private backgroundConfig;
188
188
  private connectablePortsConfig;
189
189
  private draggableEdgesConfig;
190
+ private rectangularSelectionConfig;
190
191
  private virtualScrollConfig;
191
192
  private layoutConfig;
192
193
  private animatedLayoutConfig;
@@ -199,6 +200,7 @@ export declare class CanvasBuilder {
199
200
  private hasBackground;
200
201
  private hasUserConnectablePorts;
201
202
  private hasUserDraggableEdges;
203
+ private hasRectangularSelection;
202
204
  private hasAnimatedLayout;
203
205
  private hasLayout;
204
206
  private readonly boxRenderingTrigger;
@@ -215,6 +217,7 @@ export declare class CanvasBuilder {
215
217
  enableBackground(config?: BackgroundConfig | undefined): CanvasBuilder;
216
218
  enableUserConnectablePorts(config?: ConnectablePortsConfig | undefined): CanvasBuilder;
217
219
  enableUserDraggableEdges(config?: DraggableEdgesConfig | undefined): CanvasBuilder;
220
+ enableRectangularSelection(config?: RectangularSelectionConfig | undefined): CanvasBuilder;
218
221
  enableLayout(config?: LayoutConfig | undefined): CanvasBuilder;
219
222
  enableAnimatedLayout(config?: AnimatedLayoutConfig | undefined): CanvasBuilder;
220
223
  enableUserSelectableNodes(config: UserSelectableNodesConfig): CanvasBuilder;
@@ -389,6 +392,8 @@ export declare interface EdgeCreationInProgressParams {
389
392
  readonly isDirect: boolean;
390
393
  }
391
394
 
395
+ export declare type EdgeElement = HTMLElement | SVGSVGElement;
396
+
392
397
  declare interface EdgePath {
393
398
  readonly path: string;
394
399
  readonly midpoint: Point;
@@ -409,7 +414,7 @@ export declare interface EdgeRenderPort {
409
414
  }
410
415
 
411
416
  export declare interface EdgeShape {
412
- readonly element: SVGSVGElement;
417
+ readonly element: EdgeElement;
413
418
  render(params: EdgeRenderParams): void;
414
419
  }
415
420
 
@@ -647,7 +652,7 @@ export declare interface InteractiveEdgeParams {
647
652
 
648
653
  export declare class InteractiveEdgeShape implements StructuredEdgeShape {
649
654
  private readonly baseEdge;
650
- readonly element: SVGSVGElement;
655
+ readonly element: EdgeElement;
651
656
  readonly group: SVGGElement;
652
657
  readonly line: SVGPathElement;
653
658
  readonly sourceArrow: SVGPathElement | null;
@@ -730,7 +735,7 @@ export declare class MidpointEdgeShape implements StructuredEdgeShape {
730
735
  readonly sourceArrow: SVGPathElement | null;
731
736
  readonly targetArrow: SVGPathElement | null;
732
737
  readonly onAfterRender: EventHandler<StructuredEdgeRenderModel>;
733
- readonly element: SVGSVGElement;
738
+ readonly element: EdgeElement;
734
739
  constructor(baseShape: StructuredEdgeShape, midpointElement: SVGElement);
735
740
  render(params: EdgeRenderParams): void;
736
741
  }
@@ -826,6 +831,26 @@ export declare interface Radii {
826
831
  readonly vertical: number;
827
832
  }
828
833
 
834
+ declare interface RectangularSelectionConfig {
835
+ readonly rectangleElement?: Element;
836
+ readonly mouseDownEventVerifier?: MouseEventVerifier;
837
+ readonly mouseUpEventVerifier?: MouseEventVerifier;
838
+ readonly onSelectionStarted?: () => void;
839
+ readonly onSelectionChange?: (selectionRectangle: DOMRect) => void;
840
+ readonly onSelectionInterrupted?: (selectionRectangle: DOMRect) => void;
841
+ readonly onSelectionFinished?: (selectionRectangle: DOMRect) => void;
842
+ }
843
+
844
+ export declare interface RectangularSelectionParams {
845
+ readonly rectangleElement: Element;
846
+ readonly mouseDownEventVerifier: MouseEventVerifier;
847
+ readonly mouseUpEventVerifier: MouseEventVerifier;
848
+ readonly onSelectionStarted: () => void;
849
+ readonly onSelectionChange: (selectionRectangle: DOMRect) => void;
850
+ readonly onSelectionInterrupted: (selectionRectangle: DOMRect) => void;
851
+ readonly onSelectionFinished: (selectionRectangle: DOMRect) => void;
852
+ }
853
+
829
854
  export declare interface ScaleLimitPreprocessorParams {
830
855
  readonly minContentScale: number | null;
831
856
  readonly maxContentScale: number | null;
@@ -1050,7 +1075,7 @@ declare class ViewportController {
1050
1075
  constructor(graphStore: GraphStore, viewportStore: ViewportStore, params: ViewportControllerParams, win: Window);
1051
1076
  patchViewportMatrix(request: PatchMatrixRequest): void;
1052
1077
  patchContentMatrix(request: PatchMatrixRequest): void;
1053
- center(target: Point, config?: CenterConfig | undefined): void;
1078
+ center(target: Point, config: CenterConfig | undefined): void;
1054
1079
  focus(config?: FocusConfig | undefined): void;
1055
1080
  destroy(): void;
1056
1081
  private navigate;
@@ -7,7 +7,7 @@ var ConnectionCategory = /* @__PURE__ */ function(ConnectionCategory) {
7
7
  }({});
8
8
  //#endregion
9
9
  //#region src/html-view/core-html-view/create-host/create-host.ts
10
- var createHost$1 = () => {
10
+ var createHost$2 = () => {
11
11
  const host = document.createElement("div");
12
12
  host.style.width = "100%";
13
13
  host.style.height = "100%";
@@ -49,7 +49,7 @@ var CoreHtmlView = class {
49
49
  graphStore;
50
50
  viewportStore;
51
51
  element;
52
- host = createHost$1();
52
+ host = createHost$2();
53
53
  container = createContainer();
54
54
  edgeIdToElementMap = /* @__PURE__ */ new Map();
55
55
  attachedNodeIds = /* @__PURE__ */ new Set();
@@ -768,7 +768,7 @@ var GraphStore = class {
768
768
  if (request.from !== void 0 && !this.hasPort(request.from)) throw new CanvasError(canvasErrorText.updateNonexistentEdgeSource(edgeId, request.from));
769
769
  if (request.to !== void 0 && !this.hasPort(request.to)) throw new CanvasError(canvasErrorText.updateNonexistentEdgeTarget(edgeId, request.to));
770
770
  const edge = this.getEdge(edgeId);
771
- const payload = edge.payload;
771
+ const { payload } = edge;
772
772
  this.removeEdgeInternal(edgeId);
773
773
  this.addEdgeInternal({
774
774
  id: edgeId,
@@ -778,7 +778,7 @@ var GraphStore = class {
778
778
  priority: payload.priority
779
779
  });
780
780
  }
781
- const edge = this.edges.get(edgeId);
781
+ const edge = this.getEdge(edgeId);
782
782
  if (request.shape !== void 0) {
783
783
  edge.payload.shape = request.shape;
784
784
  this.afterEdgeShapeUpdatedEmitter.emit(edgeId);
@@ -4368,12 +4368,11 @@ var UserConnectablePortsConfigurator = class UserConnectablePortsConfigurator {
4368
4368
  return;
4369
4369
  }
4370
4370
  const request = resolveCreateEdgeRequest(this.edgeInProgress, targetPortId);
4371
- const connectionAllowed = this.params.connectionAllowedVerifier(request);
4372
- const processedRequest = this.params.connectionPreprocessor({
4373
- from: request.from,
4374
- to: request.to
4375
- });
4376
- if (connectionAllowed && processedRequest !== null) {
4371
+ if (this.params.connectionAllowedVerifier(request)) {
4372
+ const processedRequest = this.params.connectionPreprocessor({
4373
+ from: request.from,
4374
+ to: request.to
4375
+ });
4377
4376
  this.canvas.graph.onAfterEdgeAdded.subscribe(this.onEdgeCreated);
4378
4377
  this.canvas.addEdge(processedRequest);
4379
4378
  this.canvas.graph.onAfterEdgeAdded.unsubscribe(this.onEdgeCreated);
@@ -4871,6 +4870,134 @@ var UserSelectableCanvasConfigurator = class UserSelectableCanvasConfigurator {
4871
4870
  }
4872
4871
  };
4873
4872
  //#endregion
4873
+ //#region src/configurators/rectangular-selection-configurator/create-host/create-host.ts
4874
+ var createHost$1 = () => {
4875
+ const element = document.createElement("div");
4876
+ element.style.width = "100%";
4877
+ element.style.height = "100%";
4878
+ element.style.position = "relative";
4879
+ return element;
4880
+ };
4881
+ //#endregion
4882
+ //#region src/configurators/rectangular-selection-configurator/create-selection-rectangle-wrapper/create-selection-rectangle-wrapper.ts
4883
+ var createSelectionRectangleWrapper = () => {
4884
+ const element = document.createElement("div");
4885
+ element.style.position = "absolute";
4886
+ return element;
4887
+ };
4888
+ //#endregion
4889
+ //#region src/configurators/rectangular-selection-configurator/rectangular-selection-configurator.ts
4890
+ var RectangularSelectionConfigurator = class RectangularSelectionConfigurator {
4891
+ canvas;
4892
+ mainElement;
4893
+ overlayLayer;
4894
+ pointInsideVerifier;
4895
+ eventTagger;
4896
+ win;
4897
+ params;
4898
+ host = createHost$1();
4899
+ selectionRectangleWrapper = createSelectionRectangleWrapper();
4900
+ initialContentPoint = null;
4901
+ draggingViewportPoint = null;
4902
+ eventHandledTag = dragEventHandledTag;
4903
+ onAfterViewportUpdated = () => {
4904
+ this.updateSelectionRectangle();
4905
+ };
4906
+ onCanvasMouseDown = (event) => {
4907
+ const mouseEvent = event;
4908
+ if (!this.params.mouseDownEventVerifier(mouseEvent)) return;
4909
+ if (this.eventTagger.has(event, this.eventHandledTag)) return;
4910
+ this.params.onSelectionStarted();
4911
+ const rect = this.mainElement.getBoundingClientRect();
4912
+ const cursorViewportCoords = {
4913
+ x: mouseEvent.clientX - rect.x,
4914
+ y: mouseEvent.clientY - rect.y
4915
+ };
4916
+ this.initialContentPoint = this.canvas.viewport.createContentCoords(cursorViewportCoords);
4917
+ this.draggingViewportPoint = cursorViewportCoords;
4918
+ this.updateSelectionRectangle();
4919
+ this.host.appendChild(this.selectionRectangleWrapper);
4920
+ this.win.addEventListener("mousemove", this.onWindowMouseMove, { passive: true });
4921
+ this.win.addEventListener("mouseup", this.onWindowMouseUp, { passive: true });
4922
+ };
4923
+ onWindowMouseMove = (event) => {
4924
+ const mouseEvent = event;
4925
+ if (!this.pointInsideVerifier.verify(mouseEvent.clientX, mouseEvent.clientY)) {
4926
+ this.removeMouseListeners();
4927
+ this.interruptSelection();
4928
+ return;
4929
+ }
4930
+ const rect = this.mainElement.getBoundingClientRect();
4931
+ const cursorViewportCoords = {
4932
+ x: mouseEvent.clientX - rect.x,
4933
+ y: mouseEvent.clientY - rect.y
4934
+ };
4935
+ this.draggingViewportPoint = cursorViewportCoords;
4936
+ this.updateSelectionRectangle();
4937
+ const selectionRect = this.selectionRectangleWrapper.getBoundingClientRect();
4938
+ this.params.onSelectionChange(selectionRect);
4939
+ };
4940
+ onWindowMouseUp = (event) => {
4941
+ const mouseEvent = event;
4942
+ if (!this.params.mouseUpEventVerifier(mouseEvent)) return;
4943
+ this.removeMouseListeners();
4944
+ this.finishSelection();
4945
+ };
4946
+ constructor(canvas, mainElement, overlayLayer, pointInsideVerifier, eventTagger, win, params) {
4947
+ this.canvas = canvas;
4948
+ this.mainElement = mainElement;
4949
+ this.overlayLayer = overlayLayer;
4950
+ this.pointInsideVerifier = pointInsideVerifier;
4951
+ this.eventTagger = eventTagger;
4952
+ this.win = win;
4953
+ this.params = params;
4954
+ this.overlayLayer.appendChild(this.host);
4955
+ this.selectionRectangleWrapper.appendChild(this.params.rectangleElement);
4956
+ this.canvas.viewport.onAfterUpdated.subscribe(this.onAfterViewportUpdated);
4957
+ this.mainElement.addEventListener("mousedown", this.onCanvasMouseDown, { passive: true });
4958
+ this.canvas.onBeforeDestroy.subscribe(() => {
4959
+ this.mainElement.removeEventListener("mousedown", this.onCanvasMouseDown);
4960
+ this.removeMouseListeners();
4961
+ });
4962
+ }
4963
+ static configure(canvas, mainElement, overlayLayer, pointInsideVerifier, eventTagger, win, params) {
4964
+ new RectangularSelectionConfigurator(canvas, mainElement, overlayLayer, pointInsideVerifier, eventTagger, win, params);
4965
+ }
4966
+ updateSelectionRectangle() {
4967
+ if (this.initialContentPoint === null || this.draggingViewportPoint === null) return;
4968
+ const initialViewportPoint = this.canvas.viewport.createViewportCoords(this.initialContentPoint);
4969
+ const draggingViewportPoint = this.draggingViewportPoint;
4970
+ const x = Math.min(initialViewportPoint.x, draggingViewportPoint.x);
4971
+ const y = Math.min(initialViewportPoint.y, draggingViewportPoint.y);
4972
+ const width = Math.abs(draggingViewportPoint.x - initialViewportPoint.x);
4973
+ const height = Math.abs(draggingViewportPoint.y - initialViewportPoint.y);
4974
+ const { style } = this.selectionRectangleWrapper;
4975
+ style.left = `${x}px`;
4976
+ style.top = `${y}px`;
4977
+ style.width = `${width}px`;
4978
+ style.height = `${height}px`;
4979
+ }
4980
+ removeMouseListeners() {
4981
+ this.win.removeEventListener("mousemove", this.onWindowMouseMove);
4982
+ this.win.removeEventListener("mouseup", this.onWindowMouseUp);
4983
+ }
4984
+ finishSelection() {
4985
+ const selectionRect = this.selectionRectangleWrapper.getBoundingClientRect();
4986
+ this.terminateSelection();
4987
+ this.params.onSelectionFinished(selectionRect);
4988
+ }
4989
+ interruptSelection() {
4990
+ const selectionRect = this.selectionRectangleWrapper.getBoundingClientRect();
4991
+ this.terminateSelection();
4992
+ this.params.onSelectionInterrupted(selectionRect);
4993
+ }
4994
+ terminateSelection() {
4995
+ this.host.removeChild(this.selectionRectangleWrapper);
4996
+ this.initialContentPoint = null;
4997
+ this.draggingViewportPoint = null;
4998
+ }
4999
+ };
5000
+ //#endregion
4874
5001
  //#region src/canvas-builder/layers/create-host/create-host.ts
4875
5002
  var createHost = () => {
4876
5003
  const host = document.createElement("div");
@@ -4881,16 +5008,17 @@ var createHost = () => {
4881
5008
  };
4882
5009
  //#endregion
4883
5010
  //#region src/canvas-builder/layers/create-layer/create-layer.ts
4884
- var createLayer = () => {
5011
+ var createLayer = (zIndex) => {
4885
5012
  const host = document.createElement("div");
4886
5013
  host.style.position = "absolute";
4887
5014
  host.style.inset = "0";
5015
+ host.style.zIndex = `${zIndex}`;
4888
5016
  return host;
4889
5017
  };
4890
5018
  //#endregion
4891
5019
  //#region src/canvas-builder/layers/create-overlay-layer/create-overlay-layer.ts
4892
- var createOverlayLayer = () => {
4893
- const layer = createLayer();
5020
+ var createOverlayLayer = (zIndex) => {
5021
+ const layer = createLayer(zIndex);
4894
5022
  layer.style.pointerEvents = "none";
4895
5023
  return layer;
4896
5024
  };
@@ -4898,10 +5026,11 @@ var createOverlayLayer = () => {
4898
5026
  //#region src/canvas-builder/layers/layers.ts
4899
5027
  var Layers = class {
4900
5028
  element;
4901
- background = createLayer();
4902
- main = createLayer();
4903
- overlayConnectablePorts = createOverlayLayer();
4904
- overlayDraggableEdges = createOverlayLayer();
5029
+ background = createLayer(0);
5030
+ main = createLayer(1);
5031
+ overlayConnectablePorts = createOverlayLayer(1);
5032
+ overlayDraggableEdges = createOverlayLayer(1);
5033
+ overlayRectangularSelection = createOverlayLayer(2);
4905
5034
  host = createHost();
4906
5035
  constructor(element) {
4907
5036
  this.element = element;
@@ -4910,12 +5039,14 @@ var Layers = class {
4910
5039
  this.host.appendChild(this.main);
4911
5040
  this.host.appendChild(this.overlayConnectablePorts);
4912
5041
  this.host.appendChild(this.overlayDraggableEdges);
5042
+ this.host.appendChild(this.overlayRectangularSelection);
4913
5043
  }
4914
5044
  destroy() {
4915
5045
  this.host.removeChild(this.background);
4916
5046
  this.host.removeChild(this.main);
4917
5047
  this.host.removeChild(this.overlayConnectablePorts);
4918
5048
  this.host.removeChild(this.overlayDraggableEdges);
5049
+ this.host.removeChild(this.overlayRectangularSelection);
4919
5050
  this.element.removeChild(this.host);
4920
5051
  }
4921
5052
  };
@@ -4930,20 +5061,13 @@ var forceDirectedDefaults = Object.freeze({
4930
5061
  edgeStiffness: 1e3,
4931
5062
  dtSec: .01,
4932
5063
  maxIterations: 1e3,
4933
- convergenceVelocity: 10,
5064
+ stopVelocity: 10,
4934
5065
  maxForce: 1e7,
4935
5066
  nodeForceCoefficient: 1,
4936
5067
  barnesHutAreaRadiusThreshold: .01,
4937
5068
  barnesHutTheta: 1
4938
5069
  });
4939
5070
  //#endregion
4940
- //#region src/canvas-builder/shared/selection-defaults.ts
4941
- var selectionDefaults = Object.freeze({
4942
- mouseDownEventVerifier: (event) => event.button === 0,
4943
- mouseUpEventVerifier: (event) => event.button === 0,
4944
- movementThreshold: 10
4945
- });
4946
- //#endregion
4947
5071
  //#region src/canvas-builder/shared/noop-fn/noop-fn.ts
4948
5072
  var noopFn = () => {};
4949
5073
  //#endregion
@@ -5009,27 +5133,28 @@ var resolveEdgeShapeFactory = (config) => {
5009
5133
  }
5010
5134
  };
5011
5135
  //#endregion
5136
+ //#region src/canvas-builder/shared/lmb-ctrl-mouse-event-verifier/lmb-ctrl-mouse-event-verifier.ts
5137
+ var lmbCtrlMouseEventVerifier = (event) => event.button === 0 && event.ctrlKey;
5138
+ //#endregion
5139
+ //#region src/canvas-builder/shared/lmb-mouse-event-verifier/lmb-mouse-event-verifier.ts
5140
+ var lmbMouseEventVerifier = (event) => event.button === 0;
5141
+ //#endregion
5142
+ //#region src/canvas-builder/shared/lmb-no-ctrl-mouse-event-verifier/lmb-no-ctrl-mouse-event-verifier.ts
5143
+ var lmbNoCtrlMouseEventVerifier = (event) => event.button === 0 && !event.ctrlKey;
5144
+ //#endregion
5012
5145
  //#region src/canvas-builder/create-draggable-nodes-params/create-draggable-nodes-params.ts
5013
5146
  var createDraggableNodesParams = (config) => {
5014
- const nodeDragVerifier = config.nodeDragVerifier ?? (() => true);
5015
5147
  const moveOnTop = config.moveOnTop !== false;
5016
- const moveEdgesOnTop = config.moveEdgesOnTop !== false && moveOnTop;
5017
- const cursor = config.mouse?.dragCursor;
5018
- const dragCursor = cursor !== void 0 ? cursor : "grab";
5019
- const defaultMouseDownEventVerifier = config.mouse?.mouseDownEventVerifier;
5020
- const mouseDownEventVerifier = defaultMouseDownEventVerifier !== void 0 ? defaultMouseDownEventVerifier : (event) => event.button === 0;
5021
- const defaultMouseUpEventVerifier = config.mouse?.mouseUpEventVerifier;
5022
- const mouseUpEventVerifier = defaultMouseUpEventVerifier !== void 0 ? defaultMouseUpEventVerifier : (event) => event.button === 0;
5023
5148
  return {
5024
5149
  moveOnTop,
5025
- moveEdgesOnTop,
5026
- dragCursor,
5150
+ moveEdgesOnTop: config.moveEdgesOnTop !== false && moveOnTop,
5151
+ dragCursor: config.mouse?.dragCursor ?? "grab",
5027
5152
  gridSize: config.gridSize ?? null,
5028
- mouseDownEventVerifier,
5029
- mouseUpEventVerifier,
5153
+ mouseDownEventVerifier: config.mouse?.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
5154
+ mouseUpEventVerifier: config.mouse?.mouseUpEventVerifier ?? lmbMouseEventVerifier,
5030
5155
  onNodeDragStarted: config.events?.onNodeDragStarted ?? noopFn,
5031
5156
  onNodeDrag: config.events?.onNodeDrag ?? noopFn,
5032
- nodeDragVerifier,
5157
+ nodeDragVerifier: config.nodeDragVerifier ?? (() => true),
5033
5158
  onNodeDragFinished: config.events?.onNodeDragFinished ?? noopFn
5034
5159
  };
5035
5160
  };
@@ -5119,33 +5244,26 @@ var resolveTransformPreprocessor = (option) => {
5119
5244
  //#endregion
5120
5245
  //#region src/canvas-builder/create-transformable-viewport-params/create-transformable-viewport-params.ts
5121
5246
  var createTransformableViewportParams = (transformConfig) => {
5122
- const configWheelSensitivity = transformConfig?.scale?.mouseWheelSensitivity;
5123
- const wheelSensitivity = configWheelSensitivity !== void 0 ? configWheelSensitivity : 1.2;
5124
5247
  const preprocessors = transformConfig?.transformPreprocessor;
5125
5248
  let transformPreprocessor;
5126
- if (preprocessors !== void 0) if (Array.isArray(preprocessors)) transformPreprocessor = createCombinedTransformPreprocessor(preprocessors.map((preprocessor) => resolveTransformPreprocessor(preprocessor)));
5249
+ if (preprocessors !== void 0) if (Array.isArray(preprocessors)) transformPreprocessor = createCombinedTransformPreprocessor(preprocessors.map((preprocessor) => {
5250
+ return resolveTransformPreprocessor(preprocessor);
5251
+ }));
5127
5252
  else transformPreprocessor = resolveTransformPreprocessor(preprocessors);
5128
5253
  else transformPreprocessor = (params) => {
5129
5254
  return params.nextTransform;
5130
5255
  };
5131
- const shiftCursor = transformConfig?.pan?.cursor !== void 0 ? transformConfig.pan.cursor : "grab";
5132
- const defaultMouseDownEventVerifier = transformConfig?.pan?.mouseDownEventVerifier;
5133
- const mouseDownEventVerifier = defaultMouseDownEventVerifier !== void 0 ? defaultMouseDownEventVerifier : (event) => event.button === 0;
5134
- const defaultMouseUpEventVerifier = transformConfig?.pan?.mouseUpEventVerifier;
5135
- const mouseUpEventVerifier = defaultMouseUpEventVerifier !== void 0 ? defaultMouseUpEventVerifier : (event) => event.button === 0;
5136
- const defaultMouseWheelEventVerifier = transformConfig?.scale?.mouseWheelEventVerifier;
5137
- const mouseWheelEventVerifier = defaultMouseWheelEventVerifier !== void 0 ? defaultMouseWheelEventVerifier : () => true;
5138
5256
  return {
5139
- wheelSensitivity,
5257
+ wheelSensitivity: transformConfig?.scale?.mouseWheelSensitivity ?? 1.2,
5140
5258
  onTransformStarted: transformConfig?.events?.onTransformStarted ?? noopFn,
5141
5259
  onTransformFinished: transformConfig?.events?.onTransformFinished ?? noopFn,
5142
5260
  onBeforeTransformChange: transformConfig?.events?.onBeforeTransformChange ?? noopFn,
5143
5261
  onTransformChange: transformConfig?.events?.onTransformChange ?? noopFn,
5144
5262
  transformPreprocessor,
5145
- shiftCursor,
5146
- mouseDownEventVerifier,
5147
- mouseUpEventVerifier,
5148
- mouseWheelEventVerifier,
5263
+ shiftCursor: transformConfig?.pan?.cursor ?? "grab",
5264
+ mouseDownEventVerifier: transformConfig?.pan?.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
5265
+ mouseUpEventVerifier: transformConfig?.pan?.mouseUpEventVerifier ?? lmbMouseEventVerifier,
5266
+ mouseWheelEventVerifier: transformConfig?.scale?.mouseWheelEventVerifier ?? (() => true),
5149
5267
  scaleWheelFinishTimeout: transformConfig?.scale?.wheelFinishTimeout ?? 500,
5150
5268
  onResizeTransformStarted: transformConfig?.events?.onResizeTransformStarted ?? noopFn,
5151
5269
  onResizeTransformFinished: transformConfig?.events?.onResizeTransformFinished ?? noopFn
@@ -5183,8 +5301,7 @@ var createBackgroundParams = (backgroundConfig) => {
5183
5301
  var defaults$3 = Object.freeze({
5184
5302
  connectionTypeResolver: () => "direct",
5185
5303
  connectionPreprocessor: (request) => request,
5186
- connectionAllowedVerifier: () => true,
5187
- mouseEventVerifier: (event) => event.button === 0
5304
+ connectionAllowedVerifier: () => true
5188
5305
  });
5189
5306
  //#endregion
5190
5307
  //#region src/canvas-builder/create-connectable-ports-params/create-connectable-ports-params.ts
@@ -5196,8 +5313,8 @@ var createConnectablePortsParams = (config, defaultEdgeShapeFactory, graph) => {
5196
5313
  draggingPortDirectionResolver: resolveDraggingPortDirectionResolver(config.dragPortDirection, graph, connectionAllowedVerifier),
5197
5314
  edgeShapeFactory: config.edgeShape !== void 0 ? resolveEdgeShapeFactory(config.edgeShape) : defaultEdgeShapeFactory,
5198
5315
  connectionPreprocessor: config.connectionPreprocessor ?? defaults$3.connectionPreprocessor,
5199
- mouseDownEventVerifier: config.mouseDownEventVerifier ?? defaults$3.mouseEventVerifier,
5200
- mouseUpEventVerifier: config.mouseUpEventVerifier ?? defaults$3.mouseEventVerifier,
5316
+ mouseDownEventVerifier: config.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
5317
+ mouseUpEventVerifier: config.mouseUpEventVerifier ?? lmbMouseEventVerifier,
5201
5318
  onAfterEdgeCreated: config.events?.onAfterEdgeCreated ?? noopFn,
5202
5319
  onEdgeCreationInterrupted: config.events?.onEdgeCreationInterrupted ?? noopFn,
5203
5320
  onEdgeCreationPrevented: config.events?.onEdgeCreationPrevented ?? noopFn,
@@ -5209,9 +5326,7 @@ var createConnectablePortsParams = (config, defaultEdgeShapeFactory, graph) => {
5209
5326
  //#region src/canvas-builder/create-draggable-edges-params/defaults.ts
5210
5327
  var defaults$2 = Object.freeze({
5211
5328
  connectionAllowedVerifier: () => true,
5212
- connectionPreprocessor: (request) => request,
5213
- mouseDownEventVerifier: (event) => event.button === 0,
5214
- mouseUpEventVerifier: (event) => event.button === 0
5329
+ connectionPreprocessor: (request) => request
5215
5330
  });
5216
5331
  //#endregion
5217
5332
  //#region src/canvas-builder/create-draggable-edges-params/create-draggable-edges-params.ts
@@ -5225,8 +5340,8 @@ var createDraggableEdgeParams = (config, graph) => {
5225
5340
  return {
5226
5341
  connectionPreprocessor: config.connectionPreprocessor ?? defaults$2.connectionPreprocessor,
5227
5342
  connectionAllowedVerifier,
5228
- mouseDownEventVerifier: config.mouseDownEventVerifier ?? defaults$2.mouseDownEventVerifier,
5229
- mouseUpEventVerifier: config.mouseUpEventVerifier ?? defaults$2.mouseUpEventVerifier,
5343
+ mouseDownEventVerifier: config.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
5344
+ mouseUpEventVerifier: config.mouseUpEventVerifier ?? lmbMouseEventVerifier,
5230
5345
  draggingEdgeResolver: config.draggingEdgeResolver ?? defaultDraggingEdgeResolver,
5231
5346
  draggingEdgeShapeFactory: config.draggingEdgeShape !== void 0 ? resolveEdgeShapeFactory(config.draggingEdgeShape) : null,
5232
5347
  onAfterEdgeReattached: config.events?.onAfterEdgeReattached ?? noopFn,
@@ -5892,14 +6007,14 @@ var ForceDirectedLayoutAlgorithm = class {
5892
6007
  nodeMass;
5893
6008
  edgeEquilibriumLength;
5894
6009
  edgeStiffness;
5895
- convergenceVelocity;
6010
+ stopVelocity;
5896
6011
  constructor(params) {
5897
6012
  this.maxIterations = params.maxIterations;
5898
6013
  this.dtSec = params.dtSec;
5899
6014
  this.nodeMass = params.nodeMass;
5900
6015
  this.edgeEquilibriumLength = params.edgeEquilibriumLength;
5901
6016
  this.edgeStiffness = params.edgeStiffness;
5902
- this.convergenceVelocity = params.stopVelocity;
6017
+ this.stopVelocity = params.stopVelocity;
5903
6018
  this.distanceVectorGenerator = new DistanceVectorGenerator(params.rand);
5904
6019
  this.nodeForcesApplicationStrategy = resolveNodeForcesApplicationStrategy({
5905
6020
  distanceVectorGenerator: this.distanceVectorGenerator,
@@ -5928,7 +6043,7 @@ var ForceDirectedLayoutAlgorithm = class {
5928
6043
  nodeMass: this.nodeMass,
5929
6044
  edgeEquilibriumLength: this.edgeEquilibriumLength,
5930
6045
  edgeStiffness: this.edgeStiffness
5931
- }).apply() < this.convergenceVelocity) break;
6046
+ }).apply() < this.stopVelocity) break;
5932
6047
  return currentCoords;
5933
6048
  }
5934
6049
  };
@@ -6148,14 +6263,14 @@ var incomingNextLayerNodesResolver = (params) => {
6148
6263
  var ForceDirectedAnimatedLayoutAlgorithm = class {
6149
6264
  distanceVectorGenerator;
6150
6265
  nodeForcesApplicationStrategy;
6151
- convergenceVelocity;
6266
+ stopVelocity;
6152
6267
  maxTimeDeltaSec;
6153
6268
  nodeMass;
6154
6269
  edgeEquilibriumLength;
6155
6270
  edgeStiffness;
6156
6271
  fillerLayoutAlgorithm;
6157
6272
  constructor(params) {
6158
- this.convergenceVelocity = params.stopVelocity;
6273
+ this.stopVelocity = params.stopVelocity;
6159
6274
  this.maxTimeDeltaSec = params.maxTimeDeltaSec;
6160
6275
  this.nodeMass = params.nodeMass;
6161
6276
  this.edgeEquilibriumLength = params.edgeEquilibriumLength;
@@ -6188,7 +6303,7 @@ var ForceDirectedAnimatedLayoutAlgorithm = class {
6188
6303
  nodeMass: this.nodeMass,
6189
6304
  edgeEquilibriumLength: this.edgeEquilibriumLength,
6190
6305
  edgeStiffness: this.edgeStiffness
6191
- }).apply() < this.convergenceVelocity) {
6306
+ }).apply() < this.stopVelocity) {
6192
6307
  if (!graph.getAllNodeIds().some((nodeId) => {
6193
6308
  const node = graph.getNode(nodeId);
6194
6309
  return node.x === null || node.y === null;
@@ -6254,7 +6369,7 @@ var resolveAnimatedLayoutAlgorithm = (config) => {
6254
6369
  nodeMass: config?.nodeMass ?? forceDirectedDefaults.nodeMass,
6255
6370
  edgeEquilibriumLength: config?.edgeEquilibriumLength ?? forceDirectedDefaults.edgeEquilibriumLength,
6256
6371
  edgeStiffness: config?.edgeStiffness ?? forceDirectedDefaults.edgeStiffness,
6257
- stopVelocity: config?.stopVelocity ?? forceDirectedDefaults.convergenceVelocity,
6372
+ stopVelocity: config?.stopVelocity ?? forceDirectedDefaults.stopVelocity,
6258
6373
  maxForce: config?.maxForce ?? forceDirectedDefaults.maxForce,
6259
6374
  nodeForceCoefficient: config?.nodeForceCoefficient ?? forceDirectedDefaults.nodeForceCoefficient,
6260
6375
  barnesHutTheta: config?.barnesHut?.theta ?? forceDirectedDefaults.barnesHutTheta,
@@ -6478,7 +6593,7 @@ var resolveLayoutAlgorithm = (config) => {
6478
6593
  nodeMass: config?.nodeMass ?? forceDirectedDefaults.nodeMass,
6479
6594
  edgeEquilibriumLength: config?.edgeEquilibriumLength ?? forceDirectedDefaults.edgeEquilibriumLength,
6480
6595
  edgeStiffness: config?.edgeStiffness ?? forceDirectedDefaults.edgeStiffness,
6481
- stopVelocity: config?.stopVelocity ?? forceDirectedDefaults.convergenceVelocity,
6596
+ stopVelocity: config?.stopVelocity ?? forceDirectedDefaults.stopVelocity,
6482
6597
  maxForce: config?.maxForce ?? forceDirectedDefaults.maxForce,
6483
6598
  nodeForceCoefficient: config?.nodeForceCoefficient ?? forceDirectedDefaults.nodeForceCoefficient,
6484
6599
  barnesHutTheta: config?.barnesHut?.theta ?? forceDirectedDefaults.barnesHutTheta,
@@ -6604,9 +6719,9 @@ var createViewportControllerParams = (params) => {
6604
6719
  var createUserSelectableNodesParams = (config) => {
6605
6720
  return {
6606
6721
  onNodeSelected: config.onNodeSelected,
6607
- mouseDownEventVerifier: config.mouseDownEventVerifier ?? selectionDefaults.mouseDownEventVerifier,
6608
- mouseUpEventVerifier: config.mouseUpEventVerifier ?? selectionDefaults.mouseUpEventVerifier,
6609
- movementThreshold: config.movementThreshold ?? selectionDefaults.movementThreshold
6722
+ mouseDownEventVerifier: config.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
6723
+ mouseUpEventVerifier: config.mouseUpEventVerifier ?? lmbMouseEventVerifier,
6724
+ movementThreshold: config.movementThreshold ?? 10
6610
6725
  };
6611
6726
  };
6612
6727
  //#endregion
@@ -6614,9 +6729,9 @@ var createUserSelectableNodesParams = (config) => {
6614
6729
  var createUserSelectableCanvasParams = (config) => {
6615
6730
  return {
6616
6731
  onCanvasSelected: config.onCanvasSelected,
6617
- mouseDownEventVerifier: config.mouseDownEventVerifier ?? selectionDefaults.mouseDownEventVerifier,
6618
- mouseUpEventVerifier: config.mouseUpEventVerifier ?? selectionDefaults.mouseUpEventVerifier,
6619
- movementThreshold: config.movementThreshold ?? selectionDefaults.movementThreshold
6732
+ mouseDownEventVerifier: config.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
6733
+ mouseUpEventVerifier: config.mouseUpEventVerifier ?? lmbMouseEventVerifier,
6734
+ movementThreshold: config.movementThreshold ?? 10
6620
6735
  };
6621
6736
  };
6622
6737
  //#endregion
@@ -6624,9 +6739,32 @@ var createUserSelectableCanvasParams = (config) => {
6624
6739
  var createUserSelectableEdgesParams = (config) => {
6625
6740
  return {
6626
6741
  onEdgeSelected: config.onEdgeSelected,
6627
- mouseDownEventVerifier: config.mouseDownEventVerifier ?? selectionDefaults.mouseDownEventVerifier,
6628
- mouseUpEventVerifier: config.mouseUpEventVerifier ?? selectionDefaults.mouseUpEventVerifier,
6629
- movementThreshold: config.movementThreshold ?? selectionDefaults.movementThreshold
6742
+ mouseDownEventVerifier: config.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
6743
+ mouseUpEventVerifier: config.mouseUpEventVerifier ?? lmbMouseEventVerifier,
6744
+ movementThreshold: config.movementThreshold ?? 10
6745
+ };
6746
+ };
6747
+ //#endregion
6748
+ //#region src/canvas-builder/create-rectangular-selection-params/create-default-rectangle-element/create-default-rectangle-element.ts
6749
+ var createDefaultRectangleElement = () => {
6750
+ const element = document.createElement("div");
6751
+ element.style.width = "100%";
6752
+ element.style.height = "100%";
6753
+ element.style.background = "rgba(174, 238, 255, 0.34)";
6754
+ element.style.border = "1px dashed rgba(96, 96, 96, 0.47)";
6755
+ return element;
6756
+ };
6757
+ //#endregion
6758
+ //#region src/canvas-builder/create-rectangular-selection-params/create-rectangular-selection-params.ts
6759
+ var createRectangularSelectionParams = (config) => {
6760
+ return {
6761
+ rectangleElement: config?.rectangleElement ?? createDefaultRectangleElement(),
6762
+ mouseDownEventVerifier: config?.mouseDownEventVerifier ?? lmbCtrlMouseEventVerifier,
6763
+ mouseUpEventVerifier: config?.mouseUpEventVerifier ?? lmbMouseEventVerifier,
6764
+ onSelectionStarted: config?.onSelectionStarted ?? noopFn,
6765
+ onSelectionChange: config?.onSelectionChange ?? noopFn,
6766
+ onSelectionInterrupted: config?.onSelectionInterrupted ?? noopFn,
6767
+ onSelectionFinished: config?.onSelectionFinished ?? noopFn
6630
6768
  };
6631
6769
  };
6632
6770
  //#endregion
@@ -6640,6 +6778,7 @@ var CanvasBuilder = class {
6640
6778
  backgroundConfig = {};
6641
6779
  connectablePortsConfig = {};
6642
6780
  draggableEdgesConfig = {};
6781
+ rectangularSelectionConfig = void 0;
6643
6782
  virtualScrollConfig = void 0;
6644
6783
  layoutConfig = {};
6645
6784
  animatedLayoutConfig = {};
@@ -6652,6 +6791,7 @@ var CanvasBuilder = class {
6652
6791
  hasBackground = false;
6653
6792
  hasUserConnectablePorts = false;
6654
6793
  hasUserDraggableEdges = false;
6794
+ hasRectangularSelection = false;
6655
6795
  hasAnimatedLayout = false;
6656
6796
  hasLayout = false;
6657
6797
  boxRenderingTrigger = new EventSubject();
@@ -6700,6 +6840,11 @@ var CanvasBuilder = class {
6700
6840
  this.draggableEdgesConfig = config ?? {};
6701
6841
  return this;
6702
6842
  }
6843
+ enableRectangularSelection(config) {
6844
+ this.hasRectangularSelection = true;
6845
+ this.rectangularSelectionConfig = config;
6846
+ return this;
6847
+ }
6703
6848
  enableLayout(config) {
6704
6849
  this.layoutConfig = config ?? {};
6705
6850
  this.hasLayout = true;
@@ -6770,6 +6915,7 @@ var CanvasBuilder = class {
6770
6915
  }
6771
6916
  if (this.virtualScrollConfig !== void 0) UserTransformableViewportVirtualScrollConfigurator.configure(canvas, layers.main, this.window, createTransformableViewportParams(this.transformConfig), this.boxRenderingTrigger, this.pointInsideVerifier, this.eventTagger, createVirtualScrollParams(this.virtualScrollConfig));
6772
6917
  else if (this.hasTransformableViewport) UserTransformableViewportConfigurator.configure(canvas, layers.main, this.window, this.pointInsideVerifier, this.eventTagger, createTransformableViewportParams(this.transformConfig));
6918
+ if (this.hasRectangularSelection) RectangularSelectionConfigurator.configure(canvas, layers.main, layers.overlayRectangularSelection, this.pointInsideVerifier, this.eventTagger, this.window, createRectangularSelectionParams(this.rectangularSelectionConfig));
6773
6919
  if (this.hasLayout) LayoutConfigurator.configure(canvas, layoutParams);
6774
6920
  if (this.hasAnimatedLayout) {
6775
6921
  let config = createAnimatedLayoutParams(this.animatedLayoutConfig);