@krainovsd/graph 0.13.0-beta3 → 0.14.0-beta.1

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.
Files changed (68) hide show
  1. package/lib/cjs/index.cjs +729 -426
  2. package/lib/cjs/index.cjs.map +1 -1
  3. package/lib/esm/constants/force-controls.js +4 -2
  4. package/lib/esm/constants/force-controls.js.map +1 -1
  5. package/lib/esm/constants/highlight-controls.js +9 -16
  6. package/lib/esm/constants/highlight-controls.js.map +1 -1
  7. package/lib/esm/constants/link-controls.js +17 -30
  8. package/lib/esm/constants/link-controls.js.map +1 -1
  9. package/lib/esm/constants/node-controls.js +4 -2
  10. package/lib/esm/constants/node-controls.js.map +1 -1
  11. package/lib/esm/index.js +8 -7
  12. package/lib/esm/index.js.map +1 -1
  13. package/lib/esm/module/GraphCanvas/GraphCanvas.js +222 -34
  14. package/lib/esm/module/GraphCanvas/GraphCanvas.js.map +1 -1
  15. package/lib/esm/module/GraphCanvas/constants/force-settings.js +11 -1
  16. package/lib/esm/module/GraphCanvas/constants/force-settings.js.map +1 -1
  17. package/lib/esm/module/GraphCanvas/constants/graph-settings.js +17 -5
  18. package/lib/esm/module/GraphCanvas/constants/graph-settings.js.map +1 -1
  19. package/lib/esm/module/GraphCanvas/constants/highlight-settings.js +5 -3
  20. package/lib/esm/module/GraphCanvas/constants/highlight-settings.js.map +1 -1
  21. package/lib/esm/module/GraphCanvas/constants/index.js +5 -2
  22. package/lib/esm/module/GraphCanvas/constants/index.js.map +1 -1
  23. package/lib/esm/module/GraphCanvas/constants/link-settings.js +19 -10
  24. package/lib/esm/module/GraphCanvas/constants/link-settings.js.map +1 -1
  25. package/lib/esm/module/GraphCanvas/constants/node-settings.js +13 -3
  26. package/lib/esm/module/GraphCanvas/constants/node-settings.js.map +1 -1
  27. package/lib/esm/module/GraphCanvas/lib/settings/force-settings-getter.js +4 -2
  28. package/lib/esm/module/GraphCanvas/lib/settings/force-settings-getter.js.map +1 -1
  29. package/lib/esm/module/GraphCanvas/lib/settings/graph-settings-getter.js +4 -0
  30. package/lib/esm/module/GraphCanvas/lib/settings/graph-settings-getter.js.map +1 -1
  31. package/lib/esm/module/GraphCanvas/lib/settings/highlight-settings-getter.js +4 -2
  32. package/lib/esm/module/GraphCanvas/lib/settings/highlight-settings-getter.js.map +1 -1
  33. package/lib/esm/module/GraphCanvas/lib/settings/link-settings-getter.js +8 -5
  34. package/lib/esm/module/GraphCanvas/lib/settings/link-settings-getter.js.map +1 -1
  35. package/lib/esm/module/GraphCanvas/lib/settings/node-settings-getter.js +14 -2
  36. package/lib/esm/module/GraphCanvas/lib/settings/node-settings-getter.js.map +1 -1
  37. package/lib/esm/module/GraphCanvas/lib/utils/calculate-curve-link-position-by-node.js +5 -2
  38. package/lib/esm/module/GraphCanvas/lib/utils/calculate-curve-link-position-by-node.js.map +1 -1
  39. package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-node.js +5 -2
  40. package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-node.js.map +1 -1
  41. package/lib/esm/module/GraphCanvas/lib/utils/compute-graph-bounds.js +26 -0
  42. package/lib/esm/module/GraphCanvas/lib/utils/compute-graph-bounds.js.map +1 -0
  43. package/lib/esm/module/GraphCanvas/lib/utils/get-particle-position.js +40 -30
  44. package/lib/esm/module/GraphCanvas/lib/utils/get-particle-position.js.map +1 -1
  45. package/lib/esm/module/GraphCanvas/lib/utils/is-empty-object.js +11 -0
  46. package/lib/esm/module/GraphCanvas/lib/utils/is-empty-object.js.map +1 -0
  47. package/lib/esm/module/GraphCanvas/lib/utils/is-node-visible.js +5 -2
  48. package/lib/esm/module/GraphCanvas/lib/utils/is-node-visible.js.map +1 -1
  49. package/lib/esm/module/GraphCanvas/slices/draw-links.js +47 -62
  50. package/lib/esm/module/GraphCanvas/slices/draw-links.js.map +1 -1
  51. package/lib/esm/module/GraphCanvas/slices/draw-nodes.js +9 -4
  52. package/lib/esm/module/GraphCanvas/slices/draw-nodes.js.map +1 -1
  53. package/lib/esm/module/GraphCanvas/slices/init-dnd.js +21 -4
  54. package/lib/esm/module/GraphCanvas/slices/init-dnd.js.map +1 -1
  55. package/lib/esm/module/GraphCanvas/slices/init-draw.js +1 -52
  56. package/lib/esm/module/GraphCanvas/slices/init-draw.js.map +1 -1
  57. package/lib/esm/module/GraphCanvas/slices/init-pointer.js +6 -34
  58. package/lib/esm/module/GraphCanvas/slices/init-pointer.js.map +1 -1
  59. package/lib/esm/module/GraphCanvas/slices/init-simulation.js +12 -2
  60. package/lib/esm/module/GraphCanvas/slices/init-simulation.js.map +1 -1
  61. package/lib/esm/module/GraphCanvas/slices/init-zoom.js +85 -16
  62. package/lib/esm/module/GraphCanvas/slices/init-zoom.js.map +1 -1
  63. package/lib/esm/module/GraphCanvas/slices/update-link-cache.js +33 -3
  64. package/lib/esm/module/GraphCanvas/slices/update-link-cache.js.map +1 -1
  65. package/lib/esm/module/GraphCanvas/slices/update-node-cache.js +61 -16
  66. package/lib/esm/module/GraphCanvas/slices/update-node-cache.js.map +1 -1
  67. package/lib/index.d.ts +68 -29
  68. package/package.json +3 -2
@@ -1,6 +1,7 @@
1
1
  import { isArray } from '@krainovsd/js-helpers';
2
2
  import { forceLink } from 'd3-force';
3
- import { zoomIdentity } from 'd3-zoom';
3
+ import { select } from 'd3-selection';
4
+ import { zoomIdentity, zoom, ZoomTransform } from 'd3-zoom';
4
5
  import { GRAPH_CACHE_TYPE } from './constants/index.js';
5
6
  import { forceSettingsGetter } from './lib/settings/force-settings-getter.js';
6
7
  import { graphSettingsGetter } from './lib/settings/graph-settings-getter.js';
@@ -8,7 +9,9 @@ import { linkSettingsGetter } from './lib/settings/link-settings-getter.js';
8
9
  import { listenersGetter } from './lib/settings/listeners-getter.js';
9
10
  import { nodeSettingsGetter } from './lib/settings/node-settings-getter.js';
10
11
  import { highlightSettingsGetter } from './lib/settings/highlight-settings-getter.js';
12
+ import { computeGraphBounds } from './lib/utils/compute-graph-bounds.js';
11
13
  import 'd3-array';
14
+ import { extractLinkPointIds } from './lib/utils/extract-link-point-ids.js';
12
15
  import { initArea } from './slices/init-area.js';
13
16
  import { initDnd } from './slices/init-dnd.js';
14
17
  import { initDraw } from './slices/init-draw.js';
@@ -23,7 +26,7 @@ class GraphCanvas {
23
26
  /** initial data */
24
27
  nodes;
25
28
  links;
26
- particles = {};
29
+ particles = [];
27
30
  width;
28
31
  height;
29
32
  root;
@@ -40,19 +43,25 @@ class GraphCanvas {
40
43
  context;
41
44
  simulation;
42
45
  areaTransform = zoomIdentity;
46
+ _translateExtent;
43
47
  areaRect;
44
48
  draw;
45
49
  eventAbortController;
46
- cachedNodeText = {};
47
- cachedNodeLabel = {};
48
- linkOptionsCache = {};
49
- nodeOptionsCache = {};
50
+ cachedNodeText = [];
51
+ cachedNodeLabel = [];
52
+ linkOptionsCache = [];
53
+ nodeOptionsCache = [];
50
54
  isDragging = false;
51
55
  highlightedNode = null;
52
56
  highlightedLink = null;
53
57
  highlightedNeighbors = null;
54
58
  highlightProgress = 1;
55
- highlightWorking = false;
59
+ highlightStart = null;
60
+ highlightPositive = false;
61
+ highlightController;
62
+ _lastNodeZoomK;
63
+ _lastLinkZoomK;
64
+ _zoomAnimating = false;
56
65
  get simulationWorking() {
57
66
  const simulationAlpha = this.simulation?.alpha?.() ?? 0;
58
67
  const simulationAlphaMin = this.simulation?.alphaMin?.() ?? 0;
@@ -87,13 +96,148 @@ class GraphCanvas {
87
96
  nodes: this.nodes,
88
97
  };
89
98
  }
99
+ fitToView(margin = this.graphSettings.zoomToFitMargin, duration = this.graphSettings.zoomAnimationDuration) {
100
+ const area = this.area;
101
+ if (!area)
102
+ return;
103
+ const bounds = computeGraphBounds(this.nodes);
104
+ if (!bounds)
105
+ return;
106
+ const graphWidth = bounds.maxX - bounds.minX;
107
+ const graphHeight = bounds.maxY - bounds.minY;
108
+ if (graphWidth === 0 || graphHeight === 0)
109
+ return;
110
+ const graphCenterX = bounds.minX + graphWidth / 2;
111
+ const graphCenterY = bounds.minY + graphHeight / 2;
112
+ const scale = (1 - margin) / Math.max(graphWidth / this.width, graphHeight / this.height);
113
+ const clampedScale = Math.min(scale, this.graphSettings.zoomExtent?.[1] ?? scale);
114
+ const target = zoomIdentity
115
+ .translate(this.width / 2, this.height / 2)
116
+ .scale(clampedScale)
117
+ .translate(-graphCenterX, -graphCenterY);
118
+ if (!this.graphSettings.zoomAnimation) {
119
+ this.areaTransform = target;
120
+ zoom().transform(select(area), target);
121
+ this.clearCache(true);
122
+ this.tick();
123
+ return;
124
+ }
125
+ this.animateZoom(area, target, this.areaTransform, duration);
126
+ }
127
+ focusOnNode(nodeId, scale = this.graphSettings.zoomToNodeScale, duration = this.graphSettings.zoomAnimationDuration) {
128
+ const area = this.area;
129
+ if (!area)
130
+ return;
131
+ const node = this.nodes.find((n) => n.id === nodeId);
132
+ if (!node)
133
+ return;
134
+ if (node.x == undefined || node.y == undefined)
135
+ return;
136
+ const target = zoomIdentity
137
+ .translate(this.width / 2, this.height / 2)
138
+ .scale(scale)
139
+ .translate(-node.x, -node.y);
140
+ if (!this.graphSettings.zoomAnimation) {
141
+ this.areaTransform = target;
142
+ zoom().transform(select(area), target);
143
+ this.clearCache(true);
144
+ this.tick();
145
+ return;
146
+ }
147
+ this.animateZoom(area, target, this.areaTransform, duration);
148
+ }
149
+ animateHighlight(node, link, baseDuration = this.highlightSettings.highlightDuration) {
150
+ let positive = true;
151
+ if (node && (this.highlightedNode !== node || !this.highlightPositive)) {
152
+ this.highlightedNode = node;
153
+ this.highlightedNeighbors = new Set(node.neighbors);
154
+ this.particles = [];
155
+ this.highlightedLink = null;
156
+ this.highlightStart = performance.now();
157
+ }
158
+ else if (link && (this.highlightedLink !== link || !this.highlightPositive)) {
159
+ const { sourceId, targetId } = extractLinkPointIds(link);
160
+ this.highlightProgress = 0;
161
+ this.highlightedLink = link;
162
+ this.highlightedNeighbors = new Set([sourceId, targetId]);
163
+ this.particles = [];
164
+ this.highlightedNode = null;
165
+ this.highlightStart = performance.now();
166
+ }
167
+ else if (!node && !link && this.highlightPositive) {
168
+ positive = false;
169
+ }
170
+ else {
171
+ return;
172
+ }
173
+ if (this.highlightController) {
174
+ this.highlightController.abort();
175
+ }
176
+ const controller = new AbortController();
177
+ this.highlightPositive = positive;
178
+ this.highlightController = controller;
179
+ const startTime = performance.now();
180
+ const startProgress = this.highlightProgress;
181
+ const targetProgress = positive ? 1 : 0;
182
+ const delta = targetProgress - startProgress;
183
+ const duration = baseDuration * Math.abs(delta);
184
+ const animate = () => {
185
+ if (controller.signal.aborted)
186
+ return;
187
+ const elapsed = performance.now() - startTime;
188
+ const t = Math.min(elapsed / duration, 1);
189
+ const current = startProgress + delta * t;
190
+ const eased = current < 0.5 ? 4 * current * current * current : 1 - (-2 * current + 2) ** 3 / 2;
191
+ this.highlightProgress = eased;
192
+ if (t < 1 || positive) {
193
+ requestAnimationFrame(animate);
194
+ this.draw();
195
+ }
196
+ else {
197
+ this.highlightedNode = null;
198
+ this.highlightedLink = null;
199
+ this.highlightedNeighbors = null;
200
+ this.highlightStart = null;
201
+ this.particles = [];
202
+ this.tick();
203
+ }
204
+ };
205
+ requestAnimationFrame(animate);
206
+ }
207
+ animateZoom(area, target, start, duration) {
208
+ this._zoomAnimating = true;
209
+ const startTime = performance.now();
210
+ const animate = () => {
211
+ const elapsed = performance.now() - startTime;
212
+ const t = Math.min(elapsed / duration, 1);
213
+ const eased = t < 0.5 ? 4 * t * t * t : 1 - (-2 * t + 2) ** 3 / 2;
214
+ const x = start.x + (target.x - start.x) * eased;
215
+ const y = start.y + (target.y - start.y) * eased;
216
+ const k = start.k + (target.k - start.k) * eased;
217
+ this.areaTransform = new ZoomTransform(k, x, y);
218
+ zoom().transform(select(area), this.areaTransform);
219
+ updateLinkCache.call(this);
220
+ updateNodeCache.call(this);
221
+ this.tick();
222
+ if (t < 1) {
223
+ requestAnimationFrame(animate);
224
+ }
225
+ else {
226
+ this._zoomAnimating = false;
227
+ this.clearCache(true);
228
+ this.tick();
229
+ }
230
+ };
231
+ requestAnimationFrame(animate);
232
+ }
90
233
  changeData(options, alpha = 0.5, clearCache = true) {
91
234
  if (options.links != undefined)
92
235
  this.links = options.links;
93
236
  if (options.nodes != undefined)
94
237
  this.nodes = options.nodes;
95
- if (options.nodes != undefined || options.links != undefined)
238
+ if (options.nodes != undefined || options.links != undefined) {
96
239
  this.updateData(alpha, clearCache);
240
+ }
97
241
  }
98
242
  changeSettings(options, clearCache = true) {
99
243
  if (options.graphSettings) {
@@ -168,31 +312,76 @@ class GraphCanvas {
168
312
  }
169
313
  clearCache(keys) {
170
314
  if (keys === true) {
171
- updateNodeCache.call(this, true);
172
- updateLinkCache.call(this);
315
+ this.nodeOptionsCache.length = 0;
316
+ this.linkOptionsCache.length = 0;
317
+ this.cachedNodeLabel.length = 0;
318
+ this.cachedNodeText.length = 0;
173
319
  }
174
320
  else if (isArray(keys)) {
175
- if (keys.some((k) => k === GRAPH_CACHE_TYPE.NodeText ||
176
- k === GRAPH_CACHE_TYPE.NodeLabel ||
177
- k === GRAPH_CACHE_TYPE.NodeOptions)) {
178
- updateNodeCache.call(this, {
179
- label: keys.includes(GRAPH_CACHE_TYPE.NodeLabel),
180
- options: keys.includes(GRAPH_CACHE_TYPE.NodeOptions),
181
- text: keys.includes(GRAPH_CACHE_TYPE.NodeOptions),
182
- });
183
- }
184
- if (keys.includes(GRAPH_CACHE_TYPE.LinkOptions)) {
185
- updateLinkCache.call(this);
321
+ for (const key of keys) {
322
+ switch (key) {
323
+ case GRAPH_CACHE_TYPE.NodeText: {
324
+ this.cachedNodeText.length = 0;
325
+ break;
326
+ }
327
+ case GRAPH_CACHE_TYPE.NodeLabel: {
328
+ this.cachedNodeLabel.length = 0;
329
+ break;
330
+ }
331
+ case GRAPH_CACHE_TYPE.NodeOptions: {
332
+ this.nodeOptionsCache.length = 0;
333
+ break;
334
+ }
335
+ case GRAPH_CACHE_TYPE.LinkOptions: {
336
+ this.linkOptionsCache.length = 0;
337
+ break;
338
+ }
339
+ }
186
340
  }
187
341
  }
342
+ updateNodeCache.call(this);
343
+ updateLinkCache.call(this);
188
344
  }
189
345
  tick() {
190
- if (!this.simulationWorking && !this.highlightWorking)
346
+ if (!this.simulationWorking)
191
347
  this.draw();
192
348
  }
193
- restart(alpha) {
194
- if (this.simulation)
349
+ restart(alpha, options) {
350
+ if (!this.simulation)
351
+ return;
352
+ const settings = {
353
+ precompute: options?.precompute ?? this.forceSettings.precompute,
354
+ precomputeMaxTimeMs: options?.precomputeMaxTimeMs ?? this.forceSettings?.precomputeMaxTimeMs,
355
+ precomputeMaxTicks: options?.precomputeMaxTicks ?? this.forceSettings?.precomputeMaxTicks ?? 300,
356
+ precomputeDisableForcesAfter: options?.precomputeDisableForcesAfter ??
357
+ this.forceSettings?.precomputeDisableForcesAfter ??
358
+ false,
359
+ };
360
+ if (!settings.precompute) {
195
361
  this.simulation.alpha(alpha ?? 1).restart();
362
+ return;
363
+ }
364
+ if (settings.precomputeDisableForcesAfter) {
365
+ this.forceSettings = forceSettingsGetter({ forces: true }, this.forceSettings);
366
+ }
367
+ initSimulationForces.call(this);
368
+ this.simulation.stop();
369
+ this.simulation.alpha(alpha ?? 1);
370
+ const startTime = performance.now();
371
+ let ticks = 0;
372
+ while (performance.now() - startTime < settings.precomputeMaxTimeMs &&
373
+ ticks < settings.precomputeMaxTicks) {
374
+ this.simulation.tick(1);
375
+ ticks++;
376
+ if (this.simulation.alpha() <= this.simulation.alphaMin())
377
+ break;
378
+ }
379
+ if (settings.precomputeDisableForcesAfter) {
380
+ this.forceSettings = forceSettingsGetter({ forces: false }, this.forceSettings);
381
+ }
382
+ initSimulationForces.call(this);
383
+ this.simulation.restart();
384
+ this.tick();
196
385
  }
197
386
  start() {
198
387
  if (this.simulation)
@@ -229,8 +418,7 @@ class GraphCanvas {
229
418
  updateSimulation() {
230
419
  if (this.simulation) {
231
420
  initSimulationForces.call(this);
232
- this.simulation.alpha(1);
233
- this.simulation.restart();
421
+ this.restart(1);
234
422
  }
235
423
  }
236
424
  clearState() {
@@ -239,7 +427,8 @@ class GraphCanvas {
239
427
  this.highlightedLink = null;
240
428
  this.highlightedNeighbors = null;
241
429
  this.highlightProgress = 0;
242
- this.highlightWorking = false;
430
+ this.highlightStart = null;
431
+ this.highlightPositive = false;
243
432
  }
244
433
  updateData(alpha = 0.5, clearCache = true) {
245
434
  if (clearCache) {
@@ -247,9 +436,7 @@ class GraphCanvas {
247
436
  }
248
437
  if (this.simulation) {
249
438
  initCollideForce.call(this, false);
250
- this.simulation
251
- .nodes(this.nodes)
252
- .force("link", forceLink(this.links)
439
+ this.simulation.nodes(this.nodes).force("link", forceLink(this.links)
253
440
  .id(this.nodeSettings.idGetter.bind(this))
254
441
  .distance(this.forceSettings.forces && this.forceSettings.linkForce
255
442
  ? this.forceSettings.linkDistance
@@ -259,16 +446,17 @@ class GraphCanvas {
259
446
  : 0)
260
447
  .iterations(this.forceSettings.forces && this.forceSettings.linkForce
261
448
  ? this.forceSettings.linkIterations
262
- : 0))
263
- .alpha(alpha)
264
- .restart();
449
+ : 0));
450
+ this.restart(alpha);
451
+ initZoom.call(this, this.areaTransform);
265
452
  }
266
453
  }
267
454
  init() {
268
455
  initArea.call(this);
269
- updateNodeCache.call(this, true);
456
+ updateNodeCache.call(this);
270
457
  updateLinkCache.call(this);
271
458
  initSimulation.call(this);
459
+ this.restart(1);
272
460
  initDnd.call(this);
273
461
  initZoom.call(this);
274
462
  initResize.call(this);
@@ -1 +1 @@
1
- {"version":3,"file":"GraphCanvas.js","sources":["../../../../src/module/GraphCanvas/GraphCanvas.ts"],"sourcesContent":["import { isArray } from \"@krainovsd/js-helpers\";\nimport { forceLink } from \"d3-force\";\nimport { type ZoomTransform, zoomIdentity } from \"d3-zoom\";\nimport { GRAPH_CACHE_TYPE } from \"./constants\";\nimport {\n forceSettingsGetter,\n graphSettingsGetter,\n highlightSettingsGetter,\n linkSettingsGetter,\n listenersGetter,\n nodeSettingsGetter,\n} from \"./lib\";\nimport {\n initArea,\n initCollideForce,\n initDnd,\n initDraw,\n initPointer,\n initResize,\n initSimulation,\n initSimulationForces,\n initZoom,\n updateLinkCache,\n updateNodeCache,\n} from \"./slices\";\nimport type {\n CachedNodeTextInterface,\n ForceSettingsInterface,\n GraphCanvasCacheKeys,\n GraphCanvasInterface,\n GraphCanvasSimulation,\n GraphSettingsInterface,\n HighlightSettingsInterface,\n LinkInterface,\n LinkOptionsInterface,\n LinkParticle,\n LinkSettingsInterface,\n ListenersInterface,\n NodeInterface,\n NodeOptionsInterface,\n NodeSettingsInterface,\n} from \"./types\";\n\nexport class GraphCanvas<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n> {\n /** initial data */\n\n protected nodes: NodeInterface<NodeData>[];\n\n protected links: LinkInterface<NodeData, LinkData>[];\n\n protected particles: Record<string, LinkParticle[]> = {};\n\n protected width: number;\n\n protected height: number;\n\n protected root: HTMLElement;\n\n protected container: HTMLDivElement | undefined | null;\n\n protected area: HTMLCanvasElement | null | undefined;\n\n /** settings */\n\n protected graphSettings: Required<GraphSettingsInterface<NodeData>>;\n\n protected forceSettings: Required<ForceSettingsInterface<NodeData, LinkData>>;\n\n protected highlightSettings: Required<HighlightSettingsInterface>;\n\n protected nodeSettings: Required<Omit<NodeSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData, LinkData>, \"options\">;\n\n protected linkSettings: Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\">;\n\n protected listeners: ListenersInterface<NodeData, LinkData>;\n\n /** service */\n\n protected context: CanvasRenderingContext2D | null | undefined;\n\n protected simulation: GraphCanvasSimulation<NodeData, LinkData> | undefined;\n\n protected areaTransform: ZoomTransform = zoomIdentity;\n\n protected areaRect: DOMRect | undefined;\n\n protected draw: (this: GraphCanvas<NodeData, LinkData>, recursive?: boolean) => void;\n\n protected eventAbortController: AbortController;\n\n protected cachedNodeText: CachedNodeTextInterface = {};\n\n protected cachedNodeLabel: CachedNodeTextInterface = {};\n\n protected linkOptionsCache: Record<string, Required<LinkOptionsInterface<NodeData, LinkData>>> =\n {};\n\n protected nodeOptionsCache: Record<string, Required<NodeOptionsInterface<NodeData, LinkData>>> =\n {};\n\n protected isDragging: boolean = false;\n\n protected highlightedNode: NodeInterface<NodeData> | null = null;\n\n protected highlightedLink: LinkInterface<NodeData, LinkData> | null = null;\n\n protected highlightedNeighbors: Set<string | number> | null = null;\n\n protected highlightProgress: number = 1;\n\n protected highlightWorking: boolean = false;\n\n protected get simulationWorking() {\n const simulationAlpha = this.simulation?.alpha?.() ?? 0;\n const simulationAlphaMin = this.simulation?.alphaMin?.() ?? 0;\n const simulationAlphaDecay = this.simulation?.alphaDecay?.() ?? 0;\n const force = (simulationAlpha - simulationAlphaMin) / simulationAlphaDecay;\n\n return force > 0;\n }\n\n constructor({\n links,\n nodes,\n root,\n forceSettings,\n linkSettings,\n listeners,\n nodeSettings,\n graphSettings,\n highlightSettings,\n }: GraphCanvasInterface<NodeData, LinkData>) {\n // root.style.position = \"relative\";\n root.style.overflow = \"hidden\";\n\n this.root = root;\n\n this.forceSettings = forceSettingsGetter(forceSettings);\n this.linkSettings = linkSettingsGetter(linkSettings);\n this.nodeSettings = nodeSettingsGetter(nodeSettings);\n this.listeners = listenersGetter(listeners);\n this.graphSettings = graphSettingsGetter(graphSettings);\n this.highlightSettings = highlightSettingsGetter(highlightSettings);\n\n this.eventAbortController = new AbortController();\n\n this.nodes = nodes;\n this.links = links;\n this.height = 0;\n this.width = 0;\n\n this.draw = initDraw.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initDraw>,\n ReturnType<typeof initDraw>\n >(this);\n\n this.init();\n }\n\n get dpi() {\n return devicePixelRatio;\n }\n\n getData(): Pick<GraphCanvasInterface<NodeData, LinkData>, \"nodes\" | \"links\"> {\n return {\n links: this.links,\n nodes: this.nodes,\n };\n }\n\n changeData(\n options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, \"links\" | \"nodes\">,\n alpha: number = 0.5,\n clearCache: boolean | GraphCanvasCacheKeys[] = true,\n ) {\n if (options.links != undefined) this.links = options.links;\n if (options.nodes != undefined) this.nodes = options.nodes;\n if (options.nodes != undefined || options.links != undefined)\n this.updateData(alpha, clearCache);\n }\n\n changeSettings(\n options: Omit<\n Partial<GraphCanvasInterface<NodeData, LinkData>>,\n \"links\" | \"nodes\" | \"listeners\"\n >,\n clearCache: boolean | GraphCanvasCacheKeys[] = true,\n ) {\n if (options.graphSettings) {\n this.graphSettings = graphSettingsGetter(options.graphSettings, this.graphSettings);\n\n this.draw = initDraw.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initDraw>,\n ReturnType<typeof initDraw>\n >(this);\n initZoom.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initZoom>,\n ReturnType<typeof initZoom>\n >(this, this.areaTransform);\n }\n if (options.forceSettings) {\n this.forceSettings = forceSettingsGetter(options.forceSettings, this.forceSettings);\n }\n if (options.highlightSettings) {\n this.highlightSettings = highlightSettingsGetter(\n options.highlightSettings,\n this.highlightSettings,\n );\n\n if (clearCache === true) {\n this.clearCache([\n GRAPH_CACHE_TYPE.NodeOptions,\n GRAPH_CACHE_TYPE.NodeText,\n GRAPH_CACHE_TYPE.NodeLabel,\n GRAPH_CACHE_TYPE.LinkOptions,\n ]);\n } else {\n this.clearCache(clearCache);\n }\n }\n if (options.linkSettings) {\n this.linkSettings = linkSettingsGetter(options.linkSettings, this.linkSettings);\n\n if (clearCache) {\n this.clearCache([GRAPH_CACHE_TYPE.LinkOptions]);\n } else {\n this.clearCache(clearCache);\n }\n }\n if (options.nodeSettings) {\n this.nodeSettings = nodeSettingsGetter(options.nodeSettings, this.nodeSettings);\n\n if (clearCache) {\n this.clearCache([\n GRAPH_CACHE_TYPE.NodeOptions,\n GRAPH_CACHE_TYPE.NodeText,\n GRAPH_CACHE_TYPE.NodeLabel,\n ]);\n } else {\n this.clearCache(clearCache);\n }\n\n initCollideForce.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initCollideForce>,\n ReturnType<typeof initCollideForce>\n >(this, true);\n }\n\n if (options.forceSettings) {\n return void this.updateSimulation();\n }\n\n this.tick();\n }\n\n updateRect() {\n if (!this.area) return;\n\n this.areaRect = this.area.getBoundingClientRect();\n }\n\n updateSize() {\n if (!this.area) return;\n\n const { width, height } = this.root.getBoundingClientRect();\n this.width = width;\n this.height = height;\n this.area.width = this.dpi * this.width;\n this.area.height = this.dpi * this.height;\n this.areaRect = this.area.getBoundingClientRect();\n\n this.context = this.area.getContext(\"2d\");\n if (!this.context) throw new Error(\"couldn't create canvas context\");\n this.context.scale(this.dpi, this.dpi);\n this.draw();\n }\n\n clearCache(keys: boolean | GraphCanvasCacheKeys[]) {\n if (keys === true) {\n updateNodeCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateNodeCache>,\n ReturnType<typeof updateNodeCache>\n >(this, true);\n updateLinkCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateLinkCache>,\n ReturnType<typeof updateLinkCache>\n >(this);\n } else if (isArray(keys)) {\n if (\n keys.some(\n (k) =>\n k === GRAPH_CACHE_TYPE.NodeText ||\n k === GRAPH_CACHE_TYPE.NodeLabel ||\n k === GRAPH_CACHE_TYPE.NodeOptions,\n )\n ) {\n updateNodeCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateNodeCache>,\n ReturnType<typeof updateNodeCache>\n >(this, {\n label: keys.includes(GRAPH_CACHE_TYPE.NodeLabel),\n options: keys.includes(GRAPH_CACHE_TYPE.NodeOptions),\n text: keys.includes(GRAPH_CACHE_TYPE.NodeOptions),\n });\n }\n\n if (keys.includes(GRAPH_CACHE_TYPE.LinkOptions)) {\n updateLinkCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateLinkCache>,\n ReturnType<typeof updateLinkCache>\n >(this);\n }\n }\n }\n\n tick() {\n if (!this.simulationWorking && !this.highlightWorking) this.draw();\n }\n\n restart(alpha?: number) {\n if (this.simulation) this.simulation.alpha(alpha ?? 1).restart();\n }\n\n start() {\n if (this.simulation) this.simulation.alpha(1).restart();\n if (this.container) this.container.style.display = \"block\";\n }\n\n stop() {\n if (this.simulation) this.simulation.stop();\n if (this.container) this.container.style.display = \"none\";\n }\n\n create() {\n this.init();\n }\n\n destroy() {\n if (this.simulation) {\n this.simulation.stop();\n this.simulation = undefined;\n }\n\n this.clearHTMLElements();\n this.clearState();\n this.clearCache(true);\n }\n\n protected clearHTMLElements() {\n this.root.replaceChildren();\n this.area = undefined;\n this.context = undefined;\n this.container = undefined;\n this.eventAbortController.abort();\n this.eventAbortController = new AbortController();\n }\n\n protected updateSimulation() {\n if (this.simulation) {\n initSimulationForces.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initSimulationForces>,\n ReturnType<typeof initSimulationForces>\n >(this);\n this.simulation.alpha(1);\n this.simulation.restart();\n }\n }\n\n protected clearState() {\n this.isDragging = false;\n this.highlightedNode = null;\n this.highlightedLink = null;\n this.highlightedNeighbors = null;\n this.highlightProgress = 0;\n this.highlightWorking = false;\n }\n\n protected updateData(alpha: number = 0.5, clearCache: boolean | GraphCanvasCacheKeys[] = true) {\n if (clearCache) {\n this.clearCache(clearCache);\n }\n\n if (this.simulation) {\n initCollideForce.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initCollideForce>,\n ReturnType<typeof initCollideForce>\n >(this, false);\n\n this.simulation\n .nodes(this.nodes)\n .force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links)\n .id(this.nodeSettings.idGetter.bind(this))\n .distance(\n this.forceSettings.forces && this.forceSettings.linkForce\n ? this.forceSettings.linkDistance\n : 0,\n )\n .strength(\n this.forceSettings.forces && this.forceSettings.linkForce\n ? this.forceSettings.linkStrength\n : 0,\n )\n .iterations(\n this.forceSettings.forces && this.forceSettings.linkForce\n ? this.forceSettings.linkIterations\n : 0,\n ),\n )\n .alpha(alpha)\n .restart();\n }\n }\n\n protected init() {\n initArea.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initArea>,\n ReturnType<typeof initArea>\n >(this);\n updateNodeCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateNodeCache>,\n ReturnType<typeof updateNodeCache>\n >(this, true);\n updateLinkCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateLinkCache>,\n ReturnType<typeof updateLinkCache>\n >(this);\n initSimulation.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initSimulation>,\n ReturnType<typeof initSimulation>\n >(this);\n initDnd.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initDnd>,\n ReturnType<typeof initDnd>\n >(this);\n initZoom.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initZoom>,\n ReturnType<typeof initZoom>\n >(this);\n initResize.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initResize>,\n ReturnType<typeof initResize>\n >(this);\n initPointer.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initPointer>,\n ReturnType<typeof initPointer>\n >(this);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GraphCanvas.js","sources":["../../../../src/module/GraphCanvas/GraphCanvas.ts"],"sourcesContent":["import { isArray } from \"@krainovsd/js-helpers\";\nimport { forceLink } from \"d3-force\";\nimport { select as d3Select } from \"d3-selection\";\nimport { ZoomTransform, zoom, zoomIdentity } from \"d3-zoom\";\nimport { GRAPH_CACHE_TYPE } from \"./constants\";\nimport {\n computeGraphBounds,\n extractLinkPointIds,\n forceSettingsGetter,\n graphSettingsGetter,\n highlightSettingsGetter,\n linkSettingsGetter,\n listenersGetter,\n nodeSettingsGetter,\n} from \"./lib\";\nimport {\n initArea,\n initCollideForce,\n initDnd,\n initDraw,\n initPointer,\n initResize,\n initSimulation,\n initSimulationForces,\n initZoom,\n updateLinkCache,\n updateNodeCache,\n} from \"./slices\";\nimport type {\n ForceSettingsInterface,\n GraphCanvasCacheKeys,\n GraphCanvasInterface,\n GraphCanvasSimulation,\n GraphSettingsInterface,\n HighlightSettingsInterface,\n LinkInterface,\n LinkOptionsInterface,\n LinkParticle,\n LinkSettingsInterface,\n ListenersInterface,\n NodeInterface,\n NodeOptionsInterface,\n NodeSettingsInterface,\n PrecomputeForceSettingsInterface,\n} from \"./types\";\n\nexport class GraphCanvas<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n> {\n /** initial data */\n\n protected nodes: NodeInterface<NodeData>[];\n\n protected links: LinkInterface<NodeData, LinkData>[];\n\n protected particles: (LinkParticle[] | undefined)[] = [];\n\n protected width: number;\n\n protected height: number;\n\n protected root: HTMLElement;\n\n protected container: HTMLDivElement | undefined | null;\n\n protected area: HTMLCanvasElement | null | undefined;\n\n /** settings */\n\n protected graphSettings: Required<GraphSettingsInterface<NodeData>>;\n\n protected forceSettings: Required<ForceSettingsInterface<NodeData, LinkData>>;\n\n protected highlightSettings: Required<HighlightSettingsInterface>;\n\n protected nodeSettings: Required<Omit<NodeSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData, LinkData>, \"options\">;\n\n protected linkSettings: Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\">;\n\n protected listeners: ListenersInterface<NodeData, LinkData>;\n\n /** service */\n\n protected context: CanvasRenderingContext2D | null | undefined;\n\n protected simulation: GraphCanvasSimulation<NodeData, LinkData> | undefined;\n\n protected areaTransform: ZoomTransform = zoomIdentity;\n\n protected _translateExtent: [[number, number], [number, number]] | undefined;\n\n protected areaRect: DOMRect | undefined;\n\n protected draw: (this: GraphCanvas<NodeData, LinkData>, recursive?: boolean) => void;\n\n protected eventAbortController: AbortController;\n\n protected cachedNodeText: (string[] | undefined)[] = [];\n\n protected cachedNodeLabel: (string[] | undefined)[] = [];\n\n protected linkOptionsCache: (Required<LinkOptionsInterface<NodeData, LinkData>> | undefined)[] =\n [];\n\n protected nodeOptionsCache: (Required<NodeOptionsInterface<NodeData, LinkData>> | undefined)[] =\n [];\n\n protected isDragging: boolean = false;\n\n protected highlightedNode: NodeInterface<NodeData> | null = null;\n\n protected highlightedLink: LinkInterface<NodeData, LinkData> | null = null;\n\n protected highlightedNeighbors: Set<string | number> | null = null;\n\n protected highlightProgress: number = 1;\n\n protected highlightStart: number | null = null;\n\n protected highlightPositive: boolean = false;\n\n protected highlightController: AbortController | undefined;\n\n protected _lastNodeZoomK: number | undefined;\n\n protected _lastLinkZoomK: number | undefined;\n\n protected _zoomAnimating: boolean = false;\n\n protected get simulationWorking() {\n const simulationAlpha = this.simulation?.alpha?.() ?? 0;\n const simulationAlphaMin = this.simulation?.alphaMin?.() ?? 0;\n const simulationAlphaDecay = this.simulation?.alphaDecay?.() ?? 0;\n const force = (simulationAlpha - simulationAlphaMin) / simulationAlphaDecay;\n\n return force > 0;\n }\n\n constructor({\n links,\n nodes,\n root,\n forceSettings,\n linkSettings,\n listeners,\n nodeSettings,\n graphSettings,\n highlightSettings,\n }: GraphCanvasInterface<NodeData, LinkData>) {\n // root.style.position = \"relative\";\n root.style.overflow = \"hidden\";\n\n this.root = root;\n\n this.forceSettings = forceSettingsGetter(forceSettings);\n this.linkSettings = linkSettingsGetter(linkSettings);\n this.nodeSettings = nodeSettingsGetter(nodeSettings);\n this.listeners = listenersGetter(listeners);\n this.graphSettings = graphSettingsGetter(graphSettings);\n this.highlightSettings = highlightSettingsGetter(highlightSettings);\n\n this.eventAbortController = new AbortController();\n\n this.nodes = nodes;\n this.links = links;\n this.height = 0;\n this.width = 0;\n\n this.draw = initDraw.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initDraw>,\n ReturnType<typeof initDraw>\n >(this);\n\n this.init();\n }\n\n get dpi() {\n return devicePixelRatio;\n }\n\n getData(): Pick<GraphCanvasInterface<NodeData, LinkData>, \"nodes\" | \"links\"> {\n return {\n links: this.links,\n nodes: this.nodes,\n };\n }\n\n fitToView(\n margin: number = this.graphSettings.zoomToFitMargin,\n duration: number = this.graphSettings.zoomAnimationDuration,\n ) {\n const area = this.area;\n if (!area) return;\n\n const bounds = computeGraphBounds(this.nodes);\n if (!bounds) return;\n\n const graphWidth = bounds.maxX - bounds.minX;\n const graphHeight = bounds.maxY - bounds.minY;\n if (graphWidth === 0 || graphHeight === 0) return;\n const graphCenterX = bounds.minX + graphWidth / 2;\n const graphCenterY = bounds.minY + graphHeight / 2;\n const scale = (1 - margin) / Math.max(graphWidth / this.width, graphHeight / this.height);\n\n const clampedScale = Math.min(scale, this.graphSettings.zoomExtent?.[1] ?? scale);\n const target = zoomIdentity\n .translate(this.width / 2, this.height / 2)\n .scale(clampedScale)\n .translate(-graphCenterX, -graphCenterY);\n if (!this.graphSettings.zoomAnimation) {\n this.areaTransform = target;\n zoom<HTMLCanvasElement, unknown>().transform(d3Select(area), target);\n this.clearCache(true);\n this.tick();\n return;\n }\n this.animateZoom(area, target, this.areaTransform, duration);\n }\n\n focusOnNode(\n nodeId: string | number,\n scale: number = this.graphSettings.zoomToNodeScale,\n duration: number = this.graphSettings.zoomAnimationDuration,\n ) {\n const area = this.area;\n if (!area) return;\n\n const node = this.nodes.find((n) => n.id === nodeId);\n if (!node) return;\n if (node.x == undefined || node.y == undefined) return;\n\n const target = zoomIdentity\n .translate(this.width / 2, this.height / 2)\n .scale(scale)\n .translate(-node.x, -node.y);\n if (!this.graphSettings.zoomAnimation) {\n this.areaTransform = target;\n zoom<HTMLCanvasElement, unknown>().transform(d3Select(area), target);\n this.clearCache(true);\n this.tick();\n return;\n }\n this.animateZoom(area, target, this.areaTransform, duration);\n }\n\n protected animateHighlight(\n node: NodeInterface<NodeData> | undefined,\n link: LinkInterface<NodeData, LinkData> | undefined,\n baseDuration: number = this.highlightSettings.highlightDuration,\n ) {\n let positive = true;\n if (node && (this.highlightedNode !== node || !this.highlightPositive)) {\n this.highlightedNode = node;\n this.highlightedNeighbors = new Set(node.neighbors);\n this.particles = [];\n this.highlightedLink = null;\n this.highlightStart = performance.now();\n } else if (link && (this.highlightedLink !== link || !this.highlightPositive)) {\n const { sourceId, targetId } = extractLinkPointIds(link);\n this.highlightProgress = 0;\n this.highlightedLink = link;\n this.highlightedNeighbors = new Set([sourceId, targetId]);\n this.particles = [];\n this.highlightedNode = null;\n this.highlightStart = performance.now();\n } else if (!node && !link && this.highlightPositive) {\n positive = false;\n } else {\n return;\n }\n if (this.highlightController) {\n this.highlightController.abort();\n }\n const controller = new AbortController();\n this.highlightPositive = positive;\n this.highlightController = controller;\n const startTime = performance.now();\n const startProgress = this.highlightProgress;\n const targetProgress = positive ? 1 : 0;\n const delta = targetProgress - startProgress;\n const duration = baseDuration * Math.abs(delta);\n\n const animate = () => {\n if (controller.signal.aborted) return;\n const elapsed = performance.now() - startTime;\n const t = Math.min(elapsed / duration, 1);\n const current = startProgress + delta * t;\n const eased =\n current < 0.5 ? 4 * current * current * current : 1 - (-2 * current + 2) ** 3 / 2;\n this.highlightProgress = eased;\n\n if (t < 1 || positive) {\n requestAnimationFrame(animate);\n this.draw();\n } else {\n this.highlightedNode = null;\n this.highlightedLink = null;\n this.highlightedNeighbors = null;\n this.highlightStart = null;\n this.particles = [];\n this.tick();\n }\n };\n requestAnimationFrame(animate);\n }\n\n protected animateZoom(\n area: HTMLCanvasElement,\n target: ZoomTransform,\n start: ZoomTransform,\n duration: number,\n ) {\n this._zoomAnimating = true;\n const startTime = performance.now();\n const animate = () => {\n const elapsed = performance.now() - startTime;\n const t = Math.min(elapsed / duration, 1);\n const eased = t < 0.5 ? 4 * t * t * t : 1 - (-2 * t + 2) ** 3 / 2;\n const x = start.x + (target.x - start.x) * eased;\n const y = start.y + (target.y - start.y) * eased;\n const k = start.k + (target.k - start.k) * eased;\n\n this.areaTransform = new ZoomTransform(k, x, y);\n zoom<HTMLCanvasElement, unknown>().transform(d3Select(area), this.areaTransform);\n updateLinkCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateLinkCache>,\n ReturnType<typeof updateLinkCache>\n >(this);\n updateNodeCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateNodeCache>,\n ReturnType<typeof updateNodeCache>\n >(this);\n this.tick();\n\n if (t < 1) {\n requestAnimationFrame(animate);\n } else {\n this._zoomAnimating = false;\n this.clearCache(true);\n this.tick();\n }\n };\n requestAnimationFrame(animate);\n }\n\n changeData(\n options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, \"links\" | \"nodes\">,\n alpha: number = 0.5,\n clearCache: boolean | GraphCanvasCacheKeys[] = true,\n ) {\n if (options.links != undefined) this.links = options.links;\n if (options.nodes != undefined) this.nodes = options.nodes;\n if (options.nodes != undefined || options.links != undefined) {\n this.updateData(alpha, clearCache);\n }\n }\n\n changeSettings(\n options: Omit<\n Partial<GraphCanvasInterface<NodeData, LinkData>>,\n \"links\" | \"nodes\" | \"listeners\"\n >,\n clearCache: boolean | GraphCanvasCacheKeys[] = true,\n ) {\n if (options.graphSettings) {\n this.graphSettings = graphSettingsGetter(options.graphSettings, this.graphSettings);\n\n this.draw = initDraw.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initDraw>,\n ReturnType<typeof initDraw>\n >(this);\n initZoom.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initZoom>,\n ReturnType<typeof initZoom>\n >(this, this.areaTransform);\n }\n if (options.forceSettings) {\n this.forceSettings = forceSettingsGetter(options.forceSettings, this.forceSettings);\n }\n if (options.highlightSettings) {\n this.highlightSettings = highlightSettingsGetter(\n options.highlightSettings,\n this.highlightSettings,\n );\n\n if (clearCache === true) {\n this.clearCache([\n GRAPH_CACHE_TYPE.NodeOptions,\n GRAPH_CACHE_TYPE.NodeText,\n GRAPH_CACHE_TYPE.NodeLabel,\n GRAPH_CACHE_TYPE.LinkOptions,\n ]);\n } else {\n this.clearCache(clearCache);\n }\n }\n if (options.linkSettings) {\n this.linkSettings = linkSettingsGetter(options.linkSettings, this.linkSettings);\n\n if (clearCache) {\n this.clearCache([GRAPH_CACHE_TYPE.LinkOptions]);\n } else {\n this.clearCache(clearCache);\n }\n }\n if (options.nodeSettings) {\n this.nodeSettings = nodeSettingsGetter(options.nodeSettings, this.nodeSettings);\n\n if (clearCache) {\n this.clearCache([\n GRAPH_CACHE_TYPE.NodeOptions,\n GRAPH_CACHE_TYPE.NodeText,\n GRAPH_CACHE_TYPE.NodeLabel,\n ]);\n } else {\n this.clearCache(clearCache);\n }\n\n initCollideForce.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initCollideForce>,\n ReturnType<typeof initCollideForce>\n >(this, true);\n }\n\n if (options.forceSettings) {\n return void this.updateSimulation();\n }\n\n this.tick();\n }\n\n updateRect() {\n if (!this.area) return;\n\n this.areaRect = this.area.getBoundingClientRect();\n }\n\n updateSize() {\n if (!this.area) return;\n\n const { width, height } = this.root.getBoundingClientRect();\n this.width = width;\n this.height = height;\n this.area.width = this.dpi * this.width;\n this.area.height = this.dpi * this.height;\n this.areaRect = this.area.getBoundingClientRect();\n\n this.context = this.area.getContext(\"2d\");\n if (!this.context) throw new Error(\"couldn't create canvas context\");\n this.context.scale(this.dpi, this.dpi);\n this.draw();\n }\n\n clearCache(keys: boolean | GraphCanvasCacheKeys[]) {\n if (keys === true) {\n this.nodeOptionsCache.length = 0;\n this.linkOptionsCache.length = 0;\n this.cachedNodeLabel.length = 0;\n this.cachedNodeText.length = 0;\n } else if (isArray(keys)) {\n for (const key of keys) {\n switch (key) {\n case GRAPH_CACHE_TYPE.NodeText: {\n this.cachedNodeText.length = 0;\n break;\n }\n case GRAPH_CACHE_TYPE.NodeLabel: {\n this.cachedNodeLabel.length = 0;\n break;\n }\n case GRAPH_CACHE_TYPE.NodeOptions: {\n this.nodeOptionsCache.length = 0;\n break;\n }\n case GRAPH_CACHE_TYPE.LinkOptions: {\n this.linkOptionsCache.length = 0;\n break;\n }\n default: {\n break;\n }\n }\n }\n }\n\n updateNodeCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateNodeCache>,\n ReturnType<typeof updateNodeCache>\n >(this);\n updateLinkCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateLinkCache>,\n ReturnType<typeof updateLinkCache>\n >(this);\n }\n\n tick() {\n if (!this.simulationWorking) this.draw();\n }\n\n restart(alpha?: number, options?: Partial<PrecomputeForceSettingsInterface>) {\n if (!this.simulation) return;\n\n const settings: Required<PrecomputeForceSettingsInterface> = {\n precompute: options?.precompute ?? this.forceSettings.precompute,\n precomputeMaxTimeMs: options?.precomputeMaxTimeMs ?? this.forceSettings?.precomputeMaxTimeMs,\n precomputeMaxTicks:\n options?.precomputeMaxTicks ?? this.forceSettings?.precomputeMaxTicks ?? 300,\n precomputeDisableForcesAfter:\n options?.precomputeDisableForcesAfter ??\n this.forceSettings?.precomputeDisableForcesAfter ??\n false,\n };\n if (!settings.precompute) {\n this.simulation.alpha(alpha ?? 1).restart();\n return;\n }\n if (settings.precomputeDisableForcesAfter) {\n this.forceSettings = forceSettingsGetter({ forces: true }, this.forceSettings);\n }\n initSimulationForces.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initSimulationForces>,\n ReturnType<typeof initSimulationForces>\n >(this);\n this.simulation.stop();\n this.simulation.alpha(alpha ?? 1);\n\n const startTime = performance.now();\n let ticks = 0;\n while (\n performance.now() - startTime < settings.precomputeMaxTimeMs &&\n ticks < settings.precomputeMaxTicks\n ) {\n this.simulation.tick(1);\n ticks++;\n if (this.simulation.alpha() <= this.simulation.alphaMin()) break;\n }\n if (settings.precomputeDisableForcesAfter) {\n this.forceSettings = forceSettingsGetter({ forces: false }, this.forceSettings);\n }\n initSimulationForces.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initSimulationForces>,\n ReturnType<typeof initSimulationForces>\n >(this);\n this.simulation.restart();\n this.tick();\n }\n\n start() {\n if (this.simulation) this.simulation.alpha(1).restart();\n if (this.container) this.container.style.display = \"block\";\n }\n\n stop() {\n if (this.simulation) this.simulation.stop();\n if (this.container) this.container.style.display = \"none\";\n }\n\n create() {\n this.init();\n }\n\n destroy() {\n if (this.simulation) {\n this.simulation.stop();\n this.simulation = undefined;\n }\n\n this.clearHTMLElements();\n this.clearState();\n this.clearCache(true);\n }\n\n protected clearHTMLElements() {\n this.root.replaceChildren();\n this.area = undefined;\n this.context = undefined;\n this.container = undefined;\n this.eventAbortController.abort();\n this.eventAbortController = new AbortController();\n }\n\n protected updateSimulation() {\n if (this.simulation) {\n initSimulationForces.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initSimulationForces>,\n ReturnType<typeof initSimulationForces>\n >(this);\n this.restart(1);\n }\n }\n\n protected clearState() {\n this.isDragging = false;\n this.highlightedNode = null;\n this.highlightedLink = null;\n this.highlightedNeighbors = null;\n this.highlightProgress = 0;\n this.highlightStart = null;\n this.highlightPositive = false;\n }\n\n protected updateData(alpha: number = 0.5, clearCache: boolean | GraphCanvasCacheKeys[] = true) {\n if (clearCache) {\n this.clearCache(clearCache);\n }\n\n if (this.simulation) {\n initCollideForce.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initCollideForce>,\n ReturnType<typeof initCollideForce>\n >(this, false);\n\n this.simulation.nodes(this.nodes).force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links)\n .id(this.nodeSettings.idGetter.bind(this))\n .distance(\n this.forceSettings.forces && this.forceSettings.linkForce\n ? this.forceSettings.linkDistance\n : 0,\n )\n .strength(\n this.forceSettings.forces && this.forceSettings.linkForce\n ? this.forceSettings.linkStrength\n : 0,\n )\n .iterations(\n this.forceSettings.forces && this.forceSettings.linkForce\n ? this.forceSettings.linkIterations\n : 0,\n ),\n );\n this.restart(alpha);\n initZoom.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initZoom>,\n ReturnType<typeof initZoom>\n >(this, this.areaTransform);\n }\n }\n\n protected init() {\n initArea.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initArea>,\n ReturnType<typeof initArea>\n >(this);\n updateNodeCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateNodeCache>,\n ReturnType<typeof updateNodeCache>\n >(this);\n updateLinkCache.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof updateLinkCache>,\n ReturnType<typeof updateLinkCache>\n >(this);\n initSimulation.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initSimulation>,\n ReturnType<typeof initSimulation>\n >(this);\n this.restart(1);\n initDnd.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initDnd>,\n ReturnType<typeof initDnd>\n >(this);\n initZoom.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initZoom>,\n ReturnType<typeof initZoom>\n >(this);\n initResize.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initResize>,\n ReturnType<typeof initResize>\n >(this);\n initPointer.call<\n GraphCanvas<NodeData, LinkData>,\n Parameters<typeof initPointer>,\n ReturnType<typeof initPointer>\n >(this);\n }\n}\n"],"names":["d3Select"],"mappings":"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"}
@@ -6,6 +6,10 @@ const FORCE_SETTINGS = {
6
6
  xForce: true,
7
7
  yForce: true,
8
8
  collideForce: true,
9
+ precompute: true,
10
+ precomputeMaxTicks: 300,
11
+ precomputeMaxTimeMs: 200,
12
+ precomputeDisableForcesAfter: false,
9
13
  centerPosition: {},
10
14
  centerStrength: 1,
11
15
  collideStrength: 0.1,
@@ -23,6 +27,12 @@ const FORCE_SETTINGS = {
23
27
  linkStrength: 1,
24
28
  collideRadius: null,
25
29
  };
30
+ const PERFORMANCE_FORCE_SETTINGS = {
31
+ ...FORCE_SETTINGS,
32
+ collideIterations: 1,
33
+ precomputeMaxTimeMs: 350,
34
+ precomputeDisableForcesAfter: true,
35
+ };
26
36
 
27
- export { FORCE_SETTINGS };
37
+ export { FORCE_SETTINGS, PERFORMANCE_FORCE_SETTINGS };
28
38
  //# sourceMappingURL=force-settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"force-settings.js","sources":["../../../../../src/module/GraphCanvas/constants/force-settings.ts"],"sourcesContent":["import type { ForceSettingsInterface } from \"../types/force-settings\";\n\nexport const FORCE_SETTINGS: Required<\n ForceSettingsInterface<Record<string, unknown>, Record<string, unknown>>\n> = {\n forces: true,\n centerForce: true,\n chargeForce: true,\n linkForce: true,\n xForce: true,\n yForce: true,\n collideForce: true,\n centerPosition: {},\n centerStrength: 1,\n collideStrength: 0.1,\n collideAdditionalRadius: 4,\n collideIterations: 2,\n collideOffMax: { links: 0, nodes: 0 },\n chargeStrength: -40,\n chargeDistanceMin: 1,\n xPosition: 0,\n xStrength: 0.1,\n yPosition: 0,\n yStrength: 0.1,\n linkDistance: 30,\n linkIterations: 1,\n linkStrength: 1,\n collideRadius: null,\n};\n"],"names":[],"mappings":"AAEa,MAAA,cAAc,GAEvB;AACF,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,uBAAuB,EAAE,CAAC;AAC1B,IAAA,iBAAiB,EAAE,CAAC;IACpB,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;IACrC,cAAc,EAAE,GAAG;AACnB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,aAAa,EAAE,IAAI;;;;;"}
1
+ {"version":3,"file":"force-settings.js","sources":["../../../../../src/module/GraphCanvas/constants/force-settings.ts"],"sourcesContent":["import type { ForceSettingsInterface } from \"../types/force-settings\";\n\nexport const FORCE_SETTINGS: Required<\n ForceSettingsInterface<Record<string, unknown>, Record<string, unknown>>\n> = {\n forces: true,\n centerForce: true,\n chargeForce: true,\n linkForce: true,\n xForce: true,\n yForce: true,\n collideForce: true,\n precompute: true,\n precomputeMaxTicks: 300,\n precomputeMaxTimeMs: 200,\n precomputeDisableForcesAfter: false,\n centerPosition: {},\n centerStrength: 1,\n collideStrength: 0.1,\n collideAdditionalRadius: 4,\n collideIterations: 2,\n collideOffMax: { links: 0, nodes: 0 },\n chargeStrength: -40,\n chargeDistanceMin: 1,\n xPosition: 0,\n xStrength: 0.1,\n yPosition: 0,\n yStrength: 0.1,\n linkDistance: 30,\n linkIterations: 1,\n linkStrength: 1,\n collideRadius: null,\n};\n\nexport const PERFORMANCE_FORCE_SETTINGS: Required<\n ForceSettingsInterface<Record<string, unknown>, Record<string, unknown>>\n> = {\n ...FORCE_SETTINGS,\n collideIterations: 1,\n precomputeMaxTimeMs: 350,\n precomputeDisableForcesAfter: true,\n};\n"],"names":[],"mappings":"AAEa,MAAA,cAAc,GAEvB;AACF,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,kBAAkB,EAAE,GAAG;AACvB,IAAA,mBAAmB,EAAE,GAAG;AACxB,IAAA,4BAA4B,EAAE,KAAK;AACnC,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,uBAAuB,EAAE,CAAC;AAC1B,IAAA,iBAAiB,EAAE,CAAC;IACpB,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;IACrC,cAAc,EAAE,GAAG;AACnB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,aAAa,EAAE,IAAI;;AAGR,MAAA,0BAA0B,GAEnC;AACF,IAAA,GAAG,cAAc;AACjB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,mBAAmB,EAAE,GAAG;AACxB,IAAA,4BAA4B,EAAE,IAAI;;;;;"}
@@ -1,17 +1,29 @@
1
+ import './force-settings.js';
2
+ import './highlight-settings.js';
3
+ import './link-settings.js';
4
+ import './node-settings.js';
1
5
  import '@krainovsd/js-helpers';
2
6
  import { dragPlaceCoefficientGetter } from '../lib/utils/drag-place-coefficient-getter.js';
3
7
  import 'd3-array';
4
8
 
5
9
  const GRAPH_SETTINGS = {
6
- zoomExtent: [0.3, 10],
7
- translateExtent: [[], []],
8
- translateExtentEnable: true,
9
- translateExtentCoefficient: [3, 3],
10
+ zoomAnimation: true,
11
+ zoomAnimationDuration: 300,
12
+ zoomToNodeScale: 5,
13
+ zoomToFitMargin: 0.25,
14
+ zoomExtent: null,
15
+ zoomExtentMargin: 0.3,
16
+ translateExtent: null,
17
+ translateExtentCoefficient: null,
18
+ translateExtentOverlap: 0.3,
10
19
  dragPlaceCoefficient: dragPlaceCoefficientGetter,
11
20
  zoomInitial: null,
12
21
  showDrawTime: true,
13
22
  showDrawTimeEveryTick: false,
14
23
  };
24
+ const PERFORMANCE_GRAPH_SETTINGS = {
25
+ ...GRAPH_SETTINGS,
26
+ };
15
27
 
16
- export { GRAPH_SETTINGS };
28
+ export { GRAPH_SETTINGS, PERFORMANCE_GRAPH_SETTINGS };
17
29
  //# sourceMappingURL=graph-settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph-settings.js","sources":["../../../../../src/module/GraphCanvas/constants/graph-settings.ts"],"sourcesContent":["import { dragPlaceCoefficientGetter } from \"../lib\";\nimport type { GraphSettingsInterface } from \"../types/graph-settings\";\n\nexport const GRAPH_SETTINGS: Required<GraphSettingsInterface<Record<string, unknown>>> = {\n zoomExtent: [0.3, 10] as [number, number],\n translateExtent: [[], []],\n translateExtentEnable: true,\n translateExtentCoefficient: [3, 3],\n dragPlaceCoefficient: dragPlaceCoefficientGetter,\n zoomInitial: null,\n showDrawTime: true,\n showDrawTimeEveryTick: false,\n};\n"],"names":[],"mappings":";;;;AAGa,MAAA,cAAc,GAA8D;AACvF,IAAA,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAqB;AACzC,IAAA,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACzB,IAAA,qBAAqB,EAAE,IAAI;AAC3B,IAAA,0BAA0B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAClC,IAAA,oBAAoB,EAAE,0BAA0B;AAChD,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,qBAAqB,EAAE,KAAK;;;;;"}
1
+ {"version":3,"file":"graph-settings.js","sources":["../../../../../src/module/GraphCanvas/constants/graph-settings.ts"],"sourcesContent":["import { dragPlaceCoefficientGetter } from \"../lib\";\nimport type { GraphSettingsInterface } from \"../types/graph-settings\";\n\nexport const GRAPH_SETTINGS: Required<GraphSettingsInterface<Record<string, unknown>>> = {\n zoomAnimation: true,\n zoomAnimationDuration: 300,\n zoomToNodeScale: 5,\n zoomToFitMargin: 0.25,\n zoomExtent: null,\n zoomExtentMargin: 0.3,\n translateExtent: null,\n translateExtentCoefficient: null,\n translateExtentOverlap: 0.3,\n dragPlaceCoefficient: dragPlaceCoefficientGetter,\n zoomInitial: null,\n showDrawTime: true,\n showDrawTimeEveryTick: false,\n};\n\nexport const PERFORMANCE_GRAPH_SETTINGS: Required<GraphSettingsInterface<Record<string, unknown>>> =\n {\n ...GRAPH_SETTINGS,\n };\n"],"names":[],"mappings":";;;;;;;;AAGa,MAAA,cAAc,GAA8D;AACvF,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,qBAAqB,EAAE,GAAG;AAC1B,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,gBAAgB,EAAE,GAAG;AACrB,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,0BAA0B,EAAE,IAAI;AAChC,IAAA,sBAAsB,EAAE,GAAG;AAC3B,IAAA,oBAAoB,EAAE,0BAA0B;AAChD,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,qBAAqB,EAAE,KAAK;;AAGjB,MAAA,0BAA0B,GACrC;AACE,IAAA,GAAG,cAAc;;;;;"}
@@ -1,8 +1,7 @@
1
1
  const HIGHLIGHT_SETTINGS = {
2
2
  highlightByHoverNode: true,
3
3
  highlightByHoverLink: true,
4
- highlightUpFrames: 5,
5
- highlightDownFrames: 5,
4
+ highlightDuration: 150,
6
5
  linkHoverExtraZone: 2,
7
6
  /** Node */
8
7
  highlightByNodeOnlyRoot: true,
@@ -57,6 +56,9 @@ const HIGHLIGHT_SETTINGS = {
57
56
  highlightByLinkForArrowBorderColor: null,
58
57
  highlightByLinkForArrowBorderSizingAdditional: 0,
59
58
  };
59
+ const PERFORMANCE_HIGHLIGHT_SETTINGS = {
60
+ ...HIGHLIGHT_SETTINGS,
61
+ };
60
62
 
61
- export { HIGHLIGHT_SETTINGS };
63
+ export { HIGHLIGHT_SETTINGS, PERFORMANCE_HIGHLIGHT_SETTINGS };
62
64
  //# sourceMappingURL=highlight-settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"highlight-settings.js","sources":["../../../../../src/module/GraphCanvas/constants/highlight-settings.ts"],"sourcesContent":["import type { HighlightSettingsInterface } from \"../types/highlight-settings\";\n\nexport const HIGHLIGHT_SETTINGS: Required<HighlightSettingsInterface> = {\n highlightByHoverNode: true,\n highlightByHoverLink: true,\n highlightUpFrames: 5,\n highlightDownFrames: 5,\n linkHoverExtraZone: 2,\n /** Node */\n highlightByNodeOnlyRoot: true,\n highlightByNodeForNodeColorFading: false,\n highlightByNodeForNodeColor: null,\n highlightByNodeForNodeSizingAdditional: 0.5,\n highlightByNodeForNodeSizingAdditionalCoefficient: 0.35,\n highlightByNodeForNodeFadingMin: 0.21,\n highlightByNodeForNodeBorderColor: null,\n highlightByNodeForNodeBorderSizingAdditional: 0,\n\n highlightByLinkForNodeColorFading: false,\n highlightByLinkForNodeColor: null,\n highlightByLinkForNodeSizingAdditional: 0.5,\n highlightByLinkForNodeSizingAdditionalCoefficient: 0.35,\n highlightByLinkForNodeFadingMin: 0.21,\n highlightByLinkForNodeBorderColor: null,\n highlightByLinkForNodeBorderSizingAdditional: 0,\n /** Text */\n highlightByNodeForTextShiftXAdditional: 0,\n highlightByNodeForTextShiftYAdditional: 2,\n highlightByNodeForTextSizingAdditional: 1,\n highlightByNodeForTextWeightAdditional: 0,\n highlightByNodeForTextFadingMin: 0.21,\n\n highlightByLinkForTextShiftXAdditional: 0,\n highlightByLinkForTextShiftYAdditional: 2,\n highlightByLinkForTextSizingAdditional: 1,\n highlightByLinkForTextWeightAdditional: 0,\n highlightByLinkForTextFadingMin: 0.21,\n /** Label */\n highlightByNodeForLabelFadingMin: 0.21,\n highlightByNodeForLabelSizingAdditional: 1,\n highlightByNodeForLabelWeightAdditional: 0,\n\n highlightByLinkForLabelFadingMin: 0.21,\n highlightByLinkForLabelSizingAdditional: 1,\n highlightByLinkForLabelWeightAdditional: 0,\n /** Link */\n highlightByNodeForLinkFadingMin: 0.21,\n highlightByNodeForLinkSizeAdditional: 0,\n highlightByNodeForLinkColor: null,\n\n highlightByLinkForLinkFadingMin: 0.21,\n highlightByLinkForLinkSizeAdditional: 0,\n highlightByLinkForLinkColor: null,\n /** Arrow */\n highlightByNodeForArrowFadingMin: 0.21,\n highlightByNodeForArrowSizeAdditional: 0,\n highlightByNodeForArrowColor: null,\n highlightByNodeForArrowBorderColor: null,\n highlightByNodeForArrowBorderSizingAdditional: 0,\n\n highlightByLinkForArrowFadingMin: 0.21,\n highlightByLinkForArrowSizeAdditional: 0,\n highlightByLinkForArrowColor: null,\n highlightByLinkForArrowBorderColor: null,\n highlightByLinkForArrowBorderSizingAdditional: 0,\n};\n"],"names":[],"mappings":"AAEa,MAAA,kBAAkB,GAAyC;AACtE,IAAA,oBAAoB,EAAE,IAAI;AAC1B,IAAA,oBAAoB,EAAE,IAAI;AAC1B,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,mBAAmB,EAAE,CAAC;AACtB,IAAA,kBAAkB,EAAE,CAAC;;AAErB,IAAA,uBAAuB,EAAE,IAAI;AAC7B,IAAA,iCAAiC,EAAE,KAAK;AACxC,IAAA,2BAA2B,EAAE,IAAI;AACjC,IAAA,sCAAsC,EAAE,GAAG;AAC3C,IAAA,iDAAiD,EAAE,IAAI;AACvD,IAAA,+BAA+B,EAAE,IAAI;AACrC,IAAA,iCAAiC,EAAE,IAAI;AACvC,IAAA,4CAA4C,EAAE,CAAC;AAE/C,IAAA,iCAAiC,EAAE,KAAK;AACxC,IAAA,2BAA2B,EAAE,IAAI;AACjC,IAAA,sCAAsC,EAAE,GAAG;AAC3C,IAAA,iDAAiD,EAAE,IAAI;AACvD,IAAA,+BAA+B,EAAE,IAAI;AACrC,IAAA,iCAAiC,EAAE,IAAI;AACvC,IAAA,4CAA4C,EAAE,CAAC;;AAE/C,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,+BAA+B,EAAE,IAAI;AAErC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,+BAA+B,EAAE,IAAI;;AAErC,IAAA,gCAAgC,EAAE,IAAI;AACtC,IAAA,uCAAuC,EAAE,CAAC;AAC1C,IAAA,uCAAuC,EAAE,CAAC;AAE1C,IAAA,gCAAgC,EAAE,IAAI;AACtC,IAAA,uCAAuC,EAAE,CAAC;AAC1C,IAAA,uCAAuC,EAAE,CAAC;;AAE1C,IAAA,+BAA+B,EAAE,IAAI;AACrC,IAAA,oCAAoC,EAAE,CAAC;AACvC,IAAA,2BAA2B,EAAE,IAAI;AAEjC,IAAA,+BAA+B,EAAE,IAAI;AACrC,IAAA,oCAAoC,EAAE,CAAC;AACvC,IAAA,2BAA2B,EAAE,IAAI;;AAEjC,IAAA,gCAAgC,EAAE,IAAI;AACtC,IAAA,qCAAqC,EAAE,CAAC;AACxC,IAAA,4BAA4B,EAAE,IAAI;AAClC,IAAA,kCAAkC,EAAE,IAAI;AACxC,IAAA,6CAA6C,EAAE,CAAC;AAEhD,IAAA,gCAAgC,EAAE,IAAI;AACtC,IAAA,qCAAqC,EAAE,CAAC;AACxC,IAAA,4BAA4B,EAAE,IAAI;AAClC,IAAA,kCAAkC,EAAE,IAAI;AACxC,IAAA,6CAA6C,EAAE,CAAC;;;;;"}
1
+ {"version":3,"file":"highlight-settings.js","sources":["../../../../../src/module/GraphCanvas/constants/highlight-settings.ts"],"sourcesContent":["import type { HighlightSettingsInterface } from \"../types/highlight-settings\";\n\nexport const HIGHLIGHT_SETTINGS: Required<HighlightSettingsInterface> = {\n highlightByHoverNode: true,\n highlightByHoverLink: true,\n highlightDuration: 150,\n linkHoverExtraZone: 2,\n /** Node */\n highlightByNodeOnlyRoot: true,\n highlightByNodeForNodeColorFading: false,\n highlightByNodeForNodeColor: null,\n highlightByNodeForNodeSizingAdditional: 0.5,\n highlightByNodeForNodeSizingAdditionalCoefficient: 0.35,\n highlightByNodeForNodeFadingMin: 0.21,\n highlightByNodeForNodeBorderColor: null,\n highlightByNodeForNodeBorderSizingAdditional: 0,\n\n highlightByLinkForNodeColorFading: false,\n highlightByLinkForNodeColor: null,\n highlightByLinkForNodeSizingAdditional: 0.5,\n highlightByLinkForNodeSizingAdditionalCoefficient: 0.35,\n highlightByLinkForNodeFadingMin: 0.21,\n highlightByLinkForNodeBorderColor: null,\n highlightByLinkForNodeBorderSizingAdditional: 0,\n /** Text */\n highlightByNodeForTextShiftXAdditional: 0,\n highlightByNodeForTextShiftYAdditional: 2,\n highlightByNodeForTextSizingAdditional: 1,\n highlightByNodeForTextWeightAdditional: 0,\n highlightByNodeForTextFadingMin: 0.21,\n\n highlightByLinkForTextShiftXAdditional: 0,\n highlightByLinkForTextShiftYAdditional: 2,\n highlightByLinkForTextSizingAdditional: 1,\n highlightByLinkForTextWeightAdditional: 0,\n highlightByLinkForTextFadingMin: 0.21,\n /** Label */\n highlightByNodeForLabelFadingMin: 0.21,\n highlightByNodeForLabelSizingAdditional: 1,\n highlightByNodeForLabelWeightAdditional: 0,\n\n highlightByLinkForLabelFadingMin: 0.21,\n highlightByLinkForLabelSizingAdditional: 1,\n highlightByLinkForLabelWeightAdditional: 0,\n /** Link */\n highlightByNodeForLinkFadingMin: 0.21,\n highlightByNodeForLinkSizeAdditional: 0,\n highlightByNodeForLinkColor: null,\n\n highlightByLinkForLinkFadingMin: 0.21,\n highlightByLinkForLinkSizeAdditional: 0,\n highlightByLinkForLinkColor: null,\n /** Arrow */\n highlightByNodeForArrowFadingMin: 0.21,\n highlightByNodeForArrowSizeAdditional: 0,\n highlightByNodeForArrowColor: null,\n highlightByNodeForArrowBorderColor: null,\n highlightByNodeForArrowBorderSizingAdditional: 0,\n\n highlightByLinkForArrowFadingMin: 0.21,\n highlightByLinkForArrowSizeAdditional: 0,\n highlightByLinkForArrowColor: null,\n highlightByLinkForArrowBorderColor: null,\n highlightByLinkForArrowBorderSizingAdditional: 0,\n};\n\nexport const PERFORMANCE_HIGHLIGHT_SETTINGS: Required<HighlightSettingsInterface> = {\n ...HIGHLIGHT_SETTINGS,\n};\n"],"names":[],"mappings":"AAEa,MAAA,kBAAkB,GAAyC;AACtE,IAAA,oBAAoB,EAAE,IAAI;AAC1B,IAAA,oBAAoB,EAAE,IAAI;AAC1B,IAAA,iBAAiB,EAAE,GAAG;AACtB,IAAA,kBAAkB,EAAE,CAAC;;AAErB,IAAA,uBAAuB,EAAE,IAAI;AAC7B,IAAA,iCAAiC,EAAE,KAAK;AACxC,IAAA,2BAA2B,EAAE,IAAI;AACjC,IAAA,sCAAsC,EAAE,GAAG;AAC3C,IAAA,iDAAiD,EAAE,IAAI;AACvD,IAAA,+BAA+B,EAAE,IAAI;AACrC,IAAA,iCAAiC,EAAE,IAAI;AACvC,IAAA,4CAA4C,EAAE,CAAC;AAE/C,IAAA,iCAAiC,EAAE,KAAK;AACxC,IAAA,2BAA2B,EAAE,IAAI;AACjC,IAAA,sCAAsC,EAAE,GAAG;AAC3C,IAAA,iDAAiD,EAAE,IAAI;AACvD,IAAA,+BAA+B,EAAE,IAAI;AACrC,IAAA,iCAAiC,EAAE,IAAI;AACvC,IAAA,4CAA4C,EAAE,CAAC;;AAE/C,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,+BAA+B,EAAE,IAAI;AAErC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,sCAAsC,EAAE,CAAC;AACzC,IAAA,+BAA+B,EAAE,IAAI;;AAErC,IAAA,gCAAgC,EAAE,IAAI;AACtC,IAAA,uCAAuC,EAAE,CAAC;AAC1C,IAAA,uCAAuC,EAAE,CAAC;AAE1C,IAAA,gCAAgC,EAAE,IAAI;AACtC,IAAA,uCAAuC,EAAE,CAAC;AAC1C,IAAA,uCAAuC,EAAE,CAAC;;AAE1C,IAAA,+BAA+B,EAAE,IAAI;AACrC,IAAA,oCAAoC,EAAE,CAAC;AACvC,IAAA,2BAA2B,EAAE,IAAI;AAEjC,IAAA,+BAA+B,EAAE,IAAI;AACrC,IAAA,oCAAoC,EAAE,CAAC;AACvC,IAAA,2BAA2B,EAAE,IAAI;;AAEjC,IAAA,gCAAgC,EAAE,IAAI;AACtC,IAAA,qCAAqC,EAAE,CAAC;AACxC,IAAA,4BAA4B,EAAE,IAAI;AAClC,IAAA,kCAAkC,EAAE,IAAI;AACxC,IAAA,6CAA6C,EAAE,CAAC;AAEhD,IAAA,gCAAgC,EAAE,IAAI;AACtC,IAAA,qCAAqC,EAAE,CAAC;AACxC,IAAA,4BAA4B,EAAE,IAAI;AAClC,IAAA,kCAAkC,EAAE,IAAI;AACxC,IAAA,6CAA6C,EAAE,CAAC;;AAGrC,MAAA,8BAA8B,GAAyC;AAClF,IAAA,GAAG,kBAAkB;;;;;"}
@@ -1,5 +1,8 @@
1
- import '@krainovsd/js-helpers';
2
- import 'd3-array';
1
+ export { FORCE_SETTINGS, PERFORMANCE_FORCE_SETTINGS } from './force-settings.js';
2
+ export { GRAPH_SETTINGS, PERFORMANCE_GRAPH_SETTINGS } from './graph-settings.js';
3
+ export { HIGHLIGHT_SETTINGS, PERFORMANCE_HIGHLIGHT_SETTINGS } from './highlight-settings.js';
4
+ export { LINK_OPTIONS, LINK_SETTINGS, PERFORMANCE_LINK_OPTIONS, PERFORMANCE_LINK_SETTINGS } from './link-settings.js';
5
+ export { NODE_OPTIONS, NODE_SETTINGS, PERFOMANCE_NODE_OPTIONS, PERFORMANCE_NODE_SETTINGS } from './node-settings.js';
3
6
 
4
7
  const GRAPH_CACHE_TYPE = {
5
8
  NodeOptions: "nodeOptions",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/module/GraphCanvas/constants/index.ts"],"sourcesContent":["export * from \"./common-settings\";\nexport * from \"./force-settings\";\nexport * from \"./graph-settings\";\nexport * from \"./highlight-settings\";\nexport * from \"./link-settings\";\nexport * from \"./node-settings\";\n\nexport const GRAPH_CACHE_TYPE = {\n NodeOptions: \"nodeOptions\",\n LinkOptions: \"linkOptions\",\n NodeText: \"nodeText\",\n NodeLabel: \"nodeLabel\",\n} as const;\n"],"names":[],"mappings":";;;AAOa,MAAA,gBAAgB,GAAG;AAC9B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,SAAS,EAAE,WAAW;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/module/GraphCanvas/constants/index.ts"],"sourcesContent":["export * from \"./common-settings\";\nexport * from \"./force-settings\";\nexport * from \"./graph-settings\";\nexport * from \"./highlight-settings\";\nexport * from \"./link-settings\";\nexport * from \"./node-settings\";\n\nexport const GRAPH_CACHE_TYPE = {\n NodeOptions: \"nodeOptions\",\n LinkOptions: \"linkOptions\",\n NodeText: \"nodeText\",\n NodeLabel: \"nodeLabel\",\n} as const;\n"],"names":[],"mappings":";;;;;;AAOa,MAAA,gBAAgB,GAAG;AAC9B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,SAAS,EAAE,WAAW;;;;;"}