@html-graph/html-graph 0.1.6 → 0.1.7

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.
package/dist/main.d.ts CHANGED
@@ -244,8 +244,8 @@ export declare interface DragOptions {
244
244
  readonly moveOnTop?: boolean;
245
245
  readonly mouse?: {
246
246
  readonly dragCursor?: string | null;
247
- readonly mouseDownEventValidator?: (event: MouseEvent) => boolean;
248
- readonly mouseUpEventValidator?: (event: MouseEvent) => boolean;
247
+ readonly mouseDownEventVerifier?: (event: MouseEvent) => boolean;
248
+ readonly mouseUpEventVerifier?: (event: MouseEvent) => boolean;
249
249
  };
250
250
  readonly events?: {
251
251
  readonly onNodeDrag?: (payload: NodeDragPayload) => void;
@@ -581,12 +581,12 @@ declare interface StraightEdgeShape_2 {
581
581
  export declare interface TransformOptions {
582
582
  readonly scale?: {
583
583
  readonly mouseWheelSensitivity?: number;
584
- readonly mouseWheelEventValidator?: (event: WheelEvent) => boolean;
584
+ readonly mouseWheelEventVerifier?: (event: WheelEvent) => boolean;
585
585
  };
586
586
  readonly shift?: {
587
587
  readonly cursor?: string | null;
588
- readonly mouseDownEventValidator?: (event: MouseEvent) => boolean;
589
- readonly mouseUpEventValidator?: (event: MouseEvent) => boolean;
588
+ readonly mouseDownEventVerifier?: (event: MouseEvent) => boolean;
589
+ readonly mouseUpEventVerifier?: (event: MouseEvent) => boolean;
590
590
  };
591
591
  readonly transformPreprocessor?: TransformPreprocessorOption | TransformPreprocessorOption[];
592
592
  readonly events?: {
package/dist/main.js CHANGED
@@ -15,23 +15,23 @@ const O = (e, t) => ({
15
15
  w,
16
16
  { x: o, y: r },
17
17
  { x: o, y: -r }
18
- ].map((l) => v(l, e, w)).map((l) => ({ x: l.x + t.x, y: l.y + t.y })), h = `M ${s[0].x} ${s[0].y}`, d = `L ${s[1].x} ${s[1].y}`, c = `L ${s[2].x} ${s[2].y}`;
19
- return `${h} ${d} ${c}`;
18
+ ].map((l) => v(l, e, w)).map((l) => ({ x: l.x + t.x, y: l.y + t.y })), h = `M ${s[0].x} ${s[0].y}`, c = `L ${s[1].x} ${s[1].y}`, d = `L ${s[2].x} ${s[2].y}`;
19
+ return `${h} ${c} ${d}`;
20
20
  }, $ = (e, t) => {
21
21
  const o = [];
22
22
  if (e.length > 0 && o.push(`M ${e[0].x} ${e[0].y}`), e.length === 2 && o.push(`L ${e[1].x} ${e[1].y}`), e.length > 2) {
23
23
  const r = e.length - 1;
24
24
  let i = 0, s = 0, h = 0;
25
- e.forEach((d, c) => {
25
+ e.forEach((c, d) => {
26
26
  let l = 0, a = 0, g = 0;
27
- const y = c > 0, x = c < r, f = y && x;
27
+ const y = d > 0, x = d < r, f = y && x;
28
28
  if (y && (l = -i, a = -s, g = h), x) {
29
- const I = e[c + 1];
30
- i = I.x - d.x, s = I.y - d.y, h = Math.sqrt(i * i + s * s);
29
+ const I = e[d + 1];
30
+ i = I.x - c.x, s = I.y - c.y, h = Math.sqrt(i * i + s * s);
31
31
  }
32
- const S = h !== 0 ? Math.min((f ? t : 0) / h, c < r - 1 ? 0.5 : 1) : 0, T = f ? { x: d.x + i * S, y: d.y + s * S } : d, P = g !== 0 ? Math.min((f ? t : 0) / g, c > 1 ? 0.5 : 1) : 0, D = f ? { x: d.x + l * P, y: d.y + a * P } : d;
33
- c > 0 && o.push(`L ${D.x} ${D.y}`), f && o.push(
34
- `C ${d.x} ${d.y} ${d.x} ${d.y} ${T.x} ${T.y}`
32
+ const S = h !== 0 ? Math.min((f ? t : 0) / h, d < r - 1 ? 0.5 : 1) : 0, T = f ? { x: c.x + i * S, y: c.y + s * S } : c, P = g !== 0 ? Math.min((f ? t : 0) / g, d > 1 ? 0.5 : 1) : 0, D = f ? { x: c.x + l * P, y: c.y + a * P } : c;
33
+ d > 0 && o.push(`L ${D.x} ${D.y}`), f && o.push(
34
+ `C ${c.x} ${c.y} ${c.x} ${c.y} ${T.x} ${T.y}`
35
35
  );
36
36
  });
37
37
  }
@@ -55,13 +55,13 @@ const O = (e, t) => ({
55
55
  }, r = {
56
56
  x: t.x + t.width / 2,
57
57
  y: t.y + t.height / 2
58
- }, i = Math.min(o.x, r.x), s = Math.min(o.y, r.y), h = Math.abs(r.x - o.x), d = Math.abs(r.y - o.y), c = o.x <= r.x ? 1 : -1, l = o.y <= r.y ? 1 : -1;
58
+ }, i = Math.min(o.x, r.x), s = Math.min(o.y, r.y), h = Math.abs(r.x - o.x), c = Math.abs(r.y - o.y), d = o.x <= r.x ? 1 : -1, l = o.y <= r.y ? 1 : -1;
59
59
  return {
60
60
  x: i,
61
61
  y: s,
62
62
  width: h,
63
- height: d,
64
- flipX: c,
63
+ height: c,
64
+ flipX: d,
65
65
  flipY: l
66
66
  };
67
67
  }, q = (e) => {
@@ -79,8 +79,8 @@ const O = (e, t) => ({
79
79
  }, i = {
80
80
  x: o.x - e.toVect.x * e.curvature,
81
81
  y: o.y - e.toVect.y * e.curvature
82
- }, s = `M ${t.x} ${t.y} C ${r.x} ${r.y}, ${i.x} ${i.y}, ${o.x} ${o.y}`, h = e.hasSourceArrow ? "" : `M ${w.x} ${w.y} L ${t.x} ${t.y} `, d = e.hasTargetArrow ? "" : ` M ${o.x} ${o.y} L ${e.to.x} ${e.to.y}`;
83
- return `${h}${s}${d}`;
82
+ }, s = `M ${t.x} ${t.y} C ${r.x} ${r.y}, ${i.x} ${i.y}, ${o.x} ${o.y}`, h = e.hasSourceArrow ? "" : `M ${w.x} ${w.y} L ${t.x} ${t.y} `, c = e.hasTargetArrow ? "" : ` M ${o.x} ${o.y} L ${e.to.x} ${e.to.y}`;
83
+ return `${h}${s}${c}`;
84
84
  }, tt = (e) => {
85
85
  const t = e.hasSourceArrow ? v(
86
86
  { x: e.arrowLength, y: w.y },
@@ -90,36 +90,36 @@ const O = (e, t) => ({
90
90
  { x: e.to.x - e.arrowLength, y: e.to.y },
91
91
  e.toVect,
92
92
  e.to
93
- ) : e.to, r = e.arrowLength, i = Math.cos(e.detourDirection) * e.detourDistance, s = Math.sin(e.detourDirection) * e.detourDistance, h = i * e.flipX, d = s * e.flipY, c = v(
93
+ ) : e.to, r = e.arrowLength, i = Math.cos(e.detourDirection) * e.detourDistance, s = Math.sin(e.detourDirection) * e.detourDistance, h = i * e.flipX, c = s * e.flipY, d = v(
94
94
  { x: r, y: w.y },
95
95
  e.fromVect,
96
96
  w
97
97
  ), l = {
98
- x: c.x + h,
99
- y: c.y + d
98
+ x: d.x + h,
99
+ y: d.y + c
100
100
  }, a = v(
101
101
  { x: e.to.x - r, y: e.to.y },
102
102
  e.toVect,
103
103
  e.to
104
104
  ), g = {
105
105
  x: a.x + h,
106
- y: a.y + d
106
+ y: a.y + c
107
107
  }, y = { x: (l.x + g.x) / 2, y: (l.y + g.y) / 2 }, x = {
108
- x: c.x + e.curvature * e.fromVect.x,
109
- y: c.y + e.curvature * e.fromVect.y
108
+ x: d.x + e.curvature * e.fromVect.x,
109
+ y: d.y + e.curvature * e.fromVect.y
110
110
  }, f = {
111
111
  x: a.x - e.curvature * e.toVect.x,
112
112
  y: a.y - e.curvature * e.toVect.y
113
113
  }, A = {
114
- x: c.x + h,
115
- y: c.y + d
114
+ x: d.x + h,
115
+ y: d.y + c
116
116
  }, S = {
117
117
  x: a.x + h,
118
- y: a.y + d
118
+ y: a.y + c
119
119
  };
120
120
  return [
121
121
  `M ${t.x} ${t.y}`,
122
- `L ${c.x} ${c.y}`,
122
+ `L ${d.x} ${d.y}`,
123
123
  `C ${x.x} ${x.y} ${A.x} ${A.y} ${y.x} ${y.y}`,
124
124
  `C ${S.x} ${S.y} ${f.x} ${f.y} ${a.x} ${a.y}`,
125
125
  `L ${o.x} ${o.y}`
@@ -137,10 +137,10 @@ const O = (e, t) => ({
137
137
  { x: e.to.x - i, y: e.to.y },
138
138
  e.toVect,
139
139
  e.to
140
- ), d = Math.max((s.x + h.x) / 2, r), c = e.to.y / 2, l = { x: e.flipX > 0 ? d : -r, y: s.y }, a = { x: l.x, y: c }, g = {
141
- x: e.flipX > 0 ? e.to.x - d : e.to.x + r,
140
+ ), c = Math.max((s.x + h.x) / 2, r), d = e.to.y / 2, l = { x: e.flipX > 0 ? c : -r, y: s.y }, a = { x: l.x, y: d }, g = {
141
+ x: e.flipX > 0 ? e.to.x - c : e.to.x + r,
142
142
  y: h.y
143
- }, y = { x: g.x, y: c };
143
+ }, y = { x: g.x, y: d };
144
144
  return $(
145
145
  [t, s, l, a, y, g, h, o],
146
146
  e.roundness
@@ -158,11 +158,11 @@ const O = (e, t) => ({
158
158
  { x: r, y: w.y },
159
159
  e.fromVect,
160
160
  w
161
- ), s = Math.cos(e.detourDirection) * e.detourDistance, h = Math.sin(e.detourDirection) * e.detourDistance, d = s * e.flipX, c = h * e.flipY, l = { x: i.x + d, y: i.y + c }, a = v(
161
+ ), s = Math.cos(e.detourDirection) * e.detourDistance, h = Math.sin(e.detourDirection) * e.detourDistance, c = s * e.flipX, d = h * e.flipY, l = { x: i.x + c, y: i.y + d }, a = v(
162
162
  { x: e.to.x - r, y: e.to.y },
163
163
  e.toVect,
164
164
  e.to
165
- ), g = { x: a.x + d, y: a.y + c };
165
+ ), g = { x: a.x + c, y: a.y + d };
166
166
  return $(
167
167
  [t, i, l, g, a, o],
168
168
  e.roundness
@@ -195,10 +195,10 @@ const O = (e, t) => ({
195
195
  { x: e.to.x - i, y: e.to.y },
196
196
  e.toVect,
197
197
  e.to
198
- ), d = Math.max((s.y + h.y) / 2, r), c = e.to.x / 2, l = { x: s.x, y: e.flipY > 0 ? d : -r }, a = { x: c, y: l.y }, g = {
198
+ ), c = Math.max((s.y + h.y) / 2, r), d = e.to.x / 2, l = { x: s.x, y: e.flipY > 0 ? c : -r }, a = { x: d, y: l.y }, g = {
199
199
  x: h.x,
200
- y: e.flipY > 0 ? e.to.y - d : e.to.y + r
201
- }, y = { x: c, y: g.y };
200
+ y: e.flipY > 0 ? e.to.y - c : e.to.y + r
201
+ }, y = { x: d, y: g.y };
202
202
  return $(
203
203
  [t, s, l, a, y, g, h, o],
204
204
  e.roundness
@@ -214,20 +214,20 @@ const O = (e, t) => ({
214
214
  { x: r, y: w.y },
215
215
  { x: e.arrowLength, y: w.y }
216
216
  ].map(
217
- (c) => v(c, e.fromVect, w)
218
- ), d = `M ${w.x} ${w.y} L ${h[0].x} ${h[0].y} `;
219
- return `${e.hasSourceArrow || e.hasTargetArrow ? "" : d}${$(h, e.roundness)}`;
217
+ (d) => v(d, e.fromVect, w)
218
+ ), c = `M ${w.x} ${w.y} L ${h[0].x} ${h[0].y} `;
219
+ return `${e.hasSourceArrow || e.hasTargetArrow ? "" : c}${$(h, e.roundness)}`;
220
220
  }, it = (e) => {
221
- const t = e.smallRadius, o = e.radius, r = Math.sqrt(t * t + o * o), i = t + o, s = e.arrowLength + r * (1 - o / i), h = t * o / i, c = [
221
+ const t = e.smallRadius, o = e.radius, r = Math.sqrt(t * t + o * o), i = t + o, s = e.arrowLength + r * (1 - o / i), h = t * o / i, d = [
222
222
  { x: e.arrowLength, y: w.y },
223
223
  { x: s, y: h },
224
224
  { x: s, y: -h }
225
225
  ].map((g) => v(g, e.fromVect, w)), l = [
226
- `M ${c[0].x} ${c[0].y}`,
227
- `A ${t} ${t} 0 0 1 ${c[1].x} ${c[1].y}`,
228
- `A ${o} ${o} 0 1 0 ${c[2].x} ${c[2].y}`,
229
- `A ${t} ${t} 0 0 1 ${c[0].x} ${c[0].y}`
230
- ].join(" "), a = `M 0 0 L ${c[0].x} ${c[0].y} `;
226
+ `M ${d[0].x} ${d[0].y}`,
227
+ `A ${t} ${t} 0 0 1 ${d[1].x} ${d[1].y}`,
228
+ `A ${o} ${o} 0 1 0 ${d[2].x} ${d[2].y}`,
229
+ `A ${t} ${t} 0 0 1 ${d[0].x} ${d[0].y}`
230
+ ].join(" "), a = `M 0 0 L ${d[0].x} ${d[0].y} `;
231
231
  return `${e.hasSourceArrow || e.hasTargetArrow ? "" : a}${l}`;
232
232
  }, u = Object.freeze({
233
233
  color: "#777777",
@@ -267,37 +267,37 @@ class nt {
267
267
  this.svg.appendChild(this.group), this.line = R(o, r), this.group.appendChild(this.line), this.hasSourceArrow && (this.sourceArrow = N(o), this.group.appendChild(this.sourceArrow)), this.hasTargetArrow && (this.targetArrow = N(o), this.group.appendChild(this.targetArrow));
268
268
  }
269
269
  render(t) {
270
- const { x: o, y: r, width: i, height: s, flipX: h, flipY: d } = Y(
270
+ const { x: o, y: r, width: i, height: s, flipX: h, flipY: c } = Y(
271
271
  t.source,
272
272
  t.target
273
273
  );
274
- this.svg.style.transform = `translate(${o}px, ${r}px)`, this.svg.style.width = `${i}px`, this.svg.style.height = `${s}px`, this.group.style.transform = `scale(${h}, ${d})`;
275
- const c = M(
274
+ this.svg.style.transform = `translate(${o}px, ${r}px)`, this.svg.style.width = `${i}px`, this.svg.style.height = `${s}px`, this.group.style.transform = `scale(${h}, ${c})`;
275
+ const d = M(
276
276
  t.source.direction,
277
277
  h,
278
- d
278
+ c
279
279
  ), l = M(
280
280
  t.target.direction,
281
281
  h,
282
- d
282
+ c
283
283
  ), a = {
284
284
  x: i,
285
285
  y: s
286
286
  };
287
287
  let g, y = l, x = -this.arrowLength;
288
288
  if (t.source.portId === t.target.portId ? (g = it({
289
- fromVect: c,
289
+ fromVect: d,
290
290
  radius: this.portCycleRadius,
291
291
  smallRadius: this.portCycleSmallRadius,
292
292
  arrowLength: this.arrowLength,
293
293
  hasSourceArrow: this.hasSourceArrow,
294
294
  hasTargetArrow: this.hasTargetArrow
295
- }), y = c, x = this.arrowLength) : t.source.nodeId === t.target.nodeId ? g = tt({
295
+ }), y = d, x = this.arrowLength) : t.source.nodeId === t.target.nodeId ? g = tt({
296
296
  to: a,
297
- fromVect: c,
297
+ fromVect: d,
298
298
  toVect: l,
299
299
  flipX: h,
300
- flipY: d,
300
+ flipY: c,
301
301
  arrowLength: this.arrowLength,
302
302
  detourDirection: this.detourDirection,
303
303
  detourDistance: this.detourDistance,
@@ -306,7 +306,7 @@ class nt {
306
306
  hasTargetArrow: this.hasTargetArrow
307
307
  }) : g = q({
308
308
  to: a,
309
- fromVect: c,
309
+ fromVect: d,
310
310
  toVect: l,
311
311
  arrowLength: this.arrowLength,
312
312
  curvature: this.curvature,
@@ -314,7 +314,7 @@ class nt {
314
314
  hasTargetArrow: this.hasTargetArrow
315
315
  }), this.line.setAttribute("d", g), this.sourceArrow) {
316
316
  const f = C(
317
- c,
317
+ d,
318
318
  w,
319
319
  this.arrowLength,
320
320
  this.arrowWidth
@@ -359,38 +359,38 @@ class st {
359
359
  this.svg.appendChild(this.group), this.line = R(r, i), this.group.appendChild(this.line), this.hasSourceArrow && (this.sourceArrow = N(r), this.group.appendChild(this.sourceArrow)), this.hasTargetArrow && (this.targetArrow = N(r), this.group.appendChild(this.targetArrow));
360
360
  }
361
361
  render(t) {
362
- const { x: o, y: r, width: i, height: s, flipX: h, flipY: d } = Y(
362
+ const { x: o, y: r, width: i, height: s, flipX: h, flipY: c } = Y(
363
363
  t.source,
364
364
  t.target
365
365
  );
366
- this.svg.style.transform = `translate(${o}px, ${r}px)`, this.svg.style.width = `${i}px`, this.svg.style.height = `${s}px`, this.group.style.transform = `scale(${h}, ${d})`;
367
- const c = M(
366
+ this.svg.style.transform = `translate(${o}px, ${r}px)`, this.svg.style.width = `${i}px`, this.svg.style.height = `${s}px`, this.group.style.transform = `scale(${h}, ${c})`;
367
+ const d = M(
368
368
  t.source.direction,
369
369
  h,
370
- d
370
+ c
371
371
  ), l = M(
372
372
  t.target.direction,
373
373
  h,
374
- d
374
+ c
375
375
  ), a = {
376
376
  x: i,
377
377
  y: s
378
378
  };
379
379
  let g, y = l, x = -this.arrowLength;
380
380
  if (t.source.portId === t.target.portId ? (g = U({
381
- fromVect: c,
381
+ fromVect: d,
382
382
  arrowLength: this.arrowLength,
383
383
  side: this.cycleSquareSide,
384
384
  arrowOffset: this.arrowOffset,
385
385
  roundness: this.roundness,
386
386
  hasSourceArrow: this.hasSourceArrow,
387
387
  hasTargetArrow: this.hasTargetArrow
388
- }), y = c, x = this.arrowLength) : t.source.nodeId === t.target.nodeId ? g = G({
388
+ }), y = d, x = this.arrowLength) : t.source.nodeId === t.target.nodeId ? g = G({
389
389
  to: a,
390
- fromVect: c,
390
+ fromVect: d,
391
391
  toVect: l,
392
392
  flipX: h,
393
- flipY: d,
393
+ flipY: c,
394
394
  arrowLength: this.arrowLength,
395
395
  arrowOffset: this.arrowOffset,
396
396
  roundness: this.roundness,
@@ -400,7 +400,7 @@ class st {
400
400
  hasTargetArrow: this.hasTargetArrow
401
401
  }) : g = et({
402
402
  to: a,
403
- fromVect: c,
403
+ fromVect: d,
404
404
  toVect: l,
405
405
  flipX: h,
406
406
  arrowLength: this.arrowLength,
@@ -410,7 +410,7 @@ class st {
410
410
  hasTargetArrow: this.hasTargetArrow
411
411
  }), this.line.setAttribute("d", g), this.sourceArrow) {
412
412
  const f = C(
413
- c,
413
+ d,
414
414
  w,
415
415
  this.arrowLength,
416
416
  this.arrowWidth
@@ -455,38 +455,38 @@ class ht {
455
455
  this.svg.appendChild(this.group), this.line = R(r, i), this.group.appendChild(this.line), this.hasSourceArrow && (this.sourceArrow = N(r), this.group.appendChild(this.sourceArrow)), this.hasTargetArrow && (this.targetArrow = N(r), this.group.appendChild(this.targetArrow));
456
456
  }
457
457
  render(t) {
458
- const { x: o, y: r, width: i, height: s, flipX: h, flipY: d } = Y(
458
+ const { x: o, y: r, width: i, height: s, flipX: h, flipY: c } = Y(
459
459
  t.source,
460
460
  t.target
461
461
  );
462
- this.svg.style.transform = `translate(${o}px, ${r}px)`, this.svg.style.width = `${i}px`, this.svg.style.height = `${s}px`, this.group.style.transform = `scale(${h}, ${d})`;
463
- const c = M(
462
+ this.svg.style.transform = `translate(${o}px, ${r}px)`, this.svg.style.width = `${i}px`, this.svg.style.height = `${s}px`, this.group.style.transform = `scale(${h}, ${c})`;
463
+ const d = M(
464
464
  t.source.direction,
465
465
  h,
466
- d
466
+ c
467
467
  ), l = M(
468
468
  t.target.direction,
469
469
  h,
470
- d
470
+ c
471
471
  ), a = {
472
472
  x: i,
473
473
  y: s
474
474
  };
475
475
  let g, y = l, x = -this.arrowLength;
476
476
  if (t.source.portId === t.target.portId ? (g = U({
477
- fromVect: c,
477
+ fromVect: d,
478
478
  arrowLength: this.arrowLength,
479
479
  side: this.cycleSquareSide,
480
480
  arrowOffset: this.arrowOffset,
481
481
  roundness: this.roundness,
482
482
  hasSourceArrow: this.hasSourceArrow,
483
483
  hasTargetArrow: this.hasTargetArrow
484
- }), y = c, x = this.arrowLength) : t.source.nodeId === t.target.nodeId ? g = G({
484
+ }), y = d, x = this.arrowLength) : t.source.nodeId === t.target.nodeId ? g = G({
485
485
  to: a,
486
- fromVect: c,
486
+ fromVect: d,
487
487
  toVect: l,
488
488
  flipX: h,
489
- flipY: d,
489
+ flipY: c,
490
490
  arrowLength: this.arrowLength,
491
491
  arrowOffset: this.arrowOffset,
492
492
  roundness: this.roundness,
@@ -496,7 +496,7 @@ class ht {
496
496
  hasTargetArrow: this.hasTargetArrow
497
497
  }) : g = ot({
498
498
  to: a,
499
- fromVect: c,
499
+ fromVect: d,
500
500
  toVect: l,
501
501
  arrowLength: this.arrowLength,
502
502
  arrowOffset: this.arrowOffset,
@@ -505,7 +505,7 @@ class ht {
505
505
  hasTargetArrow: this.hasTargetArrow
506
506
  }), this.line.setAttribute("d", g), this.sourceArrow) {
507
507
  const f = C(
508
- c,
508
+ d,
509
509
  w,
510
510
  this.arrowLength,
511
511
  this.arrowWidth
@@ -523,7 +523,7 @@ class ht {
523
523
  }
524
524
  }
525
525
  }
526
- class dt {
526
+ class ct {
527
527
  constructor(t) {
528
528
  n(this, "svg", W());
529
529
  n(this, "group", F());
@@ -550,38 +550,38 @@ class dt {
550
550
  this.svg.appendChild(this.group), this.line = R(r, i), this.group.appendChild(this.line), this.hasSourceArrow && (this.sourceArrow = N(r), this.group.appendChild(this.sourceArrow)), this.hasTargetArrow && (this.targetArrow = N(r), this.group.appendChild(this.targetArrow));
551
551
  }
552
552
  render(t) {
553
- const { x: o, y: r, width: i, height: s, flipX: h, flipY: d } = Y(
553
+ const { x: o, y: r, width: i, height: s, flipX: h, flipY: c } = Y(
554
554
  t.source,
555
555
  t.target
556
556
  );
557
- this.svg.style.transform = `translate(${o}px, ${r}px)`, this.svg.style.width = `${i}px`, this.svg.style.height = `${s}px`, this.group.style.transform = `scale(${h}, ${d})`;
558
- const c = M(
557
+ this.svg.style.transform = `translate(${o}px, ${r}px)`, this.svg.style.width = `${i}px`, this.svg.style.height = `${s}px`, this.group.style.transform = `scale(${h}, ${c})`;
558
+ const d = M(
559
559
  t.source.direction,
560
560
  h,
561
- d
561
+ c
562
562
  ), l = M(
563
563
  t.target.direction,
564
564
  h,
565
- d
565
+ c
566
566
  ), a = {
567
567
  x: i,
568
568
  y: s
569
569
  };
570
570
  let g, y = l, x = -this.arrowLength;
571
571
  if (t.source.portId === t.target.portId ? (g = U({
572
- fromVect: c,
572
+ fromVect: d,
573
573
  arrowLength: this.arrowLength,
574
574
  side: this.cycleSquareSide,
575
575
  arrowOffset: this.arrowOffset,
576
576
  roundness: this.roundness,
577
577
  hasSourceArrow: this.hasSourceArrow,
578
578
  hasTargetArrow: this.hasTargetArrow
579
- }), y = c, x = this.arrowLength) : t.source.nodeId === t.target.nodeId ? g = G({
579
+ }), y = d, x = this.arrowLength) : t.source.nodeId === t.target.nodeId ? g = G({
580
580
  to: a,
581
- fromVect: c,
581
+ fromVect: d,
582
582
  toVect: l,
583
583
  flipX: h,
584
- flipY: d,
584
+ flipY: c,
585
585
  arrowLength: this.arrowLength,
586
586
  arrowOffset: this.arrowOffset,
587
587
  roundness: this.roundness,
@@ -591,9 +591,9 @@ class dt {
591
591
  hasTargetArrow: this.hasTargetArrow
592
592
  }) : g = rt({
593
593
  to: a,
594
- fromVect: c,
594
+ fromVect: d,
595
595
  toVect: l,
596
- flipY: d,
596
+ flipY: c,
597
597
  arrowLength: this.arrowLength,
598
598
  arrowOffset: this.arrowOffset,
599
599
  roundness: this.roundness,
@@ -601,7 +601,7 @@ class dt {
601
601
  hasTargetArrow: this.hasTargetArrow
602
602
  }), this.line.setAttribute("d", g), this.sourceArrow) {
603
603
  const f = C(
604
- c,
604
+ d,
605
605
  w,
606
606
  this.arrowLength,
607
607
  this.arrowWidth
@@ -619,7 +619,7 @@ class dt {
619
619
  }
620
620
  }
621
621
  }
622
- const ct = (e) => {
622
+ const dt = (e) => {
623
623
  if (typeof e == "function")
624
624
  return e;
625
625
  switch (e == null ? void 0 : e.type) {
@@ -652,7 +652,7 @@ const ct = (e) => {
652
652
  detourDirection: e.detourDirection
653
653
  });
654
654
  case "vertical":
655
- return () => new dt({
655
+ return () => new ct({
656
656
  color: e.color,
657
657
  width: e.width,
658
658
  arrowLength: e.arrowLength,
@@ -706,7 +706,7 @@ const ct = (e) => {
706
706
  direction: ((s = e == null ? void 0 : e.ports) == null ? void 0 : s.direction) ?? 0
707
707
  },
708
708
  edges: {
709
- shapeFactory: ct(((h = e == null ? void 0 : e.edges) == null ? void 0 : h.shape) ?? {}),
709
+ shapeFactory: dt(((h = e == null ? void 0 : e.edges) == null ? void 0 : h.shape) ?? {}),
710
710
  priorityFn: t.edgesPriorityFn
711
711
  }
712
712
  };
@@ -952,8 +952,8 @@ class xt {
952
952
  this.clear(), this.detach(), this.host.removeChild(this.container);
953
953
  }
954
954
  updateNodeCoordinates(t) {
955
- const o = this.nodeIdToWrapperElementMap.get(t), r = this.graphStore.getNode(t), { width: i, height: s } = r.element.getBoundingClientRect(), h = this.viewportTransformer.getViewportMatrix().scale, d = r.centerFn(i, s), c = r.x - h * d.x, l = r.y - h * d.y;
956
- o.style.transform = `translate(${c}px, ${l}px)`;
955
+ const o = this.nodeIdToWrapperElementMap.get(t), r = this.graphStore.getNode(t), { width: i, height: s } = r.element.getBoundingClientRect(), h = this.viewportTransformer.getViewportMatrix().scale, c = r.centerFn(i, s), d = r.x - h * c.x, l = r.y - h * c.y;
956
+ o.style.transform = `translate(${d}px, ${l}px)`;
957
957
  }
958
958
  updateNodePriority(t) {
959
959
  const o = this.graphStore.getNode(t), r = this.nodeIdToWrapperElementMap.get(t);
@@ -966,25 +966,25 @@ class xt {
966
966
  this.edgeIdToElementMap.set(t, r.shape.svg), this.container.appendChild(r.shape.svg);
967
967
  }
968
968
  renderEdge(t) {
969
- const o = this.graphStore.getEdge(t), r = this.graphStore.getPort(o.from), i = this.graphStore.getPort(o.to), s = r.element.getBoundingClientRect(), h = i.element.getBoundingClientRect(), d = this.host.getBoundingClientRect(), c = this.viewportTransformer.getViewportMatrix(), l = {
970
- x: c.scale * (s.left - d.left) + c.dx,
971
- y: c.scale * (s.top - d.top) + c.dy
969
+ const o = this.graphStore.getEdge(t), r = this.graphStore.getPort(o.from), i = this.graphStore.getPort(o.to), s = r.element.getBoundingClientRect(), h = i.element.getBoundingClientRect(), c = this.host.getBoundingClientRect(), d = this.viewportTransformer.getViewportMatrix(), l = {
970
+ x: d.scale * (s.left - c.left) + d.dx,
971
+ y: d.scale * (s.top - c.top) + d.dy
972
972
  }, a = {
973
- x: c.scale * (h.left - d.left) + c.dx,
974
- y: c.scale * (h.top - d.top) + c.dy
973
+ x: d.scale * (h.left - c.left) + d.dx,
974
+ y: d.scale * (h.top - c.top) + d.dy
975
975
  }, g = {
976
976
  x: l.x,
977
977
  y: l.y,
978
- width: s.width * c.scale,
979
- height: s.height * c.scale,
978
+ width: s.width * d.scale,
979
+ height: s.height * d.scale,
980
980
  direction: r.direction,
981
981
  portId: o.from,
982
982
  nodeId: this.graphStore.getPortNodeId(o.from)
983
983
  }, y = {
984
984
  x: a.x,
985
985
  y: a.y,
986
- width: h.width * c.scale,
987
- height: h.height * c.scale,
986
+ width: h.width * d.scale,
987
+ height: h.height * d.scale,
988
988
  direction: i.direction,
989
989
  portId: o.to,
990
990
  nodeId: this.graphStore.getPortNodeId(o.to)
@@ -1022,7 +1022,7 @@ class E extends Error {
1022
1022
  }
1023
1023
  }
1024
1024
  class Et {
1025
- constructor(t, o, r, i, s, h, d) {
1025
+ constructor(t, o, r, i, s, h, c) {
1026
1026
  n(this, "nodeIdGenerator", new m(
1027
1027
  (t) => this.graphStore.getNode(t) !== void 0
1028
1028
  ));
@@ -1032,7 +1032,7 @@ class Et {
1032
1032
  n(this, "edgeIdGenerator", new m(
1033
1033
  (t) => this.graphStore.getEdge(t) !== void 0
1034
1034
  ));
1035
- this.graphStore = t, this.htmlController = o, this.viewportTransformer = r, this.defaultNodesCenterFn = i, this.defaultPortsDirection = s, this.defaultNodesPriorityFn = h, this.defaultEdgesPriorityFn = d;
1035
+ this.graphStore = t, this.htmlController = o, this.viewportTransformer = r, this.defaultNodesCenterFn = i, this.defaultPortsDirection = s, this.defaultNodesPriorityFn = h, this.defaultEdgesPriorityFn = c;
1036
1036
  }
1037
1037
  attach(t) {
1038
1038
  this.htmlController.attach(t);
@@ -1315,12 +1315,12 @@ const V = (e, t, o) => {
1315
1315
  var g, y, x, f, A, S;
1316
1316
  const t = ((g = e == null ? void 0 : e.events) == null ? void 0 : g.onNodeDrag) ?? (() => {
1317
1317
  }), o = ((y = e == null ? void 0 : e.events) == null ? void 0 : y.onBeforeNodeDrag) ?? (() => !0), r = ((x = e == null ? void 0 : e.events) == null ? void 0 : x.onNodeDragFinished) ?? (() => {
1318
- }), i = (e == null ? void 0 : e.moveOnTop) === !1, s = (f = e == null ? void 0 : e.mouse) == null ? void 0 : f.dragCursor, h = s !== void 0 ? s : "grab", d = (A = e == null ? void 0 : e.mouse) == null ? void 0 : A.mouseDownEventValidator, c = d !== void 0 ? d : (T) => T.button === 0, l = (S = e == null ? void 0 : e.mouse) == null ? void 0 : S.mouseUpEventValidator;
1318
+ }), i = (e == null ? void 0 : e.moveOnTop) === !1, s = (f = e == null ? void 0 : e.mouse) == null ? void 0 : f.dragCursor, h = s !== void 0 ? s : "grab", c = (A = e == null ? void 0 : e.mouse) == null ? void 0 : A.mouseDownEventVerifier, d = c !== void 0 ? c : (T) => T.button === 0, l = (S = e == null ? void 0 : e.mouse) == null ? void 0 : S.mouseUpEventVerifier;
1319
1319
  return {
1320
1320
  freezePriority: i,
1321
1321
  dragCursor: h,
1322
- mouseDownEventValidator: c,
1323
- mouseUpEventValidator: l !== void 0 ? l : (T) => T.button === 0,
1322
+ mouseDownEventVerifier: d,
1323
+ mouseUpEventVerifier: l !== void 0 ? l : (T) => T.button === 0,
1324
1324
  onNodeDrag: t,
1325
1325
  onBeforeNodeDrag: o,
1326
1326
  onNodeDragFinished: r
@@ -1345,7 +1345,7 @@ class Mt {
1345
1345
  this.grabbedNodeId !== null && this.dragNode(this.grabbedNodeId, t.movementX, t.movementY);
1346
1346
  });
1347
1347
  n(this, "onWindowMouseUp", (t) => {
1348
- this.options.mouseUpEventValidator(t) && this.cancelMouseDrag();
1348
+ this.options.mouseUpEventVerifier(t) && this.cancelMouseDrag();
1349
1349
  });
1350
1350
  n(this, "onWindowTouchMove", (t) => {
1351
1351
  if (t.touches.length !== 1)
@@ -1381,7 +1381,7 @@ class Mt {
1381
1381
  const o = this.nodeIdGenerator.create(t.id);
1382
1382
  this.canvas.addNode({ ...t, id: o }), this.updateMaxNodePriority(o);
1383
1383
  const r = (s) => {
1384
- if (this.element === null || !this.options.mouseDownEventValidator(s))
1384
+ if (this.element === null || !this.options.mouseDownEventVerifier(s))
1385
1385
  return;
1386
1386
  const h = this.model.getNode(o);
1387
1387
  this.options.onBeforeNodeDrag({
@@ -1454,12 +1454,12 @@ class Mt {
1454
1454
  const i = this.model.getNode(t);
1455
1455
  if (i === null)
1456
1456
  return;
1457
- const s = this.canvas.transformation.getContentMatrix(), h = s.scale * i.x + s.dx, d = s.scale * i.y + s.dy, c = h + o, l = d + r, a = this.canvas.transformation.getViewportMatrix(), g = a.scale * c + a.dx, y = a.scale * l + a.dy;
1457
+ const s = this.canvas.transformation.getContentMatrix(), h = s.scale * i.x + s.dx, c = s.scale * i.y + s.dy, d = h + o, l = c + r, a = this.canvas.transformation.getViewportMatrix(), g = a.scale * d + a.dx, y = a.scale * l + a.dy;
1458
1458
  this.canvas.updateNode(t, { x: g, y }), this.options.onNodeDrag({
1459
1459
  nodeId: t,
1460
1460
  element: i.element,
1461
- x: i.x,
1462
- y: i.y
1461
+ x: g,
1462
+ y
1463
1463
  });
1464
1464
  }
1465
1465
  updateMaxNodePriority(t) {
@@ -1504,30 +1504,30 @@ class Mt {
1504
1504
  const Ct = (e) => {
1505
1505
  const t = e.minX !== null ? e.minX : -1 / 0, o = e.maxX !== null ? e.maxX : 1 / 0, r = e.minY !== null ? e.minY : -1 / 0, i = e.maxY !== null ? e.maxY : 1 / 0;
1506
1506
  return (s) => {
1507
- let h = s.nextTransform.dx, d = s.nextTransform.dy;
1507
+ let h = s.nextTransform.dx, c = s.nextTransform.dy;
1508
1508
  h < t && h < s.prevTransform.dx && (h = Math.min(s.prevTransform.dx, t));
1509
- const c = s.canvasWidth * s.prevTransform.scale;
1510
- h > o - c && h > s.prevTransform.dx && (h = Math.max(s.prevTransform.dx, o - c)), d < r && d < s.prevTransform.dy && (d = Math.min(s.prevTransform.dy, r));
1509
+ const d = s.canvasWidth * s.prevTransform.scale;
1510
+ h > o - d && h > s.prevTransform.dx && (h = Math.max(s.prevTransform.dx, o - d)), c < r && c < s.prevTransform.dy && (c = Math.min(s.prevTransform.dy, r));
1511
1511
  const l = s.canvasHeight * s.prevTransform.scale;
1512
- return d > i - l && d > s.prevTransform.dy && (d = Math.max(s.prevTransform.dy, i - l)), { scale: s.nextTransform.scale, dx: h, dy: d };
1512
+ return c > i - l && c > s.prevTransform.dy && (c = Math.max(s.prevTransform.dy, i - l)), { scale: s.nextTransform.scale, dx: h, dy: c };
1513
1513
  };
1514
1514
  }, Nt = (e) => {
1515
1515
  const t = e.maxContentScale, o = e.minContentScale, r = t !== null ? 1 / t : 0, i = o !== null ? 1 / o : 1 / 0;
1516
1516
  return (s) => {
1517
- const h = s.prevTransform, d = s.nextTransform;
1518
- let c = d.scale, l = d.dx, a = d.dy;
1519
- if (d.scale > i && d.scale > h.scale) {
1520
- c = Math.max(h.scale, i), l = h.dx, a = h.dy;
1521
- const g = (c - h.scale) / (d.scale - h.scale);
1522
- l = h.dx + (d.dx - h.dx) * g, a = h.dy + (d.dy - h.dy) * g;
1517
+ const h = s.prevTransform, c = s.nextTransform;
1518
+ let d = c.scale, l = c.dx, a = c.dy;
1519
+ if (c.scale > i && c.scale > h.scale) {
1520
+ d = Math.max(h.scale, i), l = h.dx, a = h.dy;
1521
+ const g = (d - h.scale) / (c.scale - h.scale);
1522
+ l = h.dx + (c.dx - h.dx) * g, a = h.dy + (c.dy - h.dy) * g;
1523
1523
  }
1524
- if (d.scale < r && d.scale < h.scale) {
1525
- c = Math.min(h.scale, r), l = h.dx, a = h.dy;
1526
- const g = (c - h.scale) / (d.scale - h.scale);
1527
- l = h.dx + (d.dx - h.dx) * g, a = h.dy + (d.dy - h.dy) * g;
1524
+ if (c.scale < r && c.scale < h.scale) {
1525
+ d = Math.min(h.scale, r), l = h.dx, a = h.dy;
1526
+ const g = (d - h.scale) / (c.scale - h.scale);
1527
+ l = h.dx + (c.dx - h.dx) * g, a = h.dy + (c.dy - h.dy) * g;
1528
1528
  }
1529
1529
  return {
1530
- scale: c,
1530
+ scale: d,
1531
1531
  dx: l,
1532
1532
  dy: a
1533
1533
  };
@@ -1567,8 +1567,8 @@ const Ct = (e) => {
1567
1567
  )
1568
1568
  ) : i = J(r) : i = (L) => L.nextTransform;
1569
1569
  const s = ((A = e == null ? void 0 : e.shift) == null ? void 0 : A.cursor) !== void 0 ? e.shift.cursor : "grab", h = ((S = e == null ? void 0 : e.events) == null ? void 0 : S.onBeforeTransformChange) ?? (() => {
1570
- }), d = ((T = e == null ? void 0 : e.events) == null ? void 0 : T.onTransformChange) ?? (() => {
1571
- }), c = (X = e == null ? void 0 : e.shift) == null ? void 0 : X.mouseDownEventValidator, l = c !== void 0 ? c : (L) => L.button === 0, a = (P = e == null ? void 0 : e.shift) == null ? void 0 : P.mouseUpEventValidator, g = a !== void 0 ? a : (L) => L.button === 0, y = (D = e == null ? void 0 : e.scale) == null ? void 0 : D.mouseWheelEventValidator, x = y !== void 0 ? y : () => !0;
1570
+ }), c = ((T = e == null ? void 0 : e.events) == null ? void 0 : T.onTransformChange) ?? (() => {
1571
+ }), d = (X = e == null ? void 0 : e.shift) == null ? void 0 : X.mouseDownEventVerifier, l = d !== void 0 ? d : (L) => L.button === 0, a = (P = e == null ? void 0 : e.shift) == null ? void 0 : P.mouseUpEventVerifier, g = a !== void 0 ? a : (L) => L.button === 0, y = (D = e == null ? void 0 : e.scale) == null ? void 0 : D.mouseWheelEventVerifier, x = y !== void 0 ? y : () => !0;
1572
1572
  return {
1573
1573
  wheelSensitivity: o,
1574
1574
  onTransformStarted: ((I = e == null ? void 0 : e.events) == null ? void 0 : I.onTransformStarted) ?? (() => {
@@ -1576,22 +1576,22 @@ const Ct = (e) => {
1576
1576
  onTransformFinished: ((j = e == null ? void 0 : e.events) == null ? void 0 : j.onTransformFinished) ?? (() => {
1577
1577
  }),
1578
1578
  onBeforeTransformChange: h,
1579
- onTransformChange: d,
1579
+ onTransformChange: c,
1580
1580
  transformPreprocessor: i,
1581
1581
  shiftCursor: s,
1582
- mouseDownEventValidator: l,
1583
- mouseUpEventValidator: g,
1584
- mouseWheelEventValidator: x
1582
+ mouseDownEventVerifier: l,
1583
+ mouseUpEventVerifier: g,
1584
+ mouseWheelEventVerifier: x
1585
1585
  };
1586
1586
  }, B = (e) => {
1587
1587
  const t = [], o = e.touches.length;
1588
- for (let d = 0; d < o; d++)
1589
- t.push([e.touches[d].clientX, e.touches[d].clientY]);
1588
+ for (let c = 0; c < o; c++)
1589
+ t.push([e.touches[c].clientX, e.touches[c].clientY]);
1590
1590
  const r = t.reduce(
1591
- (d, c) => [d[0] + c[0], d[1] + c[1]],
1591
+ (c, d) => [c[0] + d[0], c[1] + d[1]],
1592
1592
  [0, 0]
1593
- ), i = [r[0] / o, r[1] / o], h = t.map((d) => [d[0] - i[0], d[1] - i[1]]).reduce(
1594
- (d, c) => d + Math.sqrt(c[0] * c[0] + c[1] * c[1]),
1593
+ ), i = [r[0] / o, r[1] / o], h = t.map((c) => [c[0] - i[0], c[1] - i[1]]).reduce(
1594
+ (c, d) => c + Math.sqrt(d[0] * d[0] + d[1] * d[1]),
1595
1595
  0
1596
1596
  );
1597
1597
  return {
@@ -1618,7 +1618,7 @@ class mt {
1618
1618
  n(this, "prevTouches", null);
1619
1619
  n(this, "window", window);
1620
1620
  n(this, "onMouseDown", (t) => {
1621
- this.element === null || !this.options.mouseDownEventValidator(t) || (p(this.element, this.options.shiftCursor), this.window.addEventListener("mousemove", this.onWindowMouseMove), this.window.addEventListener("mouseup", this.onWindowMouseUp), this.options.onTransformStarted());
1621
+ this.element === null || !this.options.mouseDownEventVerifier(t) || (p(this.element, this.options.shiftCursor), this.window.addEventListener("mousemove", this.onWindowMouseMove), this.window.addEventListener("mouseup", this.onWindowMouseUp), this.options.onTransformStarted());
1622
1622
  });
1623
1623
  n(this, "onWindowMouseMove", (t) => {
1624
1624
  if (this.element === null || !V(this.element, t.clientX, t.clientY) || !b(this.window, t.clientX, t.clientY)) {
@@ -1629,14 +1629,14 @@ class mt {
1629
1629
  this.moveViewport(this.element, o, r);
1630
1630
  });
1631
1631
  n(this, "onWindowMouseUp", (t) => {
1632
- this.element === null || !this.options.mouseUpEventValidator(t) || this.stopMouseDrag();
1632
+ this.element === null || !this.options.mouseUpEventVerifier(t) || this.stopMouseDrag();
1633
1633
  });
1634
1634
  n(this, "onWheelScroll", (t) => {
1635
- if (!this.options.mouseWheelEventValidator(t))
1635
+ if (!this.options.mouseWheelEventVerifier(t))
1636
1636
  return;
1637
- t.preventDefault();
1638
- const { left: o, top: r } = this.element.getBoundingClientRect(), i = t.clientX - o, s = t.clientY - r, d = 1 / (t.deltaY < 0 ? this.options.wheelSensitivity : 1 / this.options.wheelSensitivity);
1639
- this.scaleViewport(this.element, d, i, s);
1637
+ t.preventDefault(), this.options.onTransformStarted();
1638
+ const { left: o, top: r } = this.element.getBoundingClientRect(), i = t.clientX - o, s = t.clientY - r, c = 1 / (t.deltaY < 0 ? this.options.wheelSensitivity : 1 / this.options.wheelSensitivity);
1639
+ this.scaleViewport(this.element, c, i, s), this.options.onTransformFinished();
1640
1640
  });
1641
1641
  n(this, "onTouchStart", (t) => {
1642
1642
  this.prevTouches = B(t), this.window.addEventListener("touchmove", this.onWindowTouchMove), this.window.addEventListener("touchend", this.onWindowTouchFinish), this.window.addEventListener("touchcancel", this.onWindowTouchFinish), this.options.onTransformStarted();
@@ -1657,8 +1657,8 @@ class mt {
1657
1657
  -(r.x - this.prevTouches.x),
1658
1658
  -(r.y - this.prevTouches.y)
1659
1659
  ), r.touchesCnt === 2) {
1660
- const { left: s, top: h } = o.getBoundingClientRect(), d = this.prevTouches.x - s, c = this.prevTouches.y - h, a = 1 / (r.scale / this.prevTouches.scale);
1661
- this.scaleViewport(o, a, d, c);
1660
+ const { left: s, top: h } = o.getBoundingClientRect(), c = this.prevTouches.x - s, d = this.prevTouches.y - h, a = 1 / (r.scale / this.prevTouches.scale);
1661
+ this.scaleViewport(o, a, c, d);
1662
1662
  }
1663
1663
  this.prevTouches = r;
1664
1664
  });
@@ -1724,21 +1724,21 @@ class mt {
1724
1724
  }
1725
1725
  moveViewport(t, o, r) {
1726
1726
  this.options.onBeforeTransformChange();
1727
- const i = this.transformation.getViewportMatrix(), s = Dt(i, o, r), { width: h, height: d } = t.getBoundingClientRect(), c = this.options.transformPreprocessor({
1727
+ const i = this.transformation.getViewportMatrix(), s = Dt(i, o, r), { width: h, height: c } = t.getBoundingClientRect(), d = this.options.transformPreprocessor({
1728
1728
  prevTransform: i,
1729
1729
  nextTransform: s,
1730
1730
  canvasWidth: h,
1731
- canvasHeight: d
1731
+ canvasHeight: c
1732
1732
  });
1733
- this.canvas.patchViewportMatrix(c), this.options.onTransformChange();
1733
+ this.canvas.patchViewportMatrix(d), this.options.onTransformChange();
1734
1734
  }
1735
1735
  scaleViewport(t, o, r, i) {
1736
1736
  this.options.onBeforeTransformChange();
1737
- const s = this.canvas.transformation.getViewportMatrix(), h = It(s, o, r, i), { width: d, height: c } = t.getBoundingClientRect(), l = this.options.transformPreprocessor({
1737
+ const s = this.canvas.transformation.getViewportMatrix(), h = It(s, o, r, i), { width: c, height: d } = t.getBoundingClientRect(), l = this.options.transformPreprocessor({
1738
1738
  prevTransform: s,
1739
1739
  nextTransform: h,
1740
- canvasWidth: d,
1741
- canvasHeight: c
1740
+ canvasWidth: c,
1741
+ canvasHeight: d
1742
1742
  });
1743
1743
  this.canvas.patchViewportMatrix(l), this.options.onTransformChange();
1744
1744
  }
@@ -1902,5 +1902,5 @@ export {
1902
1902
  ht as StraightEdgeShape,
1903
1903
  Mt as UserDraggableNodesCanvas,
1904
1904
  mt as UserTransformableCanvas,
1905
- dt as VerticalEdgeShape
1905
+ ct as VerticalEdgeShape
1906
1906
  };
package/dist/main.umd.cjs CHANGED
@@ -1 +1 @@
1
- (function(E,S){typeof exports=="object"&&typeof module<"u"?S(exports):typeof define=="function"&&define.amd?define(["exports"],S):(E=typeof globalThis<"u"?globalThis:E||self,S(E.HTMLGraph={}))})(this,function(E){"use strict";var Vt=Object.defineProperty;var pt=(E,S,f)=>S in E?Vt(E,S,{enumerable:!0,configurable:!0,writable:!0,value:f}):E[S]=f;var n=(E,S,f)=>pt(E,typeof S!="symbol"?S+"":S,f);const S=(e,t)=>({x:e/2,y:t/2}),f=(e,t,o)=>({x:t.x*e.x-t.y*e.y+((1-t.x)*o.x+t.y*o.y),y:t.y*e.x+t.x*e.y+((1-t.x)*o.y-t.y*o.x)}),N=(e,t,o)=>({x:t*Math.cos(e),y:o*Math.sin(e)}),u={x:0,y:0},L=(e,t,o,r)=>{const s=[u,{x:o,y:r},{x:o,y:-r}].map(l=>f(l,e,u)).map(l=>({x:l.x+t.x,y:l.y+t.y})),h=`M ${s[0].x} ${s[0].y}`,d=`L ${s[1].x} ${s[1].y}`,c=`L ${s[2].x} ${s[2].y}`;return`${h} ${d} ${c}`},I=(e,t)=>{const o=[];if(e.length>0&&o.push(`M ${e[0].x} ${e[0].y}`),e.length===2&&o.push(`L ${e[1].x} ${e[1].y}`),e.length>2){const r=e.length-1;let i=0,s=0,h=0;e.forEach((d,c)=>{let l=0,a=0,g=0;const y=c>0,x=c<r,v=y&&x;if(y&&(l=-i,a=-s,g=h),x){const V=e[c+1];i=V.x-d.x,s=V.y-d.y,h=Math.sqrt(i*i+s*s)}const T=h!==0?Math.min((v?t:0)/h,c<r-1?.5:1):0,C=v?{x:d.x+i*T,y:d.y+s*T}:d,$=g!==0?Math.min((v?t:0)/g,c>1?.5:1):0,b=v?{x:d.x+l*$,y:d.y+a*$}:d;c>0&&o.push(`L ${b.x} ${b.y}`),v&&o.push(`C ${d.x} ${d.y} ${d.x} ${d.y} ${C.x} ${C.y}`)})}return o.join(" ")},p=()=>{const e=document.createElementNS("http://www.w3.org/2000/svg","svg");return e.style.pointerEvents="none",e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.overflow="visible",e},W=()=>{const e=document.createElementNS("http://www.w3.org/2000/svg","g");return e.style.transformOrigin="50% 50%",e},F=(e,t)=>{const o=document.createElementNS("http://www.w3.org/2000/svg","path");return o.setAttribute("stroke",e),o.setAttribute("stroke-width",`${t}`),o.setAttribute("fill","none"),o},P=e=>{const t=document.createElementNS("http://www.w3.org/2000/svg","path");return t.setAttribute("fill",e),t},R=(e,t)=>{const o={x:e.x+e.width/2,y:e.y+e.height/2},r={x:t.x+t.width/2,y:t.y+t.height/2},i=Math.min(o.x,r.x),s=Math.min(o.y,r.y),h=Math.abs(r.x-o.x),d=Math.abs(r.y-o.y),c=o.x<=r.x?1:-1,l=o.y<=r.y?1:-1;return{x:i,y:s,width:h,height:d,flipX:c,flipY:l}},st=e=>{const t=f({x:e.arrowLength,y:u.y},e.fromVect,u),o=f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to),r={x:t.x+e.fromVect.x*e.curvature,y:t.y+e.fromVect.y*e.curvature},i={x:o.x-e.toVect.x*e.curvature,y:o.y-e.toVect.y*e.curvature},s=`M ${t.x} ${t.y} C ${r.x} ${r.y}, ${i.x} ${i.y}, ${o.x} ${o.y}`,h=e.hasSourceArrow?"":`M ${u.x} ${u.y} L ${t.x} ${t.y} `,d=e.hasTargetArrow?"":` M ${o.x} ${o.y} L ${e.to.x} ${e.to.y}`;return`${h}${s}${d}`},ht=e=>{const t=e.hasSourceArrow?f({x:e.arrowLength,y:u.y},e.fromVect,u):u,o=e.hasTargetArrow?f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to):e.to,r=e.arrowLength,i=Math.cos(e.detourDirection)*e.detourDistance,s=Math.sin(e.detourDirection)*e.detourDistance,h=i*e.flipX,d=s*e.flipY,c=f({x:r,y:u.y},e.fromVect,u),l={x:c.x+h,y:c.y+d},a=f({x:e.to.x-r,y:e.to.y},e.toVect,e.to),g={x:a.x+h,y:a.y+d},y={x:(l.x+g.x)/2,y:(l.y+g.y)/2},x={x:c.x+e.curvature*e.fromVect.x,y:c.y+e.curvature*e.fromVect.y},v={x:a.x-e.curvature*e.toVect.x,y:a.y-e.curvature*e.toVect.y},M={x:c.x+h,y:c.y+d},T={x:a.x+h,y:a.y+d};return[`M ${t.x} ${t.y}`,`L ${c.x} ${c.y}`,`C ${x.x} ${x.y} ${M.x} ${M.y} ${y.x} ${y.y}`,`C ${T.x} ${T.y} ${v.x} ${v.y} ${a.x} ${a.y}`,`L ${o.x} ${o.y}`].join(" ")},dt=e=>{const t=e.hasSourceArrow?f({x:e.arrowLength,y:u.y},e.fromVect,u):u,o=e.hasTargetArrow?f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to):e.to,r=e.arrowLength+e.arrowOffset,i=r-e.roundness,s=f({x:i,y:u.y},e.fromVect,u),h=f({x:e.to.x-i,y:e.to.y},e.toVect,e.to),d=Math.max((s.x+h.x)/2,r),c=e.to.y/2,l={x:e.flipX>0?d:-r,y:s.y},a={x:l.x,y:c},g={x:e.flipX>0?e.to.x-d:e.to.x+r,y:h.y},y={x:g.x,y:c};return I([t,s,l,a,y,g,h,o],e.roundness)},B=e=>{const t=e.hasSourceArrow?f({x:e.arrowLength,y:u.y},e.fromVect,u):u,o=e.hasTargetArrow?f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to):e.to,r=e.arrowLength+e.arrowOffset,i=f({x:r,y:u.y},e.fromVect,u),s=Math.cos(e.detourDirection)*e.detourDistance,h=Math.sin(e.detourDirection)*e.detourDistance,d=s*e.flipX,c=h*e.flipY,l={x:i.x+d,y:i.y+c},a=f({x:e.to.x-r,y:e.to.y},e.toVect,e.to),g={x:a.x+d,y:a.y+c};return I([t,i,l,g,a,o],e.roundness)},ct=e=>{const t=e.hasSourceArrow?f({x:e.arrowLength,y:u.y},e.fromVect,u):u,o=e.hasTargetArrow?f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to):e.to,r=e.arrowLength+e.arrowOffset,i=f({x:r,y:u.y},e.fromVect,u),s=f({x:e.to.x-r,y:e.to.y},e.toVect,e.to);return I([t,i,s,o],e.roundness)},lt=e=>{const t=e.hasSourceArrow?f({x:e.arrowLength,y:u.y},e.fromVect,u):u,o=e.hasTargetArrow?f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to):e.to,r=e.arrowLength+e.arrowOffset,i=r-e.roundness,s=f({x:i,y:u.y},e.fromVect,u),h=f({x:e.to.x-i,y:e.to.y},e.toVect,e.to),d=Math.max((s.y+h.y)/2,r),c=e.to.x/2,l={x:s.x,y:e.flipY>0?d:-r},a={x:c,y:l.y},g={x:h.x,y:e.flipY>0?e.to.y-d:e.to.y+r},y={x:c,y:g.y};return I([t,s,l,a,y,g,h,o],e.roundness)},z=e=>{const t=e.arrowOffset,o=e.side,r=e.arrowLength+t,i=r+2*o,h=[{x:e.arrowLength,y:u.y},{x:r,y:u.y},{x:r,y:e.side},{x:i,y:e.side},{x:i,y:-e.side},{x:r,y:-e.side},{x:r,y:u.y},{x:e.arrowLength,y:u.y}].map(c=>f(c,e.fromVect,u)),d=`M ${u.x} ${u.y} L ${h[0].x} ${h[0].y} `;return`${e.hasSourceArrow||e.hasTargetArrow?"":d}${I(h,e.roundness)}`},at=e=>{const t=e.smallRadius,o=e.radius,r=Math.sqrt(t*t+o*o),i=t+o,s=e.arrowLength+r*(1-o/i),h=t*o/i,c=[{x:e.arrowLength,y:u.y},{x:s,y:h},{x:s,y:-h}].map(g=>f(g,e.fromVect,u)),l=[`M ${c[0].x} ${c[0].y}`,`A ${t} ${t} 0 0 1 ${c[1].x} ${c[1].y}`,`A ${o} ${o} 0 1 0 ${c[2].x} ${c[2].y}`,`A ${t} ${t} 0 0 1 ${c[0].x} ${c[0].y}`].join(" "),a=`M 0 0 L ${c[0].x} ${c[0].y} `;return`${e.hasSourceArrow||e.hasTargetArrow?"":a}${l}`},w=Object.freeze({color:"#777777",width:1,arrowLength:15,arrowWidth:4,arrowOffset:15,hasSourceArrow:!1,hasTargetArrow:!1,cycleRadius:30,cycleSquareSide:30,roundness:10,detourDistance:100,detourDirection:-Math.PI/2,detourDirectionVertical:0,smallCycleRadius:15,curvature:90});class K{constructor(t){n(this,"svg",p());n(this,"group",W());n(this,"line");n(this,"sourceArrow",null);n(this,"targetArrow",null);n(this,"arrowLength");n(this,"arrowWidth");n(this,"curvature");n(this,"portCycleRadius");n(this,"portCycleSmallRadius");n(this,"detourDirection");n(this,"detourDistance");n(this,"hasSourceArrow");n(this,"hasTargetArrow");this.arrowLength=(t==null?void 0:t.arrowLength)??w.arrowLength,this.arrowWidth=(t==null?void 0:t.arrowWidth)??w.arrowWidth,this.curvature=(t==null?void 0:t.curvature)??w.curvature,this.portCycleRadius=(t==null?void 0:t.cycleRadius)??w.cycleRadius,this.portCycleSmallRadius=(t==null?void 0:t.smallCycleRadius)??w.smallCycleRadius,this.detourDirection=(t==null?void 0:t.detourDirection)??w.detourDirection,this.detourDistance=(t==null?void 0:t.detourDistance)??w.detourDistance,this.hasSourceArrow=(t==null?void 0:t.hasSourceArrow)??w.hasSourceArrow,this.hasTargetArrow=(t==null?void 0:t.hasTargetArrow)??w.hasTargetArrow;const o=(t==null?void 0:t.color)??w.color,r=(t==null?void 0:t.width)??w.width;this.svg.appendChild(this.group),this.line=F(o,r),this.group.appendChild(this.line),this.hasSourceArrow&&(this.sourceArrow=P(o),this.group.appendChild(this.sourceArrow)),this.hasTargetArrow&&(this.targetArrow=P(o),this.group.appendChild(this.targetArrow))}render(t){const{x:o,y:r,width:i,height:s,flipX:h,flipY:d}=R(t.source,t.target);this.svg.style.transform=`translate(${o}px, ${r}px)`,this.svg.style.width=`${i}px`,this.svg.style.height=`${s}px`,this.group.style.transform=`scale(${h}, ${d})`;const c=N(t.source.direction,h,d),l=N(t.target.direction,h,d),a={x:i,y:s};let g,y=l,x=-this.arrowLength;if(t.source.portId===t.target.portId?(g=at({fromVect:c,radius:this.portCycleRadius,smallRadius:this.portCycleSmallRadius,arrowLength:this.arrowLength,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),y=c,x=this.arrowLength):t.source.nodeId===t.target.nodeId?g=ht({to:a,fromVect:c,toVect:l,flipX:h,flipY:d,arrowLength:this.arrowLength,detourDirection:this.detourDirection,detourDistance:this.detourDistance,curvature:this.curvature,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}):g=st({to:a,fromVect:c,toVect:l,arrowLength:this.arrowLength,curvature:this.curvature,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),this.line.setAttribute("d",g),this.sourceArrow){const v=L(c,u,this.arrowLength,this.arrowWidth);this.sourceArrow.setAttribute("d",v)}if(this.targetArrow){const v=L(y,a,x,this.arrowWidth);this.targetArrow.setAttribute("d",v)}}}class _{constructor(t){n(this,"svg",p());n(this,"group",W());n(this,"line");n(this,"sourceArrow",null);n(this,"targetArrow",null);n(this,"arrowLength");n(this,"arrowWidth");n(this,"arrowOffset");n(this,"roundness");n(this,"cycleSquareSide");n(this,"detourDirection");n(this,"detourDistance");n(this,"hasSourceArrow");n(this,"hasTargetArrow");this.arrowLength=(t==null?void 0:t.arrowLength)??w.arrowLength,this.arrowWidth=(t==null?void 0:t.arrowWidth)??w.arrowWidth,this.arrowOffset=(t==null?void 0:t.arrowOffset)??w.arrowOffset,this.cycleSquareSide=(t==null?void 0:t.cycleSquareSide)??w.cycleSquareSide;const o=(t==null?void 0:t.roundness)??w.roundness;this.roundness=Math.min(o,this.arrowOffset,this.cycleSquareSide/2),this.detourDirection=(t==null?void 0:t.detourDirection)??w.detourDirection,this.detourDistance=(t==null?void 0:t.detourDistance)??w.detourDistance,this.hasSourceArrow=(t==null?void 0:t.hasSourceArrow)??w.hasSourceArrow,this.hasTargetArrow=(t==null?void 0:t.hasTargetArrow)??w.hasTargetArrow;const r=(t==null?void 0:t.color)??w.color,i=(t==null?void 0:t.width)??w.width;this.svg.appendChild(this.group),this.line=F(r,i),this.group.appendChild(this.line),this.hasSourceArrow&&(this.sourceArrow=P(r),this.group.appendChild(this.sourceArrow)),this.hasTargetArrow&&(this.targetArrow=P(r),this.group.appendChild(this.targetArrow))}render(t){const{x:o,y:r,width:i,height:s,flipX:h,flipY:d}=R(t.source,t.target);this.svg.style.transform=`translate(${o}px, ${r}px)`,this.svg.style.width=`${i}px`,this.svg.style.height=`${s}px`,this.group.style.transform=`scale(${h}, ${d})`;const c=N(t.source.direction,h,d),l=N(t.target.direction,h,d),a={x:i,y:s};let g,y=l,x=-this.arrowLength;if(t.source.portId===t.target.portId?(g=z({fromVect:c,arrowLength:this.arrowLength,side:this.cycleSquareSide,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),y=c,x=this.arrowLength):t.source.nodeId===t.target.nodeId?g=B({to:a,fromVect:c,toVect:l,flipX:h,flipY:d,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,detourDirection:this.detourDirection,detourDistance:this.detourDistance,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}):g=dt({to:a,fromVect:c,toVect:l,flipX:h,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),this.line.setAttribute("d",g),this.sourceArrow){const v=L(c,u,this.arrowLength,this.arrowWidth);this.sourceArrow.setAttribute("d",v)}if(this.targetArrow){const v=L(y,a,x,this.arrowWidth);this.targetArrow.setAttribute("d",v)}}}class J{constructor(t){n(this,"svg",p());n(this,"group",W());n(this,"line");n(this,"sourceArrow",null);n(this,"targetArrow",null);n(this,"arrowLength");n(this,"arrowWidth");n(this,"arrowOffset");n(this,"roundness");n(this,"cycleSquareSide");n(this,"detourDirection");n(this,"detourDistance");n(this,"hasSourceArrow");n(this,"hasTargetArrow");this.arrowLength=(t==null?void 0:t.arrowLength)??w.arrowLength,this.arrowWidth=(t==null?void 0:t.arrowWidth)??w.arrowWidth,this.arrowOffset=(t==null?void 0:t.arrowOffset)??w.arrowOffset,this.cycleSquareSide=(t==null?void 0:t.cycleSquareSide)??w.cycleSquareSide;const o=(t==null?void 0:t.roundness)??w.roundness;this.roundness=Math.min(o,this.arrowOffset,this.cycleSquareSide/2),this.detourDirection=(t==null?void 0:t.detourDirection)??w.detourDirection,this.detourDistance=(t==null?void 0:t.detourDistance)??w.detourDistance,this.hasSourceArrow=(t==null?void 0:t.hasSourceArrow)??w.hasSourceArrow,this.hasTargetArrow=(t==null?void 0:t.hasTargetArrow)??w.hasTargetArrow;const r=(t==null?void 0:t.color)??w.color,i=(t==null?void 0:t.width)??w.width;this.svg.appendChild(this.group),this.line=F(r,i),this.group.appendChild(this.line),this.hasSourceArrow&&(this.sourceArrow=P(r),this.group.appendChild(this.sourceArrow)),this.hasTargetArrow&&(this.targetArrow=P(r),this.group.appendChild(this.targetArrow))}render(t){const{x:o,y:r,width:i,height:s,flipX:h,flipY:d}=R(t.source,t.target);this.svg.style.transform=`translate(${o}px, ${r}px)`,this.svg.style.width=`${i}px`,this.svg.style.height=`${s}px`,this.group.style.transform=`scale(${h}, ${d})`;const c=N(t.source.direction,h,d),l=N(t.target.direction,h,d),a={x:i,y:s};let g,y=l,x=-this.arrowLength;if(t.source.portId===t.target.portId?(g=z({fromVect:c,arrowLength:this.arrowLength,side:this.cycleSquareSide,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),y=c,x=this.arrowLength):t.source.nodeId===t.target.nodeId?g=B({to:a,fromVect:c,toVect:l,flipX:h,flipY:d,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,detourDirection:this.detourDirection,detourDistance:this.detourDistance,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}):g=ct({to:a,fromVect:c,toVect:l,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),this.line.setAttribute("d",g),this.sourceArrow){const v=L(c,u,this.arrowLength,this.arrowWidth);this.sourceArrow.setAttribute("d",v)}if(this.targetArrow){const v=L(y,a,x,this.arrowWidth);this.targetArrow.setAttribute("d",v)}}}class Q{constructor(t){n(this,"svg",p());n(this,"group",W());n(this,"line");n(this,"sourceArrow",null);n(this,"targetArrow",null);n(this,"arrowLength");n(this,"arrowWidth");n(this,"arrowOffset");n(this,"roundness");n(this,"cycleSquareSide");n(this,"detourDirection");n(this,"detourDistance");n(this,"hasSourceArrow");n(this,"hasTargetArrow");this.arrowLength=(t==null?void 0:t.arrowLength)??w.arrowLength,this.arrowWidth=(t==null?void 0:t.arrowWidth)??w.arrowWidth,this.arrowOffset=(t==null?void 0:t.arrowOffset)??w.arrowOffset,this.cycleSquareSide=(t==null?void 0:t.cycleSquareSide)??w.cycleSquareSide;const o=(t==null?void 0:t.roundness)??w.roundness;this.roundness=Math.min(o,this.arrowOffset,this.cycleSquareSide/2),this.detourDirection=(t==null?void 0:t.detourDirection)??w.detourDirectionVertical,this.detourDistance=(t==null?void 0:t.detourDistance)??w.detourDistance,this.hasSourceArrow=(t==null?void 0:t.hasSourceArrow)??w.hasSourceArrow,this.hasTargetArrow=(t==null?void 0:t.hasTargetArrow)??w.hasTargetArrow;const r=(t==null?void 0:t.color)??w.color,i=(t==null?void 0:t.width)??w.width;this.svg.appendChild(this.group),this.line=F(r,i),this.group.appendChild(this.line),this.hasSourceArrow&&(this.sourceArrow=P(r),this.group.appendChild(this.sourceArrow)),this.hasTargetArrow&&(this.targetArrow=P(r),this.group.appendChild(this.targetArrow))}render(t){const{x:o,y:r,width:i,height:s,flipX:h,flipY:d}=R(t.source,t.target);this.svg.style.transform=`translate(${o}px, ${r}px)`,this.svg.style.width=`${i}px`,this.svg.style.height=`${s}px`,this.group.style.transform=`scale(${h}, ${d})`;const c=N(t.source.direction,h,d),l=N(t.target.direction,h,d),a={x:i,y:s};let g,y=l,x=-this.arrowLength;if(t.source.portId===t.target.portId?(g=z({fromVect:c,arrowLength:this.arrowLength,side:this.cycleSquareSide,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),y=c,x=this.arrowLength):t.source.nodeId===t.target.nodeId?g=B({to:a,fromVect:c,toVect:l,flipX:h,flipY:d,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,detourDirection:this.detourDirection,detourDistance:this.detourDistance,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}):g=lt({to:a,fromVect:c,toVect:l,flipY:d,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),this.line.setAttribute("d",g),this.sourceArrow){const v=L(c,u,this.arrowLength,this.arrowWidth);this.sourceArrow.setAttribute("d",v)}if(this.targetArrow){const v=L(y,a,x,this.arrowWidth);this.targetArrow.setAttribute("d",v)}}}const gt=e=>{if(typeof e=="function")return e;switch(e==null?void 0:e.type){case"straight":return()=>new J({color:e.color,width:e.width,arrowLength:e.arrowLength,arrowWidth:e.arrowWidth,arrowOffset:e.arrowOffset,hasSourceArrow:e.hasSourceArrow,hasTargetArrow:e.hasTargetArrow,cycleSquareSide:e.cycleSquareSide,roundness:e.roundness,detourDistance:e.detourDistance,detourDirection:e.detourDirection});case"horizontal":return()=>new _({color:e.color,width:e.width,arrowLength:e.arrowLength,arrowWidth:e.arrowWidth,arrowOffset:e.arrowOffset,hasSourceArrow:e.hasSourceArrow,hasTargetArrow:e.hasTargetArrow,cycleSquareSide:e.cycleSquareSide,roundness:e.roundness,detourDistance:e.detourDistance,detourDirection:e.detourDirection});case"vertical":return()=>new Q({color:e.color,width:e.width,arrowLength:e.arrowLength,arrowWidth:e.arrowWidth,arrowOffset:e.arrowOffset,hasSourceArrow:e.hasSourceArrow,hasTargetArrow:e.hasTargetArrow,cycleSquareSide:e.cycleSquareSide,roundness:e.roundness,detourDistance:e.detourDistance,detourDirection:e.detourDirection});default:return()=>new K({color:e.color,width:e.width,arrowLength:e.arrowLength,arrowWidth:e.arrowWidth,hasSourceArrow:e.hasSourceArrow,hasTargetArrow:e.hasTargetArrow,cycleRadius:e.cycleRadius,smallCycleRadius:e.smallCycleRadius,curvature:e.curvature,detourDistance:e.detourDistance,detourDirection:e.detourDirection})}},G=e=>()=>e,Z=G(0),U=()=>{let e=0;return()=>e++},ut=(e,t)=>{let o=Z,r=Z;e==="incremental"&&(o=U()),t==="incremental"&&(r=U());const i=U();return e==="shared-incremental"&&(o=i),t==="shared-incremental"&&(r=i),typeof e=="number"&&(o=G(e)),typeof t=="number"&&(r=G(t)),typeof e=="function"&&(o=e),typeof t=="function"&&(r=t),{nodesPriorityFn:o,edgesPriorityFn:r}},wt=e=>{var o,r,i,s,h;const t=ut((o=e==null?void 0:e.nodes)==null?void 0:o.priority,(r=e==null?void 0:e.edges)==null?void 0:r.priority);return{nodes:{centerFn:((i=e==null?void 0:e.nodes)==null?void 0:i.centerFn)??S,priorityFn:t.nodesPriorityFn},ports:{direction:((s=e==null?void 0:e.ports)==null?void 0:s.direction)??0},edges:{shapeFactory:gt(((h=e==null?void 0:e.edges)==null?void 0:h.shape)??{}),priorityFn:t.edgesPriorityFn}}};class yt{constructor(){n(this,"nodes",new Map);n(this,"ports",new Map);n(this,"nodePorts",new Map);n(this,"portNodeId",new Map);n(this,"edges",new Map);n(this,"incommingEdges",new Map);n(this,"outcommingEdges",new Map);n(this,"cycleEdges",new Map)}addNode(t){this.nodes.set(t.nodeId,{element:t.element,x:t.x,y:t.y,centerFn:t.centerFn,priority:t.priority}),this.nodePorts.set(t.nodeId,new Map)}getAllNodeIds(){return Array.from(this.nodes.keys())}getNode(t){return this.nodes.get(t)}removeNode(t){this.nodes.delete(t),this.nodePorts.delete(t)}addPort(t){this.ports.set(t.portId,{element:t.element,direction:t.direction}),this.cycleEdges.set(t.portId,new Set),this.incommingEdges.set(t.portId,new Set),this.outcommingEdges.set(t.portId,new Set),this.portNodeId.set(t.portId,t.nodeId),this.nodePorts.get(t.nodeId).set(t.portId,t.element)}getPort(t){return this.ports.get(t)}getAllPortIds(){return Array.from(this.ports.keys())}getNodePortIds(t){const o=this.nodePorts.get(t);if(o!==void 0)return Array.from(o.keys())}getPortNodeId(t){return this.portNodeId.get(t)}removePort(t){const o=this.portNodeId.get(t);this.portNodeId.delete(t),this.nodePorts.get(o).delete(t),this.ports.delete(t)}addEdge(t){this.edges.set(t.edgeId,{from:t.from,to:t.to,shape:t.shape,priority:t.priority}),t.from!==t.to?(this.outcommingEdges.get(t.from).add(t.edgeId),this.incommingEdges.get(t.to).add(t.edgeId)):this.cycleEdges.get(t.from).add(t.edgeId)}updateEdgeFrom(t,o){const r=this.edges.get(t);this.removeEdge(t),this.addEdge({edgeId:t,from:o,to:r.to,shape:r.shape,priority:r.priority})}updateEdgeTo(t,o){const r=this.edges.get(t);this.removeEdge(t),this.addEdge({edgeId:t,from:r.from,to:o,shape:r.shape,priority:r.priority})}getAllEdgeIds(){return Array.from(this.edges.keys())}getEdge(t){return this.edges.get(t)}removeEdge(t){const o=this.edges.get(t),r=o.from,i=o.to;this.cycleEdges.get(r).delete(t),this.cycleEdges.get(i).delete(t),this.incommingEdges.get(r).delete(t),this.incommingEdges.get(i).delete(t),this.outcommingEdges.get(r).delete(t),this.outcommingEdges.get(i).delete(t),this.edges.delete(t)}clear(){this.nodes.clear(),this.ports.clear(),this.nodePorts.clear(),this.portNodeId.clear(),this.edges.clear(),this.incommingEdges.clear(),this.outcommingEdges.clear(),this.cycleEdges.clear()}getPortIncomingEdgeIds(t){return Array.from(this.incommingEdges.get(t))}getPortOutcomingEdgeIds(t){return Array.from(this.outcommingEdges.get(t))}getPortCycleEdgeIds(t){return Array.from(this.cycleEdges.get(t))}getPortAdjacentEdgeIds(t){return[...this.getPortIncomingEdgeIds(t),...this.getPortOutcomingEdgeIds(t),...this.getPortCycleEdgeIds(t)]}getNodeIncomingEdgeIds(t){const o=Array.from(this.nodePorts.get(t).keys());let r=[];return o.forEach(i=>{r=[...r,...this.getPortIncomingEdgeIds(i)]}),r}getNodeOutcomingEdgeIds(t){const o=Array.from(this.nodePorts.get(t).keys());let r=[];return o.forEach(i=>{r=[...r,...this.getPortOutcomingEdgeIds(i)]}),r}getNodeCycleEdgeIds(t){const o=Array.from(this.nodePorts.get(t).keys());let r=[];return o.forEach(i=>{r=[...r,...this.getPortCycleEdgeIds(i)]}),r}getNodeAdjacentEdgeIds(t){return[...this.getNodeIncomingEdgeIds(t),...this.getNodeOutcomingEdgeIds(t),...this.getNodeCycleEdgeIds(t)]}}const O=e=>({scale:1/e.scale,dx:-e.dx/e.scale,dy:-e.dy/e.scale}),q={scale:1,dx:0,dy:0};class ft{constructor(){n(this,"viewportMatrix",q);n(this,"contentMatrix",q)}getViewportMatrix(){return this.viewportMatrix}getContentMatrix(){return this.contentMatrix}patchViewportMatrix(t){this.viewportMatrix={scale:t.scale??this.viewportMatrix.scale,dx:t.dx??this.viewportMatrix.dx,dy:t.dy??this.viewportMatrix.dy},this.contentMatrix=O(this.viewportMatrix)}patchContentMatrix(t){this.contentMatrix={scale:t.scale??this.contentMatrix.scale,dx:t.dx??this.contentMatrix.dx,dy:t.dy??this.contentMatrix.dy},this.viewportMatrix=O(this.contentMatrix)}}class vt{constructor(t){this.transformer=t}getViewportMatrix(){return{...this.transformer.getViewportMatrix()}}getContentMatrix(){return{...this.transformer.getContentMatrix()}}}const xt=()=>{const e=document.createElement("div");return e.style.width="100%",e.style.height="100%",e.style.position="relative",e.style.overflow="hidden",e},Et=()=>{const e=document.createElement("div");return e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.width="0",e.style.height="0",e},St=()=>{const e=document.createElement("div");return e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.visibility="hidden",e};class At{constructor(t,o){n(this,"canvasWrapper",null);n(this,"host",xt());n(this,"container",Et());n(this,"nodeIdToWrapperElementMap",new Map);n(this,"edgeIdToElementMap",new Map);this.graphStore=t,this.viewportTransformer=o,this.host.appendChild(this.container)}attach(t){this.detach(),this.canvasWrapper=t,this.canvasWrapper.appendChild(this.host)}detach(){this.canvasWrapper!==null&&(this.canvasWrapper.removeChild(this.host),this.canvasWrapper=null)}applyTransform(){const t=this.viewportTransformer.getContentMatrix();this.container.style.transform=`matrix(${t.scale}, 0, 0, ${t.scale}, ${t.dx}, ${t.dy})`}attachNode(t){const o=this.graphStore.getNode(t),r=St();r.appendChild(o.element),this.container.appendChild(r),this.nodeIdToWrapperElementMap.set(t,r),this.updateNodeCoordinates(t),this.updateNodePriority(t),r.style.visibility="visible"}detachNode(t){const o=this.graphStore.getNode(t),r=this.nodeIdToWrapperElementMap.get(t);r.removeChild(o.element),this.container.removeChild(r),this.nodeIdToWrapperElementMap.delete(t)}attachEdge(t){const o=this.graphStore.getEdge(t);this.edgeIdToElementMap.set(t,o.shape.svg),this.container.appendChild(o.shape.svg),this.renderEdge(t),this.updateEdgePriority(t)}detachEdge(t){const o=this.graphStore.getEdge(t);this.container.removeChild(o.shape.svg),this.edgeIdToElementMap.delete(t)}clear(){this.edgeIdToElementMap.forEach((t,o)=>{this.detachEdge(o)}),this.nodeIdToWrapperElementMap.forEach((t,o)=>{this.detachNode(o)})}destroy(){this.clear(),this.detach(),this.host.removeChild(this.container)}updateNodeCoordinates(t){const o=this.nodeIdToWrapperElementMap.get(t),r=this.graphStore.getNode(t),{width:i,height:s}=r.element.getBoundingClientRect(),h=this.viewportTransformer.getViewportMatrix().scale,d=r.centerFn(i,s),c=r.x-h*d.x,l=r.y-h*d.y;o.style.transform=`translate(${c}px, ${l}px)`}updateNodePriority(t){const o=this.graphStore.getNode(t),r=this.nodeIdToWrapperElementMap.get(t);r.style.zIndex=`${o.priority}`}updateEdgeShape(t){const o=this.edgeIdToElementMap.get(t);this.container.removeChild(o);const r=this.graphStore.getEdge(t);this.edgeIdToElementMap.set(t,r.shape.svg),this.container.appendChild(r.shape.svg)}renderEdge(t){const o=this.graphStore.getEdge(t),r=this.graphStore.getPort(o.from),i=this.graphStore.getPort(o.to),s=r.element.getBoundingClientRect(),h=i.element.getBoundingClientRect(),d=this.host.getBoundingClientRect(),c=this.viewportTransformer.getViewportMatrix(),l={x:c.scale*(s.left-d.left)+c.dx,y:c.scale*(s.top-d.top)+c.dy},a={x:c.scale*(h.left-d.left)+c.dx,y:c.scale*(h.top-d.top)+c.dy},g={x:l.x,y:l.y,width:s.width*c.scale,height:s.height*c.scale,direction:r.direction,portId:o.from,nodeId:this.graphStore.getPortNodeId(o.from)},y={x:a.x,y:a.y,width:h.width*c.scale,height:h.height*c.scale,direction:i.direction,portId:o.to,nodeId:this.graphStore.getPortNodeId(o.to)};o.shape.render({source:g,target:y})}updateEdgePriority(t){const o=this.graphStore.getEdge(t);o.shape.svg.style.zIndex=`${o.priority}`}}class m{constructor(t){n(this,"counter",0);this.checkExists=t}create(t){if(t!==void 0)return t;for(;this.checkExists(this.counter);)this.counter++;return this.counter}reset(){this.counter=0}}class A extends Error{constructor(){super(...arguments);n(this,"name","HtmlGraphError")}}class Tt{constructor(t,o,r,i,s,h,d){n(this,"nodeIdGenerator",new m(t=>this.graphStore.getNode(t)!==void 0));n(this,"portIdGenerator",new m(t=>this.graphStore.getPort(t)!==void 0));n(this,"edgeIdGenerator",new m(t=>this.graphStore.getEdge(t)!==void 0));this.graphStore=t,this.htmlController=o,this.viewportTransformer=r,this.defaultNodesCenterFn=i,this.defaultPortsDirection=s,this.defaultNodesPriorityFn=h,this.defaultEdgesPriorityFn=d}attach(t){this.htmlController.attach(t)}detach(){this.htmlController.detach()}addNode(t){const o=this.nodeIdGenerator.create(t.nodeId);if(this.graphStore.getNode(o)!==void 0)throw new A("failed to add node with existing id");this.graphStore.addNode({nodeId:o,element:t.element,x:t.x,y:t.y,centerFn:t.centerFn??this.defaultNodesCenterFn,priority:t.priority??this.defaultNodesPriorityFn()}),this.htmlController.attachNode(o),Array.from(t.ports??[]).forEach(r=>{this.markPort({portId:r.id,element:r.element,nodeId:o,direction:r.direction})})}markPort(t){const o=this.portIdGenerator.create(t.portId);if(this.graphStore.getPort(o)!==void 0)throw new A("failed to add port with existing id");if(this.graphStore.getNode(t.nodeId)===void 0)throw new A("failed to set port on nonexisting node");this.graphStore.addPort({portId:o,element:t.element,nodeId:t.nodeId,direction:t.direction??this.defaultPortsDirection})}addEdge(t){const o=this.edgeIdGenerator.create(t.edgeId);if(this.graphStore.getEdge(o)!==void 0)throw new A("failed to add edge with existing id");if(this.graphStore.getPort(t.from)===void 0)throw new A("failed to add edge from nonexisting port");if(this.graphStore.getPort(t.to)===void 0)throw new A("failed to add edge to nonexisting port");this.graphStore.addEdge({edgeId:o,from:t.from,to:t.to,shape:t.shape,priority:t.priority??this.defaultEdgesPriorityFn()}),this.htmlController.attachEdge(o)}updateEdge(t){const o=this.graphStore.getEdge(t.edgeId);if(o===void 0)throw new A("failed to update nonexisting edge");t.shape!==void 0&&(o.shape=t.shape,this.htmlController.updateEdgeShape(t.edgeId)),t.priority!==void 0&&(o.priority=t.priority,this.htmlController.updateEdgePriority(t.edgeId)),t.from!==void 0&&this.graphStore.updateEdgeFrom(t.edgeId,t.from),t.to!==void 0&&this.graphStore.updateEdgeTo(t.edgeId,t.to),this.htmlController.renderEdge(t.edgeId)}updatePort(t,o){const r=this.graphStore.getPort(t);if(r===void 0)throw new A("failed to unset nonexisting port");r.direction=o.direction??r.direction,this.graphStore.getPortAdjacentEdgeIds(t).forEach(s=>{this.htmlController.renderEdge(s)})}updateNode(t,o){const r=this.graphStore.getNode(t);if(r===void 0)throw new A("failed to update nonexisting node");r.x=(o==null?void 0:o.x)??r.x,r.y=(o==null?void 0:o.y)??r.y,r.centerFn=(o==null?void 0:o.centerFn)??r.centerFn,r.priority=(o==null?void 0:o.priority)??r.priority,this.htmlController.updateNodeCoordinates(t),this.htmlController.updateNodePriority(t),this.graphStore.getNodeAdjacentEdgeIds(t).forEach(s=>{this.htmlController.renderEdge(s)})}removeEdge(t){if(this.graphStore.getEdge(t)===void 0)throw new A("failed to remove nonexisting edge");this.htmlController.detachEdge(t),this.graphStore.removeEdge(t)}unmarkPort(t){if(this.graphStore.getPort(t)===void 0)throw new A("failed to unset nonexisting port");this.graphStore.getPortAdjacentEdgeIds(t).forEach(o=>{this.removeEdge(o)}),this.graphStore.removePort(t)}removeNode(t){if(this.graphStore.getNode(t)===void 0)throw new A("failed to remove nonexisting node");this.graphStore.getNodePortIds(t).forEach(o=>{this.unmarkPort(o)}),this.htmlController.detachNode(t),this.graphStore.removeNode(t)}patchViewportMatrix(t){this.viewportTransformer.patchViewportMatrix(t),this.htmlController.applyTransform()}patchContentMatrix(t){this.viewportTransformer.patchContentMatrix(t),this.htmlController.applyTransform()}clear(){this.htmlController.clear(),this.graphStore.clear(),this.nodeIdGenerator.reset(),this.portIdGenerator.reset(),this.edgeIdGenerator.reset()}destroy(){this.clear(),this.htmlController.destroy()}}class Mt{constructor(t){this.graphStore=t}getNode(t){const o=this.graphStore.getNode(t);return o===void 0?null:{element:o.element,x:o.x,y:o.y,centerFn:o.centerFn,priority:o.priority}}getAllNodeIds(){return this.graphStore.getAllNodeIds()}getPort(t){const o=this.graphStore.getPort(t);return o===void 0?null:{element:o.element,direction:o.direction}}getAllPortIds(){return this.graphStore.getAllPortIds()}getNodePortIds(t){return this.graphStore.getNodePortIds(t)}getPortNodeId(t){return this.graphStore.getPortNodeId(t)??null}getAllEdgeIds(){return this.graphStore.getAllEdgeIds()}getEdge(t){const o=this.graphStore.getEdge(t);return o===void 0?null:{from:o.from,to:o.to,priority:o.priority}}getPortIncomingEdgeIds(t){return this.graphStore.getPortIncomingEdgeIds(t)}getPortOutcomingEdgeIds(t){return this.graphStore.getPortOutcomingEdgeIds(t)}getPortCycleEdgeIds(t){return this.graphStore.getPortCycleEdgeIds(t)}getPortAdjacentEdgeIds(t){return this.graphStore.getPortAdjacentEdgeIds(t)}getNodeIncomingEdgeIds(t){return this.graphStore.getNodeIncomingEdgeIds(t)}getNodeOutcomingEdgeIds(t){return this.graphStore.getNodeOutcomingEdgeIds(t)}getNodeCycleEdgeIds(t){return this.graphStore.getNodeCycleEdgeIds(t)}getNodeAdjacentEdgeIds(t){return this.graphStore.getNodeAdjacentEdgeIds(t)}}class tt{constructor(t){n(this,"transformation");n(this,"model");n(this,"canvasController");n(this,"edgeShapeFactory");this.apiOptions=t;const o=wt(this.apiOptions),r=new ft,i=new yt;this.model=new Mt(i),this.transformation=new vt(r);const s=new At(i,r);this.canvasController=new Tt(i,s,r,o.nodes.centerFn,o.ports.direction,o.nodes.priorityFn,o.edges.priorityFn),this.edgeShapeFactory=o.edges.shapeFactory}attach(t){return this.canvasController.attach(t),this}detach(){return this.canvasController.detach(),this}addNode(t){return this.canvasController.addNode({nodeId:t.id,element:t.element,x:t.x,y:t.y,ports:t.ports,centerFn:t.centerFn,priority:t.priority}),this}updateNode(t,o){return this.canvasController.updateNode(t,{x:o==null?void 0:o.x,y:o==null?void 0:o.y,priority:o==null?void 0:o.priority,centerFn:o==null?void 0:o.centerFn}),this}removeNode(t){return this.canvasController.removeNode(t),this}addEdge(t){return this.canvasController.addEdge({edgeId:t.id,from:t.from,to:t.to,shape:t.shape??this.edgeShapeFactory(),priority:t.priority}),this}updateEdge(t,o){return this.canvasController.updateEdge({edgeId:t,shape:o==null?void 0:o.shape,priority:o==null?void 0:o.priority,from:o==null?void 0:o.from,to:o==null?void 0:o.to}),this}removeEdge(t){return this.canvasController.removeEdge(t),this}markPort(t){return this.canvasController.markPort({portId:t.id,element:t.element,nodeId:t.nodeId,direction:t.direction}),this}updatePort(t,o){return this.canvasController.updatePort(t,{direction:o==null?void 0:o.direction}),this}unmarkPort(t){return this.canvasController.unmarkPort(t),this}patchViewportMatrix(t){return this.canvasController.patchViewportMatrix(t),this}patchContentMatrix(t){return this.canvasController.patchContentMatrix(t),this}clear(){return this.canvasController.clear(),this}destroy(){this.clear(),this.canvasController.destroy()}}const Y=(e,t,o)=>{const{x:r,y:i,width:s,height:h}=e.getBoundingClientRect();return t>=r&&t<=r+s&&o>=i&&o<=i+h},X=(e,t,o)=>t>=0&&t<=e.innerWidth&&o>=0&&o<=e.innerHeight,k=(e,t)=>{t!==null?e.style.cursor=t:e.style.removeProperty("cursor")},Ct=e=>{var g,y,x,v,M,T;const t=((g=e==null?void 0:e.events)==null?void 0:g.onNodeDrag)??(()=>{}),o=((y=e==null?void 0:e.events)==null?void 0:y.onBeforeNodeDrag)??(()=>!0),r=((x=e==null?void 0:e.events)==null?void 0:x.onNodeDragFinished)??(()=>{}),i=(e==null?void 0:e.moveOnTop)===!1,s=(v=e==null?void 0:e.mouse)==null?void 0:v.dragCursor,h=s!==void 0?s:"grab",d=(M=e==null?void 0:e.mouse)==null?void 0:M.mouseDownEventValidator,c=d!==void 0?d:C=>C.button===0,l=(T=e==null?void 0:e.mouse)==null?void 0:T.mouseUpEventValidator;return{freezePriority:i,dragCursor:h,mouseDownEventValidator:c,mouseUpEventValidator:l!==void 0?l:C=>C.button===0,onNodeDrag:t,onBeforeNodeDrag:o,onNodeDragFinished:r}};class et{constructor(t,o){n(this,"model");n(this,"transformation");n(this,"maxNodePriority",0);n(this,"nodes",new Map);n(this,"grabbedNodeId",null);n(this,"nodeIdGenerator",new m(t=>this.nodes.has(t)));n(this,"element",null);n(this,"onWindowMouseMove",t=>{if(this.element!==null&&(!Y(this.element,t.clientX,t.clientY)||!X(this.window,t.clientX,t.clientY))){this.cancelMouseDrag();return}this.grabbedNodeId!==null&&this.dragNode(this.grabbedNodeId,t.movementX,t.movementY)});n(this,"onWindowMouseUp",t=>{this.options.mouseUpEventValidator(t)&&this.cancelMouseDrag()});n(this,"onWindowTouchMove",t=>{if(t.touches.length!==1)return;const o=t.touches[0];if(this.element!==null&&(!Y(this.element,o.clientX,o.clientY)||!X(this.window,o.clientX,o.clientY))){this.cancelTouchDrag();return}if(this.grabbedNodeId!==null&&this.previousTouchCoords!==null){const r=o.clientX-this.previousTouchCoords.x,i=o.clientY-this.previousTouchCoords.y;this.dragNode(this.grabbedNodeId,r,i),this.previousTouchCoords={x:t.touches[0].clientX,y:t.touches[0].clientY}}});n(this,"onWindowTouchFinish",()=>{this.previousTouchCoords=null,this.cancelTouchDrag()});n(this,"previousTouchCoords",null);n(this,"window",window);n(this,"options");this.canvas=t,this.transformation=this.canvas.transformation,this.model=this.canvas.model,this.options=Ct(o??{})}attach(t){return this.detach(),this.element=t,this.canvas.attach(this.element),this}detach(){return this.canvas.detach(),this.element!==null&&(this.element=null),this}addNode(t){const o=this.nodeIdGenerator.create(t.id);this.canvas.addNode({...t,id:o}),this.updateMaxNodePriority(o);const r=s=>{if(this.element===null||!this.options.mouseDownEventValidator(s))return;const h=this.model.getNode(o);this.options.onBeforeNodeDrag({nodeId:o,element:t.element,x:h.x,y:h.y})&&(s.stopImmediatePropagation(),this.grabbedNodeId=o,k(this.element,this.options.dragCursor),this.moveNodeOnTop(o),this.window.addEventListener("mouseup",this.onWindowMouseUp),this.window.addEventListener("mousemove",this.onWindowMouseMove))},i=s=>{if(s.touches.length!==1)return;s.stopImmediatePropagation(),this.previousTouchCoords={x:s.touches[0].clientX,y:s.touches[0].clientY};const h=this.model.getNode(o);this.options.onBeforeNodeDrag({nodeId:o,element:t.element,x:h.x,y:h.y})&&(this.grabbedNodeId=o,this.moveNodeOnTop(o),this.window.addEventListener("touchmove",this.onWindowTouchMove),this.window.addEventListener("touchend",this.onWindowTouchFinish),this.window.addEventListener("touchcancel",this.onWindowTouchFinish))};return this.nodes.set(o,{element:t.element,onMouseDown:r,onTouchStart:i}),t.element.addEventListener("mousedown",r),t.element.addEventListener("touchstart",i),this}updateNode(t,o){return this.canvas.updateNode(t,o),this.updateMaxNodePriority(t),this}removeNode(t){const o=this.nodes.get(t);return o!==void 0&&(o.element.removeEventListener("mousedown",o.onMouseDown),o.element.removeEventListener("touchstart",o.onTouchStart)),this.nodes.delete(t),this.canvas.removeNode(t),this}markPort(t){return this.canvas.markPort(t),this}updatePort(t,o){return this.canvas.updatePort(t,o),this}unmarkPort(t){return this.canvas.unmarkPort(t),this}addEdge(t){return this.canvas.addEdge(t),this}updateEdge(t,o){return this.canvas.updateEdge(t,o),this}removeEdge(t){return this.canvas.removeEdge(t),this}patchViewportMatrix(t){return this.canvas.patchViewportMatrix(t),this}patchContentMatrix(t){return this.canvas.patchContentMatrix(t),this}clear(){return this.canvas.clear(),this.nodes.forEach(t=>{t.element.removeEventListener("mousedown",t.onMouseDown),t.element.removeEventListener("touchstart",t.onTouchStart)}),this.nodes.clear(),this.maxNodePriority=0,this}destroy(){this.detach(),this.clear(),this.removeMouseDragListeners(),this.removeTouchDragListeners(),this.canvas.destroy()}dragNode(t,o,r){const i=this.model.getNode(t);if(i===null)return;const s=this.canvas.transformation.getContentMatrix(),h=s.scale*i.x+s.dx,d=s.scale*i.y+s.dy,c=h+o,l=d+r,a=this.canvas.transformation.getViewportMatrix(),g=a.scale*c+a.dx,y=a.scale*l+a.dy;this.canvas.updateNode(t,{x:g,y}),this.options.onNodeDrag({nodeId:t,element:i.element,x:i.x,y:i.y})}updateMaxNodePriority(t){const o=this.model.getNode(t).priority;this.maxNodePriority=Math.max(this.maxNodePriority,o)}moveNodeOnTop(t){if(this.options.freezePriority)return;this.maxNodePriority+=2,this.updateNode(t,{priority:this.maxNodePriority});const o=this.maxNodePriority-1;this.model.getNodeAdjacentEdgeIds(t).forEach(i=>{this.updateEdge(i,{priority:o})})}cancelMouseDrag(){const t=this.model.getNode(this.grabbedNodeId);t!==null&&this.options.onNodeDragFinished({nodeId:this.grabbedNodeId,element:t.element,x:t.x,y:t.y}),this.grabbedNodeId=null,this.element!==null&&k(this.element,null),this.removeMouseDragListeners()}removeMouseDragListeners(){this.window.removeEventListener("mouseup",this.onWindowMouseUp),this.window.removeEventListener("mousemove",this.onWindowMouseMove)}cancelTouchDrag(){this.previousTouchCoords=null;const t=this.model.getNode(this.grabbedNodeId);t!==null&&this.options.onNodeDragFinished({nodeId:this.grabbedNodeId,element:t.element,x:t.x,y:t.y}),this.grabbedNodeId=null,this.removeTouchDragListeners()}removeTouchDragListeners(){this.window.removeEventListener("touchmove",this.onWindowTouchMove),this.window.removeEventListener("touchend",this.onWindowTouchFinish),this.window.removeEventListener("touchcancel",this.onWindowTouchFinish)}}const Nt=e=>{const t=e.minX!==null?e.minX:-1/0,o=e.maxX!==null?e.maxX:1/0,r=e.minY!==null?e.minY:-1/0,i=e.maxY!==null?e.maxY:1/0;return s=>{let h=s.nextTransform.dx,d=s.nextTransform.dy;h<t&&h<s.prevTransform.dx&&(h=Math.min(s.prevTransform.dx,t));const c=s.canvasWidth*s.prevTransform.scale;h>o-c&&h>s.prevTransform.dx&&(h=Math.max(s.prevTransform.dx,o-c)),d<r&&d<s.prevTransform.dy&&(d=Math.min(s.prevTransform.dy,r));const l=s.canvasHeight*s.prevTransform.scale;return d>i-l&&d>s.prevTransform.dy&&(d=Math.max(s.prevTransform.dy,i-l)),{scale:s.nextTransform.scale,dx:h,dy:d}}},Lt=e=>{const t=e.maxContentScale,o=e.minContentScale,r=t!==null?1/t:0,i=o!==null?1/o:1/0;return s=>{const h=s.prevTransform,d=s.nextTransform;let c=d.scale,l=d.dx,a=d.dy;if(d.scale>i&&d.scale>h.scale){c=Math.max(h.scale,i),l=h.dx,a=h.dy;const g=(c-h.scale)/(d.scale-h.scale);l=h.dx+(d.dx-h.dx)*g,a=h.dy+(d.dy-h.dy)*g}if(d.scale<r&&d.scale<h.scale){c=Math.min(h.scale,r),l=h.dx,a=h.dy;const g=(c-h.scale)/(d.scale-h.scale);l=h.dx+(d.dx-h.dx)*g,a=h.dy+(d.dy-h.dy)*g}return{scale:c,dx:l,dy:a}}},Pt=e=>t=>e.reduce((o,r)=>r({prevTransform:t.prevTransform,nextTransform:o,canvasWidth:t.canvasWidth,canvasHeight:t.canvasHeight}),t.nextTransform),ot=e=>{if(typeof e=="function")return e;switch(e.type){case"scale-limit":return Lt({minContentScale:e.minContentScale??0,maxContentScale:e.maxContentScale??1/0});case"shift-limit":return Nt({minX:e.minX??-1/0,maxX:e.maxX??1/0,minY:e.minY??-1/0,maxY:e.maxY??1/0})}},Dt=e=>{var v,M,T,C,j,$,b,V,nt;const t=(v=e==null?void 0:e.scale)==null?void 0:v.mouseWheelSensitivity,o=t!==void 0?t:1.2,r=e==null?void 0:e.transformPreprocessor;let i;r!==void 0?Array.isArray(r)?i=Pt(r.map(D=>ot(D))):i=ot(r):i=D=>D.nextTransform;const s=((M=e==null?void 0:e.shift)==null?void 0:M.cursor)!==void 0?e.shift.cursor:"grab",h=((T=e==null?void 0:e.events)==null?void 0:T.onBeforeTransformChange)??(()=>{}),d=((C=e==null?void 0:e.events)==null?void 0:C.onTransformChange)??(()=>{}),c=(j=e==null?void 0:e.shift)==null?void 0:j.mouseDownEventValidator,l=c!==void 0?c:D=>D.button===0,a=($=e==null?void 0:e.shift)==null?void 0:$.mouseUpEventValidator,g=a!==void 0?a:D=>D.button===0,y=(b=e==null?void 0:e.scale)==null?void 0:b.mouseWheelEventValidator,x=y!==void 0?y:()=>!0;return{wheelSensitivity:o,onTransformStarted:((V=e==null?void 0:e.events)==null?void 0:V.onTransformStarted)??(()=>{}),onTransformFinished:((nt=e==null?void 0:e.events)==null?void 0:nt.onTransformFinished)??(()=>{}),onBeforeTransformChange:h,onTransformChange:d,transformPreprocessor:i,shiftCursor:s,mouseDownEventValidator:l,mouseUpEventValidator:g,mouseWheelEventValidator:x}},H=e=>{const t=[],o=e.touches.length;for(let d=0;d<o;d++)t.push([e.touches[d].clientX,e.touches[d].clientY]);const r=t.reduce((d,c)=>[d[0]+c[0],d[1]+c[1]],[0,0]),i=[r[0]/o,r[1]/o],h=t.map(d=>[d[0]-i[0],d[1]-i[1]]).reduce((d,c)=>d+Math.sqrt(c[0]*c[0]+c[1]*c[1]),0);return{x:i[0],y:i[1],scale:h/o,touchesCnt:o,touches:t}},It=(e,t,o)=>({scale:e.scale,dx:e.dx+e.scale*t,dy:e.dy+e.scale*o}),mt=(e,t,o,r)=>({scale:e.scale*t,dx:e.scale*(1-t)*o+e.dx,dy:e.scale*(1-t)*r+e.dy});class rt{constructor(t,o){n(this,"model");n(this,"transformation");n(this,"element",null);n(this,"prevTouches",null);n(this,"window",window);n(this,"onMouseDown",t=>{this.element===null||!this.options.mouseDownEventValidator(t)||(k(this.element,this.options.shiftCursor),this.window.addEventListener("mousemove",this.onWindowMouseMove),this.window.addEventListener("mouseup",this.onWindowMouseUp),this.options.onTransformStarted())});n(this,"onWindowMouseMove",t=>{if(this.element===null||!Y(this.element,t.clientX,t.clientY)||!X(this.window,t.clientX,t.clientY)){this.stopMouseDrag();return}const o=-t.movementX,r=-t.movementY;this.moveViewport(this.element,o,r)});n(this,"onWindowMouseUp",t=>{this.element===null||!this.options.mouseUpEventValidator(t)||this.stopMouseDrag()});n(this,"onWheelScroll",t=>{if(!this.options.mouseWheelEventValidator(t))return;t.preventDefault();const{left:o,top:r}=this.element.getBoundingClientRect(),i=t.clientX-o,s=t.clientY-r,d=1/(t.deltaY<0?this.options.wheelSensitivity:1/this.options.wheelSensitivity);this.scaleViewport(this.element,d,i,s)});n(this,"onTouchStart",t=>{this.prevTouches=H(t),this.window.addEventListener("touchmove",this.onWindowTouchMove),this.window.addEventListener("touchend",this.onWindowTouchFinish),this.window.addEventListener("touchcancel",this.onWindowTouchFinish),this.options.onTransformStarted()});n(this,"onWindowTouchMove",t=>{const o=this.element;if(o===null)return;const r=H(t);if(!r.touches.every(s=>Y(o,s[0],s[1])&&X(this.window,s[0],s[1]))){this.stopTouchDrag();return}if((r.touchesCnt===1||r.touchesCnt===2)&&this.moveViewport(o,-(r.x-this.prevTouches.x),-(r.y-this.prevTouches.y)),r.touchesCnt===2){const{left:s,top:h}=o.getBoundingClientRect(),d=this.prevTouches.x-s,c=this.prevTouches.y-h,a=1/(r.scale/this.prevTouches.scale);this.scaleViewport(o,a,d,c)}this.prevTouches=r});n(this,"onWindowTouchFinish",t=>{t.touches.length>0?this.prevTouches=H(t):this.stopTouchDrag()});n(this,"observer",new ResizeObserver(()=>{const t=this.canvas.transformation.getViewportMatrix(),{width:o,height:r}=this.element.getBoundingClientRect(),i=this.options.transformPreprocessor({prevTransform:t,nextTransform:t,canvasWidth:o,canvasHeight:r});this.canvas.patchViewportMatrix(i),this.options.onTransformChange()}));n(this,"options");this.canvas=t,this.options=Dt(o),this.transformation=this.canvas.transformation,this.model=this.canvas.model}attach(t){return this.detach(),this.element=t,this.observer.observe(this.element),this.element.addEventListener("mousedown",this.onMouseDown),this.element.addEventListener("wheel",this.onWheelScroll),this.element.addEventListener("touchstart",this.onTouchStart),this.canvas.attach(this.element),this}detach(){return this.canvas.detach(),this.element!==null&&(this.observer.unobserve(this.element),this.element.removeEventListener("mousedown",this.onMouseDown),this.element.removeEventListener("wheel",this.onWheelScroll),this.element.removeEventListener("touchstart",this.onTouchStart),this.element=null),this}addNode(t){return this.canvas.addNode(t),this}updateNode(t,o){return this.canvas.updateNode(t,o),this}removeNode(t){return this.canvas.removeNode(t),this}markPort(t){return this.canvas.markPort(t),this}updatePort(t,o){return this.canvas.updatePort(t,o),this}unmarkPort(t){return this.canvas.unmarkPort(t),this}addEdge(t){return this.canvas.addEdge(t),this}updateEdge(t,o){return this.canvas.updateEdge(t,o),this}removeEdge(t){return this.canvas.removeEdge(t),this}patchViewportMatrix(t){return this.canvas.patchViewportMatrix(t),this}patchContentMatrix(t){return this.canvas.patchContentMatrix(t),this}clear(){return this.canvas.clear(),this}destroy(){this.detach(),this.removeMouseDragListeners(),this.removeTouchDragListeners(),this.canvas.destroy()}moveViewport(t,o,r){this.options.onBeforeTransformChange();const i=this.transformation.getViewportMatrix(),s=It(i,o,r),{width:h,height:d}=t.getBoundingClientRect(),c=this.options.transformPreprocessor({prevTransform:i,nextTransform:s,canvasWidth:h,canvasHeight:d});this.canvas.patchViewportMatrix(c),this.options.onTransformChange()}scaleViewport(t,o,r,i){this.options.onBeforeTransformChange();const s=this.canvas.transformation.getViewportMatrix(),h=mt(s,o,r,i),{width:d,height:c}=t.getBoundingClientRect(),l=this.options.transformPreprocessor({prevTransform:s,nextTransform:h,canvasWidth:d,canvasHeight:c});this.canvas.patchViewportMatrix(l),this.options.onTransformChange()}stopMouseDrag(){this.element!==null&&k(this.element,null),this.removeMouseDragListeners(),this.options.onTransformFinished()}removeMouseDragListeners(){this.window.removeEventListener("mousemove",this.onWindowMouseMove),this.window.removeEventListener("mouseup",this.onWindowMouseUp)}stopTouchDrag(){this.prevTouches=null,this.removeTouchDragListeners(),this.options.onTransformFinished()}removeTouchDragListeners(){this.window.removeEventListener("touchmove",this.onWindowTouchMove),this.window.removeEventListener("touchend",this.onWindowTouchFinish),this.window.removeEventListener("touchcancel",this.onWindowTouchFinish)}}class $t{constructor(){n(this,"keyMap",new Map);n(this,"valueMap",new Map)}set(t,o){this.keyMap.set(t,o),this.valueMap.set(o,t)}hasKey(t){return this.keyMap.has(t)}hasValue(t){return this.valueMap.has(t)}getByKey(t){return this.keyMap.get(t)}getByValue(t){return this.valueMap.get(t)}deleteByKey(t){const o=this.keyMap.get(t);o!==void 0&&this.valueMap.delete(o),this.keyMap.delete(t)}deleteByValue(t){const o=this.valueMap.get(t);o!==void 0&&this.keyMap.delete(o),this.valueMap.delete(t)}forEach(t){this.keyMap.forEach((o,r)=>{t(o,r)})}clear(){this.keyMap.clear(),this.valueMap.clear()}}class it{constructor(t){n(this,"transformation");n(this,"model");n(this,"nodes",new $t);n(this,"nodeIdGenerator",new m(t=>this.nodes.hasKey(t)));n(this,"nodesResizeObserver");this.canvas=t,this.nodesResizeObserver=new window.ResizeObserver(o=>{o.forEach(r=>{const i=r.target;this.reactNodeChange(i)})}),this.transformation=this.canvas.transformation,this.model=this.canvas.model}attach(t){return this.canvas.attach(t),this}detach(){return this.canvas.detach(),this}addNode(t){const o=this.nodeIdGenerator.create(t.id);return this.canvas.addNode({...t,id:o}),this.nodes.set(o,t.element),this.nodesResizeObserver.observe(t.element),this}updateNode(t,o){return this.canvas.updateNode(t,o),this}removeNode(t){this.canvas.removeNode(t);const o=this.nodes.getByKey(t);return this.nodes.deleteByKey(t),this.nodesResizeObserver.unobserve(o),this}markPort(t){return this.canvas.markPort(t),this}updatePort(t,o){return this.canvas.updatePort(t,o),this}unmarkPort(t){return this.canvas.unmarkPort(t),this}addEdge(t){return this.canvas.addEdge(t),this}updateEdge(t,o){return this.canvas.updateEdge(t,o),this}removeEdge(t){return this.canvas.removeEdge(t),this}patchViewportMatrix(t){return this.canvas.patchViewportMatrix(t),this}patchContentMatrix(t){return this.canvas.patchContentMatrix(t),this}clear(){return this.canvas.clear(),this.nodesResizeObserver.disconnect(),this.nodes.clear(),this}destroy(){this.clear(),this.canvas.destroy()}reactNodeChange(t){const o=this.nodes.getByValue(t);this.canvas.updateNode(o),this.model.getNodeAdjacentEdgeIds(o).forEach(i=>{this.canvas.updateEdge(i)})}}class bt{constructor(){n(this,"coreOptions");n(this,"dragOptions");n(this,"transformOptions");n(this,"isDraggable",!1);n(this,"isTransformable",!1);n(this,"hasResizeReactiveNodes",!1)}setOptions(t){return this.coreOptions=t,this}setUserDraggableNodes(t){return this.isDraggable=!0,this.dragOptions=t,this}setUserTransformableCanvas(t){return this.isTransformable=!0,this.transformOptions=t,this}setResizeReactiveNodes(){return this.hasResizeReactiveNodes=!0,this}build(){let t=new tt(this.coreOptions);return this.hasResizeReactiveNodes&&(t=new it(t)),this.isDraggable&&(t=new et(t,this.dragOptions)),this.isTransformable&&(t=new rt(t,this.transformOptions)),t}}E.BezierEdgeShape=K,E.CanvasCore=tt,E.HorizontalEdgeShape=_,E.HtmlGraphBuilder=bt,E.HtmlGraphError=A,E.ResizeReactiveNodesCanvas=it,E.StraightEdgeShape=J,E.UserDraggableNodesCanvas=et,E.UserTransformableCanvas=rt,E.VerticalEdgeShape=Q,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})});
1
+ (function(E,S){typeof exports=="object"&&typeof module<"u"?S(exports):typeof define=="function"&&define.amd?define(["exports"],S):(E=typeof globalThis<"u"?globalThis:E||self,S(E.HTMLGraph={}))})(this,function(E){"use strict";var Vt=Object.defineProperty;var pt=(E,S,f)=>S in E?Vt(E,S,{enumerable:!0,configurable:!0,writable:!0,value:f}):E[S]=f;var n=(E,S,f)=>pt(E,typeof S!="symbol"?S+"":S,f);const S=(e,t)=>({x:e/2,y:t/2}),f=(e,t,o)=>({x:t.x*e.x-t.y*e.y+((1-t.x)*o.x+t.y*o.y),y:t.y*e.x+t.x*e.y+((1-t.x)*o.y-t.y*o.x)}),N=(e,t,o)=>({x:t*Math.cos(e),y:o*Math.sin(e)}),u={x:0,y:0},L=(e,t,o,r)=>{const s=[u,{x:o,y:r},{x:o,y:-r}].map(l=>f(l,e,u)).map(l=>({x:l.x+t.x,y:l.y+t.y})),h=`M ${s[0].x} ${s[0].y}`,d=`L ${s[1].x} ${s[1].y}`,c=`L ${s[2].x} ${s[2].y}`;return`${h} ${d} ${c}`},I=(e,t)=>{const o=[];if(e.length>0&&o.push(`M ${e[0].x} ${e[0].y}`),e.length===2&&o.push(`L ${e[1].x} ${e[1].y}`),e.length>2){const r=e.length-1;let i=0,s=0,h=0;e.forEach((d,c)=>{let l=0,a=0,g=0;const y=c>0,x=c<r,v=y&&x;if(y&&(l=-i,a=-s,g=h),x){const V=e[c+1];i=V.x-d.x,s=V.y-d.y,h=Math.sqrt(i*i+s*s)}const T=h!==0?Math.min((v?t:0)/h,c<r-1?.5:1):0,C=v?{x:d.x+i*T,y:d.y+s*T}:d,$=g!==0?Math.min((v?t:0)/g,c>1?.5:1):0,b=v?{x:d.x+l*$,y:d.y+a*$}:d;c>0&&o.push(`L ${b.x} ${b.y}`),v&&o.push(`C ${d.x} ${d.y} ${d.x} ${d.y} ${C.x} ${C.y}`)})}return o.join(" ")},p=()=>{const e=document.createElementNS("http://www.w3.org/2000/svg","svg");return e.style.pointerEvents="none",e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.overflow="visible",e},W=()=>{const e=document.createElementNS("http://www.w3.org/2000/svg","g");return e.style.transformOrigin="50% 50%",e},F=(e,t)=>{const o=document.createElementNS("http://www.w3.org/2000/svg","path");return o.setAttribute("stroke",e),o.setAttribute("stroke-width",`${t}`),o.setAttribute("fill","none"),o},P=e=>{const t=document.createElementNS("http://www.w3.org/2000/svg","path");return t.setAttribute("fill",e),t},R=(e,t)=>{const o={x:e.x+e.width/2,y:e.y+e.height/2},r={x:t.x+t.width/2,y:t.y+t.height/2},i=Math.min(o.x,r.x),s=Math.min(o.y,r.y),h=Math.abs(r.x-o.x),d=Math.abs(r.y-o.y),c=o.x<=r.x?1:-1,l=o.y<=r.y?1:-1;return{x:i,y:s,width:h,height:d,flipX:c,flipY:l}},st=e=>{const t=f({x:e.arrowLength,y:u.y},e.fromVect,u),o=f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to),r={x:t.x+e.fromVect.x*e.curvature,y:t.y+e.fromVect.y*e.curvature},i={x:o.x-e.toVect.x*e.curvature,y:o.y-e.toVect.y*e.curvature},s=`M ${t.x} ${t.y} C ${r.x} ${r.y}, ${i.x} ${i.y}, ${o.x} ${o.y}`,h=e.hasSourceArrow?"":`M ${u.x} ${u.y} L ${t.x} ${t.y} `,d=e.hasTargetArrow?"":` M ${o.x} ${o.y} L ${e.to.x} ${e.to.y}`;return`${h}${s}${d}`},ht=e=>{const t=e.hasSourceArrow?f({x:e.arrowLength,y:u.y},e.fromVect,u):u,o=e.hasTargetArrow?f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to):e.to,r=e.arrowLength,i=Math.cos(e.detourDirection)*e.detourDistance,s=Math.sin(e.detourDirection)*e.detourDistance,h=i*e.flipX,d=s*e.flipY,c=f({x:r,y:u.y},e.fromVect,u),l={x:c.x+h,y:c.y+d},a=f({x:e.to.x-r,y:e.to.y},e.toVect,e.to),g={x:a.x+h,y:a.y+d},y={x:(l.x+g.x)/2,y:(l.y+g.y)/2},x={x:c.x+e.curvature*e.fromVect.x,y:c.y+e.curvature*e.fromVect.y},v={x:a.x-e.curvature*e.toVect.x,y:a.y-e.curvature*e.toVect.y},M={x:c.x+h,y:c.y+d},T={x:a.x+h,y:a.y+d};return[`M ${t.x} ${t.y}`,`L ${c.x} ${c.y}`,`C ${x.x} ${x.y} ${M.x} ${M.y} ${y.x} ${y.y}`,`C ${T.x} ${T.y} ${v.x} ${v.y} ${a.x} ${a.y}`,`L ${o.x} ${o.y}`].join(" ")},dt=e=>{const t=e.hasSourceArrow?f({x:e.arrowLength,y:u.y},e.fromVect,u):u,o=e.hasTargetArrow?f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to):e.to,r=e.arrowLength+e.arrowOffset,i=r-e.roundness,s=f({x:i,y:u.y},e.fromVect,u),h=f({x:e.to.x-i,y:e.to.y},e.toVect,e.to),d=Math.max((s.x+h.x)/2,r),c=e.to.y/2,l={x:e.flipX>0?d:-r,y:s.y},a={x:l.x,y:c},g={x:e.flipX>0?e.to.x-d:e.to.x+r,y:h.y},y={x:g.x,y:c};return I([t,s,l,a,y,g,h,o],e.roundness)},B=e=>{const t=e.hasSourceArrow?f({x:e.arrowLength,y:u.y},e.fromVect,u):u,o=e.hasTargetArrow?f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to):e.to,r=e.arrowLength+e.arrowOffset,i=f({x:r,y:u.y},e.fromVect,u),s=Math.cos(e.detourDirection)*e.detourDistance,h=Math.sin(e.detourDirection)*e.detourDistance,d=s*e.flipX,c=h*e.flipY,l={x:i.x+d,y:i.y+c},a=f({x:e.to.x-r,y:e.to.y},e.toVect,e.to),g={x:a.x+d,y:a.y+c};return I([t,i,l,g,a,o],e.roundness)},ct=e=>{const t=e.hasSourceArrow?f({x:e.arrowLength,y:u.y},e.fromVect,u):u,o=e.hasTargetArrow?f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to):e.to,r=e.arrowLength+e.arrowOffset,i=f({x:r,y:u.y},e.fromVect,u),s=f({x:e.to.x-r,y:e.to.y},e.toVect,e.to);return I([t,i,s,o],e.roundness)},lt=e=>{const t=e.hasSourceArrow?f({x:e.arrowLength,y:u.y},e.fromVect,u):u,o=e.hasTargetArrow?f({x:e.to.x-e.arrowLength,y:e.to.y},e.toVect,e.to):e.to,r=e.arrowLength+e.arrowOffset,i=r-e.roundness,s=f({x:i,y:u.y},e.fromVect,u),h=f({x:e.to.x-i,y:e.to.y},e.toVect,e.to),d=Math.max((s.y+h.y)/2,r),c=e.to.x/2,l={x:s.x,y:e.flipY>0?d:-r},a={x:c,y:l.y},g={x:h.x,y:e.flipY>0?e.to.y-d:e.to.y+r},y={x:c,y:g.y};return I([t,s,l,a,y,g,h,o],e.roundness)},z=e=>{const t=e.arrowOffset,o=e.side,r=e.arrowLength+t,i=r+2*o,h=[{x:e.arrowLength,y:u.y},{x:r,y:u.y},{x:r,y:e.side},{x:i,y:e.side},{x:i,y:-e.side},{x:r,y:-e.side},{x:r,y:u.y},{x:e.arrowLength,y:u.y}].map(c=>f(c,e.fromVect,u)),d=`M ${u.x} ${u.y} L ${h[0].x} ${h[0].y} `;return`${e.hasSourceArrow||e.hasTargetArrow?"":d}${I(h,e.roundness)}`},at=e=>{const t=e.smallRadius,o=e.radius,r=Math.sqrt(t*t+o*o),i=t+o,s=e.arrowLength+r*(1-o/i),h=t*o/i,c=[{x:e.arrowLength,y:u.y},{x:s,y:h},{x:s,y:-h}].map(g=>f(g,e.fromVect,u)),l=[`M ${c[0].x} ${c[0].y}`,`A ${t} ${t} 0 0 1 ${c[1].x} ${c[1].y}`,`A ${o} ${o} 0 1 0 ${c[2].x} ${c[2].y}`,`A ${t} ${t} 0 0 1 ${c[0].x} ${c[0].y}`].join(" "),a=`M 0 0 L ${c[0].x} ${c[0].y} `;return`${e.hasSourceArrow||e.hasTargetArrow?"":a}${l}`},w=Object.freeze({color:"#777777",width:1,arrowLength:15,arrowWidth:4,arrowOffset:15,hasSourceArrow:!1,hasTargetArrow:!1,cycleRadius:30,cycleSquareSide:30,roundness:10,detourDistance:100,detourDirection:-Math.PI/2,detourDirectionVertical:0,smallCycleRadius:15,curvature:90});class K{constructor(t){n(this,"svg",p());n(this,"group",W());n(this,"line");n(this,"sourceArrow",null);n(this,"targetArrow",null);n(this,"arrowLength");n(this,"arrowWidth");n(this,"curvature");n(this,"portCycleRadius");n(this,"portCycleSmallRadius");n(this,"detourDirection");n(this,"detourDistance");n(this,"hasSourceArrow");n(this,"hasTargetArrow");this.arrowLength=(t==null?void 0:t.arrowLength)??w.arrowLength,this.arrowWidth=(t==null?void 0:t.arrowWidth)??w.arrowWidth,this.curvature=(t==null?void 0:t.curvature)??w.curvature,this.portCycleRadius=(t==null?void 0:t.cycleRadius)??w.cycleRadius,this.portCycleSmallRadius=(t==null?void 0:t.smallCycleRadius)??w.smallCycleRadius,this.detourDirection=(t==null?void 0:t.detourDirection)??w.detourDirection,this.detourDistance=(t==null?void 0:t.detourDistance)??w.detourDistance,this.hasSourceArrow=(t==null?void 0:t.hasSourceArrow)??w.hasSourceArrow,this.hasTargetArrow=(t==null?void 0:t.hasTargetArrow)??w.hasTargetArrow;const o=(t==null?void 0:t.color)??w.color,r=(t==null?void 0:t.width)??w.width;this.svg.appendChild(this.group),this.line=F(o,r),this.group.appendChild(this.line),this.hasSourceArrow&&(this.sourceArrow=P(o),this.group.appendChild(this.sourceArrow)),this.hasTargetArrow&&(this.targetArrow=P(o),this.group.appendChild(this.targetArrow))}render(t){const{x:o,y:r,width:i,height:s,flipX:h,flipY:d}=R(t.source,t.target);this.svg.style.transform=`translate(${o}px, ${r}px)`,this.svg.style.width=`${i}px`,this.svg.style.height=`${s}px`,this.group.style.transform=`scale(${h}, ${d})`;const c=N(t.source.direction,h,d),l=N(t.target.direction,h,d),a={x:i,y:s};let g,y=l,x=-this.arrowLength;if(t.source.portId===t.target.portId?(g=at({fromVect:c,radius:this.portCycleRadius,smallRadius:this.portCycleSmallRadius,arrowLength:this.arrowLength,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),y=c,x=this.arrowLength):t.source.nodeId===t.target.nodeId?g=ht({to:a,fromVect:c,toVect:l,flipX:h,flipY:d,arrowLength:this.arrowLength,detourDirection:this.detourDirection,detourDistance:this.detourDistance,curvature:this.curvature,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}):g=st({to:a,fromVect:c,toVect:l,arrowLength:this.arrowLength,curvature:this.curvature,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),this.line.setAttribute("d",g),this.sourceArrow){const v=L(c,u,this.arrowLength,this.arrowWidth);this.sourceArrow.setAttribute("d",v)}if(this.targetArrow){const v=L(y,a,x,this.arrowWidth);this.targetArrow.setAttribute("d",v)}}}class _{constructor(t){n(this,"svg",p());n(this,"group",W());n(this,"line");n(this,"sourceArrow",null);n(this,"targetArrow",null);n(this,"arrowLength");n(this,"arrowWidth");n(this,"arrowOffset");n(this,"roundness");n(this,"cycleSquareSide");n(this,"detourDirection");n(this,"detourDistance");n(this,"hasSourceArrow");n(this,"hasTargetArrow");this.arrowLength=(t==null?void 0:t.arrowLength)??w.arrowLength,this.arrowWidth=(t==null?void 0:t.arrowWidth)??w.arrowWidth,this.arrowOffset=(t==null?void 0:t.arrowOffset)??w.arrowOffset,this.cycleSquareSide=(t==null?void 0:t.cycleSquareSide)??w.cycleSquareSide;const o=(t==null?void 0:t.roundness)??w.roundness;this.roundness=Math.min(o,this.arrowOffset,this.cycleSquareSide/2),this.detourDirection=(t==null?void 0:t.detourDirection)??w.detourDirection,this.detourDistance=(t==null?void 0:t.detourDistance)??w.detourDistance,this.hasSourceArrow=(t==null?void 0:t.hasSourceArrow)??w.hasSourceArrow,this.hasTargetArrow=(t==null?void 0:t.hasTargetArrow)??w.hasTargetArrow;const r=(t==null?void 0:t.color)??w.color,i=(t==null?void 0:t.width)??w.width;this.svg.appendChild(this.group),this.line=F(r,i),this.group.appendChild(this.line),this.hasSourceArrow&&(this.sourceArrow=P(r),this.group.appendChild(this.sourceArrow)),this.hasTargetArrow&&(this.targetArrow=P(r),this.group.appendChild(this.targetArrow))}render(t){const{x:o,y:r,width:i,height:s,flipX:h,flipY:d}=R(t.source,t.target);this.svg.style.transform=`translate(${o}px, ${r}px)`,this.svg.style.width=`${i}px`,this.svg.style.height=`${s}px`,this.group.style.transform=`scale(${h}, ${d})`;const c=N(t.source.direction,h,d),l=N(t.target.direction,h,d),a={x:i,y:s};let g,y=l,x=-this.arrowLength;if(t.source.portId===t.target.portId?(g=z({fromVect:c,arrowLength:this.arrowLength,side:this.cycleSquareSide,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),y=c,x=this.arrowLength):t.source.nodeId===t.target.nodeId?g=B({to:a,fromVect:c,toVect:l,flipX:h,flipY:d,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,detourDirection:this.detourDirection,detourDistance:this.detourDistance,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}):g=dt({to:a,fromVect:c,toVect:l,flipX:h,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),this.line.setAttribute("d",g),this.sourceArrow){const v=L(c,u,this.arrowLength,this.arrowWidth);this.sourceArrow.setAttribute("d",v)}if(this.targetArrow){const v=L(y,a,x,this.arrowWidth);this.targetArrow.setAttribute("d",v)}}}class J{constructor(t){n(this,"svg",p());n(this,"group",W());n(this,"line");n(this,"sourceArrow",null);n(this,"targetArrow",null);n(this,"arrowLength");n(this,"arrowWidth");n(this,"arrowOffset");n(this,"roundness");n(this,"cycleSquareSide");n(this,"detourDirection");n(this,"detourDistance");n(this,"hasSourceArrow");n(this,"hasTargetArrow");this.arrowLength=(t==null?void 0:t.arrowLength)??w.arrowLength,this.arrowWidth=(t==null?void 0:t.arrowWidth)??w.arrowWidth,this.arrowOffset=(t==null?void 0:t.arrowOffset)??w.arrowOffset,this.cycleSquareSide=(t==null?void 0:t.cycleSquareSide)??w.cycleSquareSide;const o=(t==null?void 0:t.roundness)??w.roundness;this.roundness=Math.min(o,this.arrowOffset,this.cycleSquareSide/2),this.detourDirection=(t==null?void 0:t.detourDirection)??w.detourDirection,this.detourDistance=(t==null?void 0:t.detourDistance)??w.detourDistance,this.hasSourceArrow=(t==null?void 0:t.hasSourceArrow)??w.hasSourceArrow,this.hasTargetArrow=(t==null?void 0:t.hasTargetArrow)??w.hasTargetArrow;const r=(t==null?void 0:t.color)??w.color,i=(t==null?void 0:t.width)??w.width;this.svg.appendChild(this.group),this.line=F(r,i),this.group.appendChild(this.line),this.hasSourceArrow&&(this.sourceArrow=P(r),this.group.appendChild(this.sourceArrow)),this.hasTargetArrow&&(this.targetArrow=P(r),this.group.appendChild(this.targetArrow))}render(t){const{x:o,y:r,width:i,height:s,flipX:h,flipY:d}=R(t.source,t.target);this.svg.style.transform=`translate(${o}px, ${r}px)`,this.svg.style.width=`${i}px`,this.svg.style.height=`${s}px`,this.group.style.transform=`scale(${h}, ${d})`;const c=N(t.source.direction,h,d),l=N(t.target.direction,h,d),a={x:i,y:s};let g,y=l,x=-this.arrowLength;if(t.source.portId===t.target.portId?(g=z({fromVect:c,arrowLength:this.arrowLength,side:this.cycleSquareSide,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),y=c,x=this.arrowLength):t.source.nodeId===t.target.nodeId?g=B({to:a,fromVect:c,toVect:l,flipX:h,flipY:d,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,detourDirection:this.detourDirection,detourDistance:this.detourDistance,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}):g=ct({to:a,fromVect:c,toVect:l,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),this.line.setAttribute("d",g),this.sourceArrow){const v=L(c,u,this.arrowLength,this.arrowWidth);this.sourceArrow.setAttribute("d",v)}if(this.targetArrow){const v=L(y,a,x,this.arrowWidth);this.targetArrow.setAttribute("d",v)}}}class Q{constructor(t){n(this,"svg",p());n(this,"group",W());n(this,"line");n(this,"sourceArrow",null);n(this,"targetArrow",null);n(this,"arrowLength");n(this,"arrowWidth");n(this,"arrowOffset");n(this,"roundness");n(this,"cycleSquareSide");n(this,"detourDirection");n(this,"detourDistance");n(this,"hasSourceArrow");n(this,"hasTargetArrow");this.arrowLength=(t==null?void 0:t.arrowLength)??w.arrowLength,this.arrowWidth=(t==null?void 0:t.arrowWidth)??w.arrowWidth,this.arrowOffset=(t==null?void 0:t.arrowOffset)??w.arrowOffset,this.cycleSquareSide=(t==null?void 0:t.cycleSquareSide)??w.cycleSquareSide;const o=(t==null?void 0:t.roundness)??w.roundness;this.roundness=Math.min(o,this.arrowOffset,this.cycleSquareSide/2),this.detourDirection=(t==null?void 0:t.detourDirection)??w.detourDirectionVertical,this.detourDistance=(t==null?void 0:t.detourDistance)??w.detourDistance,this.hasSourceArrow=(t==null?void 0:t.hasSourceArrow)??w.hasSourceArrow,this.hasTargetArrow=(t==null?void 0:t.hasTargetArrow)??w.hasTargetArrow;const r=(t==null?void 0:t.color)??w.color,i=(t==null?void 0:t.width)??w.width;this.svg.appendChild(this.group),this.line=F(r,i),this.group.appendChild(this.line),this.hasSourceArrow&&(this.sourceArrow=P(r),this.group.appendChild(this.sourceArrow)),this.hasTargetArrow&&(this.targetArrow=P(r),this.group.appendChild(this.targetArrow))}render(t){const{x:o,y:r,width:i,height:s,flipX:h,flipY:d}=R(t.source,t.target);this.svg.style.transform=`translate(${o}px, ${r}px)`,this.svg.style.width=`${i}px`,this.svg.style.height=`${s}px`,this.group.style.transform=`scale(${h}, ${d})`;const c=N(t.source.direction,h,d),l=N(t.target.direction,h,d),a={x:i,y:s};let g,y=l,x=-this.arrowLength;if(t.source.portId===t.target.portId?(g=z({fromVect:c,arrowLength:this.arrowLength,side:this.cycleSquareSide,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),y=c,x=this.arrowLength):t.source.nodeId===t.target.nodeId?g=B({to:a,fromVect:c,toVect:l,flipX:h,flipY:d,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,detourDirection:this.detourDirection,detourDistance:this.detourDistance,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}):g=lt({to:a,fromVect:c,toVect:l,flipY:d,arrowLength:this.arrowLength,arrowOffset:this.arrowOffset,roundness:this.roundness,hasSourceArrow:this.hasSourceArrow,hasTargetArrow:this.hasTargetArrow}),this.line.setAttribute("d",g),this.sourceArrow){const v=L(c,u,this.arrowLength,this.arrowWidth);this.sourceArrow.setAttribute("d",v)}if(this.targetArrow){const v=L(y,a,x,this.arrowWidth);this.targetArrow.setAttribute("d",v)}}}const gt=e=>{if(typeof e=="function")return e;switch(e==null?void 0:e.type){case"straight":return()=>new J({color:e.color,width:e.width,arrowLength:e.arrowLength,arrowWidth:e.arrowWidth,arrowOffset:e.arrowOffset,hasSourceArrow:e.hasSourceArrow,hasTargetArrow:e.hasTargetArrow,cycleSquareSide:e.cycleSquareSide,roundness:e.roundness,detourDistance:e.detourDistance,detourDirection:e.detourDirection});case"horizontal":return()=>new _({color:e.color,width:e.width,arrowLength:e.arrowLength,arrowWidth:e.arrowWidth,arrowOffset:e.arrowOffset,hasSourceArrow:e.hasSourceArrow,hasTargetArrow:e.hasTargetArrow,cycleSquareSide:e.cycleSquareSide,roundness:e.roundness,detourDistance:e.detourDistance,detourDirection:e.detourDirection});case"vertical":return()=>new Q({color:e.color,width:e.width,arrowLength:e.arrowLength,arrowWidth:e.arrowWidth,arrowOffset:e.arrowOffset,hasSourceArrow:e.hasSourceArrow,hasTargetArrow:e.hasTargetArrow,cycleSquareSide:e.cycleSquareSide,roundness:e.roundness,detourDistance:e.detourDistance,detourDirection:e.detourDirection});default:return()=>new K({color:e.color,width:e.width,arrowLength:e.arrowLength,arrowWidth:e.arrowWidth,hasSourceArrow:e.hasSourceArrow,hasTargetArrow:e.hasTargetArrow,cycleRadius:e.cycleRadius,smallCycleRadius:e.smallCycleRadius,curvature:e.curvature,detourDistance:e.detourDistance,detourDirection:e.detourDirection})}},G=e=>()=>e,Z=G(0),U=()=>{let e=0;return()=>e++},ut=(e,t)=>{let o=Z,r=Z;e==="incremental"&&(o=U()),t==="incremental"&&(r=U());const i=U();return e==="shared-incremental"&&(o=i),t==="shared-incremental"&&(r=i),typeof e=="number"&&(o=G(e)),typeof t=="number"&&(r=G(t)),typeof e=="function"&&(o=e),typeof t=="function"&&(r=t),{nodesPriorityFn:o,edgesPriorityFn:r}},wt=e=>{var o,r,i,s,h;const t=ut((o=e==null?void 0:e.nodes)==null?void 0:o.priority,(r=e==null?void 0:e.edges)==null?void 0:r.priority);return{nodes:{centerFn:((i=e==null?void 0:e.nodes)==null?void 0:i.centerFn)??S,priorityFn:t.nodesPriorityFn},ports:{direction:((s=e==null?void 0:e.ports)==null?void 0:s.direction)??0},edges:{shapeFactory:gt(((h=e==null?void 0:e.edges)==null?void 0:h.shape)??{}),priorityFn:t.edgesPriorityFn}}};class yt{constructor(){n(this,"nodes",new Map);n(this,"ports",new Map);n(this,"nodePorts",new Map);n(this,"portNodeId",new Map);n(this,"edges",new Map);n(this,"incommingEdges",new Map);n(this,"outcommingEdges",new Map);n(this,"cycleEdges",new Map)}addNode(t){this.nodes.set(t.nodeId,{element:t.element,x:t.x,y:t.y,centerFn:t.centerFn,priority:t.priority}),this.nodePorts.set(t.nodeId,new Map)}getAllNodeIds(){return Array.from(this.nodes.keys())}getNode(t){return this.nodes.get(t)}removeNode(t){this.nodes.delete(t),this.nodePorts.delete(t)}addPort(t){this.ports.set(t.portId,{element:t.element,direction:t.direction}),this.cycleEdges.set(t.portId,new Set),this.incommingEdges.set(t.portId,new Set),this.outcommingEdges.set(t.portId,new Set),this.portNodeId.set(t.portId,t.nodeId),this.nodePorts.get(t.nodeId).set(t.portId,t.element)}getPort(t){return this.ports.get(t)}getAllPortIds(){return Array.from(this.ports.keys())}getNodePortIds(t){const o=this.nodePorts.get(t);if(o!==void 0)return Array.from(o.keys())}getPortNodeId(t){return this.portNodeId.get(t)}removePort(t){const o=this.portNodeId.get(t);this.portNodeId.delete(t),this.nodePorts.get(o).delete(t),this.ports.delete(t)}addEdge(t){this.edges.set(t.edgeId,{from:t.from,to:t.to,shape:t.shape,priority:t.priority}),t.from!==t.to?(this.outcommingEdges.get(t.from).add(t.edgeId),this.incommingEdges.get(t.to).add(t.edgeId)):this.cycleEdges.get(t.from).add(t.edgeId)}updateEdgeFrom(t,o){const r=this.edges.get(t);this.removeEdge(t),this.addEdge({edgeId:t,from:o,to:r.to,shape:r.shape,priority:r.priority})}updateEdgeTo(t,o){const r=this.edges.get(t);this.removeEdge(t),this.addEdge({edgeId:t,from:r.from,to:o,shape:r.shape,priority:r.priority})}getAllEdgeIds(){return Array.from(this.edges.keys())}getEdge(t){return this.edges.get(t)}removeEdge(t){const o=this.edges.get(t),r=o.from,i=o.to;this.cycleEdges.get(r).delete(t),this.cycleEdges.get(i).delete(t),this.incommingEdges.get(r).delete(t),this.incommingEdges.get(i).delete(t),this.outcommingEdges.get(r).delete(t),this.outcommingEdges.get(i).delete(t),this.edges.delete(t)}clear(){this.nodes.clear(),this.ports.clear(),this.nodePorts.clear(),this.portNodeId.clear(),this.edges.clear(),this.incommingEdges.clear(),this.outcommingEdges.clear(),this.cycleEdges.clear()}getPortIncomingEdgeIds(t){return Array.from(this.incommingEdges.get(t))}getPortOutcomingEdgeIds(t){return Array.from(this.outcommingEdges.get(t))}getPortCycleEdgeIds(t){return Array.from(this.cycleEdges.get(t))}getPortAdjacentEdgeIds(t){return[...this.getPortIncomingEdgeIds(t),...this.getPortOutcomingEdgeIds(t),...this.getPortCycleEdgeIds(t)]}getNodeIncomingEdgeIds(t){const o=Array.from(this.nodePorts.get(t).keys());let r=[];return o.forEach(i=>{r=[...r,...this.getPortIncomingEdgeIds(i)]}),r}getNodeOutcomingEdgeIds(t){const o=Array.from(this.nodePorts.get(t).keys());let r=[];return o.forEach(i=>{r=[...r,...this.getPortOutcomingEdgeIds(i)]}),r}getNodeCycleEdgeIds(t){const o=Array.from(this.nodePorts.get(t).keys());let r=[];return o.forEach(i=>{r=[...r,...this.getPortCycleEdgeIds(i)]}),r}getNodeAdjacentEdgeIds(t){return[...this.getNodeIncomingEdgeIds(t),...this.getNodeOutcomingEdgeIds(t),...this.getNodeCycleEdgeIds(t)]}}const O=e=>({scale:1/e.scale,dx:-e.dx/e.scale,dy:-e.dy/e.scale}),q={scale:1,dx:0,dy:0};class ft{constructor(){n(this,"viewportMatrix",q);n(this,"contentMatrix",q)}getViewportMatrix(){return this.viewportMatrix}getContentMatrix(){return this.contentMatrix}patchViewportMatrix(t){this.viewportMatrix={scale:t.scale??this.viewportMatrix.scale,dx:t.dx??this.viewportMatrix.dx,dy:t.dy??this.viewportMatrix.dy},this.contentMatrix=O(this.viewportMatrix)}patchContentMatrix(t){this.contentMatrix={scale:t.scale??this.contentMatrix.scale,dx:t.dx??this.contentMatrix.dx,dy:t.dy??this.contentMatrix.dy},this.viewportMatrix=O(this.contentMatrix)}}class vt{constructor(t){this.transformer=t}getViewportMatrix(){return{...this.transformer.getViewportMatrix()}}getContentMatrix(){return{...this.transformer.getContentMatrix()}}}const xt=()=>{const e=document.createElement("div");return e.style.width="100%",e.style.height="100%",e.style.position="relative",e.style.overflow="hidden",e},Et=()=>{const e=document.createElement("div");return e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.width="0",e.style.height="0",e},St=()=>{const e=document.createElement("div");return e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.visibility="hidden",e};class At{constructor(t,o){n(this,"canvasWrapper",null);n(this,"host",xt());n(this,"container",Et());n(this,"nodeIdToWrapperElementMap",new Map);n(this,"edgeIdToElementMap",new Map);this.graphStore=t,this.viewportTransformer=o,this.host.appendChild(this.container)}attach(t){this.detach(),this.canvasWrapper=t,this.canvasWrapper.appendChild(this.host)}detach(){this.canvasWrapper!==null&&(this.canvasWrapper.removeChild(this.host),this.canvasWrapper=null)}applyTransform(){const t=this.viewportTransformer.getContentMatrix();this.container.style.transform=`matrix(${t.scale}, 0, 0, ${t.scale}, ${t.dx}, ${t.dy})`}attachNode(t){const o=this.graphStore.getNode(t),r=St();r.appendChild(o.element),this.container.appendChild(r),this.nodeIdToWrapperElementMap.set(t,r),this.updateNodeCoordinates(t),this.updateNodePriority(t),r.style.visibility="visible"}detachNode(t){const o=this.graphStore.getNode(t),r=this.nodeIdToWrapperElementMap.get(t);r.removeChild(o.element),this.container.removeChild(r),this.nodeIdToWrapperElementMap.delete(t)}attachEdge(t){const o=this.graphStore.getEdge(t);this.edgeIdToElementMap.set(t,o.shape.svg),this.container.appendChild(o.shape.svg),this.renderEdge(t),this.updateEdgePriority(t)}detachEdge(t){const o=this.graphStore.getEdge(t);this.container.removeChild(o.shape.svg),this.edgeIdToElementMap.delete(t)}clear(){this.edgeIdToElementMap.forEach((t,o)=>{this.detachEdge(o)}),this.nodeIdToWrapperElementMap.forEach((t,o)=>{this.detachNode(o)})}destroy(){this.clear(),this.detach(),this.host.removeChild(this.container)}updateNodeCoordinates(t){const o=this.nodeIdToWrapperElementMap.get(t),r=this.graphStore.getNode(t),{width:i,height:s}=r.element.getBoundingClientRect(),h=this.viewportTransformer.getViewportMatrix().scale,d=r.centerFn(i,s),c=r.x-h*d.x,l=r.y-h*d.y;o.style.transform=`translate(${c}px, ${l}px)`}updateNodePriority(t){const o=this.graphStore.getNode(t),r=this.nodeIdToWrapperElementMap.get(t);r.style.zIndex=`${o.priority}`}updateEdgeShape(t){const o=this.edgeIdToElementMap.get(t);this.container.removeChild(o);const r=this.graphStore.getEdge(t);this.edgeIdToElementMap.set(t,r.shape.svg),this.container.appendChild(r.shape.svg)}renderEdge(t){const o=this.graphStore.getEdge(t),r=this.graphStore.getPort(o.from),i=this.graphStore.getPort(o.to),s=r.element.getBoundingClientRect(),h=i.element.getBoundingClientRect(),d=this.host.getBoundingClientRect(),c=this.viewportTransformer.getViewportMatrix(),l={x:c.scale*(s.left-d.left)+c.dx,y:c.scale*(s.top-d.top)+c.dy},a={x:c.scale*(h.left-d.left)+c.dx,y:c.scale*(h.top-d.top)+c.dy},g={x:l.x,y:l.y,width:s.width*c.scale,height:s.height*c.scale,direction:r.direction,portId:o.from,nodeId:this.graphStore.getPortNodeId(o.from)},y={x:a.x,y:a.y,width:h.width*c.scale,height:h.height*c.scale,direction:i.direction,portId:o.to,nodeId:this.graphStore.getPortNodeId(o.to)};o.shape.render({source:g,target:y})}updateEdgePriority(t){const o=this.graphStore.getEdge(t);o.shape.svg.style.zIndex=`${o.priority}`}}class m{constructor(t){n(this,"counter",0);this.checkExists=t}create(t){if(t!==void 0)return t;for(;this.checkExists(this.counter);)this.counter++;return this.counter}reset(){this.counter=0}}class A extends Error{constructor(){super(...arguments);n(this,"name","HtmlGraphError")}}class Tt{constructor(t,o,r,i,s,h,d){n(this,"nodeIdGenerator",new m(t=>this.graphStore.getNode(t)!==void 0));n(this,"portIdGenerator",new m(t=>this.graphStore.getPort(t)!==void 0));n(this,"edgeIdGenerator",new m(t=>this.graphStore.getEdge(t)!==void 0));this.graphStore=t,this.htmlController=o,this.viewportTransformer=r,this.defaultNodesCenterFn=i,this.defaultPortsDirection=s,this.defaultNodesPriorityFn=h,this.defaultEdgesPriorityFn=d}attach(t){this.htmlController.attach(t)}detach(){this.htmlController.detach()}addNode(t){const o=this.nodeIdGenerator.create(t.nodeId);if(this.graphStore.getNode(o)!==void 0)throw new A("failed to add node with existing id");this.graphStore.addNode({nodeId:o,element:t.element,x:t.x,y:t.y,centerFn:t.centerFn??this.defaultNodesCenterFn,priority:t.priority??this.defaultNodesPriorityFn()}),this.htmlController.attachNode(o),Array.from(t.ports??[]).forEach(r=>{this.markPort({portId:r.id,element:r.element,nodeId:o,direction:r.direction})})}markPort(t){const o=this.portIdGenerator.create(t.portId);if(this.graphStore.getPort(o)!==void 0)throw new A("failed to add port with existing id");if(this.graphStore.getNode(t.nodeId)===void 0)throw new A("failed to set port on nonexisting node");this.graphStore.addPort({portId:o,element:t.element,nodeId:t.nodeId,direction:t.direction??this.defaultPortsDirection})}addEdge(t){const o=this.edgeIdGenerator.create(t.edgeId);if(this.graphStore.getEdge(o)!==void 0)throw new A("failed to add edge with existing id");if(this.graphStore.getPort(t.from)===void 0)throw new A("failed to add edge from nonexisting port");if(this.graphStore.getPort(t.to)===void 0)throw new A("failed to add edge to nonexisting port");this.graphStore.addEdge({edgeId:o,from:t.from,to:t.to,shape:t.shape,priority:t.priority??this.defaultEdgesPriorityFn()}),this.htmlController.attachEdge(o)}updateEdge(t){const o=this.graphStore.getEdge(t.edgeId);if(o===void 0)throw new A("failed to update nonexisting edge");t.shape!==void 0&&(o.shape=t.shape,this.htmlController.updateEdgeShape(t.edgeId)),t.priority!==void 0&&(o.priority=t.priority,this.htmlController.updateEdgePriority(t.edgeId)),t.from!==void 0&&this.graphStore.updateEdgeFrom(t.edgeId,t.from),t.to!==void 0&&this.graphStore.updateEdgeTo(t.edgeId,t.to),this.htmlController.renderEdge(t.edgeId)}updatePort(t,o){const r=this.graphStore.getPort(t);if(r===void 0)throw new A("failed to unset nonexisting port");r.direction=o.direction??r.direction,this.graphStore.getPortAdjacentEdgeIds(t).forEach(s=>{this.htmlController.renderEdge(s)})}updateNode(t,o){const r=this.graphStore.getNode(t);if(r===void 0)throw new A("failed to update nonexisting node");r.x=(o==null?void 0:o.x)??r.x,r.y=(o==null?void 0:o.y)??r.y,r.centerFn=(o==null?void 0:o.centerFn)??r.centerFn,r.priority=(o==null?void 0:o.priority)??r.priority,this.htmlController.updateNodeCoordinates(t),this.htmlController.updateNodePriority(t),this.graphStore.getNodeAdjacentEdgeIds(t).forEach(s=>{this.htmlController.renderEdge(s)})}removeEdge(t){if(this.graphStore.getEdge(t)===void 0)throw new A("failed to remove nonexisting edge");this.htmlController.detachEdge(t),this.graphStore.removeEdge(t)}unmarkPort(t){if(this.graphStore.getPort(t)===void 0)throw new A("failed to unset nonexisting port");this.graphStore.getPortAdjacentEdgeIds(t).forEach(o=>{this.removeEdge(o)}),this.graphStore.removePort(t)}removeNode(t){if(this.graphStore.getNode(t)===void 0)throw new A("failed to remove nonexisting node");this.graphStore.getNodePortIds(t).forEach(o=>{this.unmarkPort(o)}),this.htmlController.detachNode(t),this.graphStore.removeNode(t)}patchViewportMatrix(t){this.viewportTransformer.patchViewportMatrix(t),this.htmlController.applyTransform()}patchContentMatrix(t){this.viewportTransformer.patchContentMatrix(t),this.htmlController.applyTransform()}clear(){this.htmlController.clear(),this.graphStore.clear(),this.nodeIdGenerator.reset(),this.portIdGenerator.reset(),this.edgeIdGenerator.reset()}destroy(){this.clear(),this.htmlController.destroy()}}class Mt{constructor(t){this.graphStore=t}getNode(t){const o=this.graphStore.getNode(t);return o===void 0?null:{element:o.element,x:o.x,y:o.y,centerFn:o.centerFn,priority:o.priority}}getAllNodeIds(){return this.graphStore.getAllNodeIds()}getPort(t){const o=this.graphStore.getPort(t);return o===void 0?null:{element:o.element,direction:o.direction}}getAllPortIds(){return this.graphStore.getAllPortIds()}getNodePortIds(t){return this.graphStore.getNodePortIds(t)}getPortNodeId(t){return this.graphStore.getPortNodeId(t)??null}getAllEdgeIds(){return this.graphStore.getAllEdgeIds()}getEdge(t){const o=this.graphStore.getEdge(t);return o===void 0?null:{from:o.from,to:o.to,priority:o.priority}}getPortIncomingEdgeIds(t){return this.graphStore.getPortIncomingEdgeIds(t)}getPortOutcomingEdgeIds(t){return this.graphStore.getPortOutcomingEdgeIds(t)}getPortCycleEdgeIds(t){return this.graphStore.getPortCycleEdgeIds(t)}getPortAdjacentEdgeIds(t){return this.graphStore.getPortAdjacentEdgeIds(t)}getNodeIncomingEdgeIds(t){return this.graphStore.getNodeIncomingEdgeIds(t)}getNodeOutcomingEdgeIds(t){return this.graphStore.getNodeOutcomingEdgeIds(t)}getNodeCycleEdgeIds(t){return this.graphStore.getNodeCycleEdgeIds(t)}getNodeAdjacentEdgeIds(t){return this.graphStore.getNodeAdjacentEdgeIds(t)}}class tt{constructor(t){n(this,"transformation");n(this,"model");n(this,"canvasController");n(this,"edgeShapeFactory");this.apiOptions=t;const o=wt(this.apiOptions),r=new ft,i=new yt;this.model=new Mt(i),this.transformation=new vt(r);const s=new At(i,r);this.canvasController=new Tt(i,s,r,o.nodes.centerFn,o.ports.direction,o.nodes.priorityFn,o.edges.priorityFn),this.edgeShapeFactory=o.edges.shapeFactory}attach(t){return this.canvasController.attach(t),this}detach(){return this.canvasController.detach(),this}addNode(t){return this.canvasController.addNode({nodeId:t.id,element:t.element,x:t.x,y:t.y,ports:t.ports,centerFn:t.centerFn,priority:t.priority}),this}updateNode(t,o){return this.canvasController.updateNode(t,{x:o==null?void 0:o.x,y:o==null?void 0:o.y,priority:o==null?void 0:o.priority,centerFn:o==null?void 0:o.centerFn}),this}removeNode(t){return this.canvasController.removeNode(t),this}addEdge(t){return this.canvasController.addEdge({edgeId:t.id,from:t.from,to:t.to,shape:t.shape??this.edgeShapeFactory(),priority:t.priority}),this}updateEdge(t,o){return this.canvasController.updateEdge({edgeId:t,shape:o==null?void 0:o.shape,priority:o==null?void 0:o.priority,from:o==null?void 0:o.from,to:o==null?void 0:o.to}),this}removeEdge(t){return this.canvasController.removeEdge(t),this}markPort(t){return this.canvasController.markPort({portId:t.id,element:t.element,nodeId:t.nodeId,direction:t.direction}),this}updatePort(t,o){return this.canvasController.updatePort(t,{direction:o==null?void 0:o.direction}),this}unmarkPort(t){return this.canvasController.unmarkPort(t),this}patchViewportMatrix(t){return this.canvasController.patchViewportMatrix(t),this}patchContentMatrix(t){return this.canvasController.patchContentMatrix(t),this}clear(){return this.canvasController.clear(),this}destroy(){this.clear(),this.canvasController.destroy()}}const Y=(e,t,o)=>{const{x:r,y:i,width:s,height:h}=e.getBoundingClientRect();return t>=r&&t<=r+s&&o>=i&&o<=i+h},X=(e,t,o)=>t>=0&&t<=e.innerWidth&&o>=0&&o<=e.innerHeight,k=(e,t)=>{t!==null?e.style.cursor=t:e.style.removeProperty("cursor")},Ct=e=>{var g,y,x,v,M,T;const t=((g=e==null?void 0:e.events)==null?void 0:g.onNodeDrag)??(()=>{}),o=((y=e==null?void 0:e.events)==null?void 0:y.onBeforeNodeDrag)??(()=>!0),r=((x=e==null?void 0:e.events)==null?void 0:x.onNodeDragFinished)??(()=>{}),i=(e==null?void 0:e.moveOnTop)===!1,s=(v=e==null?void 0:e.mouse)==null?void 0:v.dragCursor,h=s!==void 0?s:"grab",d=(M=e==null?void 0:e.mouse)==null?void 0:M.mouseDownEventVerifier,c=d!==void 0?d:C=>C.button===0,l=(T=e==null?void 0:e.mouse)==null?void 0:T.mouseUpEventVerifier;return{freezePriority:i,dragCursor:h,mouseDownEventVerifier:c,mouseUpEventVerifier:l!==void 0?l:C=>C.button===0,onNodeDrag:t,onBeforeNodeDrag:o,onNodeDragFinished:r}};class et{constructor(t,o){n(this,"model");n(this,"transformation");n(this,"maxNodePriority",0);n(this,"nodes",new Map);n(this,"grabbedNodeId",null);n(this,"nodeIdGenerator",new m(t=>this.nodes.has(t)));n(this,"element",null);n(this,"onWindowMouseMove",t=>{if(this.element!==null&&(!Y(this.element,t.clientX,t.clientY)||!X(this.window,t.clientX,t.clientY))){this.cancelMouseDrag();return}this.grabbedNodeId!==null&&this.dragNode(this.grabbedNodeId,t.movementX,t.movementY)});n(this,"onWindowMouseUp",t=>{this.options.mouseUpEventVerifier(t)&&this.cancelMouseDrag()});n(this,"onWindowTouchMove",t=>{if(t.touches.length!==1)return;const o=t.touches[0];if(this.element!==null&&(!Y(this.element,o.clientX,o.clientY)||!X(this.window,o.clientX,o.clientY))){this.cancelTouchDrag();return}if(this.grabbedNodeId!==null&&this.previousTouchCoords!==null){const r=o.clientX-this.previousTouchCoords.x,i=o.clientY-this.previousTouchCoords.y;this.dragNode(this.grabbedNodeId,r,i),this.previousTouchCoords={x:t.touches[0].clientX,y:t.touches[0].clientY}}});n(this,"onWindowTouchFinish",()=>{this.previousTouchCoords=null,this.cancelTouchDrag()});n(this,"previousTouchCoords",null);n(this,"window",window);n(this,"options");this.canvas=t,this.transformation=this.canvas.transformation,this.model=this.canvas.model,this.options=Ct(o??{})}attach(t){return this.detach(),this.element=t,this.canvas.attach(this.element),this}detach(){return this.canvas.detach(),this.element!==null&&(this.element=null),this}addNode(t){const o=this.nodeIdGenerator.create(t.id);this.canvas.addNode({...t,id:o}),this.updateMaxNodePriority(o);const r=s=>{if(this.element===null||!this.options.mouseDownEventVerifier(s))return;const h=this.model.getNode(o);this.options.onBeforeNodeDrag({nodeId:o,element:t.element,x:h.x,y:h.y})&&(s.stopImmediatePropagation(),this.grabbedNodeId=o,k(this.element,this.options.dragCursor),this.moveNodeOnTop(o),this.window.addEventListener("mouseup",this.onWindowMouseUp),this.window.addEventListener("mousemove",this.onWindowMouseMove))},i=s=>{if(s.touches.length!==1)return;s.stopImmediatePropagation(),this.previousTouchCoords={x:s.touches[0].clientX,y:s.touches[0].clientY};const h=this.model.getNode(o);this.options.onBeforeNodeDrag({nodeId:o,element:t.element,x:h.x,y:h.y})&&(this.grabbedNodeId=o,this.moveNodeOnTop(o),this.window.addEventListener("touchmove",this.onWindowTouchMove),this.window.addEventListener("touchend",this.onWindowTouchFinish),this.window.addEventListener("touchcancel",this.onWindowTouchFinish))};return this.nodes.set(o,{element:t.element,onMouseDown:r,onTouchStart:i}),t.element.addEventListener("mousedown",r),t.element.addEventListener("touchstart",i),this}updateNode(t,o){return this.canvas.updateNode(t,o),this.updateMaxNodePriority(t),this}removeNode(t){const o=this.nodes.get(t);return o!==void 0&&(o.element.removeEventListener("mousedown",o.onMouseDown),o.element.removeEventListener("touchstart",o.onTouchStart)),this.nodes.delete(t),this.canvas.removeNode(t),this}markPort(t){return this.canvas.markPort(t),this}updatePort(t,o){return this.canvas.updatePort(t,o),this}unmarkPort(t){return this.canvas.unmarkPort(t),this}addEdge(t){return this.canvas.addEdge(t),this}updateEdge(t,o){return this.canvas.updateEdge(t,o),this}removeEdge(t){return this.canvas.removeEdge(t),this}patchViewportMatrix(t){return this.canvas.patchViewportMatrix(t),this}patchContentMatrix(t){return this.canvas.patchContentMatrix(t),this}clear(){return this.canvas.clear(),this.nodes.forEach(t=>{t.element.removeEventListener("mousedown",t.onMouseDown),t.element.removeEventListener("touchstart",t.onTouchStart)}),this.nodes.clear(),this.maxNodePriority=0,this}destroy(){this.detach(),this.clear(),this.removeMouseDragListeners(),this.removeTouchDragListeners(),this.canvas.destroy()}dragNode(t,o,r){const i=this.model.getNode(t);if(i===null)return;const s=this.canvas.transformation.getContentMatrix(),h=s.scale*i.x+s.dx,d=s.scale*i.y+s.dy,c=h+o,l=d+r,a=this.canvas.transformation.getViewportMatrix(),g=a.scale*c+a.dx,y=a.scale*l+a.dy;this.canvas.updateNode(t,{x:g,y}),this.options.onNodeDrag({nodeId:t,element:i.element,x:g,y})}updateMaxNodePriority(t){const o=this.model.getNode(t).priority;this.maxNodePriority=Math.max(this.maxNodePriority,o)}moveNodeOnTop(t){if(this.options.freezePriority)return;this.maxNodePriority+=2,this.updateNode(t,{priority:this.maxNodePriority});const o=this.maxNodePriority-1;this.model.getNodeAdjacentEdgeIds(t).forEach(i=>{this.updateEdge(i,{priority:o})})}cancelMouseDrag(){const t=this.model.getNode(this.grabbedNodeId);t!==null&&this.options.onNodeDragFinished({nodeId:this.grabbedNodeId,element:t.element,x:t.x,y:t.y}),this.grabbedNodeId=null,this.element!==null&&k(this.element,null),this.removeMouseDragListeners()}removeMouseDragListeners(){this.window.removeEventListener("mouseup",this.onWindowMouseUp),this.window.removeEventListener("mousemove",this.onWindowMouseMove)}cancelTouchDrag(){this.previousTouchCoords=null;const t=this.model.getNode(this.grabbedNodeId);t!==null&&this.options.onNodeDragFinished({nodeId:this.grabbedNodeId,element:t.element,x:t.x,y:t.y}),this.grabbedNodeId=null,this.removeTouchDragListeners()}removeTouchDragListeners(){this.window.removeEventListener("touchmove",this.onWindowTouchMove),this.window.removeEventListener("touchend",this.onWindowTouchFinish),this.window.removeEventListener("touchcancel",this.onWindowTouchFinish)}}const Nt=e=>{const t=e.minX!==null?e.minX:-1/0,o=e.maxX!==null?e.maxX:1/0,r=e.minY!==null?e.minY:-1/0,i=e.maxY!==null?e.maxY:1/0;return s=>{let h=s.nextTransform.dx,d=s.nextTransform.dy;h<t&&h<s.prevTransform.dx&&(h=Math.min(s.prevTransform.dx,t));const c=s.canvasWidth*s.prevTransform.scale;h>o-c&&h>s.prevTransform.dx&&(h=Math.max(s.prevTransform.dx,o-c)),d<r&&d<s.prevTransform.dy&&(d=Math.min(s.prevTransform.dy,r));const l=s.canvasHeight*s.prevTransform.scale;return d>i-l&&d>s.prevTransform.dy&&(d=Math.max(s.prevTransform.dy,i-l)),{scale:s.nextTransform.scale,dx:h,dy:d}}},Lt=e=>{const t=e.maxContentScale,o=e.minContentScale,r=t!==null?1/t:0,i=o!==null?1/o:1/0;return s=>{const h=s.prevTransform,d=s.nextTransform;let c=d.scale,l=d.dx,a=d.dy;if(d.scale>i&&d.scale>h.scale){c=Math.max(h.scale,i),l=h.dx,a=h.dy;const g=(c-h.scale)/(d.scale-h.scale);l=h.dx+(d.dx-h.dx)*g,a=h.dy+(d.dy-h.dy)*g}if(d.scale<r&&d.scale<h.scale){c=Math.min(h.scale,r),l=h.dx,a=h.dy;const g=(c-h.scale)/(d.scale-h.scale);l=h.dx+(d.dx-h.dx)*g,a=h.dy+(d.dy-h.dy)*g}return{scale:c,dx:l,dy:a}}},Pt=e=>t=>e.reduce((o,r)=>r({prevTransform:t.prevTransform,nextTransform:o,canvasWidth:t.canvasWidth,canvasHeight:t.canvasHeight}),t.nextTransform),ot=e=>{if(typeof e=="function")return e;switch(e.type){case"scale-limit":return Lt({minContentScale:e.minContentScale??0,maxContentScale:e.maxContentScale??1/0});case"shift-limit":return Nt({minX:e.minX??-1/0,maxX:e.maxX??1/0,minY:e.minY??-1/0,maxY:e.maxY??1/0})}},Dt=e=>{var v,M,T,C,j,$,b,V,nt;const t=(v=e==null?void 0:e.scale)==null?void 0:v.mouseWheelSensitivity,o=t!==void 0?t:1.2,r=e==null?void 0:e.transformPreprocessor;let i;r!==void 0?Array.isArray(r)?i=Pt(r.map(D=>ot(D))):i=ot(r):i=D=>D.nextTransform;const s=((M=e==null?void 0:e.shift)==null?void 0:M.cursor)!==void 0?e.shift.cursor:"grab",h=((T=e==null?void 0:e.events)==null?void 0:T.onBeforeTransformChange)??(()=>{}),d=((C=e==null?void 0:e.events)==null?void 0:C.onTransformChange)??(()=>{}),c=(j=e==null?void 0:e.shift)==null?void 0:j.mouseDownEventVerifier,l=c!==void 0?c:D=>D.button===0,a=($=e==null?void 0:e.shift)==null?void 0:$.mouseUpEventVerifier,g=a!==void 0?a:D=>D.button===0,y=(b=e==null?void 0:e.scale)==null?void 0:b.mouseWheelEventVerifier,x=y!==void 0?y:()=>!0;return{wheelSensitivity:o,onTransformStarted:((V=e==null?void 0:e.events)==null?void 0:V.onTransformStarted)??(()=>{}),onTransformFinished:((nt=e==null?void 0:e.events)==null?void 0:nt.onTransformFinished)??(()=>{}),onBeforeTransformChange:h,onTransformChange:d,transformPreprocessor:i,shiftCursor:s,mouseDownEventVerifier:l,mouseUpEventVerifier:g,mouseWheelEventVerifier:x}},H=e=>{const t=[],o=e.touches.length;for(let d=0;d<o;d++)t.push([e.touches[d].clientX,e.touches[d].clientY]);const r=t.reduce((d,c)=>[d[0]+c[0],d[1]+c[1]],[0,0]),i=[r[0]/o,r[1]/o],h=t.map(d=>[d[0]-i[0],d[1]-i[1]]).reduce((d,c)=>d+Math.sqrt(c[0]*c[0]+c[1]*c[1]),0);return{x:i[0],y:i[1],scale:h/o,touchesCnt:o,touches:t}},It=(e,t,o)=>({scale:e.scale,dx:e.dx+e.scale*t,dy:e.dy+e.scale*o}),mt=(e,t,o,r)=>({scale:e.scale*t,dx:e.scale*(1-t)*o+e.dx,dy:e.scale*(1-t)*r+e.dy});class rt{constructor(t,o){n(this,"model");n(this,"transformation");n(this,"element",null);n(this,"prevTouches",null);n(this,"window",window);n(this,"onMouseDown",t=>{this.element===null||!this.options.mouseDownEventVerifier(t)||(k(this.element,this.options.shiftCursor),this.window.addEventListener("mousemove",this.onWindowMouseMove),this.window.addEventListener("mouseup",this.onWindowMouseUp),this.options.onTransformStarted())});n(this,"onWindowMouseMove",t=>{if(this.element===null||!Y(this.element,t.clientX,t.clientY)||!X(this.window,t.clientX,t.clientY)){this.stopMouseDrag();return}const o=-t.movementX,r=-t.movementY;this.moveViewport(this.element,o,r)});n(this,"onWindowMouseUp",t=>{this.element===null||!this.options.mouseUpEventVerifier(t)||this.stopMouseDrag()});n(this,"onWheelScroll",t=>{if(!this.options.mouseWheelEventVerifier(t))return;t.preventDefault(),this.options.onTransformStarted();const{left:o,top:r}=this.element.getBoundingClientRect(),i=t.clientX-o,s=t.clientY-r,d=1/(t.deltaY<0?this.options.wheelSensitivity:1/this.options.wheelSensitivity);this.scaleViewport(this.element,d,i,s),this.options.onTransformFinished()});n(this,"onTouchStart",t=>{this.prevTouches=H(t),this.window.addEventListener("touchmove",this.onWindowTouchMove),this.window.addEventListener("touchend",this.onWindowTouchFinish),this.window.addEventListener("touchcancel",this.onWindowTouchFinish),this.options.onTransformStarted()});n(this,"onWindowTouchMove",t=>{const o=this.element;if(o===null)return;const r=H(t);if(!r.touches.every(s=>Y(o,s[0],s[1])&&X(this.window,s[0],s[1]))){this.stopTouchDrag();return}if((r.touchesCnt===1||r.touchesCnt===2)&&this.moveViewport(o,-(r.x-this.prevTouches.x),-(r.y-this.prevTouches.y)),r.touchesCnt===2){const{left:s,top:h}=o.getBoundingClientRect(),d=this.prevTouches.x-s,c=this.prevTouches.y-h,a=1/(r.scale/this.prevTouches.scale);this.scaleViewport(o,a,d,c)}this.prevTouches=r});n(this,"onWindowTouchFinish",t=>{t.touches.length>0?this.prevTouches=H(t):this.stopTouchDrag()});n(this,"observer",new ResizeObserver(()=>{const t=this.canvas.transformation.getViewportMatrix(),{width:o,height:r}=this.element.getBoundingClientRect(),i=this.options.transformPreprocessor({prevTransform:t,nextTransform:t,canvasWidth:o,canvasHeight:r});this.canvas.patchViewportMatrix(i),this.options.onTransformChange()}));n(this,"options");this.canvas=t,this.options=Dt(o),this.transformation=this.canvas.transformation,this.model=this.canvas.model}attach(t){return this.detach(),this.element=t,this.observer.observe(this.element),this.element.addEventListener("mousedown",this.onMouseDown),this.element.addEventListener("wheel",this.onWheelScroll),this.element.addEventListener("touchstart",this.onTouchStart),this.canvas.attach(this.element),this}detach(){return this.canvas.detach(),this.element!==null&&(this.observer.unobserve(this.element),this.element.removeEventListener("mousedown",this.onMouseDown),this.element.removeEventListener("wheel",this.onWheelScroll),this.element.removeEventListener("touchstart",this.onTouchStart),this.element=null),this}addNode(t){return this.canvas.addNode(t),this}updateNode(t,o){return this.canvas.updateNode(t,o),this}removeNode(t){return this.canvas.removeNode(t),this}markPort(t){return this.canvas.markPort(t),this}updatePort(t,o){return this.canvas.updatePort(t,o),this}unmarkPort(t){return this.canvas.unmarkPort(t),this}addEdge(t){return this.canvas.addEdge(t),this}updateEdge(t,o){return this.canvas.updateEdge(t,o),this}removeEdge(t){return this.canvas.removeEdge(t),this}patchViewportMatrix(t){return this.canvas.patchViewportMatrix(t),this}patchContentMatrix(t){return this.canvas.patchContentMatrix(t),this}clear(){return this.canvas.clear(),this}destroy(){this.detach(),this.removeMouseDragListeners(),this.removeTouchDragListeners(),this.canvas.destroy()}moveViewport(t,o,r){this.options.onBeforeTransformChange();const i=this.transformation.getViewportMatrix(),s=It(i,o,r),{width:h,height:d}=t.getBoundingClientRect(),c=this.options.transformPreprocessor({prevTransform:i,nextTransform:s,canvasWidth:h,canvasHeight:d});this.canvas.patchViewportMatrix(c),this.options.onTransformChange()}scaleViewport(t,o,r,i){this.options.onBeforeTransformChange();const s=this.canvas.transformation.getViewportMatrix(),h=mt(s,o,r,i),{width:d,height:c}=t.getBoundingClientRect(),l=this.options.transformPreprocessor({prevTransform:s,nextTransform:h,canvasWidth:d,canvasHeight:c});this.canvas.patchViewportMatrix(l),this.options.onTransformChange()}stopMouseDrag(){this.element!==null&&k(this.element,null),this.removeMouseDragListeners(),this.options.onTransformFinished()}removeMouseDragListeners(){this.window.removeEventListener("mousemove",this.onWindowMouseMove),this.window.removeEventListener("mouseup",this.onWindowMouseUp)}stopTouchDrag(){this.prevTouches=null,this.removeTouchDragListeners(),this.options.onTransformFinished()}removeTouchDragListeners(){this.window.removeEventListener("touchmove",this.onWindowTouchMove),this.window.removeEventListener("touchend",this.onWindowTouchFinish),this.window.removeEventListener("touchcancel",this.onWindowTouchFinish)}}class $t{constructor(){n(this,"keyMap",new Map);n(this,"valueMap",new Map)}set(t,o){this.keyMap.set(t,o),this.valueMap.set(o,t)}hasKey(t){return this.keyMap.has(t)}hasValue(t){return this.valueMap.has(t)}getByKey(t){return this.keyMap.get(t)}getByValue(t){return this.valueMap.get(t)}deleteByKey(t){const o=this.keyMap.get(t);o!==void 0&&this.valueMap.delete(o),this.keyMap.delete(t)}deleteByValue(t){const o=this.valueMap.get(t);o!==void 0&&this.keyMap.delete(o),this.valueMap.delete(t)}forEach(t){this.keyMap.forEach((o,r)=>{t(o,r)})}clear(){this.keyMap.clear(),this.valueMap.clear()}}class it{constructor(t){n(this,"transformation");n(this,"model");n(this,"nodes",new $t);n(this,"nodeIdGenerator",new m(t=>this.nodes.hasKey(t)));n(this,"nodesResizeObserver");this.canvas=t,this.nodesResizeObserver=new window.ResizeObserver(o=>{o.forEach(r=>{const i=r.target;this.reactNodeChange(i)})}),this.transformation=this.canvas.transformation,this.model=this.canvas.model}attach(t){return this.canvas.attach(t),this}detach(){return this.canvas.detach(),this}addNode(t){const o=this.nodeIdGenerator.create(t.id);return this.canvas.addNode({...t,id:o}),this.nodes.set(o,t.element),this.nodesResizeObserver.observe(t.element),this}updateNode(t,o){return this.canvas.updateNode(t,o),this}removeNode(t){this.canvas.removeNode(t);const o=this.nodes.getByKey(t);return this.nodes.deleteByKey(t),this.nodesResizeObserver.unobserve(o),this}markPort(t){return this.canvas.markPort(t),this}updatePort(t,o){return this.canvas.updatePort(t,o),this}unmarkPort(t){return this.canvas.unmarkPort(t),this}addEdge(t){return this.canvas.addEdge(t),this}updateEdge(t,o){return this.canvas.updateEdge(t,o),this}removeEdge(t){return this.canvas.removeEdge(t),this}patchViewportMatrix(t){return this.canvas.patchViewportMatrix(t),this}patchContentMatrix(t){return this.canvas.patchContentMatrix(t),this}clear(){return this.canvas.clear(),this.nodesResizeObserver.disconnect(),this.nodes.clear(),this}destroy(){this.clear(),this.canvas.destroy()}reactNodeChange(t){const o=this.nodes.getByValue(t);this.canvas.updateNode(o),this.model.getNodeAdjacentEdgeIds(o).forEach(i=>{this.canvas.updateEdge(i)})}}class bt{constructor(){n(this,"coreOptions");n(this,"dragOptions");n(this,"transformOptions");n(this,"isDraggable",!1);n(this,"isTransformable",!1);n(this,"hasResizeReactiveNodes",!1)}setOptions(t){return this.coreOptions=t,this}setUserDraggableNodes(t){return this.isDraggable=!0,this.dragOptions=t,this}setUserTransformableCanvas(t){return this.isTransformable=!0,this.transformOptions=t,this}setResizeReactiveNodes(){return this.hasResizeReactiveNodes=!0,this}build(){let t=new tt(this.coreOptions);return this.hasResizeReactiveNodes&&(t=new it(t)),this.isDraggable&&(t=new et(t,this.dragOptions)),this.isTransformable&&(t=new rt(t,this.transformOptions)),t}}E.BezierEdgeShape=K,E.CanvasCore=tt,E.HorizontalEdgeShape=_,E.HtmlGraphBuilder=bt,E.HtmlGraphError=A,E.ResizeReactiveNodesCanvas=it,E.StraightEdgeShape=J,E.UserDraggableNodesCanvas=et,E.UserTransformableCanvas=rt,E.VerticalEdgeShape=Q,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@html-graph/html-graph",
3
3
  "author": "Dmitry Marov <d.marov94@gmail.com>",
4
4
  "private": false,
5
- "version": "0.1.6",
5
+ "version": "0.1.7",
6
6
  "type": "module",
7
7
  "main": "dist/main.js",
8
8
  "types": "dist/main.d.ts",