@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.
@@ -11,7 +11,7 @@
11
11
  }({});
12
12
  //#endregion
13
13
  //#region src/html-view/core-html-view/create-host/create-host.ts
14
- var createHost$1 = () => {
14
+ var createHost$2 = () => {
15
15
  const host = document.createElement("div");
16
16
  host.style.width = "100%";
17
17
  host.style.height = "100%";
@@ -53,7 +53,7 @@
53
53
  graphStore;
54
54
  viewportStore;
55
55
  element;
56
- host = createHost$1();
56
+ host = createHost$2();
57
57
  container = createContainer();
58
58
  edgeIdToElementMap = /* @__PURE__ */ new Map();
59
59
  attachedNodeIds = /* @__PURE__ */ new Set();
@@ -772,7 +772,7 @@
772
772
  if (request.from !== void 0 && !this.hasPort(request.from)) throw new CanvasError(canvasErrorText.updateNonexistentEdgeSource(edgeId, request.from));
773
773
  if (request.to !== void 0 && !this.hasPort(request.to)) throw new CanvasError(canvasErrorText.updateNonexistentEdgeTarget(edgeId, request.to));
774
774
  const edge = this.getEdge(edgeId);
775
- const payload = edge.payload;
775
+ const { payload } = edge;
776
776
  this.removeEdgeInternal(edgeId);
777
777
  this.addEdgeInternal({
778
778
  id: edgeId,
@@ -782,7 +782,7 @@
782
782
  priority: payload.priority
783
783
  });
784
784
  }
785
- const edge = this.edges.get(edgeId);
785
+ const edge = this.getEdge(edgeId);
786
786
  if (request.shape !== void 0) {
787
787
  edge.payload.shape = request.shape;
788
788
  this.afterEdgeShapeUpdatedEmitter.emit(edgeId);
@@ -4372,12 +4372,11 @@
4372
4372
  return;
4373
4373
  }
4374
4374
  const request = resolveCreateEdgeRequest(this.edgeInProgress, targetPortId);
4375
- const connectionAllowed = this.params.connectionAllowedVerifier(request);
4376
- const processedRequest = this.params.connectionPreprocessor({
4377
- from: request.from,
4378
- to: request.to
4379
- });
4380
- if (connectionAllowed && processedRequest !== null) {
4375
+ if (this.params.connectionAllowedVerifier(request)) {
4376
+ const processedRequest = this.params.connectionPreprocessor({
4377
+ from: request.from,
4378
+ to: request.to
4379
+ });
4381
4380
  this.canvas.graph.onAfterEdgeAdded.subscribe(this.onEdgeCreated);
4382
4381
  this.canvas.addEdge(processedRequest);
4383
4382
  this.canvas.graph.onAfterEdgeAdded.unsubscribe(this.onEdgeCreated);
@@ -4875,6 +4874,134 @@
4875
4874
  }
4876
4875
  };
4877
4876
  //#endregion
4877
+ //#region src/configurators/rectangular-selection-configurator/create-host/create-host.ts
4878
+ var createHost$1 = () => {
4879
+ const element = document.createElement("div");
4880
+ element.style.width = "100%";
4881
+ element.style.height = "100%";
4882
+ element.style.position = "relative";
4883
+ return element;
4884
+ };
4885
+ //#endregion
4886
+ //#region src/configurators/rectangular-selection-configurator/create-selection-rectangle-wrapper/create-selection-rectangle-wrapper.ts
4887
+ var createSelectionRectangleWrapper = () => {
4888
+ const element = document.createElement("div");
4889
+ element.style.position = "absolute";
4890
+ return element;
4891
+ };
4892
+ //#endregion
4893
+ //#region src/configurators/rectangular-selection-configurator/rectangular-selection-configurator.ts
4894
+ var RectangularSelectionConfigurator = class RectangularSelectionConfigurator {
4895
+ canvas;
4896
+ mainElement;
4897
+ overlayLayer;
4898
+ pointInsideVerifier;
4899
+ eventTagger;
4900
+ win;
4901
+ params;
4902
+ host = createHost$1();
4903
+ selectionRectangleWrapper = createSelectionRectangleWrapper();
4904
+ initialContentPoint = null;
4905
+ draggingViewportPoint = null;
4906
+ eventHandledTag = dragEventHandledTag;
4907
+ onAfterViewportUpdated = () => {
4908
+ this.updateSelectionRectangle();
4909
+ };
4910
+ onCanvasMouseDown = (event) => {
4911
+ const mouseEvent = event;
4912
+ if (!this.params.mouseDownEventVerifier(mouseEvent)) return;
4913
+ if (this.eventTagger.has(event, this.eventHandledTag)) return;
4914
+ this.params.onSelectionStarted();
4915
+ const rect = this.mainElement.getBoundingClientRect();
4916
+ const cursorViewportCoords = {
4917
+ x: mouseEvent.clientX - rect.x,
4918
+ y: mouseEvent.clientY - rect.y
4919
+ };
4920
+ this.initialContentPoint = this.canvas.viewport.createContentCoords(cursorViewportCoords);
4921
+ this.draggingViewportPoint = cursorViewportCoords;
4922
+ this.updateSelectionRectangle();
4923
+ this.host.appendChild(this.selectionRectangleWrapper);
4924
+ this.win.addEventListener("mousemove", this.onWindowMouseMove, { passive: true });
4925
+ this.win.addEventListener("mouseup", this.onWindowMouseUp, { passive: true });
4926
+ };
4927
+ onWindowMouseMove = (event) => {
4928
+ const mouseEvent = event;
4929
+ if (!this.pointInsideVerifier.verify(mouseEvent.clientX, mouseEvent.clientY)) {
4930
+ this.removeMouseListeners();
4931
+ this.interruptSelection();
4932
+ return;
4933
+ }
4934
+ const rect = this.mainElement.getBoundingClientRect();
4935
+ const cursorViewportCoords = {
4936
+ x: mouseEvent.clientX - rect.x,
4937
+ y: mouseEvent.clientY - rect.y
4938
+ };
4939
+ this.draggingViewportPoint = cursorViewportCoords;
4940
+ this.updateSelectionRectangle();
4941
+ const selectionRect = this.selectionRectangleWrapper.getBoundingClientRect();
4942
+ this.params.onSelectionChange(selectionRect);
4943
+ };
4944
+ onWindowMouseUp = (event) => {
4945
+ const mouseEvent = event;
4946
+ if (!this.params.mouseUpEventVerifier(mouseEvent)) return;
4947
+ this.removeMouseListeners();
4948
+ this.finishSelection();
4949
+ };
4950
+ constructor(canvas, mainElement, overlayLayer, pointInsideVerifier, eventTagger, win, params) {
4951
+ this.canvas = canvas;
4952
+ this.mainElement = mainElement;
4953
+ this.overlayLayer = overlayLayer;
4954
+ this.pointInsideVerifier = pointInsideVerifier;
4955
+ this.eventTagger = eventTagger;
4956
+ this.win = win;
4957
+ this.params = params;
4958
+ this.overlayLayer.appendChild(this.host);
4959
+ this.selectionRectangleWrapper.appendChild(this.params.rectangleElement);
4960
+ this.canvas.viewport.onAfterUpdated.subscribe(this.onAfterViewportUpdated);
4961
+ this.mainElement.addEventListener("mousedown", this.onCanvasMouseDown, { passive: true });
4962
+ this.canvas.onBeforeDestroy.subscribe(() => {
4963
+ this.mainElement.removeEventListener("mousedown", this.onCanvasMouseDown);
4964
+ this.removeMouseListeners();
4965
+ });
4966
+ }
4967
+ static configure(canvas, mainElement, overlayLayer, pointInsideVerifier, eventTagger, win, params) {
4968
+ new RectangularSelectionConfigurator(canvas, mainElement, overlayLayer, pointInsideVerifier, eventTagger, win, params);
4969
+ }
4970
+ updateSelectionRectangle() {
4971
+ if (this.initialContentPoint === null || this.draggingViewportPoint === null) return;
4972
+ const initialViewportPoint = this.canvas.viewport.createViewportCoords(this.initialContentPoint);
4973
+ const draggingViewportPoint = this.draggingViewportPoint;
4974
+ const x = Math.min(initialViewportPoint.x, draggingViewportPoint.x);
4975
+ const y = Math.min(initialViewportPoint.y, draggingViewportPoint.y);
4976
+ const width = Math.abs(draggingViewportPoint.x - initialViewportPoint.x);
4977
+ const height = Math.abs(draggingViewportPoint.y - initialViewportPoint.y);
4978
+ const { style } = this.selectionRectangleWrapper;
4979
+ style.left = `${x}px`;
4980
+ style.top = `${y}px`;
4981
+ style.width = `${width}px`;
4982
+ style.height = `${height}px`;
4983
+ }
4984
+ removeMouseListeners() {
4985
+ this.win.removeEventListener("mousemove", this.onWindowMouseMove);
4986
+ this.win.removeEventListener("mouseup", this.onWindowMouseUp);
4987
+ }
4988
+ finishSelection() {
4989
+ const selectionRect = this.selectionRectangleWrapper.getBoundingClientRect();
4990
+ this.terminateSelection();
4991
+ this.params.onSelectionFinished(selectionRect);
4992
+ }
4993
+ interruptSelection() {
4994
+ const selectionRect = this.selectionRectangleWrapper.getBoundingClientRect();
4995
+ this.terminateSelection();
4996
+ this.params.onSelectionInterrupted(selectionRect);
4997
+ }
4998
+ terminateSelection() {
4999
+ this.host.removeChild(this.selectionRectangleWrapper);
5000
+ this.initialContentPoint = null;
5001
+ this.draggingViewportPoint = null;
5002
+ }
5003
+ };
5004
+ //#endregion
4878
5005
  //#region src/canvas-builder/layers/create-host/create-host.ts
4879
5006
  var createHost = () => {
4880
5007
  const host = document.createElement("div");
@@ -4885,16 +5012,17 @@
4885
5012
  };
4886
5013
  //#endregion
4887
5014
  //#region src/canvas-builder/layers/create-layer/create-layer.ts
4888
- var createLayer = () => {
5015
+ var createLayer = (zIndex) => {
4889
5016
  const host = document.createElement("div");
4890
5017
  host.style.position = "absolute";
4891
5018
  host.style.inset = "0";
5019
+ host.style.zIndex = `${zIndex}`;
4892
5020
  return host;
4893
5021
  };
4894
5022
  //#endregion
4895
5023
  //#region src/canvas-builder/layers/create-overlay-layer/create-overlay-layer.ts
4896
- var createOverlayLayer = () => {
4897
- const layer = createLayer();
5024
+ var createOverlayLayer = (zIndex) => {
5025
+ const layer = createLayer(zIndex);
4898
5026
  layer.style.pointerEvents = "none";
4899
5027
  return layer;
4900
5028
  };
@@ -4902,10 +5030,11 @@
4902
5030
  //#region src/canvas-builder/layers/layers.ts
4903
5031
  var Layers = class {
4904
5032
  element;
4905
- background = createLayer();
4906
- main = createLayer();
4907
- overlayConnectablePorts = createOverlayLayer();
4908
- overlayDraggableEdges = createOverlayLayer();
5033
+ background = createLayer(0);
5034
+ main = createLayer(1);
5035
+ overlayConnectablePorts = createOverlayLayer(1);
5036
+ overlayDraggableEdges = createOverlayLayer(1);
5037
+ overlayRectangularSelection = createOverlayLayer(2);
4909
5038
  host = createHost();
4910
5039
  constructor(element) {
4911
5040
  this.element = element;
@@ -4914,12 +5043,14 @@
4914
5043
  this.host.appendChild(this.main);
4915
5044
  this.host.appendChild(this.overlayConnectablePorts);
4916
5045
  this.host.appendChild(this.overlayDraggableEdges);
5046
+ this.host.appendChild(this.overlayRectangularSelection);
4917
5047
  }
4918
5048
  destroy() {
4919
5049
  this.host.removeChild(this.background);
4920
5050
  this.host.removeChild(this.main);
4921
5051
  this.host.removeChild(this.overlayConnectablePorts);
4922
5052
  this.host.removeChild(this.overlayDraggableEdges);
5053
+ this.host.removeChild(this.overlayRectangularSelection);
4923
5054
  this.element.removeChild(this.host);
4924
5055
  }
4925
5056
  };
@@ -4934,20 +5065,13 @@
4934
5065
  edgeStiffness: 1e3,
4935
5066
  dtSec: .01,
4936
5067
  maxIterations: 1e3,
4937
- convergenceVelocity: 10,
5068
+ stopVelocity: 10,
4938
5069
  maxForce: 1e7,
4939
5070
  nodeForceCoefficient: 1,
4940
5071
  barnesHutAreaRadiusThreshold: .01,
4941
5072
  barnesHutTheta: 1
4942
5073
  });
4943
5074
  //#endregion
4944
- //#region src/canvas-builder/shared/selection-defaults.ts
4945
- var selectionDefaults = Object.freeze({
4946
- mouseDownEventVerifier: (event) => event.button === 0,
4947
- mouseUpEventVerifier: (event) => event.button === 0,
4948
- movementThreshold: 10
4949
- });
4950
- //#endregion
4951
5075
  //#region src/canvas-builder/shared/noop-fn/noop-fn.ts
4952
5076
  var noopFn = () => {};
4953
5077
  //#endregion
@@ -5013,27 +5137,28 @@
5013
5137
  }
5014
5138
  };
5015
5139
  //#endregion
5140
+ //#region src/canvas-builder/shared/lmb-ctrl-mouse-event-verifier/lmb-ctrl-mouse-event-verifier.ts
5141
+ var lmbCtrlMouseEventVerifier = (event) => event.button === 0 && event.ctrlKey;
5142
+ //#endregion
5143
+ //#region src/canvas-builder/shared/lmb-mouse-event-verifier/lmb-mouse-event-verifier.ts
5144
+ var lmbMouseEventVerifier = (event) => event.button === 0;
5145
+ //#endregion
5146
+ //#region src/canvas-builder/shared/lmb-no-ctrl-mouse-event-verifier/lmb-no-ctrl-mouse-event-verifier.ts
5147
+ var lmbNoCtrlMouseEventVerifier = (event) => event.button === 0 && !event.ctrlKey;
5148
+ //#endregion
5016
5149
  //#region src/canvas-builder/create-draggable-nodes-params/create-draggable-nodes-params.ts
5017
5150
  var createDraggableNodesParams = (config) => {
5018
- const nodeDragVerifier = config.nodeDragVerifier ?? (() => true);
5019
5151
  const moveOnTop = config.moveOnTop !== false;
5020
- const moveEdgesOnTop = config.moveEdgesOnTop !== false && moveOnTop;
5021
- const cursor = config.mouse?.dragCursor;
5022
- const dragCursor = cursor !== void 0 ? cursor : "grab";
5023
- const defaultMouseDownEventVerifier = config.mouse?.mouseDownEventVerifier;
5024
- const mouseDownEventVerifier = defaultMouseDownEventVerifier !== void 0 ? defaultMouseDownEventVerifier : (event) => event.button === 0;
5025
- const defaultMouseUpEventVerifier = config.mouse?.mouseUpEventVerifier;
5026
- const mouseUpEventVerifier = defaultMouseUpEventVerifier !== void 0 ? defaultMouseUpEventVerifier : (event) => event.button === 0;
5027
5152
  return {
5028
5153
  moveOnTop,
5029
- moveEdgesOnTop,
5030
- dragCursor,
5154
+ moveEdgesOnTop: config.moveEdgesOnTop !== false && moveOnTop,
5155
+ dragCursor: config.mouse?.dragCursor ?? "grab",
5031
5156
  gridSize: config.gridSize ?? null,
5032
- mouseDownEventVerifier,
5033
- mouseUpEventVerifier,
5157
+ mouseDownEventVerifier: config.mouse?.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
5158
+ mouseUpEventVerifier: config.mouse?.mouseUpEventVerifier ?? lmbMouseEventVerifier,
5034
5159
  onNodeDragStarted: config.events?.onNodeDragStarted ?? noopFn,
5035
5160
  onNodeDrag: config.events?.onNodeDrag ?? noopFn,
5036
- nodeDragVerifier,
5161
+ nodeDragVerifier: config.nodeDragVerifier ?? (() => true),
5037
5162
  onNodeDragFinished: config.events?.onNodeDragFinished ?? noopFn
5038
5163
  };
5039
5164
  };
@@ -5123,33 +5248,26 @@
5123
5248
  //#endregion
5124
5249
  //#region src/canvas-builder/create-transformable-viewport-params/create-transformable-viewport-params.ts
5125
5250
  var createTransformableViewportParams = (transformConfig) => {
5126
- const configWheelSensitivity = transformConfig?.scale?.mouseWheelSensitivity;
5127
- const wheelSensitivity = configWheelSensitivity !== void 0 ? configWheelSensitivity : 1.2;
5128
5251
  const preprocessors = transformConfig?.transformPreprocessor;
5129
5252
  let transformPreprocessor;
5130
- if (preprocessors !== void 0) if (Array.isArray(preprocessors)) transformPreprocessor = createCombinedTransformPreprocessor(preprocessors.map((preprocessor) => resolveTransformPreprocessor(preprocessor)));
5253
+ if (preprocessors !== void 0) if (Array.isArray(preprocessors)) transformPreprocessor = createCombinedTransformPreprocessor(preprocessors.map((preprocessor) => {
5254
+ return resolveTransformPreprocessor(preprocessor);
5255
+ }));
5131
5256
  else transformPreprocessor = resolveTransformPreprocessor(preprocessors);
5132
5257
  else transformPreprocessor = (params) => {
5133
5258
  return params.nextTransform;
5134
5259
  };
5135
- const shiftCursor = transformConfig?.pan?.cursor !== void 0 ? transformConfig.pan.cursor : "grab";
5136
- const defaultMouseDownEventVerifier = transformConfig?.pan?.mouseDownEventVerifier;
5137
- const mouseDownEventVerifier = defaultMouseDownEventVerifier !== void 0 ? defaultMouseDownEventVerifier : (event) => event.button === 0;
5138
- const defaultMouseUpEventVerifier = transformConfig?.pan?.mouseUpEventVerifier;
5139
- const mouseUpEventVerifier = defaultMouseUpEventVerifier !== void 0 ? defaultMouseUpEventVerifier : (event) => event.button === 0;
5140
- const defaultMouseWheelEventVerifier = transformConfig?.scale?.mouseWheelEventVerifier;
5141
- const mouseWheelEventVerifier = defaultMouseWheelEventVerifier !== void 0 ? defaultMouseWheelEventVerifier : () => true;
5142
5260
  return {
5143
- wheelSensitivity,
5261
+ wheelSensitivity: transformConfig?.scale?.mouseWheelSensitivity ?? 1.2,
5144
5262
  onTransformStarted: transformConfig?.events?.onTransformStarted ?? noopFn,
5145
5263
  onTransformFinished: transformConfig?.events?.onTransformFinished ?? noopFn,
5146
5264
  onBeforeTransformChange: transformConfig?.events?.onBeforeTransformChange ?? noopFn,
5147
5265
  onTransformChange: transformConfig?.events?.onTransformChange ?? noopFn,
5148
5266
  transformPreprocessor,
5149
- shiftCursor,
5150
- mouseDownEventVerifier,
5151
- mouseUpEventVerifier,
5152
- mouseWheelEventVerifier,
5267
+ shiftCursor: transformConfig?.pan?.cursor ?? "grab",
5268
+ mouseDownEventVerifier: transformConfig?.pan?.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
5269
+ mouseUpEventVerifier: transformConfig?.pan?.mouseUpEventVerifier ?? lmbMouseEventVerifier,
5270
+ mouseWheelEventVerifier: transformConfig?.scale?.mouseWheelEventVerifier ?? (() => true),
5153
5271
  scaleWheelFinishTimeout: transformConfig?.scale?.wheelFinishTimeout ?? 500,
5154
5272
  onResizeTransformStarted: transformConfig?.events?.onResizeTransformStarted ?? noopFn,
5155
5273
  onResizeTransformFinished: transformConfig?.events?.onResizeTransformFinished ?? noopFn
@@ -5187,8 +5305,7 @@
5187
5305
  var defaults$3 = Object.freeze({
5188
5306
  connectionTypeResolver: () => "direct",
5189
5307
  connectionPreprocessor: (request) => request,
5190
- connectionAllowedVerifier: () => true,
5191
- mouseEventVerifier: (event) => event.button === 0
5308
+ connectionAllowedVerifier: () => true
5192
5309
  });
5193
5310
  //#endregion
5194
5311
  //#region src/canvas-builder/create-connectable-ports-params/create-connectable-ports-params.ts
@@ -5200,8 +5317,8 @@
5200
5317
  draggingPortDirectionResolver: resolveDraggingPortDirectionResolver(config.dragPortDirection, graph, connectionAllowedVerifier),
5201
5318
  edgeShapeFactory: config.edgeShape !== void 0 ? resolveEdgeShapeFactory(config.edgeShape) : defaultEdgeShapeFactory,
5202
5319
  connectionPreprocessor: config.connectionPreprocessor ?? defaults$3.connectionPreprocessor,
5203
- mouseDownEventVerifier: config.mouseDownEventVerifier ?? defaults$3.mouseEventVerifier,
5204
- mouseUpEventVerifier: config.mouseUpEventVerifier ?? defaults$3.mouseEventVerifier,
5320
+ mouseDownEventVerifier: config.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
5321
+ mouseUpEventVerifier: config.mouseUpEventVerifier ?? lmbMouseEventVerifier,
5205
5322
  onAfterEdgeCreated: config.events?.onAfterEdgeCreated ?? noopFn,
5206
5323
  onEdgeCreationInterrupted: config.events?.onEdgeCreationInterrupted ?? noopFn,
5207
5324
  onEdgeCreationPrevented: config.events?.onEdgeCreationPrevented ?? noopFn,
@@ -5213,9 +5330,7 @@
5213
5330
  //#region src/canvas-builder/create-draggable-edges-params/defaults.ts
5214
5331
  var defaults$2 = Object.freeze({
5215
5332
  connectionAllowedVerifier: () => true,
5216
- connectionPreprocessor: (request) => request,
5217
- mouseDownEventVerifier: (event) => event.button === 0,
5218
- mouseUpEventVerifier: (event) => event.button === 0
5333
+ connectionPreprocessor: (request) => request
5219
5334
  });
5220
5335
  //#endregion
5221
5336
  //#region src/canvas-builder/create-draggable-edges-params/create-draggable-edges-params.ts
@@ -5229,8 +5344,8 @@
5229
5344
  return {
5230
5345
  connectionPreprocessor: config.connectionPreprocessor ?? defaults$2.connectionPreprocessor,
5231
5346
  connectionAllowedVerifier,
5232
- mouseDownEventVerifier: config.mouseDownEventVerifier ?? defaults$2.mouseDownEventVerifier,
5233
- mouseUpEventVerifier: config.mouseUpEventVerifier ?? defaults$2.mouseUpEventVerifier,
5347
+ mouseDownEventVerifier: config.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
5348
+ mouseUpEventVerifier: config.mouseUpEventVerifier ?? lmbMouseEventVerifier,
5234
5349
  draggingEdgeResolver: config.draggingEdgeResolver ?? defaultDraggingEdgeResolver,
5235
5350
  draggingEdgeShapeFactory: config.draggingEdgeShape !== void 0 ? resolveEdgeShapeFactory(config.draggingEdgeShape) : null,
5236
5351
  onAfterEdgeReattached: config.events?.onAfterEdgeReattached ?? noopFn,
@@ -5896,14 +6011,14 @@
5896
6011
  nodeMass;
5897
6012
  edgeEquilibriumLength;
5898
6013
  edgeStiffness;
5899
- convergenceVelocity;
6014
+ stopVelocity;
5900
6015
  constructor(params) {
5901
6016
  this.maxIterations = params.maxIterations;
5902
6017
  this.dtSec = params.dtSec;
5903
6018
  this.nodeMass = params.nodeMass;
5904
6019
  this.edgeEquilibriumLength = params.edgeEquilibriumLength;
5905
6020
  this.edgeStiffness = params.edgeStiffness;
5906
- this.convergenceVelocity = params.stopVelocity;
6021
+ this.stopVelocity = params.stopVelocity;
5907
6022
  this.distanceVectorGenerator = new DistanceVectorGenerator(params.rand);
5908
6023
  this.nodeForcesApplicationStrategy = resolveNodeForcesApplicationStrategy({
5909
6024
  distanceVectorGenerator: this.distanceVectorGenerator,
@@ -5932,7 +6047,7 @@
5932
6047
  nodeMass: this.nodeMass,
5933
6048
  edgeEquilibriumLength: this.edgeEquilibriumLength,
5934
6049
  edgeStiffness: this.edgeStiffness
5935
- }).apply() < this.convergenceVelocity) break;
6050
+ }).apply() < this.stopVelocity) break;
5936
6051
  return currentCoords;
5937
6052
  }
5938
6053
  };
@@ -6152,14 +6267,14 @@
6152
6267
  var ForceDirectedAnimatedLayoutAlgorithm = class {
6153
6268
  distanceVectorGenerator;
6154
6269
  nodeForcesApplicationStrategy;
6155
- convergenceVelocity;
6270
+ stopVelocity;
6156
6271
  maxTimeDeltaSec;
6157
6272
  nodeMass;
6158
6273
  edgeEquilibriumLength;
6159
6274
  edgeStiffness;
6160
6275
  fillerLayoutAlgorithm;
6161
6276
  constructor(params) {
6162
- this.convergenceVelocity = params.stopVelocity;
6277
+ this.stopVelocity = params.stopVelocity;
6163
6278
  this.maxTimeDeltaSec = params.maxTimeDeltaSec;
6164
6279
  this.nodeMass = params.nodeMass;
6165
6280
  this.edgeEquilibriumLength = params.edgeEquilibriumLength;
@@ -6192,7 +6307,7 @@
6192
6307
  nodeMass: this.nodeMass,
6193
6308
  edgeEquilibriumLength: this.edgeEquilibriumLength,
6194
6309
  edgeStiffness: this.edgeStiffness
6195
- }).apply() < this.convergenceVelocity) {
6310
+ }).apply() < this.stopVelocity) {
6196
6311
  if (!graph.getAllNodeIds().some((nodeId) => {
6197
6312
  const node = graph.getNode(nodeId);
6198
6313
  return node.x === null || node.y === null;
@@ -6258,7 +6373,7 @@
6258
6373
  nodeMass: config?.nodeMass ?? forceDirectedDefaults.nodeMass,
6259
6374
  edgeEquilibriumLength: config?.edgeEquilibriumLength ?? forceDirectedDefaults.edgeEquilibriumLength,
6260
6375
  edgeStiffness: config?.edgeStiffness ?? forceDirectedDefaults.edgeStiffness,
6261
- stopVelocity: config?.stopVelocity ?? forceDirectedDefaults.convergenceVelocity,
6376
+ stopVelocity: config?.stopVelocity ?? forceDirectedDefaults.stopVelocity,
6262
6377
  maxForce: config?.maxForce ?? forceDirectedDefaults.maxForce,
6263
6378
  nodeForceCoefficient: config?.nodeForceCoefficient ?? forceDirectedDefaults.nodeForceCoefficient,
6264
6379
  barnesHutTheta: config?.barnesHut?.theta ?? forceDirectedDefaults.barnesHutTheta,
@@ -6482,7 +6597,7 @@
6482
6597
  nodeMass: config?.nodeMass ?? forceDirectedDefaults.nodeMass,
6483
6598
  edgeEquilibriumLength: config?.edgeEquilibriumLength ?? forceDirectedDefaults.edgeEquilibriumLength,
6484
6599
  edgeStiffness: config?.edgeStiffness ?? forceDirectedDefaults.edgeStiffness,
6485
- stopVelocity: config?.stopVelocity ?? forceDirectedDefaults.convergenceVelocity,
6600
+ stopVelocity: config?.stopVelocity ?? forceDirectedDefaults.stopVelocity,
6486
6601
  maxForce: config?.maxForce ?? forceDirectedDefaults.maxForce,
6487
6602
  nodeForceCoefficient: config?.nodeForceCoefficient ?? forceDirectedDefaults.nodeForceCoefficient,
6488
6603
  barnesHutTheta: config?.barnesHut?.theta ?? forceDirectedDefaults.barnesHutTheta,
@@ -6608,9 +6723,9 @@
6608
6723
  var createUserSelectableNodesParams = (config) => {
6609
6724
  return {
6610
6725
  onNodeSelected: config.onNodeSelected,
6611
- mouseDownEventVerifier: config.mouseDownEventVerifier ?? selectionDefaults.mouseDownEventVerifier,
6612
- mouseUpEventVerifier: config.mouseUpEventVerifier ?? selectionDefaults.mouseUpEventVerifier,
6613
- movementThreshold: config.movementThreshold ?? selectionDefaults.movementThreshold
6726
+ mouseDownEventVerifier: config.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
6727
+ mouseUpEventVerifier: config.mouseUpEventVerifier ?? lmbMouseEventVerifier,
6728
+ movementThreshold: config.movementThreshold ?? 10
6614
6729
  };
6615
6730
  };
6616
6731
  //#endregion
@@ -6618,9 +6733,9 @@
6618
6733
  var createUserSelectableCanvasParams = (config) => {
6619
6734
  return {
6620
6735
  onCanvasSelected: config.onCanvasSelected,
6621
- mouseDownEventVerifier: config.mouseDownEventVerifier ?? selectionDefaults.mouseDownEventVerifier,
6622
- mouseUpEventVerifier: config.mouseUpEventVerifier ?? selectionDefaults.mouseUpEventVerifier,
6623
- movementThreshold: config.movementThreshold ?? selectionDefaults.movementThreshold
6736
+ mouseDownEventVerifier: config.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
6737
+ mouseUpEventVerifier: config.mouseUpEventVerifier ?? lmbMouseEventVerifier,
6738
+ movementThreshold: config.movementThreshold ?? 10
6624
6739
  };
6625
6740
  };
6626
6741
  //#endregion
@@ -6628,9 +6743,32 @@
6628
6743
  var createUserSelectableEdgesParams = (config) => {
6629
6744
  return {
6630
6745
  onEdgeSelected: config.onEdgeSelected,
6631
- mouseDownEventVerifier: config.mouseDownEventVerifier ?? selectionDefaults.mouseDownEventVerifier,
6632
- mouseUpEventVerifier: config.mouseUpEventVerifier ?? selectionDefaults.mouseUpEventVerifier,
6633
- movementThreshold: config.movementThreshold ?? selectionDefaults.movementThreshold
6746
+ mouseDownEventVerifier: config.mouseDownEventVerifier ?? lmbNoCtrlMouseEventVerifier,
6747
+ mouseUpEventVerifier: config.mouseUpEventVerifier ?? lmbMouseEventVerifier,
6748
+ movementThreshold: config.movementThreshold ?? 10
6749
+ };
6750
+ };
6751
+ //#endregion
6752
+ //#region src/canvas-builder/create-rectangular-selection-params/create-default-rectangle-element/create-default-rectangle-element.ts
6753
+ var createDefaultRectangleElement = () => {
6754
+ const element = document.createElement("div");
6755
+ element.style.width = "100%";
6756
+ element.style.height = "100%";
6757
+ element.style.background = "rgba(174, 238, 255, 0.34)";
6758
+ element.style.border = "1px dashed rgba(96, 96, 96, 0.47)";
6759
+ return element;
6760
+ };
6761
+ //#endregion
6762
+ //#region src/canvas-builder/create-rectangular-selection-params/create-rectangular-selection-params.ts
6763
+ var createRectangularSelectionParams = (config) => {
6764
+ return {
6765
+ rectangleElement: config?.rectangleElement ?? createDefaultRectangleElement(),
6766
+ mouseDownEventVerifier: config?.mouseDownEventVerifier ?? lmbCtrlMouseEventVerifier,
6767
+ mouseUpEventVerifier: config?.mouseUpEventVerifier ?? lmbMouseEventVerifier,
6768
+ onSelectionStarted: config?.onSelectionStarted ?? noopFn,
6769
+ onSelectionChange: config?.onSelectionChange ?? noopFn,
6770
+ onSelectionInterrupted: config?.onSelectionInterrupted ?? noopFn,
6771
+ onSelectionFinished: config?.onSelectionFinished ?? noopFn
6634
6772
  };
6635
6773
  };
6636
6774
  //#endregion
@@ -6644,6 +6782,7 @@
6644
6782
  backgroundConfig = {};
6645
6783
  connectablePortsConfig = {};
6646
6784
  draggableEdgesConfig = {};
6785
+ rectangularSelectionConfig = void 0;
6647
6786
  virtualScrollConfig = void 0;
6648
6787
  layoutConfig = {};
6649
6788
  animatedLayoutConfig = {};
@@ -6656,6 +6795,7 @@
6656
6795
  hasBackground = false;
6657
6796
  hasUserConnectablePorts = false;
6658
6797
  hasUserDraggableEdges = false;
6798
+ hasRectangularSelection = false;
6659
6799
  hasAnimatedLayout = false;
6660
6800
  hasLayout = false;
6661
6801
  boxRenderingTrigger = new EventSubject();
@@ -6704,6 +6844,11 @@
6704
6844
  this.draggableEdgesConfig = config ?? {};
6705
6845
  return this;
6706
6846
  }
6847
+ enableRectangularSelection(config) {
6848
+ this.hasRectangularSelection = true;
6849
+ this.rectangularSelectionConfig = config;
6850
+ return this;
6851
+ }
6707
6852
  enableLayout(config) {
6708
6853
  this.layoutConfig = config ?? {};
6709
6854
  this.hasLayout = true;
@@ -6774,6 +6919,7 @@
6774
6919
  }
6775
6920
  if (this.virtualScrollConfig !== void 0) UserTransformableViewportVirtualScrollConfigurator.configure(canvas, layers.main, this.window, createTransformableViewportParams(this.transformConfig), this.boxRenderingTrigger, this.pointInsideVerifier, this.eventTagger, createVirtualScrollParams(this.virtualScrollConfig));
6776
6921
  else if (this.hasTransformableViewport) UserTransformableViewportConfigurator.configure(canvas, layers.main, this.window, this.pointInsideVerifier, this.eventTagger, createTransformableViewportParams(this.transformConfig));
6922
+ if (this.hasRectangularSelection) RectangularSelectionConfigurator.configure(canvas, layers.main, layers.overlayRectangularSelection, this.pointInsideVerifier, this.eventTagger, this.window, createRectangularSelectionParams(this.rectangularSelectionConfig));
6777
6923
  if (this.hasLayout) LayoutConfigurator.configure(canvas, layoutParams);
6778
6924
  if (this.hasAnimatedLayout) {
6779
6925
  let config = createAnimatedLayoutParams(this.animatedLayoutConfig);
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@html-graph/html-graph",
3
3
  "author": "Dmitry Marov <d.marov94@gmail.com>",
4
4
  "private": false,
5
- "version": "9.1.0",
5
+ "version": "9.2.0",
6
6
  "type": "module",
7
7
  "main": "dist/html-graph.js",
8
8
  "types": "dist/html-graph.d.ts",