@zukhruf/diagram 0.3.30 → 0.3.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/lib/layouts/graph/areas.d.ts +27 -0
  2. package/dist/lib/layouts/graph/areas.d.ts.map +1 -0
  3. package/dist/lib/layouts/graph/areas.js +187 -0
  4. package/dist/lib/layouts/graph/areas.js.map +1 -0
  5. package/dist/lib/layouts/graph/graph-layout-result.d.ts +95 -0
  6. package/dist/lib/layouts/graph/graph-layout-result.d.ts.map +1 -0
  7. package/dist/lib/layouts/graph/graph-layout-result.js +2 -0
  8. package/dist/lib/layouts/graph/graph-layout-result.js.map +1 -0
  9. package/dist/lib/layouts/graph/graph-layout.d.ts +2 -1
  10. package/dist/lib/layouts/graph/graph-layout.d.ts.map +1 -1
  11. package/dist/lib/layouts/graph/graph-layout.js +5 -3
  12. package/dist/lib/layouts/graph/graph-layout.js.map +1 -1
  13. package/dist/lib/layouts/graph/gutters.d.ts +26 -0
  14. package/dist/lib/layouts/graph/gutters.d.ts.map +1 -0
  15. package/dist/lib/layouts/graph/gutters.js +123 -0
  16. package/dist/lib/layouts/graph/gutters.js.map +1 -0
  17. package/dist/lib/layouts/graph/layout.d.ts +10 -0
  18. package/dist/lib/layouts/graph/layout.d.ts.map +1 -0
  19. package/dist/lib/layouts/graph/layout.js +165 -0
  20. package/dist/lib/layouts/graph/layout.js.map +1 -0
  21. package/dist/lib/layouts/graph/legacy-graph-layout.d.ts +6 -0
  22. package/dist/lib/layouts/graph/legacy-graph-layout.d.ts.map +1 -0
  23. package/dist/lib/layouts/graph/legacy-graph-layout.js +542 -0
  24. package/dist/lib/layouts/graph/legacy-graph-layout.js.map +1 -0
  25. package/dist/lib/layouts/graph/measure.d.ts +44 -0
  26. package/dist/lib/layouts/graph/measure.d.ts.map +1 -0
  27. package/dist/lib/layouts/graph/measure.js +372 -0
  28. package/dist/lib/layouts/graph/measure.js.map +1 -0
  29. package/dist/lib/layouts/graph/node-content.d.ts +16 -0
  30. package/dist/lib/layouts/graph/node-content.d.ts.map +1 -0
  31. package/dist/lib/layouts/graph/node-content.js +323 -0
  32. package/dist/lib/layouts/graph/node-content.js.map +1 -0
  33. package/dist/lib/layouts/graph/text-block.d.ts +19 -0
  34. package/dist/lib/layouts/graph/text-block.d.ts.map +1 -0
  35. package/dist/lib/layouts/graph/text-block.js +86 -0
  36. package/dist/lib/layouts/graph/text-block.js.map +1 -0
  37. package/dist/lib/layouts/graph/tokens.d.ts +58 -0
  38. package/dist/lib/layouts/graph/tokens.d.ts.map +1 -0
  39. package/dist/lib/layouts/graph/tokens.js +108 -0
  40. package/dist/lib/layouts/graph/tokens.js.map +1 -0
  41. package/dist/lib/layouts/graph/tracks.d.ts +20 -0
  42. package/dist/lib/layouts/graph/tracks.d.ts.map +1 -0
  43. package/dist/lib/layouts/graph/tracks.js +47 -0
  44. package/dist/lib/layouts/graph/tracks.js.map +1 -0
  45. package/dist/lib/layouts/text/font-metrics.generated.d.ts +18 -0
  46. package/dist/lib/layouts/text/font-metrics.generated.d.ts.map +1 -0
  47. package/dist/lib/layouts/text/font-metrics.generated.js +1043 -0
  48. package/dist/lib/layouts/text/font-metrics.generated.js.map +1 -0
  49. package/dist/lib/layouts/text/font.d.ts +14 -0
  50. package/dist/lib/layouts/text/font.d.ts.map +1 -0
  51. package/dist/lib/layouts/text/font.js +11 -0
  52. package/dist/lib/layouts/text/font.js.map +1 -0
  53. package/dist/lib/layouts/text/measure-text.d.ts +13 -0
  54. package/dist/lib/layouts/text/measure-text.d.ts.map +1 -0
  55. package/dist/lib/layouts/text/measure-text.js +67 -0
  56. package/dist/lib/layouts/text/measure-text.js.map +1 -0
  57. package/dist/lib/model/diagram-ir.d.ts +14 -1
  58. package/dist/lib/model/diagram-ir.d.ts.map +1 -1
  59. package/dist/lib/model/diagram-ir.js.map +1 -1
  60. package/dist/lib/renderers/canvas/graph-canvas.d.ts.map +1 -1
  61. package/dist/lib/renderers/canvas/graph-canvas.js +148 -138
  62. package/dist/lib/renderers/canvas/graph-canvas.js.map +1 -1
  63. package/dist/lib/renderers/html/graph-html.d.ts.map +1 -1
  64. package/dist/lib/renderers/html/graph-html.js +462 -511
  65. package/dist/lib/renderers/html/graph-html.js.map +1 -1
  66. package/dist/lib/renderers/shared/graph-parts.d.ts +15 -13
  67. package/dist/lib/renderers/shared/graph-parts.d.ts.map +1 -1
  68. package/dist/lib/renderers/shared/graph-parts.js +649 -644
  69. package/dist/lib/renderers/shared/graph-parts.js.map +1 -1
  70. package/dist/lib/renderers/shared/node-parts.d.ts +20 -19
  71. package/dist/lib/renderers/shared/node-parts.d.ts.map +1 -1
  72. package/dist/lib/renderers/shared/node-parts.js +678 -811
  73. package/dist/lib/renderers/shared/node-parts.js.map +1 -1
  74. package/dist/lib/renderers/shared/run-spans.d.ts +8 -0
  75. package/dist/lib/renderers/shared/run-spans.d.ts.map +1 -0
  76. package/dist/lib/renderers/shared/run-spans.js +18 -0
  77. package/dist/lib/renderers/shared/run-spans.js.map +1 -0
  78. package/dist/lib/renderers/shared/text-runs.d.ts +21 -0
  79. package/dist/lib/renderers/shared/text-runs.d.ts.map +1 -0
  80. package/dist/lib/renderers/shared/text-runs.js +44 -0
  81. package/dist/lib/renderers/shared/text-runs.js.map +1 -0
  82. package/dist/lib/renderers/svg/graph-svg.d.ts.map +1 -1
  83. package/dist/lib/renderers/svg/graph-svg.js +304 -465
  84. package/dist/lib/renderers/svg/graph-svg.js.map +1 -1
  85. package/dist/lib/renderers/svg/timeline-svg.d.ts.map +1 -1
  86. package/dist/lib/renderers/svg/timeline-svg.js +10 -5
  87. package/dist/lib/renderers/svg/timeline-svg.js.map +1 -1
  88. package/dist/lib/renderers/webgpu/graph-flow-effects.d.ts +2 -2
  89. package/dist/lib/renderers/webgpu/graph-flow-effects.d.ts.map +1 -1
  90. package/dist/lib/renderers/webgpu/graph-flow-effects.js.map +1 -1
  91. package/package.json +3 -1
  92. package/styles.css +8 -0
@@ -1,7 +1,8 @@
1
1
  import { c as _c } from "react/compiler-runtime";
2
2
  import { motion, useTransform } from 'motion/react';
3
- import { EDGE_BADGE_ICON, GROUP_LABEL_H, edgeBadgeSize, edgeLabelFontSize, edgeLabelFrameBox, edgeLabelLineHeight, groupLabelHeight, groupLabelLines, groupPortPlacements, groupTitleGutterHeight } from "../../layouts/graph/graph-layout.js";
3
+ import { FONT_FAMILY } from "../../layouts/text/font.js";
4
4
  import { DIAGRAM_BG, DIAGRAM_DIM, DIAGRAM_NEUTRAL, DIAGRAM_ON_ACCENT, DIAGRAM_SURFACE_MUTED, DIAGRAM_TEXT, resolveDiagramToneFill, resolveDiagramToneStroke, useDiagramTheme } from "../../react/chrome/index.js";
5
+ import { RunSpans } from "./run-spans.js";
5
6
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
6
7
  export function nodeFrameFill(node, frame) {
7
8
  if (frame === 'transparent') return 'transparent';
@@ -13,20 +14,22 @@ export function nodeFrameFill(node, frame) {
13
14
  export function nodeFrameStroke(node, frame, themeAccent) {
14
15
  if (frame === 'transparent' || frame === 'flat') return 'transparent';
15
16
  if (frame === 'filled') return DIAGRAM_TEXT;
16
- if (node.accent) return themeAccent;
17
- if (node.tone) return resolveDiagramToneStroke(node.tone);
18
- return DIAGRAM_NEUTRAL;
17
+ return accentToneStroke(node, themeAccent, DIAGRAM_NEUTRAL);
18
+ }
19
+
20
+ /** The theme accent, else the tone's stroke, else the fallback. */
21
+ export function accentToneStroke(subject, themeAccent, fallback) {
22
+ if (subject.accent) return themeAccent;
23
+ if (subject.tone) return resolveDiagramToneStroke(subject.tone);
24
+ return fallback;
19
25
  }
20
26
  export function nodeTextFill(node, frame, themeAccent) {
21
27
  if (node.textColor === 'accent') return themeAccent;
22
28
  if (node.textColor === 'dim') return DIAGRAM_DIM;
23
29
  return frame === 'filled' ? DIAGRAM_ON_ACCENT : DIAGRAM_TEXT;
24
30
  }
25
- export function labelLineFill(line, fill, themeAccent) {
26
- if (typeof line === 'string') return fill;
27
- if (line.textColor === 'accent') return themeAccent;
28
- if (line.textColor === 'dim') return DIAGRAM_DIM;
29
- return fill;
31
+ export function nodeFrameStrokeWidth(node) {
32
+ return node.frame === 'flat' ? 0 : 1.5;
30
33
  }
31
34
  export function nodeTexture(node, frame) {
32
35
  return node.texture ?? (frame === 'solid' ? 'dots' : 'none');
@@ -41,6 +44,21 @@ function edgeDasharray(edge) {
41
44
  if (edge.lineStyle === 'dotted') return '1 6';
42
45
  return undefined;
43
46
  }
47
+ function edgeStroke(edge, themeAccent) {
48
+ if (edge.accent) return themeAccent;
49
+ if (edge.dim) return DIAGRAM_DIM;
50
+ return DIAGRAM_NEUTRAL;
51
+ }
52
+ function edgeMarkerId(edge, ids) {
53
+ if (edge.accent) return ids.arrowAccent;
54
+ if (edge.dim) return ids.arrowDim;
55
+ return ids.arrowNeutral;
56
+ }
57
+ function edgeLabelFill(edge, themeAccent) {
58
+ if (edge.accent) return themeAccent;
59
+ if (edge.dim) return DIAGRAM_DIM;
60
+ return DIAGRAM_TEXT;
61
+ }
44
62
  export function buildSegments(nodeCount, edgeCount) {
45
63
  const slotCount = 1 + nodeCount + edgeCount;
46
64
  const step = 1 / slotCount;
@@ -710,11 +728,9 @@ export function DiagramNodeIcon(t0) {
710
728
  return t25;
711
729
  }
712
730
  export function GroupRect(t0) {
713
- const $ = _c(98);
731
+ const $ = _c(79);
714
732
  const {
715
- group,
716
- box,
717
- dividers,
733
+ layout,
718
734
  progress,
719
735
  start,
720
736
  end
@@ -746,285 +762,269 @@ export function GroupRect(t0) {
746
762
  t3 = $[4];
747
763
  }
748
764
  const opacity = useTransform(progress, t1, t2, t3);
765
+ const {
766
+ group,
767
+ rect: box,
768
+ band,
769
+ label
770
+ } = layout;
749
771
  const rx = group.rx ?? 12;
750
772
  const frame = group.frame ?? "solid";
751
773
  const fill = group.fill ?? "surface";
752
774
  let t4;
753
- if ($[5] !== group.accent || $[6] !== group.tone || $[7] !== themeAccent) {
754
- t4 = group.accent ? themeAccent : group.tone ? resolveDiagramToneStroke(group.tone) : DIAGRAM_NEUTRAL;
755
- $[5] = group.accent;
756
- $[6] = group.tone;
757
- $[7] = themeAccent;
758
- $[8] = t4;
775
+ if ($[5] !== group || $[6] !== themeAccent) {
776
+ t4 = accentToneStroke(group, themeAccent, DIAGRAM_NEUTRAL);
777
+ $[5] = group;
778
+ $[6] = themeAccent;
779
+ $[7] = t4;
759
780
  } else {
760
- t4 = $[8];
781
+ t4 = $[7];
761
782
  }
762
783
  const stroke = t4;
784
+ const dasharray = frame === "dashed" ? "6 6" : undefined;
763
785
  const hasFrame = frame !== "none";
764
786
  const hasFill = fill !== "none";
765
787
  let t5;
766
- if ($[9] !== group.tone || $[10] !== hasFill) {
788
+ if ($[8] !== group.tone || $[9] !== hasFill) {
767
789
  t5 = hasFill && group.tone ? resolveDiagramToneFill(group.tone) : DIAGRAM_BG;
768
- $[9] = group.tone;
769
- $[10] = hasFill;
770
- $[11] = t5;
790
+ $[8] = group.tone;
791
+ $[9] = hasFill;
792
+ $[10] = t5;
771
793
  } else {
772
- t5 = $[11];
794
+ t5 = $[10];
773
795
  }
774
796
  const surfaceFill = t5;
775
797
  const texture = group.texture ?? (hasFill ? "dots" : "none");
776
798
  let t6;
777
- if ($[12] !== hasFill || $[13] !== ids || $[14] !== texture) {
799
+ if ($[11] !== hasFill || $[12] !== ids || $[13] !== texture) {
778
800
  t6 = hasFill ? textureFill(texture, ids) : null;
779
- $[12] = hasFill;
780
- $[13] = ids;
781
- $[14] = texture;
782
- $[15] = t6;
801
+ $[11] = hasFill;
802
+ $[12] = ids;
803
+ $[13] = texture;
804
+ $[14] = t6;
783
805
  } else {
784
- t6 = $[15];
806
+ t6 = $[14];
785
807
  }
786
808
  const texturePattern = t6;
787
- let T0;
788
- let t10;
789
- let t11;
790
- let t12;
791
809
  let t7;
810
+ if ($[15] !== group.dividers?.cols || $[16] !== group.dividers?.rows) {
811
+ t7 = [...(group.dividers?.rows ?? []).map(_temp), ...(group.dividers?.cols ?? []).map(_temp2)];
812
+ $[15] = group.dividers?.cols;
813
+ $[16] = group.dividers?.rows;
814
+ $[17] = t7;
815
+ } else {
816
+ t7 = $[17];
817
+ }
818
+ const dividerKeys = t7;
819
+ const [firstLabel] = label;
792
820
  let t8;
793
- let t9;
794
- if ($[16] !== box.h || $[17] !== box.w || $[18] !== box.x || $[19] !== box.y || $[20] !== dividers || $[21] !== frame || $[22] !== group || $[23] !== hasFill || $[24] !== hasFrame || $[25] !== opacity || $[26] !== rx || $[27] !== stroke || $[28] !== surfaceFill || $[29] !== texture || $[30] !== texturePattern || $[31] !== themeAccent) {
795
- const labelLines = groupLabelLines(group);
796
- let t13;
797
- if ($[39] !== group) {
798
- t13 = group.titleBand ? groupTitleGutterHeight(group) : 0;
799
- $[39] = group;
800
- $[40] = t13;
801
- } else {
802
- t13 = $[40];
803
- }
804
- const titleBandHeight = t13;
805
- const labelAlign = group.labelAlign ?? "center";
806
- const labelX = labelAlign === "start" ? box.x + 16 : labelAlign === "end" ? box.x + box.w - 16 : box.x + box.w / 2;
807
- const labelAnchor = labelAlign === "center" ? "middle" : labelAlign;
808
- T0 = motion.g;
809
- if ($[41] !== opacity) {
810
- t7 = {
811
- opacity
812
- };
813
- $[41] = opacity;
814
- $[42] = t7;
815
- } else {
816
- t7 = $[42];
817
- }
818
- const t14 = hasFill ? surfaceFill : "none";
819
- const t15 = hasFrame ? stroke : "none";
820
- const t16 = hasFrame ? 1 : 0;
821
- const t17 = frame === "dashed" ? "6 6" : undefined;
822
- if ($[43] !== box.h || $[44] !== box.w || $[45] !== box.x || $[46] !== box.y || $[47] !== group.id || $[48] !== group.tone || $[49] !== rx || $[50] !== t14 || $[51] !== t15 || $[52] !== t16 || $[53] !== t17) {
823
- t8 = /*#__PURE__*/_jsx("rect", {
824
- "data-diagram-group": group.id,
825
- "data-diagram-group-tone": group.tone,
826
- x: box.x,
827
- y: box.y,
828
- width: box.w,
829
- height: box.h,
830
- rx: rx,
831
- fill: t14,
832
- stroke: t15,
833
- strokeWidth: t16,
834
- strokeDasharray: t17
835
- });
836
- $[43] = box.h;
837
- $[44] = box.w;
838
- $[45] = box.x;
839
- $[46] = box.y;
840
- $[47] = group.id;
841
- $[48] = group.tone;
842
- $[49] = rx;
843
- $[50] = t14;
844
- $[51] = t15;
845
- $[52] = t16;
846
- $[53] = t17;
847
- $[54] = t8;
848
- } else {
849
- t8 = $[54];
850
- }
851
- if ($[55] !== box.h || $[56] !== box.w || $[57] !== box.x || $[58] !== box.y || $[59] !== group.id || $[60] !== rx || $[61] !== texture || $[62] !== texturePattern) {
852
- t9 = texturePattern && /*#__PURE__*/_jsx("rect", {
853
- "data-diagram-group-texture": `${group.id}:${texture}`,
854
- x: box.x,
855
- y: box.y,
856
- width: box.w,
857
- height: box.h,
858
- rx: rx,
859
- fill: texturePattern,
821
+ if ($[18] !== opacity) {
822
+ t8 = {
823
+ opacity
824
+ };
825
+ $[18] = opacity;
826
+ $[19] = t8;
827
+ } else {
828
+ t8 = $[19];
829
+ }
830
+ const t9 = hasFill ? surfaceFill : "none";
831
+ const t10 = hasFrame ? stroke : "none";
832
+ const t11 = hasFrame ? 1 : 0;
833
+ let t12;
834
+ if ($[20] !== box.h || $[21] !== box.w || $[22] !== box.x || $[23] !== box.y || $[24] !== dasharray || $[25] !== group.id || $[26] !== group.tone || $[27] !== rx || $[28] !== t10 || $[29] !== t11 || $[30] !== t9) {
835
+ t12 = /*#__PURE__*/_jsx("rect", {
836
+ "data-diagram-group": group.id,
837
+ "data-diagram-group-tone": group.tone,
838
+ x: box.x,
839
+ y: box.y,
840
+ width: box.w,
841
+ height: box.h,
842
+ rx: rx,
843
+ fill: t9,
844
+ stroke: t10,
845
+ strokeWidth: t11,
846
+ strokeDasharray: dasharray
847
+ });
848
+ $[20] = box.h;
849
+ $[21] = box.w;
850
+ $[22] = box.x;
851
+ $[23] = box.y;
852
+ $[24] = dasharray;
853
+ $[25] = group.id;
854
+ $[26] = group.tone;
855
+ $[27] = rx;
856
+ $[28] = t10;
857
+ $[29] = t11;
858
+ $[30] = t9;
859
+ $[31] = t12;
860
+ } else {
861
+ t12 = $[31];
862
+ }
863
+ let t13;
864
+ if ($[32] !== box.h || $[33] !== box.w || $[34] !== box.x || $[35] !== box.y || $[36] !== group.id || $[37] !== rx || $[38] !== texture || $[39] !== texturePattern) {
865
+ t13 = texturePattern && /*#__PURE__*/_jsx("rect", {
866
+ "data-diagram-group-texture": `${group.id}:${texture}`,
867
+ x: box.x,
868
+ y: box.y,
869
+ width: box.w,
870
+ height: box.h,
871
+ rx: rx,
872
+ fill: texturePattern,
873
+ pointerEvents: "none"
874
+ });
875
+ $[32] = box.h;
876
+ $[33] = box.w;
877
+ $[34] = box.x;
878
+ $[35] = box.y;
879
+ $[36] = group.id;
880
+ $[37] = rx;
881
+ $[38] = texture;
882
+ $[39] = texturePattern;
883
+ $[40] = t13;
884
+ } else {
885
+ t13 = $[40];
886
+ }
887
+ let t14;
888
+ if ($[41] !== band || $[42] !== dasharray || $[43] !== group.id || $[44] !== hasFill || $[45] !== stroke || $[46] !== surfaceFill) {
889
+ t14 = band && /*#__PURE__*/_jsxs(_Fragment, {
890
+ children: [/*#__PURE__*/_jsx("rect", {
891
+ "data-diagram-group-title-band": group.id,
892
+ x: band.x,
893
+ y: band.y,
894
+ width: band.w,
895
+ height: band.h,
896
+ fill: hasFill ? surfaceFill : DIAGRAM_BG,
860
897
  pointerEvents: "none"
861
- });
862
- $[55] = box.h;
863
- $[56] = box.w;
864
- $[57] = box.x;
865
- $[58] = box.y;
866
- $[59] = group.id;
867
- $[60] = rx;
868
- $[61] = texture;
869
- $[62] = texturePattern;
870
- $[63] = t9;
871
- } else {
872
- t9 = $[63];
873
- }
874
- if ($[64] !== box.w || $[65] !== box.x || $[66] !== box.y || $[67] !== frame || $[68] !== group.id || $[69] !== hasFill || $[70] !== stroke || $[71] !== surfaceFill || $[72] !== titleBandHeight) {
875
- t10 = titleBandHeight > 0 && /*#__PURE__*/_jsxs(_Fragment, {
876
- children: [/*#__PURE__*/_jsx("rect", {
877
- "data-diagram-group-title-band": group.id,
878
- x: box.x,
879
- y: box.y,
880
- width: box.w,
881
- height: titleBandHeight,
882
- fill: hasFill ? surfaceFill : DIAGRAM_BG,
883
- pointerEvents: "none"
884
- }), /*#__PURE__*/_jsx("line", {
885
- "data-diagram-group-title-separator": group.id,
886
- x1: box.x,
887
- y1: box.y + titleBandHeight,
888
- x2: box.x + box.w,
889
- y2: box.y + titleBandHeight,
890
- stroke: stroke,
891
- strokeWidth: 1,
892
- strokeDasharray: frame === "dashed" ? "6 6" : undefined
893
- })]
894
- });
895
- $[64] = box.w;
896
- $[65] = box.x;
897
- $[66] = box.y;
898
- $[67] = frame;
899
- $[68] = group.id;
900
- $[69] = hasFill;
901
- $[70] = stroke;
902
- $[71] = surfaceFill;
903
- $[72] = titleBandHeight;
904
- $[73] = t10;
905
- } else {
906
- t10 = $[73];
907
- }
908
- if ($[74] !== dividers || $[75] !== frame || $[76] !== group.id || $[77] !== themeAccent) {
909
- let t18;
910
- if ($[79] !== frame || $[80] !== group.id || $[81] !== themeAccent) {
911
- t18 = line => /*#__PURE__*/_jsx("line", {
912
- x1: line.x1,
913
- y1: line.y1,
914
- x2: line.x2,
915
- y2: line.y2,
916
- stroke: line.accent ? themeAccent : DIAGRAM_NEUTRAL,
898
+ }), /*#__PURE__*/_jsx("line", {
899
+ "data-diagram-group-title-separator": group.id,
900
+ x1: band.x,
901
+ y1: band.y + band.h,
902
+ x2: band.x + band.w,
903
+ y2: band.y + band.h,
904
+ stroke: stroke,
905
+ strokeWidth: 1,
906
+ strokeDasharray: dasharray
907
+ })]
908
+ });
909
+ $[41] = band;
910
+ $[42] = dasharray;
911
+ $[43] = group.id;
912
+ $[44] = hasFill;
913
+ $[45] = stroke;
914
+ $[46] = surfaceFill;
915
+ $[47] = t14;
916
+ } else {
917
+ t14 = $[47];
918
+ }
919
+ let t15;
920
+ if ($[48] !== dasharray || $[49] !== dividerKeys || $[50] !== group.accent || $[51] !== group.id || $[52] !== layout.dividers || $[53] !== themeAccent) {
921
+ let t16;
922
+ if ($[55] !== dasharray || $[56] !== dividerKeys || $[57] !== group.accent || $[58] !== group.id || $[59] !== themeAccent) {
923
+ t16 = (t17, i) => {
924
+ const [from, to] = t17;
925
+ const key = dividerKeys[i] ?? `${i}`;
926
+ return /*#__PURE__*/_jsx("line", {
927
+ x1: from.x,
928
+ y1: from.y,
929
+ x2: to.x,
930
+ y2: to.y,
931
+ stroke: group.accent ? themeAccent : DIAGRAM_NEUTRAL,
917
932
  strokeWidth: 1,
918
- strokeDasharray: frame === "dashed" ? "6 6" : undefined,
919
- "data-diagram-group-divider": `${group.id}:${line.axis}:${line.value}`
920
- }, `${line.axis}-${line.value}`);
921
- $[79] = frame;
922
- $[80] = group.id;
923
- $[81] = themeAccent;
924
- $[82] = t18;
925
- } else {
926
- t18 = $[82];
927
- }
928
- t11 = dividers.map(t18);
929
- $[74] = dividers;
930
- $[75] = frame;
931
- $[76] = group.id;
932
- $[77] = themeAccent;
933
- $[78] = t11;
933
+ strokeDasharray: dasharray,
934
+ "data-diagram-group-divider": `${group.id}:${key}`
935
+ }, key);
936
+ };
937
+ $[55] = dasharray;
938
+ $[56] = dividerKeys;
939
+ $[57] = group.accent;
940
+ $[58] = group.id;
941
+ $[59] = themeAccent;
942
+ $[60] = t16;
934
943
  } else {
935
- t11 = $[78];
944
+ t16 = $[60];
936
945
  }
937
- t12 = labelLines.length > 0 && /*#__PURE__*/_jsx("text", {
946
+ t15 = layout.dividers.map(t16);
947
+ $[48] = dasharray;
948
+ $[49] = dividerKeys;
949
+ $[50] = group.accent;
950
+ $[51] = group.id;
951
+ $[52] = layout.dividers;
952
+ $[53] = themeAccent;
953
+ $[54] = t15;
954
+ } else {
955
+ t15 = $[54];
956
+ }
957
+ let t16;
958
+ if ($[61] !== firstLabel || $[62] !== group.id || $[63] !== label) {
959
+ t16 = firstLabel && /*#__PURE__*/_jsx("text", {
938
960
  "data-diagram-group-label": group.id,
939
- x: labelX,
940
- y: group.labelSide === "bottom" ? box.y + box.h - groupLabelHeight(group) + GROUP_LABEL_H - 14 : box.y + GROUP_LABEL_H,
941
- textAnchor: labelAnchor,
942
- fontFamily: "ui-sans-serif, system-ui, sans-serif",
943
- fontSize: 12,
944
- fontWeight: 600,
961
+ x: firstLabel.x,
962
+ y: firstLabel.y,
963
+ textAnchor: firstLabel.anchor,
964
+ fontFamily: FONT_FAMILY[firstLabel.font.face],
965
+ fontSize: firstLabel.font.size,
966
+ fontWeight: firstLabel.font.weight,
945
967
  fill: DIAGRAM_TEXT,
946
- children: labelLines.map((line_0, i) => /*#__PURE__*/_jsx("tspan", {
947
- x: labelX,
948
- dy: i === 0 ? 0 : 14,
949
- children: line_0
950
- }, i))
968
+ children: /*#__PURE__*/_jsx(RunSpans, {
969
+ runs: label
970
+ })
951
971
  });
952
- $[16] = box.h;
953
- $[17] = box.w;
954
- $[18] = box.x;
955
- $[19] = box.y;
956
- $[20] = dividers;
957
- $[21] = frame;
958
- $[22] = group;
959
- $[23] = hasFill;
960
- $[24] = hasFrame;
961
- $[25] = opacity;
962
- $[26] = rx;
963
- $[27] = stroke;
964
- $[28] = surfaceFill;
965
- $[29] = texture;
966
- $[30] = texturePattern;
967
- $[31] = themeAccent;
968
- $[32] = T0;
969
- $[33] = t10;
970
- $[34] = t11;
971
- $[35] = t12;
972
- $[36] = t7;
973
- $[37] = t8;
974
- $[38] = t9;
975
- } else {
976
- T0 = $[32];
977
- t10 = $[33];
978
- t11 = $[34];
979
- t12 = $[35];
980
- t7 = $[36];
981
- t8 = $[37];
982
- t9 = $[38];
983
- }
984
- const t13 = group.id;
985
- let t14;
986
- if ($[83] !== box || $[84] !== group) {
987
- t14 = groupPortPlacements(group, box);
988
- $[83] = box;
989
- $[84] = group;
990
- $[85] = t14;
972
+ $[61] = firstLabel;
973
+ $[62] = group.id;
974
+ $[63] = label;
975
+ $[64] = t16;
991
976
  } else {
992
- t14 = $[85];
977
+ t16 = $[64];
993
978
  }
994
- let t15;
995
- if ($[86] !== group.id || $[87] !== t14) {
996
- t15 = /*#__PURE__*/_jsx(PortMarkers, {
997
- ownerId: t13,
998
- placements: t14
979
+ let t17;
980
+ if ($[65] !== layout.ports) {
981
+ t17 = layout.ports ?? [];
982
+ $[65] = layout.ports;
983
+ $[66] = t17;
984
+ } else {
985
+ t17 = $[66];
986
+ }
987
+ let t18;
988
+ if ($[67] !== group.id || $[68] !== group.ports || $[69] !== t17) {
989
+ t18 = /*#__PURE__*/_jsx(PortMarkers, {
990
+ ownerId: group.id,
991
+ ports: t17,
992
+ declared: group.ports
999
993
  });
1000
- $[86] = group.id;
1001
- $[87] = t14;
1002
- $[88] = t15;
994
+ $[67] = group.id;
995
+ $[68] = group.ports;
996
+ $[69] = t17;
997
+ $[70] = t18;
1003
998
  } else {
1004
- t15 = $[88];
999
+ t18 = $[70];
1005
1000
  }
1006
- let t16;
1007
- if ($[89] !== T0 || $[90] !== t10 || $[91] !== t11 || $[92] !== t12 || $[93] !== t15 || $[94] !== t7 || $[95] !== t8 || $[96] !== t9) {
1008
- t16 = /*#__PURE__*/_jsxs(T0, {
1009
- style: t7,
1010
- children: [t8, t9, t10, t11, t12, t15]
1001
+ let t19;
1002
+ if ($[71] !== t12 || $[72] !== t13 || $[73] !== t14 || $[74] !== t15 || $[75] !== t16 || $[76] !== t18 || $[77] !== t8) {
1003
+ t19 = /*#__PURE__*/_jsxs(motion.g, {
1004
+ style: t8,
1005
+ children: [t12, t13, t14, t15, t16, t18]
1011
1006
  });
1012
- $[89] = T0;
1013
- $[90] = t10;
1014
- $[91] = t11;
1015
- $[92] = t12;
1016
- $[93] = t15;
1017
- $[94] = t7;
1018
- $[95] = t8;
1019
- $[96] = t9;
1020
- $[97] = t16;
1021
- } else {
1022
- t16 = $[97];
1007
+ $[71] = t12;
1008
+ $[72] = t13;
1009
+ $[73] = t14;
1010
+ $[74] = t15;
1011
+ $[75] = t16;
1012
+ $[76] = t18;
1013
+ $[77] = t8;
1014
+ $[78] = t19;
1015
+ } else {
1016
+ t19 = $[78];
1023
1017
  }
1024
- return t16;
1018
+ return t19;
1019
+ }
1020
+ function _temp2(value_0) {
1021
+ return `col:${value_0}`;
1022
+ }
1023
+ function _temp(value) {
1024
+ return `row:${value}`;
1025
1025
  }
1026
1026
  export function EdgeStroke(t0) {
1027
- const $ = _c(30);
1027
+ const $ = _c(36);
1028
1028
  const {
1029
1029
  d,
1030
1030
  edge,
@@ -1036,95 +1036,113 @@ export function EdgeStroke(t0) {
1036
1036
  accent: themeAccent,
1037
1037
  ids
1038
1038
  } = useDiagramTheme();
1039
- const stroke = edge.accent ? themeAccent : edge.dim ? DIAGRAM_DIM : DIAGRAM_NEUTRAL;
1040
- const markerId = edge.accent ? ids.arrowAccent : edge.dim ? ids.arrowDim : ids.arrowNeutral;
1041
- const direction = edge.headless ? "none" : edge.direction ?? "forward";
1042
- const markerUrl = `url(#${markerId})`;
1043
- const strokeWidth = edge.strokeWidth ?? 1.5;
1044
1039
  let t1;
1045
- if ($[0] !== edge) {
1046
- t1 = edgeDasharray(edge);
1040
+ if ($[0] !== edge || $[1] !== themeAccent) {
1041
+ t1 = edgeStroke(edge, themeAccent);
1047
1042
  $[0] = edge;
1048
- $[1] = t1;
1043
+ $[1] = themeAccent;
1044
+ $[2] = t1;
1049
1045
  } else {
1050
- t1 = $[1];
1046
+ t1 = $[2];
1051
1047
  }
1052
- const dasharray = t1;
1053
- const drawEnd = start + (end - start) * 0.85;
1048
+ const stroke = t1;
1054
1049
  let t2;
1055
- if ($[2] !== drawEnd || $[3] !== start) {
1056
- t2 = [start, drawEnd];
1057
- $[2] = drawEnd;
1058
- $[3] = start;
1059
- $[4] = t2;
1050
+ if ($[3] !== edge || $[4] !== ids) {
1051
+ t2 = edgeMarkerId(edge, ids);
1052
+ $[3] = edge;
1053
+ $[4] = ids;
1054
+ $[5] = t2;
1060
1055
  } else {
1061
- t2 = $[4];
1056
+ t2 = $[5];
1062
1057
  }
1058
+ const markerId = t2;
1059
+ const direction = edge.headless ? "none" : edge.direction ?? "forward";
1060
+ const markerUrl = `url(#${markerId})`;
1061
+ const strokeWidth = edge.strokeWidth ?? 1.5;
1063
1062
  let t3;
1063
+ if ($[6] !== edge) {
1064
+ t3 = edgeDasharray(edge);
1065
+ $[6] = edge;
1066
+ $[7] = t3;
1067
+ } else {
1068
+ t3 = $[7];
1069
+ }
1070
+ const dasharray = t3;
1071
+ const drawEnd = start + (end - start) * 0.85;
1064
1072
  let t4;
1065
- if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
1066
- t3 = [0, 1];
1067
- t4 = {
1068
- clamp: true
1069
- };
1070
- $[5] = t3;
1071
- $[6] = t4;
1073
+ if ($[8] !== drawEnd || $[9] !== start) {
1074
+ t4 = [start, drawEnd];
1075
+ $[8] = drawEnd;
1076
+ $[9] = start;
1077
+ $[10] = t4;
1072
1078
  } else {
1073
- t3 = $[5];
1074
- t4 = $[6];
1079
+ t4 = $[10];
1075
1080
  }
1076
- const pathLength = useTransform(progress, t2, t3, t4);
1077
- const t5 = start + 0.001;
1081
+ let t5;
1078
1082
  let t6;
1079
- if ($[7] !== start || $[8] !== t5) {
1080
- t6 = [start, t5];
1081
- $[7] = start;
1082
- $[8] = t5;
1083
- $[9] = t6;
1083
+ if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
1084
+ t5 = [0, 1];
1085
+ t6 = {
1086
+ clamp: true
1087
+ };
1088
+ $[11] = t5;
1089
+ $[12] = t6;
1084
1090
  } else {
1085
- t6 = $[9];
1091
+ t5 = $[11];
1092
+ t6 = $[12];
1086
1093
  }
1087
- let t7;
1094
+ const pathLength = useTransform(progress, t4, t5, t6);
1095
+ const t7 = start + 0.001;
1088
1096
  let t8;
1089
- if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
1090
- t7 = [0, 1];
1091
- t8 = {
1097
+ if ($[13] !== start || $[14] !== t7) {
1098
+ t8 = [start, t7];
1099
+ $[13] = start;
1100
+ $[14] = t7;
1101
+ $[15] = t8;
1102
+ } else {
1103
+ t8 = $[15];
1104
+ }
1105
+ let t10;
1106
+ let t9;
1107
+ if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
1108
+ t9 = [0, 1];
1109
+ t10 = {
1092
1110
  clamp: true
1093
1111
  };
1094
- $[10] = t7;
1095
- $[11] = t8;
1112
+ $[16] = t10;
1113
+ $[17] = t9;
1096
1114
  } else {
1097
- t7 = $[10];
1098
- t8 = $[11];
1099
- }
1100
- const pathOpacity = useTransform(progress, t6, t7, t8);
1101
- const t9 = `${edge.from}->${edge.to}`;
1102
- const t10 = edge.layer ?? "foreground";
1103
- const t11 = direction === "both" ? markerUrl : undefined;
1104
- const t12 = direction === "forward" || direction === "both" ? markerUrl : undefined;
1105
- let t13;
1106
- if ($[12] !== dasharray || $[13] !== pathLength || $[14] !== pathOpacity) {
1107
- t13 = dasharray ? {
1115
+ t10 = $[16];
1116
+ t9 = $[17];
1117
+ }
1118
+ const pathOpacity = useTransform(progress, t8, t9, t10);
1119
+ const t11 = `${edge.from}->${edge.to}`;
1120
+ const t12 = edge.layer ?? "foreground";
1121
+ const t13 = direction === "both" ? markerUrl : undefined;
1122
+ const t14 = direction === "forward" || direction === "both" ? markerUrl : undefined;
1123
+ let t15;
1124
+ if ($[18] !== dasharray || $[19] !== pathLength || $[20] !== pathOpacity) {
1125
+ t15 = dasharray ? {
1108
1126
  opacity: pathOpacity
1109
1127
  } : {
1110
1128
  pathLength,
1111
1129
  opacity: pathOpacity
1112
1130
  };
1113
- $[12] = dasharray;
1114
- $[13] = pathLength;
1115
- $[14] = pathOpacity;
1116
- $[15] = t13;
1131
+ $[18] = dasharray;
1132
+ $[19] = pathLength;
1133
+ $[20] = pathOpacity;
1134
+ $[21] = t15;
1117
1135
  } else {
1118
- t13 = $[15];
1136
+ t15 = $[21];
1119
1137
  }
1120
- let t14;
1121
- if ($[16] !== d || $[17] !== dasharray || $[18] !== direction || $[19] !== edge.channel || $[20] !== edge.lineStyle || $[21] !== edge.route || $[22] !== stroke || $[23] !== strokeWidth || $[24] !== t10 || $[25] !== t11 || $[26] !== t12 || $[27] !== t13 || $[28] !== t9) {
1122
- t14 = /*#__PURE__*/_jsx(motion.path, {
1123
- "data-diagram-edge": t9,
1138
+ let t16;
1139
+ if ($[22] !== d || $[23] !== dasharray || $[24] !== direction || $[25] !== edge.channel || $[26] !== edge.lineStyle || $[27] !== edge.route || $[28] !== stroke || $[29] !== strokeWidth || $[30] !== t11 || $[31] !== t12 || $[32] !== t13 || $[33] !== t14 || $[34] !== t15) {
1140
+ t16 = /*#__PURE__*/_jsx(motion.path, {
1141
+ "data-diagram-edge": t11,
1124
1142
  "data-diagram-edge-channel": edge.channel,
1125
1143
  "data-diagram-edge-line-style": edge.lineStyle,
1126
1144
  "data-diagram-edge-direction": direction,
1127
- "data-diagram-edge-layer": t10,
1145
+ "data-diagram-edge-layer": t12,
1128
1146
  "data-diagram-edge-route": edge.route,
1129
1147
  d: d,
1130
1148
  fill: "none",
@@ -1133,35 +1151,33 @@ export function EdgeStroke(t0) {
1133
1151
  strokeDasharray: dasharray,
1134
1152
  strokeLinejoin: "round",
1135
1153
  strokeLinecap: "round",
1136
- markerStart: t11,
1137
- markerEnd: t12,
1138
- style: t13
1154
+ markerStart: t13,
1155
+ markerEnd: t14,
1156
+ style: t15
1139
1157
  });
1140
- $[16] = d;
1141
- $[17] = dasharray;
1142
- $[18] = direction;
1143
- $[19] = edge.channel;
1144
- $[20] = edge.lineStyle;
1145
- $[21] = edge.route;
1146
- $[22] = stroke;
1147
- $[23] = strokeWidth;
1148
- $[24] = t10;
1149
- $[25] = t11;
1150
- $[26] = t12;
1151
- $[27] = t13;
1152
- $[28] = t9;
1153
- $[29] = t14;
1154
- } else {
1155
- t14 = $[29];
1156
- }
1157
- return t14;
1158
+ $[22] = d;
1159
+ $[23] = dasharray;
1160
+ $[24] = direction;
1161
+ $[25] = edge.channel;
1162
+ $[26] = edge.lineStyle;
1163
+ $[27] = edge.route;
1164
+ $[28] = stroke;
1165
+ $[29] = strokeWidth;
1166
+ $[30] = t11;
1167
+ $[31] = t12;
1168
+ $[32] = t13;
1169
+ $[33] = t14;
1170
+ $[34] = t15;
1171
+ $[35] = t16;
1172
+ } else {
1173
+ t16 = $[35];
1174
+ }
1175
+ return t16;
1158
1176
  }
1159
1177
  export function EdgeOverlay(t0) {
1160
- const $ = _c(18);
1178
+ const $ = _c(21);
1161
1179
  const {
1162
- edge,
1163
- labelPlacement,
1164
- badgePlacement,
1180
+ layout,
1165
1181
  progress,
1166
1182
  start,
1167
1183
  end
@@ -1169,432 +1185,421 @@ export function EdgeOverlay(t0) {
1169
1185
  const {
1170
1186
  accent: themeAccent
1171
1187
  } = useDiagramTheme();
1172
- const labelFill = edge.accent ? themeAccent : edge.dim ? DIAGRAM_DIM : DIAGRAM_TEXT;
1173
- const drawEnd = start + (end - start) * 0.85;
1188
+ const {
1189
+ edge,
1190
+ label,
1191
+ badge
1192
+ } = layout;
1174
1193
  let t1;
1175
- if ($[0] !== drawEnd || $[1] !== end) {
1176
- t1 = [drawEnd, end];
1177
- $[0] = drawEnd;
1178
- $[1] = end;
1194
+ if ($[0] !== edge || $[1] !== themeAccent) {
1195
+ t1 = edgeLabelFill(edge, themeAccent);
1196
+ $[0] = edge;
1197
+ $[1] = themeAccent;
1179
1198
  $[2] = t1;
1180
1199
  } else {
1181
1200
  t1 = $[2];
1182
1201
  }
1202
+ const labelFill = t1;
1203
+ const drawEnd = start + (end - start) * 0.85;
1183
1204
  let t2;
1205
+ if ($[3] !== drawEnd || $[4] !== end) {
1206
+ t2 = [drawEnd, end];
1207
+ $[3] = drawEnd;
1208
+ $[4] = end;
1209
+ $[5] = t2;
1210
+ } else {
1211
+ t2 = $[5];
1212
+ }
1184
1213
  let t3;
1185
- if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
1186
- t2 = [0, 1];
1187
- t3 = {
1214
+ let t4;
1215
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
1216
+ t3 = [0, 1];
1217
+ t4 = {
1188
1218
  clamp: true
1189
1219
  };
1190
- $[3] = t2;
1191
- $[4] = t3;
1220
+ $[6] = t3;
1221
+ $[7] = t4;
1192
1222
  } else {
1193
- t2 = $[3];
1194
- t3 = $[4];
1223
+ t3 = $[6];
1224
+ t4 = $[7];
1195
1225
  }
1196
- const labelOpacity = useTransform(progress, t1, t2, t3);
1197
- let t4;
1198
- if ($[5] !== edge || $[6] !== labelFill || $[7] !== labelOpacity || $[8] !== labelPlacement) {
1199
- t4 = edge.label && labelPlacement && /*#__PURE__*/_jsx(EdgeLabel, {
1226
+ const labelOpacity = useTransform(progress, t2, t3, t4);
1227
+ let t5;
1228
+ if ($[8] !== edge || $[9] !== label || $[10] !== labelFill || $[11] !== labelOpacity) {
1229
+ t5 = label && /*#__PURE__*/_jsx(EdgeLabel, {
1200
1230
  edge: edge,
1201
- placement: labelPlacement,
1231
+ label: label,
1202
1232
  fill: labelFill,
1203
1233
  opacity: labelOpacity
1204
1234
  });
1205
- $[5] = edge;
1206
- $[6] = labelFill;
1207
- $[7] = labelOpacity;
1208
- $[8] = labelPlacement;
1209
- $[9] = t4;
1235
+ $[8] = edge;
1236
+ $[9] = label;
1237
+ $[10] = labelFill;
1238
+ $[11] = labelOpacity;
1239
+ $[12] = t5;
1210
1240
  } else {
1211
- t4 = $[9];
1241
+ t5 = $[12];
1212
1242
  }
1213
- let t5;
1214
- if ($[10] !== badgePlacement || $[11] !== edge || $[12] !== labelFill || $[13] !== labelOpacity) {
1215
- t5 = (edge.badgeIcon || edge.badgeLabel?.length) && badgePlacement && /*#__PURE__*/_jsx(EdgeBadge, {
1243
+ let t6;
1244
+ if ($[13] !== badge || $[14] !== edge || $[15] !== labelFill || $[16] !== labelOpacity) {
1245
+ t6 = badge && /*#__PURE__*/_jsx(EdgeBadge, {
1216
1246
  edge: edge,
1217
- placement: badgePlacement,
1247
+ badge: badge,
1218
1248
  fill: labelFill,
1219
1249
  opacity: labelOpacity
1220
1250
  });
1221
- $[10] = badgePlacement;
1222
- $[11] = edge;
1223
- $[12] = labelFill;
1224
- $[13] = labelOpacity;
1225
- $[14] = t5;
1251
+ $[13] = badge;
1252
+ $[14] = edge;
1253
+ $[15] = labelFill;
1254
+ $[16] = labelOpacity;
1255
+ $[17] = t6;
1226
1256
  } else {
1227
- t5 = $[14];
1257
+ t6 = $[17];
1228
1258
  }
1229
- let t6;
1230
- if ($[15] !== t4 || $[16] !== t5) {
1231
- t6 = /*#__PURE__*/_jsxs(_Fragment, {
1232
- children: [t4, t5]
1259
+ let t7;
1260
+ if ($[18] !== t5 || $[19] !== t6) {
1261
+ t7 = /*#__PURE__*/_jsxs(_Fragment, {
1262
+ children: [t5, t6]
1233
1263
  });
1234
- $[15] = t4;
1235
- $[16] = t5;
1236
- $[17] = t6;
1264
+ $[18] = t5;
1265
+ $[19] = t6;
1266
+ $[20] = t7;
1237
1267
  } else {
1238
- t6 = $[17];
1268
+ t7 = $[20];
1239
1269
  }
1240
- return t6;
1270
+ return t7;
1241
1271
  }
1242
1272
  function EdgeLabel(t0) {
1243
- const $ = _c(43);
1273
+ const $ = _c(27);
1244
1274
  const {
1245
1275
  edge,
1246
- placement,
1276
+ label,
1247
1277
  fill,
1248
1278
  opacity
1249
1279
  } = t0;
1280
+ const {
1281
+ box
1282
+ } = label;
1283
+ const [first] = label.text;
1284
+ if (!first) {
1285
+ return null;
1286
+ }
1250
1287
  let t1;
1251
- if ($[0] !== edge.label) {
1252
- t1 = edge.label ?? [];
1253
- $[0] = edge.label;
1288
+ if ($[0] !== opacity) {
1289
+ t1 = {
1290
+ opacity
1291
+ };
1292
+ $[0] = opacity;
1254
1293
  $[1] = t1;
1255
1294
  } else {
1256
1295
  t1 = $[1];
1257
1296
  }
1258
- const label = t1;
1259
1297
  let t2;
1260
- if ($[2] !== edge) {
1261
- t2 = edgeLabelFontSize(edge);
1262
- $[2] = edge;
1263
- $[3] = t2;
1264
- } else {
1265
- t2 = $[3];
1266
- }
1267
- const fontSize = t2;
1268
- let t3;
1269
- if ($[4] !== edge) {
1270
- t3 = edgeLabelLineHeight(edge);
1271
- $[4] = edge;
1272
- $[5] = t3;
1273
- } else {
1274
- t3 = $[5];
1275
- }
1276
- const lineHeight = t3;
1277
- let t4;
1278
- if ($[6] !== edge || $[7] !== placement) {
1279
- t4 = edgeLabelFrameBox(edge, placement);
1280
- $[6] = edge;
1281
- $[7] = placement;
1282
- $[8] = t4;
1283
- } else {
1284
- t4 = $[8];
1285
- }
1286
- const {
1287
- x,
1288
- y,
1289
- w: width,
1290
- h: height
1291
- } = t4;
1292
- let t5;
1293
- if ($[9] !== opacity) {
1294
- t5 = {
1295
- opacity
1296
- };
1297
- $[9] = opacity;
1298
- $[10] = t5;
1299
- } else {
1300
- t5 = $[10];
1301
- }
1302
- let t6;
1303
- if ($[11] !== edge.from || $[12] !== edge.labelFrame || $[13] !== edge.labelLineGap || $[14] !== edge.to || $[15] !== fill || $[16] !== height || $[17] !== placement.segmentIndex || $[18] !== width || $[19] !== x || $[20] !== y) {
1304
- t6 = edge.labelFrame && /*#__PURE__*/_jsx("rect", {
1298
+ if ($[2] !== box || $[3] !== edge.from || $[4] !== edge.labelFrame || $[5] !== edge.labelLineGap || $[6] !== edge.to || $[7] !== fill || $[8] !== label.segment) {
1299
+ t2 = edge.labelFrame && /*#__PURE__*/_jsx("rect", {
1305
1300
  "data-diagram-edge-label-frame": `${edge.from}->${edge.to}`,
1306
- "data-diagram-edge-label-segment": placement.segmentIndex,
1301
+ "data-diagram-edge-label-segment": label.segment,
1307
1302
  "data-diagram-edge-label-line-gap": edge.labelLineGap,
1308
- x: x,
1309
- y: y,
1310
- width: width,
1311
- height: height,
1312
- rx: height / 2,
1303
+ x: box.x,
1304
+ y: box.y,
1305
+ width: box.w,
1306
+ height: box.h,
1307
+ rx: box.h / 2,
1313
1308
  fill: DIAGRAM_BG,
1314
1309
  stroke: fill,
1315
1310
  strokeWidth: 0.75
1316
1311
  });
1317
- $[11] = edge.from;
1318
- $[12] = edge.labelFrame;
1319
- $[13] = edge.labelLineGap;
1320
- $[14] = edge.to;
1321
- $[15] = fill;
1322
- $[16] = height;
1323
- $[17] = placement.segmentIndex;
1324
- $[18] = width;
1325
- $[19] = x;
1326
- $[20] = y;
1327
- $[21] = t6;
1328
- } else {
1329
- t6 = $[21];
1330
- }
1331
- const t7 = `${edge.from}->${edge.to}`;
1332
- const t8 = placement.segmentIndex;
1333
- const t9 = edge.labelLineGap;
1334
- const t10 = placement.x;
1335
- const t11 = placement.y;
1336
- const t12 = placement.align;
1337
- let t13;
1338
- if ($[22] !== label || $[23] !== lineHeight || $[24] !== placement.x) {
1339
- let t14;
1340
- if ($[26] !== lineHeight || $[27] !== placement.x) {
1341
- t14 = (line, i) => /*#__PURE__*/_jsx("tspan", {
1342
- x: placement.x,
1343
- dy: i === 0 ? 0 : lineHeight,
1344
- children: line
1345
- }, i);
1346
- $[26] = lineHeight;
1347
- $[27] = placement.x;
1348
- $[28] = t14;
1349
- } else {
1350
- t14 = $[28];
1351
- }
1352
- t13 = label.map(t14);
1353
- $[22] = label;
1354
- $[23] = lineHeight;
1355
- $[24] = placement.x;
1356
- $[25] = t13;
1312
+ $[2] = box;
1313
+ $[3] = edge.from;
1314
+ $[4] = edge.labelFrame;
1315
+ $[5] = edge.labelLineGap;
1316
+ $[6] = edge.to;
1317
+ $[7] = fill;
1318
+ $[8] = label.segment;
1319
+ $[9] = t2;
1357
1320
  } else {
1358
- t13 = $[25];
1321
+ t2 = $[9];
1359
1322
  }
1360
- let t14;
1361
- if ($[29] !== edge.labelLineGap || $[30] !== fill || $[31] !== fontSize || $[32] !== placement.align || $[33] !== placement.segmentIndex || $[34] !== placement.x || $[35] !== placement.y || $[36] !== t13 || $[37] !== t7) {
1362
- t14 = /*#__PURE__*/_jsx("text", {
1363
- "data-diagram-edge-label": t7,
1364
- "data-diagram-edge-label-segment": t8,
1365
- "data-diagram-edge-label-line-gap": t9,
1366
- x: t10,
1367
- y: t11,
1368
- textAnchor: t12,
1369
- fontFamily: "ui-monospace, 'Geist Mono', monospace",
1370
- fontSize: fontSize,
1323
+ const t3 = `${edge.from}->${edge.to}`;
1324
+ const t4 = FONT_FAMILY[first.font.face];
1325
+ let t5;
1326
+ if ($[10] !== label.text) {
1327
+ t5 = /*#__PURE__*/_jsx(RunSpans, {
1328
+ runs: label.text
1329
+ });
1330
+ $[10] = label.text;
1331
+ $[11] = t5;
1332
+ } else {
1333
+ t5 = $[11];
1334
+ }
1335
+ let t6;
1336
+ if ($[12] !== edge.labelLineGap || $[13] !== fill || $[14] !== first.anchor || $[15] !== first.font.size || $[16] !== first.x || $[17] !== first.y || $[18] !== label.segment || $[19] !== t3 || $[20] !== t4 || $[21] !== t5) {
1337
+ t6 = /*#__PURE__*/_jsx("text", {
1338
+ "data-diagram-edge-label": t3,
1339
+ "data-diagram-edge-label-segment": label.segment,
1340
+ "data-diagram-edge-label-line-gap": edge.labelLineGap,
1341
+ x: first.x,
1342
+ y: first.y,
1343
+ textAnchor: first.anchor,
1344
+ fontFamily: t4,
1345
+ fontSize: first.font.size,
1371
1346
  fill: fill,
1372
- children: t13
1347
+ children: t5
1373
1348
  });
1374
- $[29] = edge.labelLineGap;
1375
- $[30] = fill;
1376
- $[31] = fontSize;
1377
- $[32] = placement.align;
1378
- $[33] = placement.segmentIndex;
1379
- $[34] = placement.x;
1380
- $[35] = placement.y;
1381
- $[36] = t13;
1382
- $[37] = t7;
1383
- $[38] = t14;
1384
- } else {
1385
- t14 = $[38];
1349
+ $[12] = edge.labelLineGap;
1350
+ $[13] = fill;
1351
+ $[14] = first.anchor;
1352
+ $[15] = first.font.size;
1353
+ $[16] = first.x;
1354
+ $[17] = first.y;
1355
+ $[18] = label.segment;
1356
+ $[19] = t3;
1357
+ $[20] = t4;
1358
+ $[21] = t5;
1359
+ $[22] = t6;
1360
+ } else {
1361
+ t6 = $[22];
1386
1362
  }
1387
- let t15;
1388
- if ($[39] !== t14 || $[40] !== t5 || $[41] !== t6) {
1389
- t15 = /*#__PURE__*/_jsxs(motion.g, {
1390
- style: t5,
1391
- children: [t6, t14]
1363
+ let t7;
1364
+ if ($[23] !== t1 || $[24] !== t2 || $[25] !== t6) {
1365
+ t7 = /*#__PURE__*/_jsxs(motion.g, {
1366
+ style: t1,
1367
+ children: [t2, t6]
1392
1368
  });
1393
- $[39] = t14;
1394
- $[40] = t5;
1395
- $[41] = t6;
1396
- $[42] = t15;
1369
+ $[23] = t1;
1370
+ $[24] = t2;
1371
+ $[25] = t6;
1372
+ $[26] = t7;
1397
1373
  } else {
1398
- t15 = $[42];
1374
+ t7 = $[26];
1399
1375
  }
1400
- return t15;
1376
+ return t7;
1401
1377
  }
1378
+
1379
+ /**
1380
+ * The badge draws in its own frame, centred on the badge, so that it can move
1381
+ * as one piece.
1382
+ */
1402
1383
  function EdgeBadge(t0) {
1403
- const $ = _c(30);
1384
+ const $ = _c(35);
1404
1385
  const {
1405
1386
  edge,
1406
- placement,
1387
+ badge,
1407
1388
  fill,
1408
1389
  opacity
1409
1390
  } = t0;
1410
- let t1;
1411
- if ($[0] !== edge.badgeLabel) {
1412
- t1 = edge.badgeLabel ?? [];
1413
- $[0] = edge.badgeLabel;
1414
- $[1] = t1;
1391
+ const {
1392
+ box,
1393
+ icon,
1394
+ text
1395
+ } = badge;
1396
+ const t1 = box.x + box.w / 2;
1397
+ const t2 = box.y + box.h / 2;
1398
+ let t3;
1399
+ if ($[0] !== t1 || $[1] !== t2) {
1400
+ t3 = {
1401
+ x: t1,
1402
+ y: t2
1403
+ };
1404
+ $[0] = t1;
1405
+ $[1] = t2;
1406
+ $[2] = t3;
1415
1407
  } else {
1416
- t1 = $[1];
1408
+ t3 = $[2];
1417
1409
  }
1418
- const label = t1;
1419
- const iconSize = edge.badgeIcon ? EDGE_BADGE_ICON : 0;
1420
- const iconGap = edge.badgeIcon && label.length > 0 ? 8 : 0;
1421
- let t2;
1422
- if ($[2] !== edge) {
1423
- t2 = edgeBadgeSize(edge);
1424
- $[2] = edge;
1425
- $[3] = t2;
1410
+ const origin = t3;
1411
+ let t4;
1412
+ if ($[3] !== origin.x || $[4] !== origin.y || $[5] !== text) {
1413
+ let t5;
1414
+ if ($[7] !== origin.x || $[8] !== origin.y) {
1415
+ t5 = run => ({
1416
+ ...run,
1417
+ x: run.x - origin.x,
1418
+ y: run.y - origin.y
1419
+ });
1420
+ $[7] = origin.x;
1421
+ $[8] = origin.y;
1422
+ $[9] = t5;
1423
+ } else {
1424
+ t5 = $[9];
1425
+ }
1426
+ t4 = text.map(t5);
1427
+ $[3] = origin.x;
1428
+ $[4] = origin.y;
1429
+ $[5] = text;
1430
+ $[6] = t4;
1426
1431
  } else {
1427
- t2 = $[3];
1432
+ t4 = $[6];
1428
1433
  }
1429
- const {
1430
- w: width,
1431
- h: height
1432
- } = t2;
1433
- const left = -width / 2;
1434
- const top = -height / 2;
1435
- const iconX = left + 8;
1436
- const iconY = -iconSize / 2;
1437
- const textX = left + 8 + iconSize + iconGap;
1438
- const firstLineY = -((label.length - 1) * 12) / 2 + 4;
1439
- const t3 = `${edge.from}->${edge.to}`;
1440
- const t4 = `translate(${placement.x} ${placement.y})`;
1441
- let t5;
1442
- if ($[4] !== opacity) {
1443
- t5 = {
1434
+ const local = t4;
1435
+ const [first] = local;
1436
+ const t5 = `${edge.from}->${edge.to}`;
1437
+ const t6 = `translate(${origin.x} ${origin.y})`;
1438
+ let t7;
1439
+ if ($[10] !== opacity) {
1440
+ t7 = {
1444
1441
  opacity
1445
1442
  };
1446
- $[4] = opacity;
1447
- $[5] = t5;
1443
+ $[10] = opacity;
1444
+ $[11] = t7;
1448
1445
  } else {
1449
- t5 = $[5];
1446
+ t7 = $[11];
1450
1447
  }
1451
- let t6;
1452
- if ($[6] !== fill || $[7] !== height || $[8] !== left || $[9] !== top || $[10] !== width) {
1453
- t6 = /*#__PURE__*/_jsx("rect", {
1454
- x: left,
1455
- y: top,
1456
- width: width,
1457
- height: height,
1448
+ const t8 = box.x - origin.x;
1449
+ const t9 = box.y - origin.y;
1450
+ let t10;
1451
+ if ($[12] !== box.h || $[13] !== box.w || $[14] !== fill || $[15] !== t8 || $[16] !== t9) {
1452
+ t10 = /*#__PURE__*/_jsx("rect", {
1453
+ x: t8,
1454
+ y: t9,
1455
+ width: box.w,
1456
+ height: box.h,
1458
1457
  rx: 10,
1459
1458
  fill: DIAGRAM_BG,
1460
1459
  stroke: fill,
1461
1460
  strokeWidth: 1
1462
1461
  });
1463
- $[6] = fill;
1464
- $[7] = height;
1465
- $[8] = left;
1466
- $[9] = top;
1467
- $[10] = width;
1468
- $[11] = t6;
1462
+ $[12] = box.h;
1463
+ $[13] = box.w;
1464
+ $[14] = fill;
1465
+ $[15] = t8;
1466
+ $[16] = t9;
1467
+ $[17] = t10;
1469
1468
  } else {
1470
- t6 = $[11];
1469
+ t10 = $[17];
1471
1470
  }
1472
- let t7;
1473
- if ($[12] !== edge.badgeIcon || $[13] !== fill || $[14] !== iconSize || $[15] !== iconX || $[16] !== iconY) {
1474
- t7 = edge.badgeIcon && /*#__PURE__*/_jsx(DiagramNodeIcon, {
1471
+ let t11;
1472
+ if ($[18] !== edge.badgeIcon || $[19] !== fill || $[20] !== icon || $[21] !== origin.x || $[22] !== origin.y) {
1473
+ t11 = edge.badgeIcon && icon && /*#__PURE__*/_jsx(DiagramNodeIcon, {
1475
1474
  icon: edge.badgeIcon,
1476
- x: iconX,
1477
- y: iconY,
1478
- size: iconSize,
1475
+ x: icon.x - origin.x,
1476
+ y: icon.y - origin.y,
1477
+ size: icon.w,
1479
1478
  color: fill
1480
1479
  });
1481
- $[12] = edge.badgeIcon;
1482
- $[13] = fill;
1483
- $[14] = iconSize;
1484
- $[15] = iconX;
1485
- $[16] = iconY;
1486
- $[17] = t7;
1480
+ $[18] = edge.badgeIcon;
1481
+ $[19] = fill;
1482
+ $[20] = icon;
1483
+ $[21] = origin.x;
1484
+ $[22] = origin.y;
1485
+ $[23] = t11;
1487
1486
  } else {
1488
- t7 = $[17];
1487
+ t11 = $[23];
1489
1488
  }
1490
- let t8;
1491
- if ($[18] !== fill || $[19] !== firstLineY || $[20] !== label || $[21] !== textX) {
1492
- t8 = label.length > 0 && /*#__PURE__*/_jsx("text", {
1493
- x: textX,
1494
- y: firstLineY,
1495
- textAnchor: "start",
1496
- fontFamily: "ui-sans-serif, system-ui, sans-serif",
1497
- fontSize: 10,
1498
- fontWeight: 600,
1489
+ let t12;
1490
+ if ($[24] !== fill || $[25] !== first || $[26] !== local) {
1491
+ t12 = first && /*#__PURE__*/_jsx("text", {
1492
+ x: first.x,
1493
+ y: first.y,
1494
+ textAnchor: first.anchor,
1495
+ fontFamily: FONT_FAMILY[first.font.face],
1496
+ fontSize: first.font.size,
1497
+ fontWeight: first.font.weight,
1499
1498
  fill: fill,
1500
- children: label.map((line, i) => /*#__PURE__*/_jsx("tspan", {
1501
- x: textX,
1502
- dy: i === 0 ? 0 : 12,
1503
- children: line
1504
- }, i))
1499
+ children: /*#__PURE__*/_jsx(RunSpans, {
1500
+ runs: local
1501
+ })
1505
1502
  });
1506
- $[18] = fill;
1507
- $[19] = firstLineY;
1508
- $[20] = label;
1509
- $[21] = textX;
1510
- $[22] = t8;
1503
+ $[24] = fill;
1504
+ $[25] = first;
1505
+ $[26] = local;
1506
+ $[27] = t12;
1511
1507
  } else {
1512
- t8 = $[22];
1508
+ t12 = $[27];
1513
1509
  }
1514
- let t9;
1515
- if ($[23] !== t3 || $[24] !== t4 || $[25] !== t5 || $[26] !== t6 || $[27] !== t7 || $[28] !== t8) {
1516
- t9 = /*#__PURE__*/_jsxs(motion.g, {
1517
- "data-diagram-edge-badge": t3,
1518
- transform: t4,
1519
- style: t5,
1520
- children: [t6, t7, t8]
1510
+ let t13;
1511
+ if ($[28] !== t10 || $[29] !== t11 || $[30] !== t12 || $[31] !== t5 || $[32] !== t6 || $[33] !== t7) {
1512
+ t13 = /*#__PURE__*/_jsxs(motion.g, {
1513
+ "data-diagram-edge-badge": t5,
1514
+ transform: t6,
1515
+ style: t7,
1516
+ children: [t10, t11, t12]
1521
1517
  });
1522
- $[23] = t3;
1523
- $[24] = t4;
1524
- $[25] = t5;
1525
- $[26] = t6;
1526
- $[27] = t7;
1527
- $[28] = t8;
1528
- $[29] = t9;
1518
+ $[28] = t10;
1519
+ $[29] = t11;
1520
+ $[30] = t12;
1521
+ $[31] = t5;
1522
+ $[32] = t6;
1523
+ $[33] = t7;
1524
+ $[34] = t13;
1529
1525
  } else {
1530
- t9 = $[29];
1526
+ t13 = $[34];
1531
1527
  }
1532
- return t9;
1528
+ return t13;
1533
1529
  }
1534
1530
  export function PortMarkers(t0) {
1535
- const $ = _c(9);
1531
+ const $ = _c(11);
1536
1532
  const {
1537
1533
  ownerId,
1538
- placements
1534
+ ports,
1535
+ declared
1539
1536
  } = t0;
1540
1537
  const {
1541
1538
  accent: themeAccent
1542
1539
  } = useDiagramTheme();
1543
- if (placements.length === 0) {
1540
+ if (ports.length === 0) {
1544
1541
  return null;
1545
1542
  }
1546
1543
  let t1;
1547
- if ($[0] !== ownerId || $[1] !== placements || $[2] !== themeAccent) {
1544
+ if ($[0] !== declared || $[1] !== ownerId || $[2] !== ports || $[3] !== themeAccent) {
1548
1545
  let t2;
1549
- if ($[4] !== ownerId || $[5] !== themeAccent) {
1546
+ if ($[5] !== declared || $[6] !== ownerId || $[7] !== themeAccent) {
1550
1547
  t2 = port => {
1551
- const stroke = port.accent ? themeAccent : DIAGRAM_NEUTRAL;
1552
- const fill = port.accent ? themeAccent : DIAGRAM_BG;
1548
+ const accent = declared?.find(t3 => {
1549
+ const {
1550
+ id
1551
+ } = t3;
1552
+ return id === port.id;
1553
+ })?.accent;
1554
+ const stroke = accent ? themeAccent : DIAGRAM_NEUTRAL;
1555
+ const fill = accent ? themeAccent : DIAGRAM_BG;
1553
1556
  return /*#__PURE__*/_jsxs("g", {
1554
1557
  "data-diagram-port": `${ownerId}:${port.id}`,
1555
1558
  "data-diagram-port-side": port.side,
1556
1559
  children: [/*#__PURE__*/_jsx("circle", {
1557
- cx: port.x,
1558
- cy: port.y,
1560
+ cx: port.point.x,
1561
+ cy: port.point.y,
1559
1562
  r: 4,
1560
1563
  fill: fill,
1561
1564
  stroke: stroke,
1562
1565
  strokeWidth: 1.5
1563
1566
  }), port.label && /*#__PURE__*/_jsx("text", {
1564
- x: port.labelX,
1565
- y: port.labelY,
1566
- textAnchor: port.labelAlign,
1567
- fontFamily: "ui-monospace, 'Geist Mono', monospace",
1568
- fontSize: 9,
1569
- fontWeight: 600,
1567
+ x: port.label.x,
1568
+ y: port.label.y,
1569
+ textAnchor: port.label.anchor,
1570
+ fontFamily: FONT_FAMILY[port.label.font.face],
1571
+ fontSize: port.label.font.size,
1572
+ fontWeight: port.label.font.weight,
1570
1573
  fill: stroke,
1571
- children: port.label
1574
+ children: port.label.text
1572
1575
  })]
1573
1576
  }, port.id);
1574
1577
  };
1575
- $[4] = ownerId;
1576
- $[5] = themeAccent;
1577
- $[6] = t2;
1578
+ $[5] = declared;
1579
+ $[6] = ownerId;
1580
+ $[7] = themeAccent;
1581
+ $[8] = t2;
1578
1582
  } else {
1579
- t2 = $[6];
1583
+ t2 = $[8];
1580
1584
  }
1581
- t1 = placements.map(t2);
1582
- $[0] = ownerId;
1583
- $[1] = placements;
1584
- $[2] = themeAccent;
1585
- $[3] = t1;
1585
+ t1 = ports.map(t2);
1586
+ $[0] = declared;
1587
+ $[1] = ownerId;
1588
+ $[2] = ports;
1589
+ $[3] = themeAccent;
1590
+ $[4] = t1;
1586
1591
  } else {
1587
- t1 = $[3];
1592
+ t1 = $[4];
1588
1593
  }
1589
1594
  let t2;
1590
- if ($[7] !== t1) {
1595
+ if ($[9] !== t1) {
1591
1596
  t2 = /*#__PURE__*/_jsx(_Fragment, {
1592
1597
  children: t1
1593
1598
  });
1594
- $[7] = t1;
1595
- $[8] = t2;
1599
+ $[9] = t1;
1600
+ $[10] = t2;
1596
1601
  } else {
1597
- t2 = $[8];
1602
+ t2 = $[10];
1598
1603
  }
1599
1604
  return t2;
1600
1605
  }