@krainovsd/graph 0.13.0-beta1 → 0.14.0-beta-7.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 (80) hide show
  1. package/lib/cjs/index.cjs +1297 -606
  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 +305 -81
  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 -9
  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 +45 -0
  38. package/lib/esm/module/GraphCanvas/lib/utils/calculate-curve-link-position-by-node.js.map +1 -0
  39. package/lib/esm/module/GraphCanvas/lib/utils/calculate-link-position-by-node.js +42 -37
  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/lib/utils/link-by-pointer-getter.js +72 -26
  50. package/lib/esm/module/GraphCanvas/lib/utils/link-by-pointer-getter.js.map +1 -1
  51. package/lib/esm/module/GraphCanvas/lib/utils/node-by-pointer-getter.js +1 -5
  52. package/lib/esm/module/GraphCanvas/lib/utils/node-by-pointer-getter.js.map +1 -1
  53. package/lib/esm/module/GraphCanvas/lib/utils/pointer-getter.js +16 -8
  54. package/lib/esm/module/GraphCanvas/lib/utils/pointer-getter.js.map +1 -1
  55. package/lib/esm/module/GraphCanvas/slices/draw-links.js +115 -77
  56. package/lib/esm/module/GraphCanvas/slices/draw-links.js.map +1 -1
  57. package/lib/esm/module/GraphCanvas/slices/draw-nodes.js +9 -4
  58. package/lib/esm/module/GraphCanvas/slices/draw-nodes.js.map +1 -1
  59. package/lib/esm/module/GraphCanvas/slices/init-area.js +1 -1
  60. package/lib/esm/module/GraphCanvas/slices/init-area.js.map +1 -1
  61. package/lib/esm/module/GraphCanvas/slices/init-dnd.js +20 -13
  62. package/lib/esm/module/GraphCanvas/slices/init-dnd.js.map +1 -1
  63. package/lib/esm/module/GraphCanvas/slices/init-draw.js +14 -52
  64. package/lib/esm/module/GraphCanvas/slices/init-draw.js.map +1 -1
  65. package/lib/esm/module/GraphCanvas/slices/init-pointer.js +51 -72
  66. package/lib/esm/module/GraphCanvas/slices/init-pointer.js.map +1 -1
  67. package/lib/esm/module/GraphCanvas/slices/init-resize.js +11 -0
  68. package/lib/esm/module/GraphCanvas/slices/init-resize.js.map +1 -1
  69. package/lib/esm/module/GraphCanvas/slices/init-selection.js +152 -0
  70. package/lib/esm/module/GraphCanvas/slices/init-selection.js.map +1 -0
  71. package/lib/esm/module/GraphCanvas/slices/init-simulation.js +12 -2
  72. package/lib/esm/module/GraphCanvas/slices/init-simulation.js.map +1 -1
  73. package/lib/esm/module/GraphCanvas/slices/init-zoom.js +88 -16
  74. package/lib/esm/module/GraphCanvas/slices/init-zoom.js.map +1 -1
  75. package/lib/esm/module/GraphCanvas/slices/update-link-cache.js +63 -3
  76. package/lib/esm/module/GraphCanvas/slices/update-link-cache.js.map +1 -1
  77. package/lib/esm/module/GraphCanvas/slices/update-node-cache.js +61 -16
  78. package/lib/esm/module/GraphCanvas/slices/update-node-cache.js.map +1 -1
  79. package/lib/index.d.ts +127 -62
  80. package/package.json +3 -2
@@ -1,12 +1,20 @@
1
1
  function pointerGetter(mouseEvent, areaRect, areaTransform) {
2
- const clientX = "clientX" in mouseEvent
3
- ? mouseEvent.clientX
4
- : (mouseEvent.touches[0]?.clientX ?? mouseEvent.changedTouches[0]?.clientX);
5
- const clientY = "clientX" in mouseEvent
6
- ? mouseEvent.clientY
7
- : (mouseEvent.touches[0]?.clientY ?? mouseEvent.changedTouches[0]?.clientY);
8
- const px = (clientX - areaRect.left - areaTransform.x) / areaTransform.k;
9
- const py = (clientY - areaRect.top - areaTransform.y) / areaTransform.k;
2
+ let localX;
3
+ let localY;
4
+ if ("offsetX" in mouseEvent) {
5
+ localX = mouseEvent.offsetX;
6
+ localY = mouseEvent.offsetY;
7
+ }
8
+ else {
9
+ if (!areaRect)
10
+ return [0, 0];
11
+ const clientX = mouseEvent.touches[0]?.clientX ?? mouseEvent.changedTouches[0]?.clientX;
12
+ const clientY = mouseEvent.touches[0]?.clientY ?? mouseEvent.changedTouches[0]?.clientY;
13
+ localX = clientX - areaRect.left;
14
+ localY = clientY - areaRect.top;
15
+ }
16
+ const px = (localX - areaTransform.x) / areaTransform.k;
17
+ const py = (localY - areaTransform.y) / areaTransform.k;
10
18
  return [px, py];
11
19
  }
12
20
 
@@ -1 +1 @@
1
- {"version":3,"file":"pointer-getter.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/pointer-getter.ts"],"sourcesContent":["import type { ZoomTransform } from \"d3-zoom\";\n\nexport function pointerGetter(\n mouseEvent: MouseEvent | TouchEvent,\n areaRect: DOMRect,\n areaTransform: ZoomTransform,\n) {\n const clientX =\n \"clientX\" in mouseEvent\n ? mouseEvent.clientX\n : (mouseEvent.touches[0]?.clientX ?? mouseEvent.changedTouches[0]?.clientX);\n const clientY =\n \"clientX\" in mouseEvent\n ? mouseEvent.clientY\n : (mouseEvent.touches[0]?.clientY ?? mouseEvent.changedTouches[0]?.clientY);\n\n const px = (clientX - areaRect.left - areaTransform.x) / areaTransform.k;\n const py = (clientY - areaRect.top - areaTransform.y) / areaTransform.k;\n\n return [px, py];\n}\n"],"names":[],"mappings":"SAEgB,aAAa,CAC3B,UAAmC,EACnC,QAAiB,EACjB,aAA4B,EAAA;AAE5B,IAAA,MAAM,OAAO,GACX,SAAS,IAAI;UACT,UAAU,CAAC;WACV,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAC/E,IAAA,MAAM,OAAO,GACX,SAAS,IAAI;UACT,UAAU,CAAC;WACV,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAE/E,IAAA,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;AACxE,IAAA,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;AAEvE,IAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACjB;;;;"}
1
+ {"version":3,"file":"pointer-getter.js","sources":["../../../../../../src/module/GraphCanvas/lib/utils/pointer-getter.ts"],"sourcesContent":["import type { ZoomTransform } from \"d3-zoom\";\n\nexport function pointerGetter(\n mouseEvent: MouseEvent | TouchEvent,\n areaRect: DOMRect | undefined,\n areaTransform: ZoomTransform,\n) {\n let localX: number;\n let localY: number;\n\n if (\"offsetX\" in mouseEvent) {\n localX = mouseEvent.offsetX;\n localY = mouseEvent.offsetY;\n } else {\n if (!areaRect) return [0, 0];\n const clientX = mouseEvent.touches[0]?.clientX ?? mouseEvent.changedTouches[0]?.clientX;\n const clientY = mouseEvent.touches[0]?.clientY ?? mouseEvent.changedTouches[0]?.clientY;\n localX = clientX - areaRect.left;\n localY = clientY - areaRect.top;\n }\n\n const px = (localX - areaTransform.x) / areaTransform.k;\n const py = (localY - areaTransform.y) / areaTransform.k;\n\n return [px, py];\n}\n"],"names":[],"mappings":"SAEgB,aAAa,CAC3B,UAAmC,EACnC,QAA6B,EAC7B,aAA4B,EAAA;AAE5B,IAAA,IAAI,MAAc;AAClB,IAAA,IAAI,MAAc;AAElB,IAAA,IAAI,SAAS,IAAI,UAAU,EAAE;AAC3B,QAAA,MAAM,GAAG,UAAU,CAAC,OAAO;AAC3B,QAAA,MAAM,GAAG,UAAU,CAAC,OAAO;;SACtB;AACL,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5B,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO;AACvF,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO;AACvF,QAAA,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,IAAI;AAChC,QAAA,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG;;AAGjC,IAAA,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;AACvD,IAAA,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;AAEvD,IAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACjB;;;;"}
@@ -1,11 +1,17 @@
1
+ import '../constants/force-settings.js';
2
+ import '../constants/graph-settings.js';
3
+ import '../constants/highlight-settings.js';
4
+ import '../constants/link-settings.js';
5
+ import '../constants/node-settings.js';
1
6
  import '@krainovsd/js-helpers';
2
7
  import 'd3-array';
3
8
  import { calculateLinkPositionByNode } from '../lib/utils/calculate-link-position-by-node.js';
4
- import { getParticlePosition } from '../lib/utils/get-particle-position.js';
9
+ import { getParticlePosition, approximateQuadraticBezierLength } from '../lib/utils/get-particle-position.js';
5
10
  import { linkFade, linkHighlight } from '../lib/utils/link-highlight.js';
11
+ import { calculateCurveLinkPositionByNode } from '../lib/utils/calculate-curve-link-position-by-node.js';
6
12
 
7
13
  function getDrawLink() {
8
- return function drawLink(link) {
14
+ return function drawLink(link, index) {
9
15
  if (!this.context ||
10
16
  typeof link.source !== "object" ||
11
17
  typeof link.target !== "object" ||
@@ -20,8 +26,7 @@ function getDrawLink() {
20
26
  return;
21
27
  if (!link.source._visible && !link.target._visible)
22
28
  return;
23
- const id = `${link.target.id}${link.source.id}`;
24
- const linkOptions = this.linkOptionsCache[id];
29
+ const linkOptions = this.linkOptionsCache[index];
25
30
  if (!linkOptions)
26
31
  return;
27
32
  if (linkOptions.drawLink) {
@@ -36,10 +41,12 @@ function getDrawLink() {
36
41
  let arrowSize = linkOptions.arrowSize;
37
42
  let arrowBorderWidth = linkOptions.arrowBorderWidth;
38
43
  let arrowBorderColor = linkOptions.arrowBorderColor;
44
+ const currentNodeHighlighted = this.highlightedNode &&
45
+ (this.highlightedNode.id == link.source.id || this.highlightedNode.id == link.target.id);
39
46
  /** Highlight */
40
47
  if (this.highlightedNeighbors && this.highlightedNode) {
41
48
  /** By Node Not Highlight */
42
- if (this.highlightedNode.id != link.source.id && this.highlightedNode.id != link.target.id) {
49
+ if (!currentNodeHighlighted) {
43
50
  const fadeOptions = linkFade({
44
51
  arrow: this.linkSettings.arrow,
45
52
  arrowByHighlight: this.linkSettings.arrowByHighlight,
@@ -73,9 +80,10 @@ function getDrawLink() {
73
80
  arrowBorderColor = highlightOptions.arrowBorderColor;
74
81
  }
75
82
  }
83
+ const currentLinkHighlighted = this.highlightedLink === link;
76
84
  if (this.highlightedNeighbors && this.highlightedLink) {
77
85
  /** By Link Not Highlight */
78
- if (this.highlightedLink !== link) {
86
+ if (!currentLinkHighlighted) {
79
87
  const fadeOptions = linkFade({
80
88
  arrow: this.linkSettings.arrow,
81
89
  arrowByHighlight: this.linkSettings.arrowByHighlight,
@@ -119,99 +127,129 @@ function getDrawLink() {
119
127
  let yStart = link.source.y;
120
128
  let xEnd = link.target.x;
121
129
  let yEnd = link.target.y;
130
+ let xControl = 0;
131
+ let yControl = 0;
132
+ let xEndArrow = xEnd;
133
+ let yEndArrow = yEnd;
122
134
  let linkDistance = 0;
123
- if (this.linkSettings.prettyDraw ||
124
- this.linkSettings.particleFlexSpeed ||
125
- (this.linkSettings.arrow && arrowAlpha > 0)) {
126
- const isHasArrow = this.linkSettings.arrow && arrowAlpha > 0;
127
- const position = calculateLinkPositionByNode(link, isHasArrow ? arrowSize : 0);
128
- if (position) {
129
- xStart = position.x1;
130
- xEnd = position.x2;
131
- yStart = position.y1;
132
- yEnd = position.y2;
135
+ const isHasArrow = this.linkSettings.arrow && arrowAlpha > 0;
136
+ if (!this.linkSettings.curve) {
137
+ if (this.linkSettings.prettyDraw ||
138
+ (this.linkSettings.arrow && arrowAlpha > 0) ||
139
+ (this.particles && (currentNodeHighlighted || currentLinkHighlighted))) {
140
+ const position = calculateLinkPositionByNode(xStart, yStart, xEnd, yEnd, link.source, link.target, isHasArrow ? arrowSize : 0);
141
+ xStart = position.xStart;
142
+ xEnd = position.xEnd;
143
+ yStart = position.yStart;
144
+ yEnd = position.yEnd;
145
+ xEndArrow = position.xEndArrow;
146
+ yEndArrow = position.yEndArrow;
133
147
  linkDistance = position.distance;
134
148
  }
149
+ link._x1 = xStart;
150
+ link._y1 = yStart;
151
+ link._x2 = xEnd;
152
+ link._y2 = yEnd;
153
+ link._ax = xEndArrow;
154
+ link._ay = yEndArrow;
155
+ this.context.moveTo(xStart, yStart);
156
+ this.context.lineTo(xEnd, yEnd);
157
+ this.context.stroke();
158
+ }
159
+ else {
160
+ const position = calculateCurveLinkPositionByNode(xStart, yStart, xEnd, yEnd, link.source, link.target, link._groupIndex ?? 0, isHasArrow ? arrowSize : 0);
161
+ xStart = position.xStart;
162
+ yStart = position.yStart;
163
+ xEnd = position.xEnd;
164
+ yEnd = position.yEnd;
165
+ xControl = position.xControl;
166
+ yControl = position.yControl;
167
+ xEndArrow = position.xEndArrow;
168
+ yEndArrow = position.yEndArrow;
169
+ link._x1 = position.xStart;
170
+ link._y1 = position.yStart;
171
+ link._x2 = position.xEnd;
172
+ link._y2 = position.yEnd;
173
+ link._cx = position.xControl;
174
+ link._cy = position.yControl;
175
+ link._ax = position.xEndArrow;
176
+ link._ay = position.yEndArrow;
177
+ linkDistance = approximateQuadraticBezierLength(position.xStart, position.yStart, position.xControl, position.yControl, position.xEnd, position.yEnd);
178
+ this.context.beginPath();
179
+ this.context.moveTo(position.xStart, position.yStart);
180
+ this.context.quadraticCurveTo(position.xControl, position.yControl, position.xEnd, position.yEnd);
181
+ this.context.setLineDash([]);
182
+ // if (isDashed) {
183
+ // this.context.setLineDash([10, 5]);
184
+ // }
185
+ this.context.stroke();
135
186
  }
136
- this.context.moveTo(xStart, yStart);
137
- this.context.lineTo(xEnd, yEnd);
138
- this.context.stroke();
139
187
  /** Particle */
140
- if (this.linkSettings.particles &&
141
- ((this.highlightedNode &&
142
- (this.highlightedNode.id === link.source.id ||
143
- this.highlightedNode.id === link.target.id)) ||
144
- (this.highlightedLink && this.highlightedLink === link))) {
145
- const particleSteps = this.linkSettings.particleFlexSpeed
146
- ? linkDistance <= 0
147
- ? 0
148
- : linkDistance * this.linkSettings.particleFlexSpeedCoefficient
149
- : linkOptions.particleSteps;
150
- const particleCount = linkOptions.particleCount;
151
- if (!this.particles[id]) {
152
- const sourceId = link.source.id;
153
- const targetId = link.target.id;
188
+ if (this.linkSettings.particles && (currentLinkHighlighted || currentNodeHighlighted)) {
189
+ const speed = (1 / this.linkSettings.particleSpeedByDistance) * (1 + 0.5);
190
+ if (!this.particles[index]) {
191
+ const particleCount = Math.max(1, Math.floor(linkDistance / this.linkSettings.particleCountByDistance));
154
192
  const particles = [];
155
- let prevParticle;
156
193
  for (let i = 0; i < particleCount; i++) {
157
194
  const particle = {
158
- step: 0,
159
- sourceId,
160
- targetId,
161
- prev: prevParticle,
162
- next: undefined,
163
195
  index: i,
164
196
  };
165
- if (prevParticle)
166
- prevParticle.next = particle;
167
197
  particles.push(particle);
168
- prevParticle = particle;
169
- }
170
- if (particles.length >= 2) {
171
- particles[0].prev = particles[particles.length - 1];
172
- particles[particles.length - 1].next = particles[0];
173
198
  }
174
- this.particles[id] = particles;
199
+ this.particles[index] = particles;
175
200
  }
176
- if (particleSteps !== 0) {
177
- this.particles[id].forEach((particle) => {
178
- if (!this.context)
179
- return;
180
- const distance = particleSteps / particleCount;
181
- getParticlePosition({
182
- distance,
183
- particle,
184
- totalSteps: particleSteps,
185
- xEnd,
186
- xStart,
187
- yEnd,
188
- yStart,
189
- });
190
- if (particle.x != undefined && particle.y != undefined) {
191
- this.context.beginPath();
192
- this.context.strokeStyle = linkOptions.particleBorderColor;
193
- this.context.lineWidth = linkOptions.particleBorderWidth;
194
- this.context.arc(particle.x, particle.y, linkOptions.particleRadius, 0, Math.PI * 2);
195
- this.context.fillStyle = linkOptions.particleColor;
196
- this.context.fill();
197
- if (linkOptions.particleBorderWidth > 0) {
198
- this.context.stroke();
199
- }
200
- }
201
+ this.particles[index].forEach((particle, _, particles) => {
202
+ if (!this.context)
203
+ return;
204
+ getParticlePosition({
205
+ distance: linkDistance,
206
+ particle,
207
+ totalCount: particles.length,
208
+ xEnd,
209
+ xStart,
210
+ yEnd,
211
+ yStart,
212
+ xControl,
213
+ yControl,
214
+ speed,
201
215
  });
202
- }
216
+ if (particle.x != undefined && particle.y != undefined) {
217
+ this.context.beginPath();
218
+ this.context.strokeStyle = linkOptions.particleBorderColor;
219
+ this.context.lineWidth = linkOptions.particleBorderWidth;
220
+ this.context.arc(particle.x, particle.y, linkOptions.particleRadius, 0, Math.PI * 2);
221
+ this.context.fillStyle = linkOptions.particleColor;
222
+ this.context.fill();
223
+ if (linkOptions.particleBorderWidth > 0) {
224
+ this.context.stroke();
225
+ }
226
+ }
227
+ });
203
228
  }
204
229
  /** Arrow */
205
230
  if (this.linkSettings.arrow && arrowAlpha > 0) {
231
+ let angle = 0;
232
+ if (!this.linkSettings.curve) {
233
+ angle = Math.atan2(yEndArrow - yStart, xEndArrow - xStart);
234
+ }
235
+ else {
236
+ const tangentX = 2 * (xEndArrow - xControl);
237
+ const tangentY = 2 * (yEndArrow - yControl);
238
+ if (Math.abs(tangentX) < 0.001 && Math.abs(tangentY) < 0.001) {
239
+ angle = Math.atan2(yEndArrow - yControl, xEndArrow - xControl);
240
+ }
241
+ else {
242
+ angle = Math.atan2(tangentY, tangentX);
243
+ }
244
+ }
206
245
  this.context.beginPath();
207
246
  this.context.globalAlpha = arrowAlpha;
208
247
  this.context.strokeStyle = arrowBorderColor;
209
248
  this.context.lineWidth = arrowBorderWidth;
210
249
  this.context.fillStyle = arrowColor;
211
- const angle = Math.atan2(yEnd - yStart, xEnd - xStart);
212
- this.context.moveTo(xEnd, yEnd);
213
- this.context.lineTo(xEnd - arrowSize * Math.cos(angle - Math.PI / 6), yEnd - arrowSize * Math.sin(angle - Math.PI / 6));
214
- this.context.lineTo(xEnd - arrowSize * Math.cos(angle + Math.PI / 6), yEnd - arrowSize * Math.sin(angle + Math.PI / 6));
250
+ this.context.moveTo(xEndArrow, yEndArrow);
251
+ this.context.lineTo(xEndArrow - arrowSize * Math.cos(angle - Math.PI / 6), yEndArrow - arrowSize * Math.sin(angle - Math.PI / 6));
252
+ this.context.lineTo(xEndArrow - arrowSize * Math.cos(angle + Math.PI / 6), yEndArrow - arrowSize * Math.sin(angle + Math.PI / 6));
215
253
  this.context.closePath();
216
254
  this.context.fill();
217
255
  if (arrowBorderWidth > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"draw-links.js","sources":["../../../../../src/module/GraphCanvas/slices/draw-links.ts"],"sourcesContent":["import type { GraphCanvas } from \"../GraphCanvas\";\nimport { calculateLinkPositionByNode, getParticlePosition, linkFade, linkHighlight } from \"../lib\";\nimport type { LinkInterface, LinkParticle } from \"../types\";\n\nexport function getDrawLink<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>() {\n return function drawLink(\n this: GraphCanvas<NodeData, LinkData>,\n link: LinkInterface<NodeData, LinkData>,\n ) {\n if (\n !this.context ||\n typeof link.source !== \"object\" ||\n typeof link.target !== \"object\" ||\n !link.source.x ||\n !link.source.y ||\n !link.target.x ||\n !link.target.y\n )\n return;\n\n if (\n (link.visible != undefined && !link.visible) ||\n (link.source.visible != undefined && !link.source.visible) ||\n (link.target.visible != undefined && !link.target.visible)\n )\n return;\n\n if (!link.source._visible && !link.target._visible) return;\n\n const id = `${link.target.id}${link.source.id}`;\n const linkOptions = this.linkOptionsCache[id];\n if (!linkOptions) return;\n\n if (linkOptions.drawLink) {\n linkOptions.drawLink.call(this, link, linkOptions);\n\n return;\n }\n\n let alpha = linkOptions.alpha;\n let color = linkOptions.color;\n let width = linkOptions.width;\n let arrowAlpha = this.linkSettings.arrowByHighlight ? 0 : linkOptions.arrowAlpha;\n let arrowColor = linkOptions.arrowColor;\n let arrowSize = linkOptions.arrowSize;\n let arrowBorderWidth = linkOptions.arrowBorderWidth;\n let arrowBorderColor = linkOptions.arrowBorderColor;\n\n /** Highlight */\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** By Node Not Highlight */\n if (this.highlightedNode.id != link.source.id && this.highlightedNode.id != link.target.id) {\n const fadeOptions = linkFade({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowFadingMin: this.highlightSettings.highlightByNodeForArrowFadingMin,\n highlightForLinkFadingMin: this.highlightSettings.highlightByNodeForLinkFadingMin,\n });\n alpha = fadeOptions.alpha;\n arrowAlpha = fadeOptions.arrowAlpha;\n } else {\n const highlightOptions = linkHighlight({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowBorderColor: this.highlightSettings.highlightByNodeForArrowBorderColor,\n highlightForArrowBorderSizingAdditional:\n this.highlightSettings.highlightByNodeForArrowBorderSizingAdditional,\n highlightForArrowColor: this.highlightSettings.highlightByNodeForArrowColor,\n highlightForArrowSizeAdditional:\n this.highlightSettings.highlightByNodeForArrowSizeAdditional,\n highlightForLinkColor: this.highlightSettings.highlightByNodeForLinkColor,\n highlightForLinkSizeAdditional:\n this.highlightSettings.highlightByNodeForLinkSizeAdditional,\n });\n arrowAlpha = highlightOptions.arrowAlpha;\n color = highlightOptions.color;\n width = highlightOptions.width;\n arrowColor = highlightOptions.arrowColor;\n arrowSize = highlightOptions.arrowSize;\n arrowBorderWidth = highlightOptions.arrowBorderWidth;\n arrowBorderColor = highlightOptions.arrowBorderColor;\n }\n }\n if (this.highlightedNeighbors && this.highlightedLink) {\n /** By Link Not Highlight */\n if (this.highlightedLink !== link) {\n const fadeOptions = linkFade({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowFadingMin: this.highlightSettings.highlightByLinkForArrowFadingMin,\n highlightForLinkFadingMin: this.highlightSettings.highlightByLinkForLinkFadingMin,\n });\n alpha = fadeOptions.alpha;\n arrowAlpha = fadeOptions.arrowAlpha;\n } else {\n /** By Link Highlight */\n const highlightOptions = linkHighlight({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowBorderColor: this.highlightSettings.highlightByLinkForArrowBorderColor,\n highlightForArrowBorderSizingAdditional:\n this.highlightSettings.highlightByLinkForArrowBorderSizingAdditional,\n highlightForArrowColor: this.highlightSettings.highlightByLinkForArrowColor,\n highlightForArrowSizeAdditional:\n this.highlightSettings.highlightByLinkForArrowSizeAdditional,\n highlightForLinkColor: this.highlightSettings.highlightByLinkForLinkColor,\n highlightForLinkSizeAdditional:\n this.highlightSettings.highlightByLinkForLinkSizeAdditional,\n });\n arrowAlpha = highlightOptions.arrowAlpha;\n color = highlightOptions.color;\n width = highlightOptions.width;\n arrowColor = highlightOptions.arrowColor;\n arrowSize = highlightOptions.arrowSize;\n arrowBorderWidth = highlightOptions.arrowBorderWidth;\n arrowBorderColor = highlightOptions.arrowBorderColor;\n }\n }\n\n /** Link */\n this.context.beginPath();\n\n this.context.globalAlpha = alpha;\n this.context.strokeStyle = color;\n this.context.lineWidth = width;\n\n let xStart = link.source.x;\n let yStart = link.source.y;\n let xEnd = link.target.x;\n let yEnd = link.target.y;\n let linkDistance = 0;\n if (\n this.linkSettings.prettyDraw ||\n this.linkSettings.particleFlexSpeed ||\n (this.linkSettings.arrow && arrowAlpha > 0)\n ) {\n const isHasArrow = this.linkSettings.arrow && arrowAlpha > 0;\n const position = calculateLinkPositionByNode(link, isHasArrow ? arrowSize : 0);\n\n if (position) {\n xStart = position.x1;\n xEnd = position.x2;\n yStart = position.y1;\n yEnd = position.y2;\n linkDistance = position.distance;\n }\n }\n this.context.moveTo(xStart, yStart);\n this.context.lineTo(xEnd, yEnd);\n this.context.stroke();\n\n /** Particle */\n if (\n this.linkSettings.particles &&\n ((this.highlightedNode &&\n (this.highlightedNode.id === link.source.id ||\n this.highlightedNode.id === link.target.id)) ||\n (this.highlightedLink && this.highlightedLink === link))\n ) {\n const particleSteps = this.linkSettings.particleFlexSpeed\n ? linkDistance <= 0\n ? 0\n : linkDistance * this.linkSettings.particleFlexSpeedCoefficient\n : linkOptions.particleSteps;\n const particleCount = linkOptions.particleCount;\n\n if (!this.particles[id]) {\n const sourceId = link.source.id;\n const targetId = link.target.id;\n\n const particles: LinkParticle[] = [];\n let prevParticle: LinkParticle | undefined;\n\n for (let i = 0; i < particleCount; i++) {\n const particle: LinkParticle = {\n step: 0,\n sourceId,\n targetId,\n prev: prevParticle,\n next: undefined,\n index: i,\n };\n if (prevParticle) prevParticle.next = particle;\n particles.push(particle);\n prevParticle = particle;\n }\n if (particles.length >= 2) {\n particles[0].prev = particles[particles.length - 1];\n particles[particles.length - 1].next = particles[0];\n }\n this.particles[id] = particles;\n }\n\n if (particleSteps !== 0) {\n this.particles[id].forEach((particle) => {\n if (!this.context) return;\n\n const distance = particleSteps / particleCount;\n getParticlePosition({\n distance,\n particle,\n totalSteps: particleSteps,\n totalCount: particleCount,\n xEnd,\n xStart,\n yEnd,\n yStart,\n });\n if (particle.x != undefined && particle.y != undefined) {\n this.context.beginPath();\n this.context.strokeStyle = linkOptions.particleBorderColor;\n this.context.lineWidth = linkOptions.particleBorderWidth;\n this.context.arc(particle.x, particle.y, linkOptions.particleRadius, 0, Math.PI * 2);\n this.context.fillStyle = linkOptions.particleColor;\n this.context.fill();\n if (linkOptions.particleBorderWidth > 0) {\n this.context.stroke();\n }\n }\n });\n }\n }\n\n /** Arrow */\n if (this.linkSettings.arrow && arrowAlpha > 0) {\n this.context.beginPath();\n this.context.globalAlpha = arrowAlpha;\n this.context.strokeStyle = arrowBorderColor;\n this.context.lineWidth = arrowBorderWidth;\n this.context.fillStyle = arrowColor;\n const angle = Math.atan2(yEnd - yStart, xEnd - xStart);\n this.context.moveTo(xEnd, yEnd);\n this.context.lineTo(\n xEnd - arrowSize * Math.cos(angle - Math.PI / 6),\n yEnd - arrowSize * Math.sin(angle - Math.PI / 6),\n );\n this.context.lineTo(\n xEnd - arrowSize * Math.cos(angle + Math.PI / 6),\n yEnd - arrowSize * Math.sin(angle + Math.PI / 6),\n );\n this.context.closePath();\n this.context.fill();\n if (arrowBorderWidth > 0) {\n this.context.stroke();\n }\n }\n\n if (linkOptions.drawExtraLink) {\n linkOptions.drawExtraLink.call(this, link, { ...linkOptions, alpha });\n }\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"draw-links.js","sources":["../../../../../src/module/GraphCanvas/slices/draw-links.ts"],"sourcesContent":["import type { GraphCanvas } from \"../GraphCanvas\";\nimport { calculateLinkPositionByNode, getParticlePosition, linkFade, linkHighlight } from \"../lib\";\nimport { calculateCurveLinkPositionByNode } from \"../lib/utils/calculate-curve-link-position-by-node\";\nimport { approximateQuadraticBezierLength } from \"../lib/utils/get-particle-position\";\nimport type { LinkInterface, LinkParticle } from \"../types\";\n\nexport function getDrawLink<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>() {\n return function drawLink(\n this: GraphCanvas<NodeData, LinkData>,\n link: LinkInterface<NodeData, LinkData>,\n index: number,\n ) {\n if (\n !this.context ||\n typeof link.source !== \"object\" ||\n typeof link.target !== \"object\" ||\n !link.source.x ||\n !link.source.y ||\n !link.target.x ||\n !link.target.y\n )\n return;\n\n if (\n (link.visible != undefined && !link.visible) ||\n (link.source.visible != undefined && !link.source.visible) ||\n (link.target.visible != undefined && !link.target.visible)\n )\n return;\n\n if (!link.source._visible && !link.target._visible) return;\n\n const linkOptions = this.linkOptionsCache[index];\n if (!linkOptions) return;\n\n if (linkOptions.drawLink) {\n linkOptions.drawLink.call(this, link, linkOptions);\n\n return;\n }\n\n let alpha = linkOptions.alpha;\n let color = linkOptions.color;\n let width = linkOptions.width;\n let arrowAlpha = this.linkSettings.arrowByHighlight ? 0 : linkOptions.arrowAlpha;\n let arrowColor = linkOptions.arrowColor;\n let arrowSize = linkOptions.arrowSize;\n let arrowBorderWidth = linkOptions.arrowBorderWidth;\n let arrowBorderColor = linkOptions.arrowBorderColor;\n\n const currentNodeHighlighted =\n this.highlightedNode &&\n (this.highlightedNode.id == link.source.id || this.highlightedNode.id == link.target.id);\n /** Highlight */\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** By Node Not Highlight */\n if (!currentNodeHighlighted) {\n const fadeOptions = linkFade({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowFadingMin: this.highlightSettings.highlightByNodeForArrowFadingMin,\n highlightForLinkFadingMin: this.highlightSettings.highlightByNodeForLinkFadingMin,\n });\n alpha = fadeOptions.alpha;\n arrowAlpha = fadeOptions.arrowAlpha;\n } else {\n const highlightOptions = linkHighlight({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowBorderColor: this.highlightSettings.highlightByNodeForArrowBorderColor,\n highlightForArrowBorderSizingAdditional:\n this.highlightSettings.highlightByNodeForArrowBorderSizingAdditional,\n highlightForArrowColor: this.highlightSettings.highlightByNodeForArrowColor,\n highlightForArrowSizeAdditional:\n this.highlightSettings.highlightByNodeForArrowSizeAdditional,\n highlightForLinkColor: this.highlightSettings.highlightByNodeForLinkColor,\n highlightForLinkSizeAdditional:\n this.highlightSettings.highlightByNodeForLinkSizeAdditional,\n });\n arrowAlpha = highlightOptions.arrowAlpha;\n color = highlightOptions.color;\n width = highlightOptions.width;\n arrowColor = highlightOptions.arrowColor;\n arrowSize = highlightOptions.arrowSize;\n arrowBorderWidth = highlightOptions.arrowBorderWidth;\n arrowBorderColor = highlightOptions.arrowBorderColor;\n }\n }\n\n const currentLinkHighlighted = this.highlightedLink === link;\n if (this.highlightedNeighbors && this.highlightedLink) {\n /** By Link Not Highlight */\n if (!currentLinkHighlighted) {\n const fadeOptions = linkFade({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowFadingMin: this.highlightSettings.highlightByLinkForArrowFadingMin,\n highlightForLinkFadingMin: this.highlightSettings.highlightByLinkForLinkFadingMin,\n });\n alpha = fadeOptions.alpha;\n arrowAlpha = fadeOptions.arrowAlpha;\n } else {\n /** By Link Highlight */\n const highlightOptions = linkHighlight({\n arrow: this.linkSettings.arrow,\n arrowByHighlight: this.linkSettings.arrowByHighlight,\n linkOptions,\n highlightProgress: this.highlightProgress,\n highlightForArrowBorderColor: this.highlightSettings.highlightByLinkForArrowBorderColor,\n highlightForArrowBorderSizingAdditional:\n this.highlightSettings.highlightByLinkForArrowBorderSizingAdditional,\n highlightForArrowColor: this.highlightSettings.highlightByLinkForArrowColor,\n highlightForArrowSizeAdditional:\n this.highlightSettings.highlightByLinkForArrowSizeAdditional,\n highlightForLinkColor: this.highlightSettings.highlightByLinkForLinkColor,\n highlightForLinkSizeAdditional:\n this.highlightSettings.highlightByLinkForLinkSizeAdditional,\n });\n arrowAlpha = highlightOptions.arrowAlpha;\n color = highlightOptions.color;\n width = highlightOptions.width;\n arrowColor = highlightOptions.arrowColor;\n arrowSize = highlightOptions.arrowSize;\n arrowBorderWidth = highlightOptions.arrowBorderWidth;\n arrowBorderColor = highlightOptions.arrowBorderColor;\n }\n }\n\n /** Link */\n this.context.beginPath();\n this.context.globalAlpha = alpha;\n this.context.strokeStyle = color;\n this.context.lineWidth = width;\n let xStart = link.source.x;\n let yStart = link.source.y;\n let xEnd = link.target.x;\n let yEnd = link.target.y;\n let xControl = 0;\n let yControl = 0;\n let xEndArrow = xEnd;\n let yEndArrow = yEnd;\n let linkDistance = 0;\n const isHasArrow = this.linkSettings.arrow && arrowAlpha > 0;\n if (!this.linkSettings.curve) {\n if (\n this.linkSettings.prettyDraw ||\n (this.linkSettings.arrow && arrowAlpha > 0) ||\n (this.particles && (currentNodeHighlighted || currentLinkHighlighted))\n ) {\n const position = calculateLinkPositionByNode(\n xStart,\n yStart,\n xEnd,\n yEnd,\n link.source,\n link.target,\n isHasArrow ? arrowSize : 0,\n );\n\n xStart = position.xStart;\n xEnd = position.xEnd;\n yStart = position.yStart;\n yEnd = position.yEnd;\n xEndArrow = position.xEndArrow;\n yEndArrow = position.yEndArrow;\n linkDistance = position.distance;\n }\n link._x1 = xStart;\n link._y1 = yStart;\n link._x2 = xEnd;\n link._y2 = yEnd;\n link._ax = xEndArrow;\n link._ay = yEndArrow;\n this.context.moveTo(xStart, yStart);\n this.context.lineTo(xEnd, yEnd);\n this.context.stroke();\n } else {\n const position = calculateCurveLinkPositionByNode(\n xStart,\n yStart,\n xEnd,\n yEnd,\n link.source,\n link.target,\n link._groupIndex ?? 0,\n isHasArrow ? arrowSize : 0,\n );\n xStart = position.xStart;\n yStart = position.yStart;\n xEnd = position.xEnd;\n yEnd = position.yEnd;\n xControl = position.xControl;\n yControl = position.yControl;\n xEndArrow = position.xEndArrow;\n yEndArrow = position.yEndArrow;\n link._x1 = position.xStart;\n link._y1 = position.yStart;\n link._x2 = position.xEnd;\n link._y2 = position.yEnd;\n link._cx = position.xControl;\n link._cy = position.yControl;\n link._ax = position.xEndArrow;\n link._ay = position.yEndArrow;\n linkDistance = approximateQuadraticBezierLength(\n position.xStart,\n position.yStart,\n position.xControl,\n position.yControl,\n position.xEnd,\n position.yEnd,\n );\n this.context.beginPath();\n this.context.moveTo(position.xStart, position.yStart);\n this.context.quadraticCurveTo(\n position.xControl,\n position.yControl,\n position.xEnd,\n position.yEnd,\n );\n this.context.setLineDash([]);\n // if (isDashed) {\n // this.context.setLineDash([10, 5]);\n // }\n this.context.stroke();\n }\n\n /** Particle */\n if (this.linkSettings.particles && (currentLinkHighlighted || currentNodeHighlighted)) {\n const speed = (1 / this.linkSettings.particleSpeedByDistance) * (1 + 0.5);\n if (!this.particles[index]) {\n const particleCount = Math.max(\n 1,\n Math.floor(linkDistance / this.linkSettings.particleCountByDistance),\n );\n const particles: LinkParticle[] = [];\n for (let i = 0; i < particleCount; i++) {\n const particle: LinkParticle = {\n index: i,\n };\n particles.push(particle);\n }\n this.particles[index] = particles;\n }\n this.particles[index].forEach((particle, _, particles) => {\n if (!this.context) return;\n getParticlePosition({\n distance: linkDistance,\n particle,\n totalCount: particles.length,\n xEnd,\n xStart,\n yEnd,\n yStart,\n xControl,\n yControl,\n speed,\n });\n if (particle.x != undefined && particle.y != undefined) {\n this.context.beginPath();\n this.context.strokeStyle = linkOptions.particleBorderColor;\n this.context.lineWidth = linkOptions.particleBorderWidth;\n this.context.arc(particle.x, particle.y, linkOptions.particleRadius, 0, Math.PI * 2);\n this.context.fillStyle = linkOptions.particleColor;\n this.context.fill();\n if (linkOptions.particleBorderWidth > 0) {\n this.context.stroke();\n }\n }\n });\n }\n\n /** Arrow */\n if (this.linkSettings.arrow && arrowAlpha > 0) {\n let angle = 0;\n if (!this.linkSettings.curve) {\n angle = Math.atan2(yEndArrow - yStart, xEndArrow - xStart);\n } else {\n const tangentX = 2 * (xEndArrow - xControl);\n const tangentY = 2 * (yEndArrow - yControl);\n if (Math.abs(tangentX) < 0.001 && Math.abs(tangentY) < 0.001) {\n angle = Math.atan2(yEndArrow - yControl, xEndArrow - xControl);\n } else {\n angle = Math.atan2(tangentY, tangentX);\n }\n }\n this.context.beginPath();\n this.context.globalAlpha = arrowAlpha;\n this.context.strokeStyle = arrowBorderColor;\n this.context.lineWidth = arrowBorderWidth;\n this.context.fillStyle = arrowColor;\n this.context.moveTo(xEndArrow, yEndArrow);\n this.context.lineTo(\n xEndArrow - arrowSize * Math.cos(angle - Math.PI / 6),\n yEndArrow - arrowSize * Math.sin(angle - Math.PI / 6),\n );\n this.context.lineTo(\n xEndArrow - arrowSize * Math.cos(angle + Math.PI / 6),\n yEndArrow - arrowSize * Math.sin(angle + Math.PI / 6),\n );\n this.context.closePath();\n this.context.fill();\n if (arrowBorderWidth > 0) {\n this.context.stroke();\n }\n }\n\n if (linkOptions.drawExtraLink) {\n linkOptions.drawExtraLink.call(this, link, { ...linkOptions, alpha });\n }\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;SAMgB,WAAW,GAAA;AAIzB,IAAA,OAAO,SAAS,QAAQ,CAEtB,IAAuC,EACvC,KAAa,EAAA;QAEb,IACE,CAAC,IAAI,CAAC,OAAO;AACb,YAAA,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;AAC/B,YAAA,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;AAC/B,YAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACd,YAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACd,YAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACd,YAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEd;QAEF,IACE,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO;AAC3C,aAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1D,aAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAE1D;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE;QAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAChD,QAAA,IAAI,CAAC,WAAW;YAAE;AAElB,QAAA,IAAI,WAAW,CAAC,QAAQ,EAAE;YACxB,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;YAElD;;AAGF,QAAA,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK;AAC7B,QAAA,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK;AAC7B,QAAA,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK;AAC7B,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,CAAC,GAAG,WAAW,CAAC,UAAU;AAChF,QAAA,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU;AACvC,QAAA,IAAI,SAAS,GAAG,WAAW,CAAC,SAAS;AACrC,QAAA,IAAI,gBAAgB,GAAG,WAAW,CAAC,gBAAgB;AACnD,QAAA,IAAI,gBAAgB,GAAG,WAAW,CAAC,gBAAgB;AAEnD,QAAA,MAAM,sBAAsB,GAC1B,IAAI,CAAC,eAAe;aACnB,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;;QAE1F,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,EAAE;;YAErD,IAAI,CAAC,sBAAsB,EAAE;gBAC3B,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC3B,oBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AAC9B,oBAAA,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB;oBACpD,WAAW;oBACX,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,oBAAA,0BAA0B,EAAE,IAAI,CAAC,iBAAiB,CAAC,gCAAgC;AACnF,oBAAA,yBAAyB,EAAE,IAAI,CAAC,iBAAiB,CAAC,+BAA+B;AAClF,iBAAA,CAAC;AACF,gBAAA,KAAK,GAAG,WAAW,CAAC,KAAK;AACzB,gBAAA,UAAU,GAAG,WAAW,CAAC,UAAU;;iBAC9B;gBACL,MAAM,gBAAgB,GAAG,aAAa,CAAC;AACrC,oBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AAC9B,oBAAA,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB;oBACpD,WAAW;oBACX,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,oBAAA,4BAA4B,EAAE,IAAI,CAAC,iBAAiB,CAAC,kCAAkC;AACvF,oBAAA,uCAAuC,EACrC,IAAI,CAAC,iBAAiB,CAAC,6CAA6C;AACtE,oBAAA,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,CAAC,4BAA4B;AAC3E,oBAAA,+BAA+B,EAC7B,IAAI,CAAC,iBAAiB,CAAC,qCAAqC;AAC9D,oBAAA,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,2BAA2B;AACzE,oBAAA,8BAA8B,EAC5B,IAAI,CAAC,iBAAiB,CAAC,oCAAoC;AAC9D,iBAAA,CAAC;AACF,gBAAA,UAAU,GAAG,gBAAgB,CAAC,UAAU;AACxC,gBAAA,KAAK,GAAG,gBAAgB,CAAC,KAAK;AAC9B,gBAAA,KAAK,GAAG,gBAAgB,CAAC,KAAK;AAC9B,gBAAA,UAAU,GAAG,gBAAgB,CAAC,UAAU;AACxC,gBAAA,SAAS,GAAG,gBAAgB,CAAC,SAAS;AACtC,gBAAA,gBAAgB,GAAG,gBAAgB,CAAC,gBAAgB;AACpD,gBAAA,gBAAgB,GAAG,gBAAgB,CAAC,gBAAgB;;;AAIxD,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,eAAe,KAAK,IAAI;QAC5D,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,EAAE;;YAErD,IAAI,CAAC,sBAAsB,EAAE;gBAC3B,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC3B,oBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AAC9B,oBAAA,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB;oBACpD,WAAW;oBACX,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,oBAAA,0BAA0B,EAAE,IAAI,CAAC,iBAAiB,CAAC,gCAAgC;AACnF,oBAAA,yBAAyB,EAAE,IAAI,CAAC,iBAAiB,CAAC,+BAA+B;AAClF,iBAAA,CAAC;AACF,gBAAA,KAAK,GAAG,WAAW,CAAC,KAAK;AACzB,gBAAA,UAAU,GAAG,WAAW,CAAC,UAAU;;iBAC9B;;gBAEL,MAAM,gBAAgB,GAAG,aAAa,CAAC;AACrC,oBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AAC9B,oBAAA,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB;oBACpD,WAAW;oBACX,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,oBAAA,4BAA4B,EAAE,IAAI,CAAC,iBAAiB,CAAC,kCAAkC;AACvF,oBAAA,uCAAuC,EACrC,IAAI,CAAC,iBAAiB,CAAC,6CAA6C;AACtE,oBAAA,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,CAAC,4BAA4B;AAC3E,oBAAA,+BAA+B,EAC7B,IAAI,CAAC,iBAAiB,CAAC,qCAAqC;AAC9D,oBAAA,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,2BAA2B;AACzE,oBAAA,8BAA8B,EAC5B,IAAI,CAAC,iBAAiB,CAAC,oCAAoC;AAC9D,iBAAA,CAAC;AACF,gBAAA,UAAU,GAAG,gBAAgB,CAAC,UAAU;AACxC,gBAAA,KAAK,GAAG,gBAAgB,CAAC,KAAK;AAC9B,gBAAA,KAAK,GAAG,gBAAgB,CAAC,KAAK;AAC9B,gBAAA,UAAU,GAAG,gBAAgB,CAAC,UAAU;AACxC,gBAAA,SAAS,GAAG,gBAAgB,CAAC,SAAS;AACtC,gBAAA,gBAAgB,GAAG,gBAAgB,CAAC,gBAAgB;AACpD,gBAAA,gBAAgB,GAAG,gBAAgB,CAAC,gBAAgB;;;;AAKxD,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK;AAC9B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,QAAQ,GAAG,CAAC;QAChB,IAAI,QAAQ,GAAG,CAAC;QAChB,IAAI,SAAS,GAAG,IAAI;QACpB,IAAI,SAAS,GAAG,IAAI;QACpB,IAAI,YAAY,GAAG,CAAC;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,UAAU,GAAG,CAAC;AAC5D,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC5B,YAAA,IACE,IAAI,CAAC,YAAY,CAAC,UAAU;iBAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC;iBAC1C,IAAI,CAAC,SAAS,KAAK,sBAAsB,IAAI,sBAAsB,CAAC,CAAC,EACtE;AACA,gBAAA,MAAM,QAAQ,GAAG,2BAA2B,CAC1C,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,UAAU,GAAG,SAAS,GAAG,CAAC,CAC3B;AAED,gBAAA,MAAM,GAAG,QAAQ,CAAC,MAAM;AACxB,gBAAA,IAAI,GAAG,QAAQ,CAAC,IAAI;AACpB,gBAAA,MAAM,GAAG,QAAQ,CAAC,MAAM;AACxB,gBAAA,IAAI,GAAG,QAAQ,CAAC,IAAI;AACpB,gBAAA,SAAS,GAAG,QAAQ,CAAC,SAAS;AAC9B,gBAAA,SAAS,GAAG,QAAQ,CAAC,SAAS;AAC9B,gBAAA,YAAY,GAAG,QAAQ,CAAC,QAAQ;;AAElC,YAAA,IAAI,CAAC,GAAG,GAAG,MAAM;AACjB,YAAA,IAAI,CAAC,GAAG,GAAG,MAAM;AACjB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,GAAG,GAAG,SAAS;AACpB,YAAA,IAAI,CAAC,GAAG,GAAG,SAAS;YACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;aAChB;AACL,YAAA,MAAM,QAAQ,GAAG,gCAAgC,CAC/C,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,IAAI,CAAC,EACrB,UAAU,GAAG,SAAS,GAAG,CAAC,CAC3B;AACD,YAAA,MAAM,GAAG,QAAQ,CAAC,MAAM;AACxB,YAAA,MAAM,GAAG,QAAQ,CAAC,MAAM;AACxB,YAAA,IAAI,GAAG,QAAQ,CAAC,IAAI;AACpB,YAAA,IAAI,GAAG,QAAQ,CAAC,IAAI;AACpB,YAAA,QAAQ,GAAG,QAAQ,CAAC,QAAQ;AAC5B,YAAA,QAAQ,GAAG,QAAQ,CAAC,QAAQ;AAC5B,YAAA,SAAS,GAAG,QAAQ,CAAC,SAAS;AAC9B,YAAA,SAAS,GAAG,QAAQ,CAAC,SAAS;AAC9B,YAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM;AAC1B,YAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM;AAC1B,YAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI;AACxB,YAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI;AACxB,YAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,QAAQ;AAC5B,YAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,QAAQ;AAC5B,YAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,SAAS;AAC7B,YAAA,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,SAAS;YAC7B,YAAY,GAAG,gCAAgC,CAC7C,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,IAAI,CACd;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAC3B,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,IAAI,CACd;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;;;;AAI5B,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;;AAIvB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,KAAK,sBAAsB,IAAI,sBAAsB,CAAC,EAAE;AACrF,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,KAAK,CAAC,GAAG,GAAG,CAAC;YACzE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;gBAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,CACrE;gBACD,MAAM,SAAS,GAAmB,EAAE;AACpC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;AACtC,oBAAA,MAAM,QAAQ,GAAiB;AAC7B,wBAAA,KAAK,EAAE,CAAC;qBACT;AACD,oBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAE1B,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS;;AAEnC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,KAAI;gBACvD,IAAI,CAAC,IAAI,CAAC,OAAO;oBAAE;AACnB,gBAAA,mBAAmB,CAAC;AAClB,oBAAA,QAAQ,EAAE,YAAY;oBACtB,QAAQ;oBACR,UAAU,EAAE,SAAS,CAAC,MAAM;oBAC5B,IAAI;oBACJ,MAAM;oBACN,IAAI;oBACJ,MAAM;oBACN,QAAQ;oBACR,QAAQ;oBACR,KAAK;AACN,iBAAA,CAAC;AACF,gBAAA,IAAI,QAAQ,CAAC,CAAC,IAAI,SAAS,IAAI,QAAQ,CAAC,CAAC,IAAI,SAAS,EAAE;AACtD,oBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;oBACxB,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,mBAAmB;oBAC1D,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,mBAAmB;oBACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACpF,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,aAAa;AAClD,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACnB,oBAAA,IAAI,WAAW,CAAC,mBAAmB,GAAG,CAAC,EAAE;AACvC,wBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;;AAG3B,aAAC,CAAC;;;QAIJ,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE;YAC7C,IAAI,KAAK,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC5B,gBAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;;iBACrD;gBACL,MAAM,QAAQ,GAAG,CAAC,IAAI,SAAS,GAAG,QAAQ,CAAC;gBAC3C,MAAM,QAAQ,GAAG,CAAC,IAAI,SAAS,GAAG,QAAQ,CAAC;AAC3C,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,EAAE;AAC5D,oBAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;;qBACzD;oBACL,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;;;AAG1C,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,UAAU;AACrC,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,gBAAgB;AAC3C,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,gBAAgB;AACzC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,UAAU;YACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC;AACzC,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CACjB,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EACrD,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CACtD;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CACjB,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EACrD,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CACtD;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACnB,YAAA,IAAI,gBAAgB,GAAG,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;;AAIzB,QAAA,IAAI,WAAW,CAAC,aAAa,EAAE;AAC7B,YAAA,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,CAAC;;AAEzE,KAAC;AACH;;;;"}
@@ -1,11 +1,16 @@
1
1
  import { isNumber } from '@krainovsd/js-helpers';
2
+ import '../constants/force-settings.js';
3
+ import '../constants/graph-settings.js';
4
+ import '../constants/highlight-settings.js';
5
+ import '../constants/link-settings.js';
6
+ import '../constants/node-settings.js';
2
7
  import 'd3-array';
3
8
  import { isNodeVisible } from '../lib/utils/is-node-visible.js';
4
9
  import { nodeFade, nodeHighlight } from '../lib/utils/node-highlight.js';
5
10
  import { drawText } from './draw-text.js';
6
11
 
7
12
  function getDrawNode(nodeRenders, textRenders) {
8
- return function drawNode(node) {
13
+ return function drawNode(node, index) {
9
14
  if (!this.context || !node.x || !node.y)
10
15
  return;
11
16
  if (node.visible != undefined && !node.visible) {
@@ -14,7 +19,7 @@ function getDrawNode(nodeRenders, textRenders) {
14
19
  node._height = 0;
15
20
  return;
16
21
  }
17
- const nodeOptions = this.nodeOptionsCache[node.id];
22
+ const nodeOptions = this.nodeOptionsCache[index];
18
23
  if (!nodeOptions)
19
24
  return;
20
25
  if (nodeOptions.nodeDraw && nodeOptions.textDraw) {
@@ -173,7 +178,7 @@ function getDrawNode(nodeRenders, textRenders) {
173
178
  this.context.lineWidth = borderWidth;
174
179
  this.context.strokeStyle = borderColor;
175
180
  this.context.fillStyle = color;
176
- const labelLines = this.cachedNodeLabel[node.id];
181
+ const labelLines = this.cachedNodeLabel[index];
177
182
  switch (nodeOptions.shape) {
178
183
  case "circle": {
179
184
  if (!node.image) {
@@ -299,7 +304,7 @@ function getDrawNode(nodeRenders, textRenders) {
299
304
  });
300
305
  }
301
306
  /** Text draw */
302
- const textLines = this.cachedNodeText[node.id];
307
+ const textLines = this.cachedNodeText[index];
303
308
  if (nodeOptions.textVisible && nodeOptions.text && textLines) {
304
309
  textRenders.push(() => {
305
310
  if (nodeOptions.textDraw) {
@@ -1 +1 @@
1
- {"version":3,"file":"draw-nodes.js","sources":["../../../../../src/module/GraphCanvas/slices/draw-nodes.ts"],"sourcesContent":["import { isNumber } from \"@krainovsd/js-helpers\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport { isNodeVisible, nodeFade, nodeHighlight } from \"../lib\";\nimport type { NodeInterface } from \"../types\";\nimport { drawText } from \"./draw-text\";\n\nexport function getDrawNode<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(nodeRenders: (() => void)[], textRenders: (() => void)[]) {\n return function drawNode(this: GraphCanvas<NodeData, LinkData>, node: NodeInterface<NodeData>) {\n if (!this.context || !node.x || !node.y) return;\n if (node.visible != undefined && !node.visible) {\n node._radius = 0;\n node._width = 0;\n node._height = 0;\n\n return;\n }\n\n const nodeOptions = this.nodeOptionsCache[node.id];\n if (!nodeOptions) return;\n\n if (nodeOptions.nodeDraw && nodeOptions.textDraw) {\n nodeRenders.push(() => {\n if (nodeOptions.nodeDraw) {\n nodeOptions.nodeDraw.bind(this)(node, nodeOptions);\n }\n });\n\n textRenders.push(() => {\n if (nodeOptions.textDraw) {\n nodeOptions.textDraw.bind(this)(node, nodeOptions);\n }\n });\n\n return;\n }\n\n let radius = nodeOptions.radius;\n let width = nodeOptions.width;\n let height = nodeOptions.height;\n let alpha = nodeOptions.alpha;\n let color = nodeOptions.color;\n let borderColor = nodeOptions.borderColor;\n let borderWidth = nodeOptions.borderWidth;\n let textAlpha = nodeOptions.textAlpha;\n let textSize = nodeOptions.textSize;\n let textShiftX = nodeOptions.textShiftX;\n let textShiftY = nodeOptions.textShiftY;\n let textWeight = nodeOptions.textWeight;\n let labelSize = nodeOptions.labelSize;\n let labelWeight = nodeOptions.labelWeight;\n let labelAlpha = nodeOptions.labelAlpha;\n /** Highlight */\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** By Node Not Highlight */\n if (!this.highlightedNeighbors.has(node.id) && this.highlightedNode.id != node.id) {\n const fadingOptions = nodeFade({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelFadingMin: this.highlightSettings.highlightByNodeForLabelFadingMin,\n highlightForNodeColorFading: this.highlightSettings.highlightByNodeForNodeColorFading,\n highlightForNodeFadingMin: this.highlightSettings.highlightByNodeForNodeFadingMin,\n highlightForTextFadingMin: this.highlightSettings.highlightByNodeForTextFadingMin,\n });\n alpha = fadingOptions.alpha;\n color = fadingOptions.color;\n textAlpha = fadingOptions.textAlpha;\n labelAlpha = fadingOptions.labelAlpha;\n } else if (\n !this.highlightSettings.highlightByNodeOnlyRoot ||\n (this.highlightSettings.highlightByNodeOnlyRoot && this.highlightedNode.id === node.id)\n ) {\n /** By Node Highlight */\n const highlightOptions = nodeHighlight({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelSizingAdditional:\n this.highlightSettings.highlightByNodeForLabelSizingAdditional,\n highlightForLabelWeightAdditional:\n this.highlightSettings.highlightByNodeForLabelWeightAdditional,\n highlightForNodeBorderColor: this.highlightSettings.highlightByNodeForNodeBorderColor,\n highlightForNodeBorderSizingAdditional:\n this.highlightSettings.highlightByNodeForNodeBorderSizingAdditional,\n highlightForNodeColor: this.highlightSettings.highlightByNodeForNodeColor,\n highlightForNodeSizingAdditional:\n this.highlightSettings.highlightByNodeForNodeSizingAdditional,\n highlightForNodeSizingAdditionalCoefficient:\n this.highlightSettings.highlightByNodeForNodeSizingAdditionalCoefficient,\n highlightForTextShiftXAdditional:\n this.highlightSettings.highlightByNodeForTextShiftXAdditional,\n highlightForTextShiftYAdditional:\n this.highlightSettings.highlightByNodeForTextShiftYAdditional,\n highlightForTextSizingAdditional:\n this.highlightSettings.highlightByNodeForTextSizingAdditional,\n highlightForTextWeightAdditional:\n this.highlightSettings.highlightByNodeForTextWeightAdditional,\n });\n color = highlightOptions.color;\n borderColor = highlightOptions.borderColor;\n borderWidth = highlightOptions.borderWidth;\n radius = highlightOptions.radiusInitial;\n width = highlightOptions.widthInitial;\n height = highlightOptions.heightInitial;\n textSize = highlightOptions.textSize;\n textShiftX = highlightOptions.textShiftX;\n textShiftY = highlightOptions.textShiftY;\n textWeight = highlightOptions.textWeight;\n labelSize = highlightOptions.labelSize;\n labelWeight = highlightOptions.labelWeight;\n }\n }\n if (this.highlightedNeighbors && this.highlightedLink) {\n /** By Link Not Highlight */\n if (\n !this.highlightedNeighbors.has(node.id) &&\n this.highlightedLink.source !== node &&\n this.highlightedLink.target !== node\n ) {\n const fadingOptions = nodeFade({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelFadingMin: this.highlightSettings.highlightByLinkForLabelFadingMin,\n highlightForNodeColorFading: this.highlightSettings.highlightByLinkForNodeColorFading,\n highlightForNodeFadingMin: this.highlightSettings.highlightByLinkForNodeFadingMin,\n highlightForTextFadingMin: this.highlightSettings.highlightByLinkForTextFadingMin,\n });\n alpha = fadingOptions.alpha;\n color = fadingOptions.color;\n textAlpha = fadingOptions.textAlpha;\n labelAlpha = fadingOptions.labelAlpha;\n } else {\n /** By Link Highlight */\n\n const highlightOptions = nodeHighlight({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelSizingAdditional:\n this.highlightSettings.highlightByLinkForLabelSizingAdditional,\n highlightForLabelWeightAdditional:\n this.highlightSettings.highlightByLinkForLabelWeightAdditional,\n highlightForNodeBorderColor: this.highlightSettings.highlightByLinkForNodeBorderColor,\n highlightForNodeBorderSizingAdditional:\n this.highlightSettings.highlightByLinkForNodeBorderSizingAdditional,\n highlightForNodeColor: this.highlightSettings.highlightByLinkForNodeColor,\n highlightForNodeSizingAdditional:\n this.highlightSettings.highlightByLinkForNodeSizingAdditional,\n highlightForNodeSizingAdditionalCoefficient:\n this.highlightSettings.highlightByLinkForNodeSizingAdditionalCoefficient,\n highlightForTextShiftXAdditional:\n this.highlightSettings.highlightByLinkForTextShiftXAdditional,\n highlightForTextShiftYAdditional:\n this.highlightSettings.highlightByLinkForTextShiftYAdditional,\n highlightForTextSizingAdditional:\n this.highlightSettings.highlightByLinkForTextSizingAdditional,\n highlightForTextWeightAdditional:\n this.highlightSettings.highlightByLinkForTextWeightAdditional,\n });\n color = highlightOptions.color;\n borderColor = highlightOptions.borderColor;\n borderWidth = highlightOptions.borderWidth;\n radius = highlightOptions.radiusInitial;\n width = highlightOptions.widthInitial;\n height = highlightOptions.heightInitial;\n textSize = highlightOptions.textSize;\n textShiftX = highlightOptions.textShiftX;\n textShiftY = highlightOptions.textShiftY;\n textWeight = highlightOptions.textWeight;\n labelSize = highlightOptions.labelSize;\n labelWeight = highlightOptions.labelWeight;\n }\n }\n\n /** Node parameters */\n node._radius = radius;\n node._borderWidth = borderWidth;\n node._width = width;\n node._height = height;\n node._borderRadius =\n isNumber(nodeOptions.borderRadius) && nodeOptions.borderRadius > 0\n ? Math.min(nodeOptions.borderRadius, nodeOptions.width / 2, nodeOptions.height / 2)\n : 0;\n node._shape = nodeOptions.shape ?? \"circle\";\n\n /** Node Visibility */\n if (\n !isNodeVisible({\n height: this.height,\n width: this.width,\n transform: this.areaTransform,\n node,\n })\n ) {\n node._visible = false;\n\n return;\n }\n node._visible = true;\n\n /** Node draw */\n nodeRenders.push(() => {\n if (!this.context || !node.x || !node.y) return;\n\n this.context.beginPath();\n this.context.globalAlpha = alpha;\n this.context.lineWidth = borderWidth;\n this.context.strokeStyle = borderColor;\n this.context.fillStyle = color;\n const labelLines = this.cachedNodeLabel[node.id];\n\n switch (nodeOptions.shape) {\n case \"circle\": {\n if (!node.image) {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n } else {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.closePath();\n this.context.save();\n this.context.clip();\n\n this.context.drawImage(\n node.image,\n node.x - radius,\n node.y - radius,\n radius * 2,\n radius * 2,\n );\n\n this.context.restore();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n }\n\n if (node.label && labelLines) {\n this.context.globalAlpha = labelAlpha;\n drawText({\n context: this.context,\n lines: labelLines,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textGap: nodeOptions.labelGap,\n textSize: labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: labelWeight,\n x: node.x,\n y: node.y + labelSize / 3,\n });\n }\n\n break;\n }\n case \"square\": {\n if (!node.image) {\n this.context.roundRect(\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n node._borderRadius,\n );\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n } else {\n this.context.roundRect(\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n node._borderRadius,\n );\n this.context.closePath();\n this.context.save();\n this.context.clip();\n this.context.drawImage(\n node.image,\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n );\n this.context.restore();\n\n if (borderWidth > 0) {\n this.context.stroke();\n }\n }\n if (node.label && labelLines) {\n this.context.globalAlpha = labelAlpha;\n drawText({\n context: this.context,\n lines: labelLines,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textGap: nodeOptions.labelGap,\n textSize: labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: labelWeight,\n x: node.x,\n y: node.y + labelSize / 3,\n });\n }\n break;\n }\n case \"text\": {\n if (this.nodeSettings.textNodeDebug) {\n this.context.strokeRect(node.x - width / 2, node.y - height / 2, width, height);\n }\n\n if (nodeOptions.label && labelLines)\n drawText({\n lines: labelLines,\n context: this.context,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: labelSize,\n x: node.x,\n y: node.y + textSize / 4 - (labelLines.length - 1) * (textSize / 2),\n textStyle: nodeOptions.labelStyle,\n textWeight,\n textGap: nodeOptions.labelGap,\n });\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n break;\n }\n default: {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n break;\n }\n }\n });\n\n if (nodeOptions.nodeExtraDraw) {\n nodeRenders.push(() => {\n nodeOptions?.nodeExtraDraw?.bind?.(this)?.(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n });\n }\n\n /** Text draw */\n const textLines = this.cachedNodeText[node.id];\n if (nodeOptions.textVisible && nodeOptions.text && textLines) {\n textRenders.push(() => {\n if (nodeOptions.textDraw) {\n nodeOptions.textDraw.bind(this)(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n\n return;\n }\n\n if (!this.context || !node.x || !node.y || !nodeOptions.text) return;\n this.context.beginPath();\n this.context.globalAlpha = textAlpha;\n\n let y = node.y + textShiftY;\n if (nodeOptions.shape === \"circle\") {\n y += radius;\n }\n if (nodeOptions.shape === \"square\" || nodeOptions.shape === \"text\") {\n y += height / 2;\n }\n\n drawText({\n lines: textLines,\n context: this.context,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize,\n x: node.x + textShiftX,\n y,\n textStyle: nodeOptions.textStyle,\n textWeight,\n textGap: nodeOptions.textGap,\n });\n\n if (nodeOptions.textExtraDraw) {\n nodeOptions.textExtraDraw.bind(this)(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n }\n });\n }\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"draw-nodes.js","sources":["../../../../../src/module/GraphCanvas/slices/draw-nodes.ts"],"sourcesContent":["import { isNumber } from \"@krainovsd/js-helpers\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\nimport { isNodeVisible, nodeFade, nodeHighlight } from \"../lib\";\nimport type { NodeInterface } from \"../types\";\nimport { drawText } from \"./draw-text\";\n\nexport function getDrawNode<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(nodeRenders: (() => void)[], textRenders: (() => void)[]) {\n return function drawNode(\n this: GraphCanvas<NodeData, LinkData>,\n node: NodeInterface<NodeData>,\n index: number,\n ) {\n if (!this.context || !node.x || !node.y) return;\n if (node.visible != undefined && !node.visible) {\n node._radius = 0;\n node._width = 0;\n node._height = 0;\n\n return;\n }\n\n const nodeOptions = this.nodeOptionsCache[index];\n if (!nodeOptions) return;\n\n if (nodeOptions.nodeDraw && nodeOptions.textDraw) {\n nodeRenders.push(() => {\n if (nodeOptions.nodeDraw) {\n nodeOptions.nodeDraw.bind(this)(node, nodeOptions);\n }\n });\n\n textRenders.push(() => {\n if (nodeOptions.textDraw) {\n nodeOptions.textDraw.bind(this)(node, nodeOptions);\n }\n });\n\n return;\n }\n\n let radius = nodeOptions.radius;\n let width = nodeOptions.width;\n let height = nodeOptions.height;\n let alpha = nodeOptions.alpha;\n let color = nodeOptions.color;\n let borderColor = nodeOptions.borderColor;\n let borderWidth = nodeOptions.borderWidth;\n let textAlpha = nodeOptions.textAlpha;\n let textSize = nodeOptions.textSize;\n let textShiftX = nodeOptions.textShiftX;\n let textShiftY = nodeOptions.textShiftY;\n let textWeight = nodeOptions.textWeight;\n let labelSize = nodeOptions.labelSize;\n let labelWeight = nodeOptions.labelWeight;\n let labelAlpha = nodeOptions.labelAlpha;\n /** Highlight */\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** By Node Not Highlight */\n if (!this.highlightedNeighbors.has(node.id) && this.highlightedNode.id != node.id) {\n const fadingOptions = nodeFade({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelFadingMin: this.highlightSettings.highlightByNodeForLabelFadingMin,\n highlightForNodeColorFading: this.highlightSettings.highlightByNodeForNodeColorFading,\n highlightForNodeFadingMin: this.highlightSettings.highlightByNodeForNodeFadingMin,\n highlightForTextFadingMin: this.highlightSettings.highlightByNodeForTextFadingMin,\n });\n alpha = fadingOptions.alpha;\n color = fadingOptions.color;\n textAlpha = fadingOptions.textAlpha;\n labelAlpha = fadingOptions.labelAlpha;\n } else if (\n !this.highlightSettings.highlightByNodeOnlyRoot ||\n (this.highlightSettings.highlightByNodeOnlyRoot && this.highlightedNode.id === node.id)\n ) {\n /** By Node Highlight */\n const highlightOptions = nodeHighlight({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelSizingAdditional:\n this.highlightSettings.highlightByNodeForLabelSizingAdditional,\n highlightForLabelWeightAdditional:\n this.highlightSettings.highlightByNodeForLabelWeightAdditional,\n highlightForNodeBorderColor: this.highlightSettings.highlightByNodeForNodeBorderColor,\n highlightForNodeBorderSizingAdditional:\n this.highlightSettings.highlightByNodeForNodeBorderSizingAdditional,\n highlightForNodeColor: this.highlightSettings.highlightByNodeForNodeColor,\n highlightForNodeSizingAdditional:\n this.highlightSettings.highlightByNodeForNodeSizingAdditional,\n highlightForNodeSizingAdditionalCoefficient:\n this.highlightSettings.highlightByNodeForNodeSizingAdditionalCoefficient,\n highlightForTextShiftXAdditional:\n this.highlightSettings.highlightByNodeForTextShiftXAdditional,\n highlightForTextShiftYAdditional:\n this.highlightSettings.highlightByNodeForTextShiftYAdditional,\n highlightForTextSizingAdditional:\n this.highlightSettings.highlightByNodeForTextSizingAdditional,\n highlightForTextWeightAdditional:\n this.highlightSettings.highlightByNodeForTextWeightAdditional,\n });\n color = highlightOptions.color;\n borderColor = highlightOptions.borderColor;\n borderWidth = highlightOptions.borderWidth;\n radius = highlightOptions.radiusInitial;\n width = highlightOptions.widthInitial;\n height = highlightOptions.heightInitial;\n textSize = highlightOptions.textSize;\n textShiftX = highlightOptions.textShiftX;\n textShiftY = highlightOptions.textShiftY;\n textWeight = highlightOptions.textWeight;\n labelSize = highlightOptions.labelSize;\n labelWeight = highlightOptions.labelWeight;\n }\n }\n if (this.highlightedNeighbors && this.highlightedLink) {\n /** By Link Not Highlight */\n if (\n !this.highlightedNeighbors.has(node.id) &&\n this.highlightedLink.source !== node &&\n this.highlightedLink.target !== node\n ) {\n const fadingOptions = nodeFade({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelFadingMin: this.highlightSettings.highlightByLinkForLabelFadingMin,\n highlightForNodeColorFading: this.highlightSettings.highlightByLinkForNodeColorFading,\n highlightForNodeFadingMin: this.highlightSettings.highlightByLinkForNodeFadingMin,\n highlightForTextFadingMin: this.highlightSettings.highlightByLinkForTextFadingMin,\n });\n alpha = fadingOptions.alpha;\n color = fadingOptions.color;\n textAlpha = fadingOptions.textAlpha;\n labelAlpha = fadingOptions.labelAlpha;\n } else {\n /** By Link Highlight */\n\n const highlightOptions = nodeHighlight({\n highlightProgress: this.highlightProgress,\n nodeOptions,\n highlightForLabelSizingAdditional:\n this.highlightSettings.highlightByLinkForLabelSizingAdditional,\n highlightForLabelWeightAdditional:\n this.highlightSettings.highlightByLinkForLabelWeightAdditional,\n highlightForNodeBorderColor: this.highlightSettings.highlightByLinkForNodeBorderColor,\n highlightForNodeBorderSizingAdditional:\n this.highlightSettings.highlightByLinkForNodeBorderSizingAdditional,\n highlightForNodeColor: this.highlightSettings.highlightByLinkForNodeColor,\n highlightForNodeSizingAdditional:\n this.highlightSettings.highlightByLinkForNodeSizingAdditional,\n highlightForNodeSizingAdditionalCoefficient:\n this.highlightSettings.highlightByLinkForNodeSizingAdditionalCoefficient,\n highlightForTextShiftXAdditional:\n this.highlightSettings.highlightByLinkForTextShiftXAdditional,\n highlightForTextShiftYAdditional:\n this.highlightSettings.highlightByLinkForTextShiftYAdditional,\n highlightForTextSizingAdditional:\n this.highlightSettings.highlightByLinkForTextSizingAdditional,\n highlightForTextWeightAdditional:\n this.highlightSettings.highlightByLinkForTextWeightAdditional,\n });\n color = highlightOptions.color;\n borderColor = highlightOptions.borderColor;\n borderWidth = highlightOptions.borderWidth;\n radius = highlightOptions.radiusInitial;\n width = highlightOptions.widthInitial;\n height = highlightOptions.heightInitial;\n textSize = highlightOptions.textSize;\n textShiftX = highlightOptions.textShiftX;\n textShiftY = highlightOptions.textShiftY;\n textWeight = highlightOptions.textWeight;\n labelSize = highlightOptions.labelSize;\n labelWeight = highlightOptions.labelWeight;\n }\n }\n\n /** Node parameters */\n node._radius = radius;\n node._borderWidth = borderWidth;\n node._width = width;\n node._height = height;\n node._borderRadius =\n isNumber(nodeOptions.borderRadius) && nodeOptions.borderRadius > 0\n ? Math.min(nodeOptions.borderRadius, nodeOptions.width / 2, nodeOptions.height / 2)\n : 0;\n node._shape = nodeOptions.shape ?? \"circle\";\n\n /** Node Visibility */\n if (\n !isNodeVisible({\n height: this.height,\n width: this.width,\n transform: this.areaTransform,\n node,\n })\n ) {\n node._visible = false;\n\n return;\n }\n node._visible = true;\n\n /** Node draw */\n nodeRenders.push(() => {\n if (!this.context || !node.x || !node.y) return;\n\n this.context.beginPath();\n this.context.globalAlpha = alpha;\n this.context.lineWidth = borderWidth;\n this.context.strokeStyle = borderColor;\n this.context.fillStyle = color;\n const labelLines = this.cachedNodeLabel[index];\n\n switch (nodeOptions.shape) {\n case \"circle\": {\n if (!node.image) {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n } else {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.closePath();\n this.context.save();\n this.context.clip();\n\n this.context.drawImage(\n node.image,\n node.x - radius,\n node.y - radius,\n radius * 2,\n radius * 2,\n );\n\n this.context.restore();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n }\n\n if (node.label && labelLines) {\n this.context.globalAlpha = labelAlpha;\n drawText({\n context: this.context,\n lines: labelLines,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textGap: nodeOptions.labelGap,\n textSize: labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: labelWeight,\n x: node.x,\n y: node.y + labelSize / 3,\n });\n }\n\n break;\n }\n case \"square\": {\n if (!node.image) {\n this.context.roundRect(\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n node._borderRadius,\n );\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n } else {\n this.context.roundRect(\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n node._borderRadius,\n );\n this.context.closePath();\n this.context.save();\n this.context.clip();\n this.context.drawImage(\n node.image,\n node.x - width / 2,\n node.y - height / 2,\n width,\n height,\n );\n this.context.restore();\n\n if (borderWidth > 0) {\n this.context.stroke();\n }\n }\n if (node.label && labelLines) {\n this.context.globalAlpha = labelAlpha;\n drawText({\n context: this.context,\n lines: labelLines,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textGap: nodeOptions.labelGap,\n textSize: labelSize,\n textStyle: nodeOptions.labelStyle,\n textWeight: labelWeight,\n x: node.x,\n y: node.y + labelSize / 3,\n });\n }\n break;\n }\n case \"text\": {\n if (this.nodeSettings.textNodeDebug) {\n this.context.strokeRect(node.x - width / 2, node.y - height / 2, width, height);\n }\n\n if (nodeOptions.label && labelLines)\n drawText({\n lines: labelLines,\n context: this.context,\n textAlign: nodeOptions.labelAlign,\n textColor: nodeOptions.labelColor,\n textFont: nodeOptions.labelFont,\n textSize: labelSize,\n x: node.x,\n y: node.y + textSize / 4 - (labelLines.length - 1) * (textSize / 2),\n textStyle: nodeOptions.labelStyle,\n textWeight,\n textGap: nodeOptions.labelGap,\n });\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n break;\n }\n default: {\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n this.context.fill();\n if (borderWidth > 0) {\n this.context.stroke();\n }\n break;\n }\n }\n });\n\n if (nodeOptions.nodeExtraDraw) {\n nodeRenders.push(() => {\n nodeOptions?.nodeExtraDraw?.bind?.(this)?.(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n });\n }\n\n /** Text draw */\n const textLines = this.cachedNodeText[index];\n if (nodeOptions.textVisible && nodeOptions.text && textLines) {\n textRenders.push(() => {\n if (nodeOptions.textDraw) {\n nodeOptions.textDraw.bind(this)(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n\n return;\n }\n\n if (!this.context || !node.x || !node.y || !nodeOptions.text) return;\n this.context.beginPath();\n this.context.globalAlpha = textAlpha;\n\n let y = node.y + textShiftY;\n if (nodeOptions.shape === \"circle\") {\n y += radius;\n }\n if (nodeOptions.shape === \"square\" || nodeOptions.shape === \"text\") {\n y += height / 2;\n }\n\n drawText({\n lines: textLines,\n context: this.context,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize,\n x: node.x + textShiftX,\n y,\n textStyle: nodeOptions.textStyle,\n textWeight,\n textGap: nodeOptions.textGap,\n });\n\n if (nodeOptions.textExtraDraw) {\n nodeOptions.textExtraDraw.bind(this)(node, {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n });\n }\n });\n }\n };\n}\n"],"names":[],"mappings":"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"}
@@ -19,11 +19,11 @@ function initArea() {
19
19
  if (!this.area)
20
20
  throw new Error("couldn't create canvas");
21
21
  this.container.appendChild(this.area);
22
- this.areaRect = this.area.getBoundingClientRect();
23
22
  this.context = this.area.getContext("2d");
24
23
  if (!this.context)
25
24
  throw new Error("couldn't create canvas context");
26
25
  this.context.scale(this.dpi, this.dpi);
26
+ this.updateRect();
27
27
  }
28
28
  }
29
29
 
@@ -1 +1 @@
1
- {"version":3,"file":"init-area.js","sources":["../../../../../src/module/GraphCanvas/slices/init-area.ts"],"sourcesContent":["import { create as d3Create } from \"d3-selection\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\n\nexport function initArea<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.area || !this.context || !this.container) {\n this.container = d3Create(\"div\")\n .attr(\"style\", \"padding: 0 !important; width: 100%; height: 100%;\")\n .node();\n if (!this.container) throw new Error(\"couldn't create container\");\n this.root.appendChild(this.container);\n\n const { width, height } = this.root.getBoundingClientRect();\n this.width = width;\n this.height = height;\n\n this.area = d3Create(\"canvas\")\n .attr(\"width\", this.dpi * this.width)\n .attr(\"height\", this.dpi * this.height)\n .attr(\"style\", `width: 100%; height: 100%; border: none !important;`)\n .node();\n\n if (!this.area) throw new Error(\"couldn't create canvas\");\n this.container.appendChild(this.area);\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 }\n}\n"],"names":["d3Create"],"mappings":";;SAGgB,QAAQ,GAAA;AAItB,IAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAClD,QAAA,IAAI,CAAC,SAAS,GAAGA,MAAQ,CAAC,KAAK;AAC5B,aAAA,IAAI,CAAC,OAAO,EAAE,mDAAmD;AACjE,aAAA,IAAI,EAAE;QACT,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;AAErC,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC3D,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AAEpB,QAAA,IAAI,CAAC,IAAI,GAAGA,MAAQ,CAAC,QAAQ;aAC1B,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK;aACnC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM;AACrC,aAAA,IAAI,CAAC,OAAO,EAAE,CAAA,mDAAA,CAAqD;AACnE,aAAA,IAAI,EAAE;QAET,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;QAEjD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;AACpE,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;;AAE1C;;;;"}
1
+ {"version":3,"file":"init-area.js","sources":["../../../../../src/module/GraphCanvas/slices/init-area.ts"],"sourcesContent":["import { create as d3Create } from \"d3-selection\";\nimport type { GraphCanvas } from \"../GraphCanvas\";\n\nexport function initArea<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.area || !this.context || !this.container) {\n this.container = d3Create(\"div\")\n .attr(\"style\", \"padding: 0 !important; width: 100%; height: 100%;\")\n .node();\n if (!this.container) throw new Error(\"couldn't create container\");\n this.root.appendChild(this.container);\n const { width, height } = this.root.getBoundingClientRect();\n this.width = width;\n this.height = height;\n this.area = d3Create(\"canvas\")\n .attr(\"width\", this.dpi * this.width)\n .attr(\"height\", this.dpi * this.height)\n .attr(\"style\", `width: 100%; height: 100%; border: none !important;`)\n .node();\n if (!this.area) throw new Error(\"couldn't create canvas\");\n this.container.appendChild(this.area);\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.updateRect();\n }\n}\n"],"names":["d3Create"],"mappings":";;SAGgB,QAAQ,GAAA;AAItB,IAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAClD,QAAA,IAAI,CAAC,SAAS,GAAGA,MAAQ,CAAC,KAAK;AAC5B,aAAA,IAAI,CAAC,OAAO,EAAE,mDAAmD;AACjE,aAAA,IAAI,EAAE;QACT,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;AACrC,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC3D,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,IAAI,GAAGA,MAAQ,CAAC,QAAQ;aAC1B,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK;aACnC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM;AACrC,aAAA,IAAI,CAAC,OAAO,EAAE,CAAA,mDAAA,CAAqD;AACnE,aAAA,IAAI,EAAE;QACT,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;AACpE,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,UAAU,EAAE;;AAErB;;;;"}