@webskill/sdk 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/abnfDiagram-O67JEVCF-DtYFjfqO.js +109 -0
  2. package/dist/agent.d.ts +3 -3
  3. package/dist/agent.js +1174 -169
  4. package/dist/{approval-DwN2o2QG.js → approval-7CuZS3Z4.js} +104 -18
  5. package/dist/arc-8U_6NQWm.js +130 -0
  6. package/dist/architecture-7GRP2DOG-RTw1wpAq.js +4 -0
  7. package/dist/architectureDiagram-NJMV4G6O-XmmXrJAK.js +7473 -0
  8. package/dist/array-DQfpQNY8.js +8 -0
  9. package/dist/blockDiagram-BEXU5L5S-D4yjnCD1.js +2582 -0
  10. package/dist/browser.d.ts +455 -49
  11. package/dist/browser.js +2134 -138
  12. package/dist/c4Diagram-YGBWAQC7-BLmA_JSd.js +3668 -0
  13. package/dist/channel-CZxxLrG7.js +9 -0
  14. package/dist/chunk-2Q5K7J3B-Ck03gkFR.js +21 -0
  15. package/dist/chunk-3FUC2YCW-tr6jmbQf.js +530 -0
  16. package/dist/chunk-5DYCD2WN-Bt97YGTd.js +58 -0
  17. package/dist/chunk-5VM5RSS4-BBxa48HL.js +21 -0
  18. package/dist/chunk-6AEJRKK7-JXK89I-O.js +14 -0
  19. package/dist/chunk-742MDFTN-CPmgCGwC.js +466 -0
  20. package/dist/chunk-7INBJB4K-C9jq9o66.js +6552 -0
  21. package/dist/chunk-7M6MHVWA-BrKCWcR1.js +4894 -0
  22. package/dist/chunk-7PRAP22T-BHED6GVs.js +95 -0
  23. package/dist/chunk-DUW6YSOI-DoZj78PO.js +19 -0
  24. package/dist/chunk-FOHPRMQF-Dkbp819z.js +27189 -0
  25. package/dist/chunk-GNY47TPC-Bpvq1T49.js +87 -0
  26. package/dist/chunk-GTNCS2PH-CLmh4I2c.js +686 -0
  27. package/dist/chunk-GWA4HPMP-B6vN3fkL.js +95 -0
  28. package/dist/chunk-J5ZVWO5B-Bi_Pcobw.js +26 -0
  29. package/dist/chunk-JWPE2WC7-D1rC79GS.js +12 -0
  30. package/dist/chunk-LNGE3PJU-D5OIoe3Z.js +2582 -0
  31. package/dist/chunk-MBY4JIJT-C34L7a4f.js +2276 -0
  32. package/dist/chunk-NETBCI7D-Cg84k8N8.js +321 -0
  33. package/dist/chunk-O7XYJQB3-B6K0KOSL.js +8846 -0
  34. package/dist/chunk-UA2S7LBM-DxHM29_K.js +612 -0
  35. package/dist/chunk-WEXAMYUT-Ba6jFWhB.js +33 -0
  36. package/dist/chunk-XXDRQBXY-DPbSy4kg.js +12 -0
  37. package/dist/chunk-Y2CYZVJY-U3QOMqrW.js +15 -0
  38. package/dist/chunk-Z7XXMR3K-oLg1h8F3.js +1038 -0
  39. package/dist/chunk-ZIGJFQKS-DqEFBuHR.js +2215 -0
  40. package/dist/classDiagram-v2-NBCMYWYE-BqnOWIUt.js +3845 -0
  41. package/dist/cose-bilkent-JH36ORCC-C0dTAHVK.js +4270 -0
  42. package/dist/cynefin-OW5HDTMX-B2QvgEQj.js +4 -0
  43. package/dist/cynefinDiagram-VND7K2PF-yAWc6Z3W.js +479 -0
  44. package/dist/cytoscape.esm-C64mRh9B.js +28325 -0
  45. package/dist/dagre-6A5THRUB-D0w2W27v.js +4816 -0
  46. package/dist/defaultLocale-B_EoOkSF.js +249 -0
  47. package/dist/diagram-22UHCM2B-DvgzhUzP.js +6115 -0
  48. package/dist/diagram-3UASUU5V-DWgUB-ef.js +795 -0
  49. package/dist/diagram-ATOU4E4O-P1olqwIs.js +553 -0
  50. package/dist/diagram-CDSNMT55-BUlZuLUe.js +402 -0
  51. package/dist/diagram-MLGK6HIB-6w5qmkGt.js +186 -0
  52. package/dist/diagram-MPIPVDR6-DEFiSo8o.js +289 -0
  53. package/dist/dist-UajCDt3n.js +92 -0
  54. package/dist/ebnfDiagram-ZINNZB2B-CI8liCfR.js +123 -0
  55. package/dist/elk-276RUBZZ-3SvW6OAK.js +90034 -0
  56. package/dist/erDiagram-OPXOYQCR-CPTbKhwP.js +2301 -0
  57. package/dist/eventmodeling-NTZA5JFV-BlyuqGp0.js +4 -0
  58. package/dist/flowDiagram-KWPJA3E3-CcUJ6HbV.js +18 -0
  59. package/dist/ganttDiagram-FUAMR5RP-31UjY0KK.js +3939 -0
  60. package/dist/{toolSource-C9oNuKmr.js → geometry-CRhuySKV.js} +169 -12
  61. package/dist/gitGraph-4MIJSDKK-ChdVlrk7.js +4 -0
  62. package/dist/gitGraphDiagram-X574FWY7-DKuxJymB.js +1153 -0
  63. package/dist/governance.d.ts +22 -4
  64. package/dist/governance.js +100 -10
  65. package/dist/graphlib-tk9gQYuN.js +4194 -0
  66. package/dist/{index-DHopiH_m.d.ts → index-7No55dRb.d.ts} +161 -11
  67. package/dist/{index-B8Tgmpwh.d.ts → index-ShvCB5I9.d.ts} +2 -2
  68. package/dist/{index-CYLt5u4L.d.ts → index-V76_OFj2.d.ts} +789 -21
  69. package/dist/index.d.ts +4 -4
  70. package/dist/index.js +11 -9
  71. package/dist/info-A6RAGUB7-CxRAt9S9.js +4 -0
  72. package/dist/infoDiagram-VRGFBTTK-pRspGfjZ.js +25 -0
  73. package/dist/init-CMOIWdg-.js +16 -0
  74. package/dist/ishikawaDiagram-OU5B5YK6-DKerAPAg.js +975 -0
  75. package/dist/journeyDiagram-ZHPQQLJL-C4MK-YO5.js +1227 -0
  76. package/dist/kanban-definition-PNTS6WVX-BqsZpMXx.js +1244 -0
  77. package/dist/katex-BcRRvyh_.js +26465 -0
  78. package/dist/{kind-DaKqLX2F.js → kind-Dc8x0HWz.js} +54 -7
  79. package/dist/line-LgV8iVMV.js +48 -0
  80. package/dist/linear-BWKR0Tqd.js +393 -0
  81. package/dist/linkedDocument-CZZOl9cO.js +456 -0
  82. package/dist/mcp.d.ts +2 -2
  83. package/dist/{memoryArtifactStore-D6dLeY55.js → memoryArtifactStore-Bs7glPqm.js} +14 -0
  84. package/dist/mermaid-parser.core-pYR5siSx.js +754 -0
  85. package/dist/mermaid.core-DMtwGCHy.js +1756 -0
  86. package/dist/mindmap-definition-NLK3R4M7-CXbD-myG.js +1312 -0
  87. package/dist/node.d.ts +3 -3
  88. package/dist/node.js +12 -5
  89. package/dist/{openUiLibrary-b0i7F_oZ.js → openUiLibrary-B7j3rLrm.js} +1 -1
  90. package/dist/{openUiSpecLang-CLXJEeRU.js → openUiSpecLang-BSYYnjay.js} +1 -1
  91. package/dist/ordinal-CxA6GHQS.js +84 -0
  92. package/dist/packet-AYTQ26CC-BOm08cxl.js +4 -0
  93. package/dist/path-C27Z2Bjv.js +106 -0
  94. package/dist/{pathSecurity-B1owvJAF.js → pathSecurity-CirkQwWP.js} +12 -1
  95. package/dist/pegDiagram-GJSIUBJH-BLGJOewQ.js +115 -0
  96. package/dist/pie-WAS4IAKB-Dvg7glpk.js +4 -0
  97. package/dist/pieDiagram-5QR66LMP-laoaV_PB.js +298 -0
  98. package/dist/quadrantDiagram-O4NWA36T-Db_wFBkT.js +2236 -0
  99. package/dist/radar-RG4KPBEZ-BZDaTu06.js +4 -0
  100. package/dist/railroad-74A4TZTK-C-UhjkOy.js +4 -0
  101. package/dist/railroad-abnf-HS5TGJTU-dUKVA4OS.js +4 -0
  102. package/dist/railroad-ebnf-LZEXJU2U-DzQumk18.js +4 -0
  103. package/dist/railroad-peg-WCYAUIDC-B3vvTWed.js +4 -0
  104. package/dist/railroadDiagram-XR7U4H2S-BY0sTM4X.js +89 -0
  105. package/dist/requirementDiagram-PLB6GJNP-3rkQfEhs.js +2474 -0
  106. package/dist/rough.cjs-AmDd_NQk.js +1395 -0
  107. package/dist/sankeyDiagram-IPEJSGJF-CGAJhyG2.js +3578 -0
  108. package/dist/sequenceDiagram-PO4LG4MO-9FJjFX06.js +5522 -0
  109. package/dist/sizeCapture-INFHLROL-D8PWxdOn.js +56 -0
  110. package/dist/{skill-CAJMsLod.js → skill-WSUDp6A1.js} +1 -1
  111. package/dist/{skillVersionStore-B24Jjjry-BkOk9wI_.d.ts → skillVersionStore-S4_HJ_Fl-Cvy9LqVu.d.ts} +35 -4
  112. package/dist/src-NkhI3UMl.js +2653 -0
  113. package/dist/stateDiagram-v2-GCMORJYK-B0O3wc1-.js +2715 -0
  114. package/dist/swimlanes-2SLR337P-D4EOnrpu.js +6637 -0
  115. package/dist/swimlanesDiagram-TC7HE7FX-BUx29EJ9.js +30 -0
  116. package/dist/testing.d.ts +2 -1
  117. package/dist/testing.js +1 -1
  118. package/dist/timeline-definition-EJHVYXUP-CrgiiB4C.js +1513 -0
  119. package/dist/treeView-Q6P3EWNA-C1by-Gzc.js +4 -0
  120. package/dist/treemap-WGGIJYW6-mC2NZ6ad.js +4 -0
  121. package/dist/{types-BvTV_05--BW8zDuEk.d.ts → types-CpDRZ0rA-BiZBXGm4.d.ts} +66 -8
  122. package/dist/ui-react.d.ts +3 -3
  123. package/dist/ui-react.js +3746 -96
  124. package/dist/ui-vue.d.ts +1 -1
  125. package/dist/ui.d.ts +3 -3
  126. package/dist/ui.js +2 -2
  127. package/dist/usecaseDiagram-POWQR4AR-BUt_TQOY.js +14397 -0
  128. package/dist/vennDiagram-UO4OBE2U-CwXr0wjA.js +2808 -0
  129. package/dist/wardley-WFR3VGLG-CVSYjq_S.js +4 -0
  130. package/dist/wardleyDiagram-VNRHLVJA-Cpfd47dQ.js +874 -0
  131. package/dist/{webSkillApi-Cib6G-94.js → webSkillApi-D5VMUnrv.js} +2 -2
  132. package/dist/{webskillLitCatalog-W06npwej.js → webskillLitCatalog-D5BCiMCU.js} +1 -1
  133. package/dist/xychartDiagram-PMCCYNJV-e1TeVoc6.js +2704 -0
  134. package/package.json +1 -1
  135. package/dist/linkedDocument-C0gj1sMq.js +0 -245
@@ -0,0 +1,321 @@
1
+ import { n as __name } from "./chunk-Y2CYZVJY-U3QOMqrW.js";
2
+ import { o as markerOffsets } from "./chunk-Z7XXMR3K-oLg1h8F3.js";
3
+
4
+ //#region ../../node_modules/.pnpm/mermaid@12.0.0/node_modules/mermaid/dist/chunks/mermaid.core/chunk-NETBCI7D.mjs
5
+ var ROUNDED_CORNER_RADIUS = 5;
6
+ var CORNER_EPSILON = 1e-5;
7
+ var CORNER_JUMP_CLEARANCE = 2;
8
+ var MIN_USEFUL_RADIUS_RATIO = .6;
9
+ var ENDPOINT_EPSILON = 1e-6;
10
+ function buildSegmentList(points) {
11
+ const segments = [];
12
+ for (let i = 0; i < points.length - 1; i++) segments.push({
13
+ a: points[i],
14
+ b: points[i + 1]
15
+ });
16
+ return segments;
17
+ }
18
+ __name(buildSegmentList, "buildSegmentList");
19
+ function segmentIntersection(a1, a2, b1, b2) {
20
+ const dxA = a2.x - a1.x;
21
+ const dyA = a2.y - a1.y;
22
+ const dxB = b2.x - b1.x;
23
+ const dyB = b2.y - b1.y;
24
+ const denom = dxA * dyB - dyA * dxB;
25
+ if (denom === 0) return null;
26
+ const dx = b1.x - a1.x;
27
+ const dy = b1.y - a1.y;
28
+ const tA = (dx * dyB - dy * dxB) / denom;
29
+ const tB = (dx * dyA - dy * dxA) / denom;
30
+ if (tA <= ENDPOINT_EPSILON || tA >= 1 - ENDPOINT_EPSILON || tB <= ENDPOINT_EPSILON || tB >= 1 - ENDPOINT_EPSILON) return null;
31
+ return {
32
+ point: {
33
+ x: a1.x + tA * dxA,
34
+ y: a1.y + tA * dyA
35
+ },
36
+ tA,
37
+ tB
38
+ };
39
+ }
40
+ __name(segmentIntersection, "segmentIntersection");
41
+ function isHorizontalSeg(seg) {
42
+ return Math.abs(seg.b.x - seg.a.x) >= Math.abs(seg.b.y - seg.a.y);
43
+ }
44
+ __name(isHorizontalSeg, "isHorizontalSeg");
45
+ function crossingSitsInRoundedCorner(edge, segIndex, t) {
46
+ if (edge.curve !== "rounded") return false;
47
+ const pts = edge.points;
48
+ const a = pts[segIndex];
49
+ const b = pts[segIndex + 1];
50
+ if (!a || !b) return false;
51
+ const segLen = Math.hypot(b.x - a.x, b.y - a.y);
52
+ const d = t * segLen;
53
+ const entering = segIndex > 0 ? computeRoundedCorner(pts[segIndex - 1], a, b, ROUNDED_CORNER_RADIUS) : null;
54
+ if (entering && d < entering.cutLen) return true;
55
+ const leaving = segIndex + 2 < pts.length ? computeRoundedCorner(a, b, pts[segIndex + 2], ROUNDED_CORNER_RADIUS) : null;
56
+ return leaving !== null && segLen - d < leaving.cutLen;
57
+ }
58
+ __name(crossingSitsInRoundedCorner, "crossingSitsInRoundedCorner");
59
+ function findEdgeIntersections(edges) {
60
+ const crossings = [];
61
+ for (let i = 0; i < edges.length; i++) {
62
+ const edgeA = edges[i];
63
+ const segmentsA = buildSegmentList(edgeA.points);
64
+ for (let j = i + 1; j < edges.length; j++) {
65
+ const edgeB = edges[j];
66
+ const segmentsB = buildSegmentList(edgeB.points);
67
+ for (const [si, segA] of segmentsA.entries()) for (const [sj, segB] of segmentsB.entries()) {
68
+ const hit = segmentIntersection(segA.a, segA.b, segB.a, segB.b);
69
+ if (!hit) continue;
70
+ if (crossingSitsInRoundedCorner(edgeA, si, hit.tA) || crossingSitsInRoundedCorner(edgeB, sj, hit.tB)) continue;
71
+ const aHoriz = isHorizontalSeg(segA);
72
+ if (aHoriz !== isHorizontalSeg(segB) ? aHoriz : false) crossings.push({
73
+ jumpEdgeId: edgeA.id,
74
+ otherEdgeId: edgeB.id,
75
+ segIndex: si,
76
+ t: hit.tA,
77
+ point: hit.point
78
+ });
79
+ else crossings.push({
80
+ jumpEdgeId: edgeB.id,
81
+ otherEdgeId: edgeA.id,
82
+ segIndex: sj,
83
+ t: hit.tB,
84
+ point: hit.point
85
+ });
86
+ }
87
+ }
88
+ }
89
+ return crossings;
90
+ }
91
+ __name(findEdgeIntersections, "findEdgeIntersections");
92
+ function fmt(n) {
93
+ const rounded = Math.round(n * 1e3) / 1e3;
94
+ return Number.isInteger(rounded) ? `${rounded}` : `${rounded}`;
95
+ }
96
+ __name(fmt, "fmt");
97
+ function pointToString(p) {
98
+ return `${fmt(p.x)},${fmt(p.y)}`;
99
+ }
100
+ __name(pointToString, "pointToString");
101
+ function getArcSweepFlag(seg) {
102
+ const dx = seg.b.x - seg.a.x;
103
+ const dy = seg.b.y - seg.a.y;
104
+ if (Math.abs(dx) >= Math.abs(dy)) return dx >= 0 ? 1 : 0;
105
+ return dy >= 0 ? 1 : 0;
106
+ }
107
+ __name(getArcSweepFlag, "getArcSweepFlag");
108
+ function applyMarkerOffsets(points, edge) {
109
+ if (points.length < 2) return points.map((p) => ({ ...p }));
110
+ const out = points.map((p) => ({ ...p }));
111
+ const startOff = edge.arrowTypeStart && markerOffsets[edge.arrowTypeStart];
112
+ if (startOff) {
113
+ const a = points[0];
114
+ const b = points[1];
115
+ const ang = Math.atan2(b.y - a.y, b.x - a.x);
116
+ out[0].x = a.x + startOff * Math.cos(ang);
117
+ out[0].y = a.y + startOff * Math.sin(ang);
118
+ }
119
+ const endOff = edge.arrowTypeEnd && markerOffsets[edge.arrowTypeEnd];
120
+ if (endOff) {
121
+ const n = points.length;
122
+ const a = points[n - 2];
123
+ const b = points[n - 1];
124
+ const ang = Math.atan2(b.y - a.y, b.x - a.x);
125
+ out[n - 1].x = b.x - endOff * Math.cos(ang);
126
+ out[n - 1].y = b.y - endOff * Math.sin(ang);
127
+ }
128
+ return out;
129
+ }
130
+ __name(applyMarkerOffsets, "applyMarkerOffsets");
131
+ function emitJump(jump, ux, uy, sweep, style) {
132
+ const cx = jump.point.x;
133
+ const cy = jump.point.y;
134
+ const pre = {
135
+ x: cx - ux * jump.r,
136
+ y: cy - uy * jump.r
137
+ };
138
+ const post = {
139
+ x: cx + ux * jump.r,
140
+ y: cy + uy * jump.r
141
+ };
142
+ const out = [`L${pointToString(pre)}`];
143
+ if (style === "arc") out.push(`A${fmt(jump.r)},${fmt(jump.r)} 0 0 ${sweep} ${pointToString(post)}`);
144
+ else out.push(`M${pointToString(post)}`);
145
+ return out;
146
+ }
147
+ __name(emitJump, "emitJump");
148
+ function computeRoundedCorner(prev, curr, next, radius) {
149
+ const dx1 = curr.x - prev.x;
150
+ const dy1 = curr.y - prev.y;
151
+ const dx2 = next.x - curr.x;
152
+ const dy2 = next.y - curr.y;
153
+ const len1 = Math.hypot(dx1, dy1);
154
+ const len2 = Math.hypot(dx2, dy2);
155
+ if (len1 < CORNER_EPSILON || len2 < CORNER_EPSILON) return null;
156
+ const nx1 = dx1 / len1;
157
+ const ny1 = dy1 / len1;
158
+ const nx2 = dx2 / len2;
159
+ const ny2 = dy2 / len2;
160
+ const dot = nx1 * nx2 + ny1 * ny2;
161
+ const angle = Math.acos(Math.max(-1, Math.min(1, dot)));
162
+ if (angle < CORNER_EPSILON || Math.abs(Math.PI - angle) < CORNER_EPSILON) return null;
163
+ const cutLen = Math.min(radius / Math.sin(angle / 2), len1 / 2, len2 / 2);
164
+ return {
165
+ startX: curr.x - nx1 * cutLen,
166
+ startY: curr.y - ny1 * cutLen,
167
+ endX: curr.x + nx2 * cutLen,
168
+ endY: curr.y + ny2 * cutLen,
169
+ ctrlX: curr.x,
170
+ ctrlY: curr.y,
171
+ cutLen
172
+ };
173
+ }
174
+ __name(computeRoundedCorner, "computeRoundedCorner");
175
+ function rewriteEdgePath(edge, jumps, config) {
176
+ const rawPoints = edge.points;
177
+ if (rawPoints.length < 2) return "";
178
+ const points = applyMarkerOffsets(rawPoints, edge);
179
+ const rounded = edge.curve === "rounded";
180
+ const segments = buildSegmentList(points);
181
+ const bySeg = /* @__PURE__ */ new Map();
182
+ for (const j of jumps) {
183
+ const seg = segments[j.segIndex];
184
+ if (!seg) continue;
185
+ const segLen = Math.hypot(seg.b.x - seg.a.x, seg.b.y - seg.a.y);
186
+ const list = bySeg.get(j.segIndex) ?? [];
187
+ list.push({
188
+ t: j.t,
189
+ point: j.point,
190
+ d: j.t * segLen,
191
+ r: config.jumpRadius
192
+ });
193
+ bySeg.set(j.segIndex, list);
194
+ }
195
+ const parts = [`M${pointToString(points[0])}`];
196
+ for (let i = 0; i < segments.length; i++) {
197
+ const seg = segments[i];
198
+ const segLen = Math.hypot(seg.b.x - seg.a.x, seg.b.y - seg.a.y);
199
+ const ux = segLen === 0 ? 0 : (seg.b.x - seg.a.x) / segLen;
200
+ const uy = segLen === 0 ? 0 : (seg.b.y - seg.a.y) / segLen;
201
+ const sweep = getArcSweepFlag(seg);
202
+ let segStartConsumed = 0;
203
+ if (rounded && i > 0) {
204
+ const corner = computeRoundedCorner(points[i - 1], points[i], points[i + 1] ?? points[i], ROUNDED_CORNER_RADIUS);
205
+ if (corner) segStartConsumed = corner.cutLen;
206
+ }
207
+ let segEndStop = segLen;
208
+ let upcomingCorner = null;
209
+ if (rounded && i < segments.length - 1) {
210
+ upcomingCorner = computeRoundedCorner(points[i], points[i + 1], points[i + 2] ?? points[i + 1], ROUNDED_CORNER_RADIUS);
211
+ if (upcomingCorner) segEndStop = segLen - upcomingCorner.cutLen;
212
+ }
213
+ const minUsefulRadius = config.jumpRadius * MIN_USEFUL_RADIUS_RATIO;
214
+ const segJumps = [...bySeg.get(i) ?? []].sort((a, b) => a.t - b.t).filter((j) => {
215
+ const room = Math.min(j.d - segStartConsumed, segEndStop - j.d) - CORNER_JUMP_CLEARANCE;
216
+ j.r = Math.min(j.r, room);
217
+ return j.r >= minUsefulRadius;
218
+ });
219
+ for (let k = 0; k < segJumps.length - 1; k++) {
220
+ const gap = segJumps[k + 1].d - segJumps[k].d;
221
+ if (segJumps[k].r + segJumps[k + 1].r > gap) {
222
+ const half = gap / 2;
223
+ segJumps[k].r = Math.min(segJumps[k].r, half);
224
+ segJumps[k + 1].r = Math.min(segJumps[k + 1].r, half);
225
+ }
226
+ }
227
+ for (const j of segJumps) {
228
+ if (j.r < minUsefulRadius) continue;
229
+ parts.push(...emitJump(j, ux, uy, sweep, config.jumpStyle));
230
+ }
231
+ if (rounded && upcomingCorner) {
232
+ parts.push(`L${fmt(upcomingCorner.startX)},${fmt(upcomingCorner.startY)}`);
233
+ parts.push(`Q${fmt(upcomingCorner.ctrlX)},${fmt(upcomingCorner.ctrlY)} ${fmt(upcomingCorner.endX)},${fmt(upcomingCorner.endY)}`);
234
+ } else parts.push(`L${pointToString(seg.b)}`);
235
+ }
236
+ return parts.join(" ");
237
+ }
238
+ __name(rewriteEdgePath, "rewriteEdgePath");
239
+ function isStraightPath(d) {
240
+ return /^[\d\s+,.LMelm-]*$/.test(d);
241
+ }
242
+ __name(isStraightPath, "isStraightPath");
243
+ function curveSupportsLineHops(curve) {
244
+ if (!curve) return true;
245
+ return curve === "linear" || curve === "rounded" || curve === "step" || curve === "stepBefore" || curve === "stepAfter";
246
+ }
247
+ __name(curveSupportsLineHops, "curveSupportsLineHops");
248
+ function decodeDataPoints(raw) {
249
+ if (!raw) return null;
250
+ try {
251
+ const json = typeof atob === "function" ? atob(raw) : Buffer.from(raw, "base64").toString();
252
+ const parsed = JSON.parse(json);
253
+ if (!Array.isArray(parsed)) return null;
254
+ const pts = [];
255
+ for (const p of parsed) if (p && typeof p.x === "number" && typeof p.y === "number") pts.push({
256
+ x: p.x,
257
+ y: p.y
258
+ });
259
+ return pts.length >= 2 ? pts : null;
260
+ } catch {
261
+ return null;
262
+ }
263
+ }
264
+ __name(decodeDataPoints, "decodeDataPoints");
265
+ function applyLineJumpsToSvg(edgePathsGroup, edges, config) {
266
+ if (!config.enabled) return;
267
+ const groupNode = edgePathsGroup.node();
268
+ if (!groupNode) return;
269
+ const edgeMeta = /* @__PURE__ */ new Map();
270
+ for (const e of edges) edgeMeta.set(e.id, e);
271
+ const pathByDataId = /* @__PURE__ */ new Map();
272
+ for (const el of groupNode.querySelectorAll("path[data-id]")) {
273
+ const id = el.getAttribute("data-id");
274
+ if (id !== null && !pathByDataId.has(id)) pathByDataId.set(id, el);
275
+ }
276
+ const renderedEdges = [];
277
+ for (const e of edges) {
278
+ const pathEl = pathByDataId.get(e.id);
279
+ if (!pathEl) continue;
280
+ const points = decodeDataPoints(pathEl.getAttribute("data-points")) ?? e.points;
281
+ renderedEdges.push({
282
+ ...e,
283
+ points
284
+ });
285
+ }
286
+ const crossings = findEdgeIntersections(renderedEdges);
287
+ if (crossings.length === 0) return;
288
+ const jumpsByEdge = /* @__PURE__ */ new Map();
289
+ for (const c of crossings) {
290
+ const list = jumpsByEdge.get(c.jumpEdgeId) ?? [];
291
+ list.push(c);
292
+ jumpsByEdge.set(c.jumpEdgeId, list);
293
+ }
294
+ for (const renderedEdge of renderedEdges) {
295
+ const jumps = jumpsByEdge.get(renderedEdge.id);
296
+ if (!jumps || jumps.length === 0) continue;
297
+ const curveHint = edgeMeta.get(renderedEdge.id)?.curve;
298
+ if (curveHint !== void 0 && !curveSupportsLineHops(curveHint)) continue;
299
+ const pathEl = pathByDataId.get(renderedEdge.id);
300
+ if (!pathEl) continue;
301
+ if (curveHint === void 0) {
302
+ if (!isStraightPath(pathEl.getAttribute("d") ?? "")) continue;
303
+ }
304
+ const originalStyle = pathEl.getAttribute("style") ?? "";
305
+ const dasharrayMatch = /stroke-dasharray\s*:\s*0\s+([\d.]+)\s+[\d.]+\s+([\d.]+)/.exec(originalStyle);
306
+ const preservedOValueS = dasharrayMatch ? Number.parseFloat(dasharrayMatch[1]) : null;
307
+ const preservedOValueE = dasharrayMatch ? Number.parseFloat(dasharrayMatch[2]) : null;
308
+ const newD = rewriteEdgePath(renderedEdge, jumps, config);
309
+ pathEl.setAttribute("d", newD);
310
+ if (preservedOValueS !== null && preservedOValueE !== null && typeof pathEl.getTotalLength === "function") {
311
+ const newLen = pathEl.getTotalLength();
312
+ const newDasharray = `0 ${preservedOValueS} ${Math.max(0, newLen - preservedOValueS - preservedOValueE)} ${preservedOValueE}`;
313
+ const cleaned = originalStyle.replace(/stroke-dasharray\s*:[^;]*;?/g, `stroke-dasharray: ${newDasharray};`).replace(/;\s*;+/g, ";");
314
+ pathEl.setAttribute("style", cleaned);
315
+ }
316
+ }
317
+ }
318
+ __name(applyLineJumpsToSvg, "applyLineJumpsToSvg");
319
+
320
+ //#endregion
321
+ export { applyLineJumpsToSvg as t };