@n8n-zengchao/chat 0.62.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 (151) hide show
  1. package/README.md +289 -0
  2. package/dist/App.vue.d.ts +2 -0
  3. package/dist/__stories__/App.stories.d.ts +18 -0
  4. package/dist/__tests__/Input.spec.d.ts +1 -0
  5. package/dist/__tests__/api/generic.spec.d.ts +1 -0
  6. package/dist/__tests__/api/message.spec.d.ts +1 -0
  7. package/dist/__tests__/index.spec.d.ts +1 -0
  8. package/dist/__tests__/plugins/chat.spec.d.ts +1 -0
  9. package/dist/__tests__/plugins/chat.test.d.ts +1 -0
  10. package/dist/__tests__/setup.d.ts +0 -0
  11. package/dist/__tests__/utils/create.d.ts +5 -0
  12. package/dist/__tests__/utils/fetch.d.ts +13 -0
  13. package/dist/__tests__/utils/index.d.ts +3 -0
  14. package/dist/__tests__/utils/selectors.d.ts +12 -0
  15. package/dist/__tests__/utils/streaming.spec.d.ts +1 -0
  16. package/dist/__tests__/utils/streamingHandlers.spec.d.ts +1 -0
  17. package/dist/_basePickBy-aQilsjEs.mjs +106 -0
  18. package/dist/_baseUniq-Agc10qFQ.mjs +232 -0
  19. package/dist/api/generic.d.ts +7 -0
  20. package/dist/api/index.d.ts +2 -0
  21. package/dist/api/message.d.ts +11 -0
  22. package/dist/arc-EhYU_DB1.mjs +79 -0
  23. package/dist/architecture-U656AL7Q-B1STlXpR.mjs +10 -0
  24. package/dist/architectureDiagram-VXUJARFQ-DOVAbXSw.mjs +4054 -0
  25. package/dist/array-B5w981Vk.mjs +5 -0
  26. package/dist/blockDiagram-VD42YOAC-BsX3Fkg3.mjs +3013 -0
  27. package/dist/c4Diagram-YG6GDRKO-B5JaLuX6.mjs +2957 -0
  28. package/dist/channel-CqrIo07y.mjs +4 -0
  29. package/dist/chat.bundle.es.js +37656 -0
  30. package/dist/chat.bundle.umd.js +2784 -0
  31. package/dist/chat.es.js +35738 -0
  32. package/dist/chat.umd.js +2776 -0
  33. package/dist/chunk-4BX2VUAB-dn0RXIrC.mjs +7 -0
  34. package/dist/chunk-55IACEB6-DrIttNoL.mjs +7 -0
  35. package/dist/chunk-76Q3JFCE-D7DMbWeQ.mjs +20 -0
  36. package/dist/chunk-ABZYJK2D-_NXv778f.mjs +2516 -0
  37. package/dist/chunk-ATLVNIR6-CBnG7Ev9.mjs +66 -0
  38. package/dist/chunk-B4BG7PRW-DElmmAse.mjs +3109 -0
  39. package/dist/chunk-CVBHYZKI-kPsSw5G9.mjs +11 -0
  40. package/dist/chunk-DI55MBZ5-Bw6uFFfD.mjs +1995 -0
  41. package/dist/chunk-DZXZ2BO8.mjs +19 -0
  42. package/dist/chunk-EXTU4WIE-DWzncOZf.mjs +8 -0
  43. package/dist/chunk-FMBD7UC4-CQf-nVrj.mjs +4 -0
  44. package/dist/chunk-FPAJGGOC-HRc6DGju.mjs +12254 -0
  45. package/dist/chunk-FWNWRKHM-CGiJVNMo.mjs +57 -0
  46. package/dist/chunk-HN2XXSSU-DMfVdeUE.mjs +75 -0
  47. package/dist/chunk-JA3XYJ7Z-b0Li4NN8.mjs +1834 -0
  48. package/dist/chunk-JZLCHNYA-C_4MLySW.mjs +4862 -0
  49. package/dist/chunk-KS23V3DP-BRKOfbU6.mjs +136 -0
  50. package/dist/chunk-LBM3YZW2-JIQK8wiH.mjs +20 -0
  51. package/dist/chunk-LHMN2FUI-PNCyIUgu.mjs +20 -0
  52. package/dist/chunk-MI3HLSF2-B9GTCmLp.mjs +1146 -0
  53. package/dist/chunk-N4CR4FBY-CjlmnCPD.mjs +40 -0
  54. package/dist/chunk-O7ZBX7Z2-DmJUfqJj.mjs +27 -0
  55. package/dist/chunk-QN33PNHL-nN1zLFSf.mjs +24 -0
  56. package/dist/chunk-QXUST7PY-CY78Btj9.mjs +487 -0
  57. package/dist/chunk-QZHKN3VN-BF5N1pfB.mjs +12 -0
  58. package/dist/chunk-S3R3BYOJ-BhFsv0Go.mjs +1076 -0
  59. package/dist/chunk-S6J4BHB3-BvrWTdbl.mjs +20 -0
  60. package/dist/chunk-T53DSG4Q-XzY06amw.mjs +25 -0
  61. package/dist/chunk-TZMSLE5B-DVmJQ8eg.mjs +57 -0
  62. package/dist/classDiagram-2ON5EDUG-CKxiEVX9.mjs +33 -0
  63. package/dist/classDiagram-v2-WZHVMYZB-sAa_2keq.mjs +33 -0
  64. package/dist/clone-nkGlb0Gn.mjs +8 -0
  65. package/dist/components/Button.vue.d.ts +17 -0
  66. package/dist/components/Chat.vue.d.ts +2 -0
  67. package/dist/components/ChatFile.vue.d.ts +11 -0
  68. package/dist/components/ChatWindow.vue.d.ts +2 -0
  69. package/dist/components/GetStarted.vue.d.ts +2 -0
  70. package/dist/components/GetStartedFooter.vue.d.ts +2 -0
  71. package/dist/components/Input.vue.d.ts +39 -0
  72. package/dist/components/Layout.vue.d.ts +23 -0
  73. package/dist/components/Message.vue.d.ts +39 -0
  74. package/dist/components/MessageTyping.vue.d.ts +76 -0
  75. package/dist/components/MessagesList.vue.d.ts +164 -0
  76. package/dist/components/PoweredBy.vue.d.ts +2 -0
  77. package/dist/components/index.d.ts +10 -0
  78. package/dist/composables/index.d.ts +3 -0
  79. package/dist/composables/useChat.d.ts +2 -0
  80. package/dist/composables/useI18n.d.ts +4 -0
  81. package/dist/composables/useOptions.d.ts +4 -0
  82. package/dist/constants/defaults.d.ts +3 -0
  83. package/dist/constants/index.d.ts +3 -0
  84. package/dist/constants/localStorage.d.ts +2 -0
  85. package/dist/constants/symbols.d.ts +4 -0
  86. package/dist/cose-bilkent-S5V4N54A-1lKG2PUg.mjs +2251 -0
  87. package/dist/cytoscape.esm-Dls1_mGy.mjs +18108 -0
  88. package/dist/dagre-6UL2VRFP-CbWFu9xQ.mjs +300 -0
  89. package/dist/dagre-DEdOheHq.mjs +1385 -0
  90. package/dist/defaultLocale-CyoQm63E.mjs +178 -0
  91. package/dist/diagram-PSM6KHXK-CJcHbrJH.mjs +499 -0
  92. package/dist/diagram-QEK2KX5R-XQ9XOVL4.mjs +228 -0
  93. package/dist/diagram-S2PKOQOG-CmRfaeSf.mjs +146 -0
  94. package/dist/dist-BT0fjU7K.mjs +50 -0
  95. package/dist/erDiagram-Q2GNP2WA-iuoUWHwm.mjs +1603 -0
  96. package/dist/event-buses/chatEventBus.d.ts +1 -0
  97. package/dist/event-buses/index.d.ts +1 -0
  98. package/dist/favicon.ico +0 -0
  99. package/dist/flowDiagram-NV44I4VS-D3GMS8-G.mjs +4132 -0
  100. package/dist/ganttDiagram-LVOFAZNH-DMTZVZDR.mjs +2832 -0
  101. package/dist/gitGraph-F6HP7TQM-CrdUzURw.mjs +10 -0
  102. package/dist/gitGraphDiagram-NY62KEGX-DipP5Fgt.mjs +636 -0
  103. package/dist/graphlib-D9eH5icd.mjs +224 -0
  104. package/dist/index.d.ts +2 -0
  105. package/dist/info-NVLQJR56-C-93Yf3U.mjs +10 -0
  106. package/dist/infoDiagram-F6ZHWCRC-jM50s26K.mjs +33 -0
  107. package/dist/init-CYeu4QfE.mjs +14 -0
  108. package/dist/isArrayLikeObject-BPcFdnyK.mjs +459 -0
  109. package/dist/isUndefined-BvarJ1wS.mjs +374 -0
  110. package/dist/journeyDiagram-XKPGCS4Q-BEEO_0Bh.mjs +885 -0
  111. package/dist/kanban-definition-3W4ZIXB7-B8u_HDmL.mjs +971 -0
  112. package/dist/katex-Dc1vXbUC.mjs +22094 -0
  113. package/dist/line-BJxACIPZ.mjs +31 -0
  114. package/dist/linear-DHHVI-cj.mjs +251 -0
  115. package/dist/math-Byg0NvhS.mjs +9 -0
  116. package/dist/mermaid-parser.core-YT4qvimq.mjs +49 -0
  117. package/dist/mindmap-definition-VGOIOE7T-ah41V88S.mjs +960 -0
  118. package/dist/now-DsJMgI1z.mjs +6 -0
  119. package/dist/ordinal-L0-EVPg8.mjs +62 -0
  120. package/dist/packet-BFZMPI3H-Cs4kRHct.mjs +10 -0
  121. package/dist/path-BcDHwjEr.mjs +80 -0
  122. package/dist/pie-7BOR55EZ-YZ5Xu4o6.mjs +10 -0
  123. package/dist/pieDiagram-ADFJNKIX-CqI33m1a.mjs +174 -0
  124. package/dist/plugins/chat.d.ts +3 -0
  125. package/dist/plugins/index.d.ts +1 -0
  126. package/dist/quadrantDiagram-AYHSOK5B-DDv2X9c1.mjs +1971 -0
  127. package/dist/radar-NHE76QYJ-TpirOFtv.mjs +10 -0
  128. package/dist/requirementDiagram-UZGBJVZJ-DXa77VzO.mjs +2194 -0
  129. package/dist/sankeyDiagram-TZEHDZUN--B9DInJC.mjs +885 -0
  130. package/dist/sequenceDiagram-WL72ISMW-Dqn9jJ3g.mjs +3562 -0
  131. package/dist/src-DdwtiGjk.mjs +1976 -0
  132. package/dist/stateDiagram-FKZM4ZOC-D3eEcVjS.mjs +226 -0
  133. package/dist/stateDiagram-v2-4FDKWEC3-dzwJ4caL.mjs +32 -0
  134. package/dist/style.css +3 -0
  135. package/dist/timeline-definition-IT6M3QCI-z93ry7RN.mjs +831 -0
  136. package/dist/toInteger-1S_4Byef.mjs +36 -0
  137. package/dist/treemap-KMMF4GRG-BlF0Ev1z.mjs +10 -0
  138. package/dist/types/chat.d.ts +13 -0
  139. package/dist/types/index.d.ts +5 -0
  140. package/dist/types/messages.d.ts +17 -0
  141. package/dist/types/options.d.ts +33 -0
  142. package/dist/types/streaming.d.ts +18 -0
  143. package/dist/types/webhook.d.ts +19 -0
  144. package/dist/utils/event-bus.d.ts +8 -0
  145. package/dist/utils/index.d.ts +3 -0
  146. package/dist/utils/mount.d.ts +1 -0
  147. package/dist/utils/streaming.d.ts +26 -0
  148. package/dist/utils/streamingHandlers.d.ts +6 -0
  149. package/dist/utils/utils.d.ts +1 -0
  150. package/dist/xychartDiagram-PRI3JC2R-C3aDcgBz.mjs +2022 -0
  151. package/package.json +78 -0
@@ -0,0 +1,4862 @@
1
+ /*! Package version @n8n/chat@0.62.0 */
2
+ import { a as decodeEntities, p as parseFontSize, r as calculateTextWidth, u as handleUndefinedAttr } from "./chunk-S3R3BYOJ-BhFsv0Go.mjs";
3
+ import { g as log, h as __name, p as select_default } from "./src-DdwtiGjk.mjs";
4
+ import { A as parseGenericTypes, I as sanitizeText, L as sanitizeText3, N as renderKatexSanitized, O as hasKatex, b as getConfig2, d as defaultConfig_default, h as evaluate, s as common_default, y as getConfig } from "./chunk-ABZYJK2D-_NXv778f.mjs";
5
+ import { t as getSubGraphTitleMargins } from "./chunk-CVBHYZKI-kPsSw5G9.mjs";
6
+ import { a as userNodeOverrides, i as styles2String, r as solidStateFill, t as compileStyles } from "./chunk-ATLVNIR6-CBnG7Ev9.mjs";
7
+ import { n as createText, r as getIconSVG } from "./chunk-JA3XYJ7Z-b0Li4NN8.mjs";
8
+ function t(St, lr, ur) {
9
+ if (St && St.length) {
10
+ let [dr, fr] = lr, pr = Math.PI / 180 * ur, mr = Math.cos(pr), hr = Math.sin(pr);
11
+ for (let lr of St) {
12
+ let [St, ur] = lr;
13
+ lr[0] = (St - dr) * mr - (ur - fr) * hr + dr, lr[1] = (St - dr) * hr + (ur - fr) * mr + fr;
14
+ }
15
+ }
16
+ }
17
+ function e(St, lr) {
18
+ return St[0] === lr[0] && St[1] === lr[1];
19
+ }
20
+ function s(St, lr, ur, dr = 1) {
21
+ let fr = ur, pr = Math.max(lr, .1), mr = St[0] && St[0][0] && typeof St[0][0] == "number" ? [St] : St, hr = [0, 0];
22
+ if (fr) for (let St of mr) t(St, hr, fr);
23
+ let gr = function(St, lr, ur) {
24
+ let dr = [];
25
+ for (let lr of St) {
26
+ let St = [...lr];
27
+ e(St[0], St[St.length - 1]) || St.push([St[0][0], St[0][1]]), St.length > 2 && dr.push(St);
28
+ }
29
+ let fr = [];
30
+ lr = Math.max(lr, .1);
31
+ let pr = [];
32
+ for (let St of dr) for (let lr = 0; lr < St.length - 1; lr++) {
33
+ let ur = St[lr], dr = St[lr + 1];
34
+ if (ur[1] !== dr[1]) {
35
+ let St = Math.min(ur[1], dr[1]);
36
+ pr.push({
37
+ ymin: St,
38
+ ymax: Math.max(ur[1], dr[1]),
39
+ x: St === ur[1] ? ur[0] : dr[0],
40
+ islope: (dr[0] - ur[0]) / (dr[1] - ur[1])
41
+ });
42
+ }
43
+ }
44
+ if (pr.sort(((St, lr) => St.ymin < lr.ymin ? -1 : St.ymin > lr.ymin ? 1 : St.x < lr.x ? -1 : St.x > lr.x ? 1 : St.ymax === lr.ymax ? 0 : (St.ymax - lr.ymax) / Math.abs(St.ymax - lr.ymax))), !pr.length) return fr;
45
+ let mr = [], hr = pr[0].ymin, gr = 0;
46
+ for (; mr.length || pr.length;) {
47
+ if (pr.length) {
48
+ let St = -1;
49
+ for (let lr = 0; lr < pr.length && !(pr[lr].ymin > hr); lr++) St = lr;
50
+ pr.splice(0, St + 1).forEach(((St) => {
51
+ mr.push({
52
+ s: hr,
53
+ edge: St
54
+ });
55
+ }));
56
+ }
57
+ if (mr = mr.filter(((St) => !(St.edge.ymax <= hr))), mr.sort(((St, lr) => St.edge.x === lr.edge.x ? 0 : (St.edge.x - lr.edge.x) / Math.abs(St.edge.x - lr.edge.x))), (ur !== 1 || gr % lr == 0) && mr.length > 1) for (let St = 0; St < mr.length; St += 2) {
58
+ let lr = St + 1;
59
+ if (lr >= mr.length) break;
60
+ let ur = mr[St].edge, dr = mr[lr].edge;
61
+ fr.push([[Math.round(ur.x), hr], [Math.round(dr.x), hr]]);
62
+ }
63
+ hr += ur, mr.forEach(((St) => {
64
+ St.edge.x = St.edge.x + ur * St.edge.islope;
65
+ })), gr++;
66
+ }
67
+ return fr;
68
+ }(mr, pr, dr);
69
+ if (fr) {
70
+ for (let St of mr) t(St, hr, -fr);
71
+ (function(St, lr, ur) {
72
+ let dr = [];
73
+ St.forEach(((St) => dr.push(...St))), t(dr, lr, ur);
74
+ })(gr, hr, -fr);
75
+ }
76
+ return gr;
77
+ }
78
+ function n(St, lr) {
79
+ let ur = lr.hachureAngle + 90, dr = lr.hachureGap;
80
+ dr < 0 && (dr = 4 * lr.strokeWidth), dr = Math.round(Math.max(dr, .1));
81
+ let fr = 1;
82
+ return lr.roughness >= 1 && (lr.randomizer?.next() || Math.random()) > .7 && (fr = dr), s(St, dr, ur, fr || 1);
83
+ }
84
+ var o = class {
85
+ constructor(St) {
86
+ this.helper = St;
87
+ }
88
+ fillPolygons(St, lr) {
89
+ return this._fillPolygons(St, lr);
90
+ }
91
+ _fillPolygons(St, lr) {
92
+ let ur = n(St, lr);
93
+ return {
94
+ type: "fillSketch",
95
+ ops: this.renderLines(ur, lr)
96
+ };
97
+ }
98
+ renderLines(St, lr) {
99
+ let ur = [];
100
+ for (let dr of St) ur.push(...this.helper.doubleLineOps(dr[0][0], dr[0][1], dr[1][0], dr[1][1], lr));
101
+ return ur;
102
+ }
103
+ };
104
+ function a(St) {
105
+ let lr = St[0], ur = St[1];
106
+ return Math.sqrt((lr[0] - ur[0]) ** 2 + (lr[1] - ur[1]) ** 2);
107
+ }
108
+ var h = class extends o {
109
+ fillPolygons(St, lr) {
110
+ let ur = lr.hachureGap;
111
+ ur < 0 && (ur = 4 * lr.strokeWidth), ur = Math.max(ur, .1);
112
+ let dr = n(St, Object.assign({}, lr, { hachureGap: ur })), fr = Math.PI / 180 * lr.hachureAngle, pr = [], mr = .5 * ur * Math.cos(fr), hr = .5 * ur * Math.sin(fr);
113
+ for (let [St, lr] of dr) a([St, lr]) && pr.push([[St[0] - mr, St[1] + hr], [...lr]], [[St[0] + mr, St[1] - hr], [...lr]]);
114
+ return {
115
+ type: "fillSketch",
116
+ ops: this.renderLines(pr, lr)
117
+ };
118
+ }
119
+ }, r = class extends o {
120
+ fillPolygons(St, lr) {
121
+ let ur = this._fillPolygons(St, lr), dr = Object.assign({}, lr, { hachureAngle: lr.hachureAngle + 90 }), fr = this._fillPolygons(St, dr);
122
+ return ur.ops = ur.ops.concat(fr.ops), ur;
123
+ }
124
+ }, i = class {
125
+ constructor(St) {
126
+ this.helper = St;
127
+ }
128
+ fillPolygons(St, lr) {
129
+ let ur = n(St, lr = Object.assign({}, lr, { hachureAngle: 0 }));
130
+ return this.dotsOnLines(ur, lr);
131
+ }
132
+ dotsOnLines(St, lr) {
133
+ let ur = [], dr = lr.hachureGap;
134
+ dr < 0 && (dr = 4 * lr.strokeWidth), dr = Math.max(dr, .1);
135
+ let fr = lr.fillWeight;
136
+ fr < 0 && (fr = lr.strokeWidth / 2);
137
+ let pr = dr / 4;
138
+ for (let mr of St) {
139
+ let St = a(mr), hr = St / dr, gr = Math.ceil(hr) - 1, _r = St - gr * dr, vr = (mr[0][0] + mr[1][0]) / 2 - dr / 4, yr = Math.min(mr[0][1], mr[1][1]);
140
+ for (let St = 0; St < gr; St++) {
141
+ let mr = yr + _r + St * dr, hr = vr - pr + 2 * Math.random() * pr, gr = mr - pr + 2 * Math.random() * pr, br = this.helper.ellipse(hr, gr, fr, fr, lr);
142
+ ur.push(...br.ops);
143
+ }
144
+ }
145
+ return {
146
+ type: "fillSketch",
147
+ ops: ur
148
+ };
149
+ }
150
+ }, c = class {
151
+ constructor(St) {
152
+ this.helper = St;
153
+ }
154
+ fillPolygons(St, lr) {
155
+ let ur = n(St, lr);
156
+ return {
157
+ type: "fillSketch",
158
+ ops: this.dashedLine(ur, lr)
159
+ };
160
+ }
161
+ dashedLine(St, lr) {
162
+ let ur = lr.dashOffset < 0 ? lr.hachureGap < 0 ? 4 * lr.strokeWidth : lr.hachureGap : lr.dashOffset, dr = lr.dashGap < 0 ? lr.hachureGap < 0 ? 4 * lr.strokeWidth : lr.hachureGap : lr.dashGap, fr = [];
163
+ return St.forEach(((St) => {
164
+ let pr = a(St), mr = Math.floor(pr / (ur + dr)), hr = (pr + dr - mr * (ur + dr)) / 2, gr = St[0], _r = St[1];
165
+ gr[0] > _r[0] && (gr = St[1], _r = St[0]);
166
+ let vr = Math.atan((_r[1] - gr[1]) / (_r[0] - gr[0]));
167
+ for (let St = 0; St < mr; St++) {
168
+ let pr = St * (ur + dr), mr = pr + ur, _r = [gr[0] + pr * Math.cos(vr) + hr * Math.cos(vr), gr[1] + pr * Math.sin(vr) + hr * Math.sin(vr)], yr = [gr[0] + mr * Math.cos(vr) + hr * Math.cos(vr), gr[1] + mr * Math.sin(vr) + hr * Math.sin(vr)];
169
+ fr.push(...this.helper.doubleLineOps(_r[0], _r[1], yr[0], yr[1], lr));
170
+ }
171
+ })), fr;
172
+ }
173
+ }, l = class {
174
+ constructor(St) {
175
+ this.helper = St;
176
+ }
177
+ fillPolygons(St, lr) {
178
+ let ur = lr.hachureGap < 0 ? 4 * lr.strokeWidth : lr.hachureGap, dr = lr.zigzagOffset < 0 ? ur : lr.zigzagOffset, fr = n(St, lr = Object.assign({}, lr, { hachureGap: ur + dr }));
179
+ return {
180
+ type: "fillSketch",
181
+ ops: this.zigzagLines(fr, dr, lr)
182
+ };
183
+ }
184
+ zigzagLines(St, lr, ur) {
185
+ let dr = [];
186
+ return St.forEach(((St) => {
187
+ let fr = a(St), pr = Math.round(fr / (2 * lr)), mr = St[0], hr = St[1];
188
+ mr[0] > hr[0] && (mr = St[1], hr = St[0]);
189
+ let gr = Math.atan((hr[1] - mr[1]) / (hr[0] - mr[0]));
190
+ for (let St = 0; St < pr; St++) {
191
+ let fr = 2 * St * lr, pr = 2 * (St + 1) * lr, hr = Math.sqrt(2 * lr ** 2), _r = [mr[0] + fr * Math.cos(gr), mr[1] + fr * Math.sin(gr)], vr = [mr[0] + pr * Math.cos(gr), mr[1] + pr * Math.sin(gr)], yr = [_r[0] + hr * Math.cos(gr + Math.PI / 4), _r[1] + hr * Math.sin(gr + Math.PI / 4)];
192
+ dr.push(...this.helper.doubleLineOps(_r[0], _r[1], yr[0], yr[1], ur), ...this.helper.doubleLineOps(yr[0], yr[1], vr[0], vr[1], ur));
193
+ }
194
+ })), dr;
195
+ }
196
+ }, u = {}, p = class {
197
+ constructor(St) {
198
+ this.seed = St;
199
+ }
200
+ next() {
201
+ return this.seed ? (2 ** 31 - 1 & (this.seed = Math.imul(48271, this.seed))) / 2 ** 31 : Math.random();
202
+ }
203
+ }, f = 0, d = 1, g = 2, M = {
204
+ A: 7,
205
+ a: 7,
206
+ C: 6,
207
+ c: 6,
208
+ H: 1,
209
+ h: 1,
210
+ L: 2,
211
+ l: 2,
212
+ M: 2,
213
+ m: 2,
214
+ Q: 4,
215
+ q: 4,
216
+ S: 4,
217
+ s: 4,
218
+ T: 2,
219
+ t: 2,
220
+ V: 1,
221
+ v: 1,
222
+ Z: 0,
223
+ z: 0
224
+ };
225
+ function k(St, lr) {
226
+ return St.type === lr;
227
+ }
228
+ function b(St) {
229
+ let lr = [], ur = function(St) {
230
+ let lr = [];
231
+ for (; St !== "";) if (St.match(/^([ \t\r\n,]+)/)) St = St.substr(RegExp.$1.length);
232
+ else if (St.match(/^([aAcChHlLmMqQsStTvVzZ])/)) lr[lr.length] = {
233
+ type: f,
234
+ text: RegExp.$1
235
+ }, St = St.substr(RegExp.$1.length);
236
+ else {
237
+ if (!St.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/)) return [];
238
+ lr[lr.length] = {
239
+ type: d,
240
+ text: `${parseFloat(RegExp.$1)}`
241
+ }, St = St.substr(RegExp.$1.length);
242
+ }
243
+ return lr[lr.length] = {
244
+ type: g,
245
+ text: ""
246
+ }, lr;
247
+ }(St), dr = "BOD", fr = 0, pr = ur[fr];
248
+ for (; !k(pr, g);) {
249
+ let mr = 0, hr = [];
250
+ if (dr === "BOD") {
251
+ if (pr.text !== "M" && pr.text !== "m") return b("M0,0" + St);
252
+ fr++, mr = M[pr.text], dr = pr.text;
253
+ } else k(pr, d) ? mr = M[dr] : (fr++, mr = M[pr.text], dr = pr.text);
254
+ if (!(fr + mr < ur.length)) throw Error("Path data ended short");
255
+ for (let St = fr; St < fr + mr; St++) {
256
+ let lr = ur[St];
257
+ if (!k(lr, d)) throw Error("Param not a number: " + dr + "," + lr.text);
258
+ hr[hr.length] = +lr.text;
259
+ }
260
+ if (typeof M[dr] != "number") throw Error("Bad segment: " + dr);
261
+ {
262
+ let St = {
263
+ key: dr,
264
+ data: hr
265
+ };
266
+ lr.push(St), fr += mr, pr = ur[fr], dr === "M" && (dr = "L"), dr === "m" && (dr = "l");
267
+ }
268
+ }
269
+ return lr;
270
+ }
271
+ function y(St) {
272
+ let lr = 0, ur = 0, dr = 0, fr = 0, pr = [];
273
+ for (let { key: mr, data: hr } of St) switch (mr) {
274
+ case "M":
275
+ pr.push({
276
+ key: "M",
277
+ data: [...hr]
278
+ }), [lr, ur] = hr, [dr, fr] = hr;
279
+ break;
280
+ case "m":
281
+ lr += hr[0], ur += hr[1], pr.push({
282
+ key: "M",
283
+ data: [lr, ur]
284
+ }), dr = lr, fr = ur;
285
+ break;
286
+ case "L":
287
+ pr.push({
288
+ key: "L",
289
+ data: [...hr]
290
+ }), [lr, ur] = hr;
291
+ break;
292
+ case "l":
293
+ lr += hr[0], ur += hr[1], pr.push({
294
+ key: "L",
295
+ data: [lr, ur]
296
+ });
297
+ break;
298
+ case "C":
299
+ pr.push({
300
+ key: "C",
301
+ data: [...hr]
302
+ }), lr = hr[4], ur = hr[5];
303
+ break;
304
+ case "c": {
305
+ let St = hr.map(((St, dr) => dr % 2 ? St + ur : St + lr));
306
+ pr.push({
307
+ key: "C",
308
+ data: St
309
+ }), lr = St[4], ur = St[5];
310
+ break;
311
+ }
312
+ case "Q":
313
+ pr.push({
314
+ key: "Q",
315
+ data: [...hr]
316
+ }), lr = hr[2], ur = hr[3];
317
+ break;
318
+ case "q": {
319
+ let St = hr.map(((St, dr) => dr % 2 ? St + ur : St + lr));
320
+ pr.push({
321
+ key: "Q",
322
+ data: St
323
+ }), lr = St[2], ur = St[3];
324
+ break;
325
+ }
326
+ case "A":
327
+ pr.push({
328
+ key: "A",
329
+ data: [...hr]
330
+ }), lr = hr[5], ur = hr[6];
331
+ break;
332
+ case "a":
333
+ lr += hr[5], ur += hr[6], pr.push({
334
+ key: "A",
335
+ data: [
336
+ hr[0],
337
+ hr[1],
338
+ hr[2],
339
+ hr[3],
340
+ hr[4],
341
+ lr,
342
+ ur
343
+ ]
344
+ });
345
+ break;
346
+ case "H":
347
+ pr.push({
348
+ key: "H",
349
+ data: [...hr]
350
+ }), lr = hr[0];
351
+ break;
352
+ case "h":
353
+ lr += hr[0], pr.push({
354
+ key: "H",
355
+ data: [lr]
356
+ });
357
+ break;
358
+ case "V":
359
+ pr.push({
360
+ key: "V",
361
+ data: [...hr]
362
+ }), ur = hr[0];
363
+ break;
364
+ case "v":
365
+ ur += hr[0], pr.push({
366
+ key: "V",
367
+ data: [ur]
368
+ });
369
+ break;
370
+ case "S":
371
+ pr.push({
372
+ key: "S",
373
+ data: [...hr]
374
+ }), lr = hr[2], ur = hr[3];
375
+ break;
376
+ case "s": {
377
+ let St = hr.map(((St, dr) => dr % 2 ? St + ur : St + lr));
378
+ pr.push({
379
+ key: "S",
380
+ data: St
381
+ }), lr = St[2], ur = St[3];
382
+ break;
383
+ }
384
+ case "T":
385
+ pr.push({
386
+ key: "T",
387
+ data: [...hr]
388
+ }), lr = hr[0], ur = hr[1];
389
+ break;
390
+ case "t":
391
+ lr += hr[0], ur += hr[1], pr.push({
392
+ key: "T",
393
+ data: [lr, ur]
394
+ });
395
+ break;
396
+ case "Z":
397
+ case "z": pr.push({
398
+ key: "Z",
399
+ data: []
400
+ }), lr = dr, ur = fr;
401
+ }
402
+ return pr;
403
+ }
404
+ function m(St) {
405
+ let lr = [], ur = "", dr = 0, fr = 0, pr = 0, mr = 0, hr = 0, gr = 0;
406
+ for (let { key: _r, data: vr } of St) {
407
+ switch (_r) {
408
+ case "M":
409
+ lr.push({
410
+ key: "M",
411
+ data: [...vr]
412
+ }), [dr, fr] = vr, [pr, mr] = vr;
413
+ break;
414
+ case "C":
415
+ lr.push({
416
+ key: "C",
417
+ data: [...vr]
418
+ }), dr = vr[4], fr = vr[5], hr = vr[2], gr = vr[3];
419
+ break;
420
+ case "L":
421
+ lr.push({
422
+ key: "L",
423
+ data: [...vr]
424
+ }), [dr, fr] = vr;
425
+ break;
426
+ case "H":
427
+ dr = vr[0], lr.push({
428
+ key: "L",
429
+ data: [dr, fr]
430
+ });
431
+ break;
432
+ case "V":
433
+ fr = vr[0], lr.push({
434
+ key: "L",
435
+ data: [dr, fr]
436
+ });
437
+ break;
438
+ case "S": {
439
+ let St = 0, pr = 0;
440
+ ur === "C" || ur === "S" ? (St = dr + (dr - hr), pr = fr + (fr - gr)) : (St = dr, pr = fr), lr.push({
441
+ key: "C",
442
+ data: [
443
+ St,
444
+ pr,
445
+ ...vr
446
+ ]
447
+ }), hr = vr[0], gr = vr[1], dr = vr[2], fr = vr[3];
448
+ break;
449
+ }
450
+ case "T": {
451
+ let [St, pr] = vr, mr = 0, _r = 0;
452
+ ur === "Q" || ur === "T" ? (mr = dr + (dr - hr), _r = fr + (fr - gr)) : (mr = dr, _r = fr);
453
+ let yr = dr + 2 * (mr - dr) / 3, br = fr + 2 * (_r - fr) / 3, xr = St + 2 * (mr - St) / 3, Sr = pr + 2 * (_r - pr) / 3;
454
+ lr.push({
455
+ key: "C",
456
+ data: [
457
+ yr,
458
+ br,
459
+ xr,
460
+ Sr,
461
+ St,
462
+ pr
463
+ ]
464
+ }), hr = mr, gr = _r, dr = St, fr = pr;
465
+ break;
466
+ }
467
+ case "Q": {
468
+ let [St, ur, pr, mr] = vr, _r = dr + 2 * (St - dr) / 3, yr = fr + 2 * (ur - fr) / 3, br = pr + 2 * (St - pr) / 3, xr = mr + 2 * (ur - mr) / 3;
469
+ lr.push({
470
+ key: "C",
471
+ data: [
472
+ _r,
473
+ yr,
474
+ br,
475
+ xr,
476
+ pr,
477
+ mr
478
+ ]
479
+ }), hr = St, gr = ur, dr = pr, fr = mr;
480
+ break;
481
+ }
482
+ case "A": {
483
+ let St = Math.abs(vr[0]), ur = Math.abs(vr[1]), pr = vr[2], mr = vr[3], hr = vr[4], gr = vr[5], _r = vr[6];
484
+ St === 0 || ur === 0 ? (lr.push({
485
+ key: "C",
486
+ data: [
487
+ dr,
488
+ fr,
489
+ gr,
490
+ _r,
491
+ gr,
492
+ _r
493
+ ]
494
+ }), dr = gr, fr = _r) : (dr !== gr || fr !== _r) && (x(dr, fr, gr, _r, St, ur, pr, mr, hr).forEach((function(St) {
495
+ lr.push({
496
+ key: "C",
497
+ data: St
498
+ });
499
+ })), dr = gr, fr = _r);
500
+ break;
501
+ }
502
+ case "Z": lr.push({
503
+ key: "Z",
504
+ data: []
505
+ }), dr = pr, fr = mr;
506
+ }
507
+ ur = _r;
508
+ }
509
+ return lr;
510
+ }
511
+ function w(St, lr, ur) {
512
+ return [St * Math.cos(ur) - lr * Math.sin(ur), St * Math.sin(ur) + lr * Math.cos(ur)];
513
+ }
514
+ function x(St, lr, ur, dr, fr, pr, mr, hr, gr, _r) {
515
+ let vr = (yr = mr, Math.PI * yr / 180);
516
+ var yr;
517
+ let br = [], xr = 0, Sr = 0, Cr = 0, wr = 0;
518
+ if (_r) [xr, Sr, Cr, wr] = _r;
519
+ else {
520
+ [St, lr] = w(St, lr, -vr), [ur, dr] = w(ur, dr, -vr);
521
+ let mr = (St - ur) / 2, _r = (lr - dr) / 2, yr = mr * mr / (fr * fr) + _r * _r / (pr * pr);
522
+ yr > 1 && (yr = Math.sqrt(yr), fr *= yr, pr *= yr);
523
+ let br = fr * fr, Tr = pr * pr, Er = br * Tr - br * _r * _r - Tr * mr * mr, Dr = br * _r * _r + Tr * mr * mr, Or = (hr === gr ? -1 : 1) * Math.sqrt(Math.abs(Er / Dr));
524
+ Cr = Or * fr * _r / pr + (St + ur) / 2, wr = Or * -pr * mr / fr + (lr + dr) / 2, xr = Math.asin(parseFloat(((lr - wr) / pr).toFixed(9))), Sr = Math.asin(parseFloat(((dr - wr) / pr).toFixed(9))), St < Cr && (xr = Math.PI - xr), ur < Cr && (Sr = Math.PI - Sr), xr < 0 && (xr = 2 * Math.PI + xr), Sr < 0 && (Sr = 2 * Math.PI + Sr), gr && xr > Sr && (xr -= 2 * Math.PI), !gr && Sr > xr && (Sr -= 2 * Math.PI);
525
+ }
526
+ let Tr = Sr - xr;
527
+ if (Math.abs(Tr) > 120 * Math.PI / 180) {
528
+ let St = Sr, lr = ur, hr = dr;
529
+ Sr = gr && Sr > xr ? xr + 120 * Math.PI / 180 * 1 : xr + 120 * Math.PI / 180 * -1, br = x(ur = Cr + fr * Math.cos(Sr), dr = wr + pr * Math.sin(Sr), lr, hr, fr, pr, mr, 0, gr, [
530
+ Sr,
531
+ St,
532
+ Cr,
533
+ wr
534
+ ]);
535
+ }
536
+ Tr = Sr - xr;
537
+ let Er = Math.cos(xr), Dr = Math.sin(xr), Or = Math.cos(Sr), kr = Math.sin(Sr), Ar = Math.tan(Tr / 4), jr = 4 / 3 * fr * Ar, Mr = 4 / 3 * pr * Ar, Nr = [St, lr], Pr = [St + jr * Dr, lr - Mr * Er], Fr = [ur + jr * kr, dr - Mr * Or], Ir = [ur, dr];
538
+ if (Pr[0] = 2 * Nr[0] - Pr[0], Pr[1] = 2 * Nr[1] - Pr[1], _r) return [
539
+ Pr,
540
+ Fr,
541
+ Ir
542
+ ].concat(br);
543
+ {
544
+ br = [
545
+ Pr,
546
+ Fr,
547
+ Ir
548
+ ].concat(br);
549
+ let St = [];
550
+ for (let lr = 0; lr < br.length; lr += 3) {
551
+ let ur = w(br[lr][0], br[lr][1], vr), dr = w(br[lr + 1][0], br[lr + 1][1], vr), fr = w(br[lr + 2][0], br[lr + 2][1], vr);
552
+ St.push([
553
+ ur[0],
554
+ ur[1],
555
+ dr[0],
556
+ dr[1],
557
+ fr[0],
558
+ fr[1]
559
+ ]);
560
+ }
561
+ return St;
562
+ }
563
+ }
564
+ var P = {
565
+ randOffset: function(St, lr) {
566
+ return G(St, lr);
567
+ },
568
+ randOffsetWithRange: function(St, lr, ur) {
569
+ return E(St, lr, ur);
570
+ },
571
+ ellipse: function(St, lr, ur, dr, fr) {
572
+ return D(St, lr, fr, T(ur, dr, fr)).opset;
573
+ },
574
+ doubleLineOps: function(St, lr, ur, dr, fr) {
575
+ return $(St, lr, ur, dr, fr, !0);
576
+ }
577
+ };
578
+ function v(St, lr, ur, dr, fr) {
579
+ return {
580
+ type: "path",
581
+ ops: $(St, lr, ur, dr, fr)
582
+ };
583
+ }
584
+ function S(St, lr, ur) {
585
+ let dr = (St || []).length;
586
+ if (dr > 2) {
587
+ let fr = [];
588
+ for (let lr = 0; lr < dr - 1; lr++) fr.push(...$(St[lr][0], St[lr][1], St[lr + 1][0], St[lr + 1][1], ur));
589
+ return lr && fr.push(...$(St[dr - 1][0], St[dr - 1][1], St[0][0], St[0][1], ur)), {
590
+ type: "path",
591
+ ops: fr
592
+ };
593
+ }
594
+ return dr === 2 ? v(St[0][0], St[0][1], St[1][0], St[1][1], ur) : {
595
+ type: "path",
596
+ ops: []
597
+ };
598
+ }
599
+ function O(St, lr, ur, dr, fr) {
600
+ return function(St, lr) {
601
+ return S(St, !0, lr);
602
+ }([
603
+ [St, lr],
604
+ [St + ur, lr],
605
+ [St + ur, lr + dr],
606
+ [St, lr + dr]
607
+ ], fr);
608
+ }
609
+ function L(St, lr) {
610
+ if (St.length) {
611
+ let ur = typeof St[0][0] == "number" ? [St] : St, dr = j(ur[0], 1 * (1 + .2 * lr.roughness), lr), fr = lr.disableMultiStroke ? [] : j(ur[0], 1.5 * (1 + .22 * lr.roughness), z(lr));
612
+ for (let St = 1; St < ur.length; St++) {
613
+ let pr = ur[St];
614
+ if (pr.length) {
615
+ let St = j(pr, 1 * (1 + .2 * lr.roughness), lr), ur = lr.disableMultiStroke ? [] : j(pr, 1.5 * (1 + .22 * lr.roughness), z(lr));
616
+ for (let lr of St) lr.op !== "move" && dr.push(lr);
617
+ for (let St of ur) St.op !== "move" && fr.push(St);
618
+ }
619
+ }
620
+ return {
621
+ type: "path",
622
+ ops: dr.concat(fr)
623
+ };
624
+ }
625
+ return {
626
+ type: "path",
627
+ ops: []
628
+ };
629
+ }
630
+ function T(St, lr, ur) {
631
+ let dr = Math.sqrt(2 * Math.PI * Math.sqrt(((St / 2) ** 2 + (lr / 2) ** 2) / 2)), fr = Math.ceil(Math.max(ur.curveStepCount, ur.curveStepCount / Math.sqrt(200) * dr)), pr = 2 * Math.PI / fr, mr = Math.abs(St / 2), hr = Math.abs(lr / 2), gr = 1 - ur.curveFitting;
632
+ return mr += G(mr * gr, ur), hr += G(hr * gr, ur), {
633
+ increment: pr,
634
+ rx: mr,
635
+ ry: hr
636
+ };
637
+ }
638
+ function D(St, lr, ur, dr) {
639
+ let [fr, pr] = F(dr.increment, St, lr, dr.rx, dr.ry, 1, dr.increment * E(.1, E(.4, 1, ur), ur), ur), mr = q(fr, null, ur);
640
+ if (!ur.disableMultiStroke && ur.roughness !== 0) {
641
+ let [fr] = F(dr.increment, St, lr, dr.rx, dr.ry, 1.5, 0, ur), pr = q(fr, null, ur);
642
+ mr = mr.concat(pr);
643
+ }
644
+ return {
645
+ estimatedPoints: pr,
646
+ opset: {
647
+ type: "path",
648
+ ops: mr
649
+ }
650
+ };
651
+ }
652
+ function A(St, lr, ur, dr, fr, pr, mr, hr, gr) {
653
+ let _r = St, vr = lr, yr = Math.abs(ur / 2), br = Math.abs(dr / 2);
654
+ yr += G(.01 * yr, gr), br += G(.01 * br, gr);
655
+ let xr = fr, Sr = pr;
656
+ for (; xr < 0;) xr += 2 * Math.PI, Sr += 2 * Math.PI;
657
+ Sr - xr > 2 * Math.PI && (xr = 0, Sr = 2 * Math.PI);
658
+ let Cr = 2 * Math.PI / gr.curveStepCount, wr = Math.min(Cr / 2, (Sr - xr) / 2), Tr = V(wr, _r, vr, yr, br, xr, Sr, 1, gr);
659
+ if (!gr.disableMultiStroke) {
660
+ let St = V(wr, _r, vr, yr, br, xr, Sr, 1.5, gr);
661
+ Tr.push(...St);
662
+ }
663
+ return mr && (hr ? Tr.push(...$(_r, vr, _r + yr * Math.cos(xr), vr + br * Math.sin(xr), gr), ...$(_r, vr, _r + yr * Math.cos(Sr), vr + br * Math.sin(Sr), gr)) : Tr.push({
664
+ op: "lineTo",
665
+ data: [_r, vr]
666
+ }, {
667
+ op: "lineTo",
668
+ data: [_r + yr * Math.cos(xr), vr + br * Math.sin(xr)]
669
+ })), {
670
+ type: "path",
671
+ ops: Tr
672
+ };
673
+ }
674
+ function _(St, lr) {
675
+ let ur = m(y(b(St))), dr = [], fr = [0, 0], pr = [0, 0];
676
+ for (let { key: St, data: mr } of ur) switch (St) {
677
+ case "M":
678
+ pr = [mr[0], mr[1]], fr = [mr[0], mr[1]];
679
+ break;
680
+ case "L":
681
+ dr.push(...$(pr[0], pr[1], mr[0], mr[1], lr)), pr = [mr[0], mr[1]];
682
+ break;
683
+ case "C": {
684
+ let [St, ur, fr, hr, gr, _r] = mr;
685
+ dr.push(...Z(St, ur, fr, hr, gr, _r, pr, lr)), pr = [gr, _r];
686
+ break;
687
+ }
688
+ case "Z": dr.push(...$(pr[0], pr[1], fr[0], fr[1], lr)), pr = [fr[0], fr[1]];
689
+ }
690
+ return {
691
+ type: "path",
692
+ ops: dr
693
+ };
694
+ }
695
+ function I(St, lr) {
696
+ let ur = [];
697
+ for (let dr of St) if (dr.length) {
698
+ let St = lr.maxRandomnessOffset || 0, fr = dr.length;
699
+ if (fr > 2) {
700
+ ur.push({
701
+ op: "move",
702
+ data: [dr[0][0] + G(St, lr), dr[0][1] + G(St, lr)]
703
+ });
704
+ for (let pr = 1; pr < fr; pr++) ur.push({
705
+ op: "lineTo",
706
+ data: [dr[pr][0] + G(St, lr), dr[pr][1] + G(St, lr)]
707
+ });
708
+ }
709
+ }
710
+ return {
711
+ type: "fillPath",
712
+ ops: ur
713
+ };
714
+ }
715
+ function C(St, lr) {
716
+ return function(St, lr) {
717
+ let ur = St.fillStyle || "hachure";
718
+ if (!u[ur]) switch (ur) {
719
+ case "zigzag":
720
+ u[ur] || (u[ur] = new h(lr));
721
+ break;
722
+ case "cross-hatch":
723
+ u[ur] || (u[ur] = new r(lr));
724
+ break;
725
+ case "dots":
726
+ u[ur] || (u[ur] = new i(lr));
727
+ break;
728
+ case "dashed":
729
+ u[ur] || (u[ur] = new c(lr));
730
+ break;
731
+ case "zigzag-line":
732
+ u[ur] || (u[ur] = new l(lr));
733
+ break;
734
+ default: ur = "hachure", u[ur] || (u[ur] = new o(lr));
735
+ }
736
+ return u[ur];
737
+ }(lr, P).fillPolygons(St, lr);
738
+ }
739
+ function z(St) {
740
+ let lr = Object.assign({}, St);
741
+ return lr.randomizer = void 0, St.seed && (lr.seed = St.seed + 1), lr;
742
+ }
743
+ function W(St) {
744
+ return St.randomizer ||= new p(St.seed || 0), St.randomizer.next();
745
+ }
746
+ function E(St, lr, ur, dr = 1) {
747
+ return ur.roughness * dr * (W(ur) * (lr - St) + St);
748
+ }
749
+ function G(St, lr, ur = 1) {
750
+ return E(-St, St, lr, ur);
751
+ }
752
+ function $(St, lr, ur, dr, fr, pr = !1) {
753
+ let mr = pr ? fr.disableMultiStrokeFill : fr.disableMultiStroke, hr = R(St, lr, ur, dr, fr, !0, !1);
754
+ if (mr) return hr;
755
+ let gr = R(St, lr, ur, dr, fr, !0, !0);
756
+ return hr.concat(gr);
757
+ }
758
+ function R(St, lr, ur, dr, fr, pr, mr) {
759
+ let hr = (St - ur) ** 2 + (lr - dr) ** 2, gr = Math.sqrt(hr), _r = 1;
760
+ _r = gr < 200 ? 1 : gr > 500 ? .4 : -.0016668 * gr + 1.233334;
761
+ let vr = fr.maxRandomnessOffset || 0;
762
+ vr * vr * 100 > hr && (vr = gr / 10);
763
+ let yr = vr / 2, br = .2 + .2 * W(fr), xr = fr.bowing * fr.maxRandomnessOffset * (dr - lr) / 200, Sr = fr.bowing * fr.maxRandomnessOffset * (St - ur) / 200;
764
+ xr = G(xr, fr, _r), Sr = G(Sr, fr, _r);
765
+ let Cr = [], wr = () => G(yr, fr, _r), Tr = () => G(vr, fr, _r), Er = fr.preserveVertices;
766
+ return pr && (mr ? Cr.push({
767
+ op: "move",
768
+ data: [St + (Er ? 0 : wr()), lr + (Er ? 0 : wr())]
769
+ }) : Cr.push({
770
+ op: "move",
771
+ data: [St + (Er ? 0 : G(vr, fr, _r)), lr + (Er ? 0 : G(vr, fr, _r))]
772
+ })), mr ? Cr.push({
773
+ op: "bcurveTo",
774
+ data: [
775
+ xr + St + (ur - St) * br + wr(),
776
+ Sr + lr + (dr - lr) * br + wr(),
777
+ xr + St + 2 * (ur - St) * br + wr(),
778
+ Sr + lr + 2 * (dr - lr) * br + wr(),
779
+ ur + (Er ? 0 : wr()),
780
+ dr + (Er ? 0 : wr())
781
+ ]
782
+ }) : Cr.push({
783
+ op: "bcurveTo",
784
+ data: [
785
+ xr + St + (ur - St) * br + Tr(),
786
+ Sr + lr + (dr - lr) * br + Tr(),
787
+ xr + St + 2 * (ur - St) * br + Tr(),
788
+ Sr + lr + 2 * (dr - lr) * br + Tr(),
789
+ ur + (Er ? 0 : Tr()),
790
+ dr + (Er ? 0 : Tr())
791
+ ]
792
+ }), Cr;
793
+ }
794
+ function j(St, lr, ur) {
795
+ if (!St.length) return [];
796
+ let dr = [];
797
+ dr.push([St[0][0] + G(lr, ur), St[0][1] + G(lr, ur)]), dr.push([St[0][0] + G(lr, ur), St[0][1] + G(lr, ur)]);
798
+ for (let fr = 1; fr < St.length; fr++) dr.push([St[fr][0] + G(lr, ur), St[fr][1] + G(lr, ur)]), fr === St.length - 1 && dr.push([St[fr][0] + G(lr, ur), St[fr][1] + G(lr, ur)]);
799
+ return q(dr, null, ur);
800
+ }
801
+ function q(St, lr, ur) {
802
+ let dr = St.length, fr = [];
803
+ if (dr > 3) {
804
+ let pr = [], mr = 1 - ur.curveTightness;
805
+ fr.push({
806
+ op: "move",
807
+ data: [St[1][0], St[1][1]]
808
+ });
809
+ for (let lr = 1; lr + 2 < dr; lr++) {
810
+ let ur = St[lr];
811
+ pr[0] = [ur[0], ur[1]], pr[1] = [ur[0] + (mr * St[lr + 1][0] - mr * St[lr - 1][0]) / 6, ur[1] + (mr * St[lr + 1][1] - mr * St[lr - 1][1]) / 6], pr[2] = [St[lr + 1][0] + (mr * St[lr][0] - mr * St[lr + 2][0]) / 6, St[lr + 1][1] + (mr * St[lr][1] - mr * St[lr + 2][1]) / 6], pr[3] = [St[lr + 1][0], St[lr + 1][1]], fr.push({
812
+ op: "bcurveTo",
813
+ data: [
814
+ pr[1][0],
815
+ pr[1][1],
816
+ pr[2][0],
817
+ pr[2][1],
818
+ pr[3][0],
819
+ pr[3][1]
820
+ ]
821
+ });
822
+ }
823
+ if (lr && lr.length === 2) {
824
+ let St = ur.maxRandomnessOffset;
825
+ fr.push({
826
+ op: "lineTo",
827
+ data: [lr[0] + G(St, ur), lr[1] + G(St, ur)]
828
+ });
829
+ }
830
+ } else dr === 3 ? (fr.push({
831
+ op: "move",
832
+ data: [St[1][0], St[1][1]]
833
+ }), fr.push({
834
+ op: "bcurveTo",
835
+ data: [
836
+ St[1][0],
837
+ St[1][1],
838
+ St[2][0],
839
+ St[2][1],
840
+ St[2][0],
841
+ St[2][1]
842
+ ]
843
+ })) : dr === 2 && fr.push(...R(St[0][0], St[0][1], St[1][0], St[1][1], ur, !0, !0));
844
+ return fr;
845
+ }
846
+ function F(St, lr, ur, dr, fr, pr, mr, hr) {
847
+ let gr = [], _r = [];
848
+ if (hr.roughness === 0) {
849
+ St /= 4, _r.push([lr + dr * Math.cos(-St), ur + fr * Math.sin(-St)]);
850
+ for (let pr = 0; pr <= 2 * Math.PI; pr += St) {
851
+ let St = [lr + dr * Math.cos(pr), ur + fr * Math.sin(pr)];
852
+ gr.push(St), _r.push(St);
853
+ }
854
+ _r.push([lr + dr * Math.cos(0), ur + fr * Math.sin(0)]), _r.push([lr + dr * Math.cos(St), ur + fr * Math.sin(St)]);
855
+ } else {
856
+ let vr = G(.5, hr) - Math.PI / 2;
857
+ _r.push([G(pr, hr) + lr + .9 * dr * Math.cos(vr - St), G(pr, hr) + ur + .9 * fr * Math.sin(vr - St)]);
858
+ let yr = 2 * Math.PI + vr - .01;
859
+ for (let mr = vr; mr < yr; mr += St) {
860
+ let St = [G(pr, hr) + lr + dr * Math.cos(mr), G(pr, hr) + ur + fr * Math.sin(mr)];
861
+ gr.push(St), _r.push(St);
862
+ }
863
+ _r.push([G(pr, hr) + lr + dr * Math.cos(vr + 2 * Math.PI + .5 * mr), G(pr, hr) + ur + fr * Math.sin(vr + 2 * Math.PI + .5 * mr)]), _r.push([G(pr, hr) + lr + .98 * dr * Math.cos(vr + mr), G(pr, hr) + ur + .98 * fr * Math.sin(vr + mr)]), _r.push([G(pr, hr) + lr + .9 * dr * Math.cos(vr + .5 * mr), G(pr, hr) + ur + .9 * fr * Math.sin(vr + .5 * mr)]);
864
+ }
865
+ return [_r, gr];
866
+ }
867
+ function V(St, lr, ur, dr, fr, pr, mr, hr, gr) {
868
+ let _r = pr + G(.1, gr), vr = [];
869
+ vr.push([G(hr, gr) + lr + .9 * dr * Math.cos(_r - St), G(hr, gr) + ur + .9 * fr * Math.sin(_r - St)]);
870
+ for (let pr = _r; pr <= mr; pr += St) vr.push([G(hr, gr) + lr + dr * Math.cos(pr), G(hr, gr) + ur + fr * Math.sin(pr)]);
871
+ return vr.push([lr + dr * Math.cos(mr), ur + fr * Math.sin(mr)]), vr.push([lr + dr * Math.cos(mr), ur + fr * Math.sin(mr)]), q(vr, null, gr);
872
+ }
873
+ function Z(St, lr, ur, dr, fr, pr, mr, hr) {
874
+ let gr = [], _r = [hr.maxRandomnessOffset || 1, (hr.maxRandomnessOffset || 1) + .3], vr = [0, 0], yr = hr.disableMultiStroke ? 1 : 2, br = hr.preserveVertices;
875
+ for (let xr = 0; xr < yr; xr++) xr === 0 ? gr.push({
876
+ op: "move",
877
+ data: [mr[0], mr[1]]
878
+ }) : gr.push({
879
+ op: "move",
880
+ data: [mr[0] + (br ? 0 : G(_r[0], hr)), mr[1] + (br ? 0 : G(_r[0], hr))]
881
+ }), vr = br ? [fr, pr] : [fr + G(_r[xr], hr), pr + G(_r[xr], hr)], gr.push({
882
+ op: "bcurveTo",
883
+ data: [
884
+ St + G(_r[xr], hr),
885
+ lr + G(_r[xr], hr),
886
+ ur + G(_r[xr], hr),
887
+ dr + G(_r[xr], hr),
888
+ vr[0],
889
+ vr[1]
890
+ ]
891
+ });
892
+ return gr;
893
+ }
894
+ function Q(St) {
895
+ return [...St];
896
+ }
897
+ function H(St, lr = 0) {
898
+ let ur = St.length;
899
+ if (ur < 3) throw Error("A curve must have at least three points.");
900
+ let dr = [];
901
+ if (ur === 3) dr.push(Q(St[0]), Q(St[1]), Q(St[2]), Q(St[2]));
902
+ else {
903
+ let ur = [];
904
+ ur.push(St[0], St[0]);
905
+ for (let lr = 1; lr < St.length; lr++) ur.push(St[lr]), lr === St.length - 1 && ur.push(St[lr]);
906
+ let fr = [], pr = 1 - lr;
907
+ dr.push(Q(ur[0]));
908
+ for (let St = 1; St + 2 < ur.length; St++) {
909
+ let lr = ur[St];
910
+ fr[0] = [lr[0], lr[1]], fr[1] = [lr[0] + (pr * ur[St + 1][0] - pr * ur[St - 1][0]) / 6, lr[1] + (pr * ur[St + 1][1] - pr * ur[St - 1][1]) / 6], fr[2] = [ur[St + 1][0] + (pr * ur[St][0] - pr * ur[St + 2][0]) / 6, ur[St + 1][1] + (pr * ur[St][1] - pr * ur[St + 2][1]) / 6], fr[3] = [ur[St + 1][0], ur[St + 1][1]], dr.push(fr[1], fr[2], fr[3]);
911
+ }
912
+ }
913
+ return dr;
914
+ }
915
+ function N(St, lr) {
916
+ return (St[0] - lr[0]) ** 2 + (St[1] - lr[1]) ** 2;
917
+ }
918
+ function B(St, lr, ur) {
919
+ let dr = N(lr, ur);
920
+ if (dr === 0) return N(St, lr);
921
+ let fr = ((St[0] - lr[0]) * (ur[0] - lr[0]) + (St[1] - lr[1]) * (ur[1] - lr[1])) / dr;
922
+ return fr = Math.max(0, Math.min(1, fr)), N(St, J(lr, ur, fr));
923
+ }
924
+ function J(St, lr, ur) {
925
+ return [St[0] + (lr[0] - St[0]) * ur, St[1] + (lr[1] - St[1]) * ur];
926
+ }
927
+ function K(St, lr, ur, dr) {
928
+ let fr = dr || [];
929
+ if (function(St, lr) {
930
+ let ur = St[lr + 0], dr = St[lr + 1], fr = St[lr + 2], pr = St[lr + 3], mr = 3 * dr[0] - 2 * ur[0] - pr[0];
931
+ mr *= mr;
932
+ let hr = 3 * dr[1] - 2 * ur[1] - pr[1];
933
+ hr *= hr;
934
+ let gr = 3 * fr[0] - 2 * pr[0] - ur[0];
935
+ gr *= gr;
936
+ let _r = 3 * fr[1] - 2 * pr[1] - ur[1];
937
+ return _r *= _r, mr < gr && (mr = gr), hr < _r && (hr = _r), mr + hr;
938
+ }(St, lr) < ur) {
939
+ let ur = St[lr + 0];
940
+ fr.length ? (pr = fr[fr.length - 1], mr = ur, Math.sqrt(N(pr, mr))) > 1 && fr.push(ur) : fr.push(ur), fr.push(St[lr + 3]);
941
+ } else {
942
+ let dr = .5, pr = St[lr + 0], mr = St[lr + 1], hr = St[lr + 2], gr = St[lr + 3], _r = J(pr, mr, dr), vr = J(mr, hr, dr), yr = J(hr, gr, dr), br = J(_r, vr, dr), xr = J(vr, yr, dr), Sr = J(br, xr, dr);
943
+ K([
944
+ pr,
945
+ _r,
946
+ br,
947
+ Sr
948
+ ], 0, ur, fr), K([
949
+ Sr,
950
+ xr,
951
+ yr,
952
+ gr
953
+ ], 0, ur, fr);
954
+ }
955
+ var pr, mr;
956
+ return fr;
957
+ }
958
+ function U(St, lr) {
959
+ return X(St, 0, St.length, lr);
960
+ }
961
+ function X(St, lr, ur, dr, fr) {
962
+ let pr = fr || [], mr = St[lr], hr = St[ur - 1], gr = 0, _r = 1;
963
+ for (let dr = lr + 1; dr < ur - 1; ++dr) {
964
+ let lr = B(St[dr], mr, hr);
965
+ lr > gr && (gr = lr, _r = dr);
966
+ }
967
+ return Math.sqrt(gr) > dr ? (X(St, lr, _r + 1, dr, pr), X(St, _r, ur, dr, pr)) : (pr.length || pr.push(mr), pr.push(hr)), pr;
968
+ }
969
+ function Y(St, lr = .15, ur) {
970
+ let dr = [], fr = (St.length - 1) / 3;
971
+ for (let ur = 0; ur < fr; ur++) K(St, 3 * ur, lr, dr);
972
+ return ur && ur > 0 ? X(dr, 0, dr.length, ur) : dr;
973
+ }
974
+ var tt = "none", et = class {
975
+ constructor(St) {
976
+ this.defaultOptions = {
977
+ maxRandomnessOffset: 2,
978
+ roughness: 1,
979
+ bowing: 1,
980
+ stroke: "#000",
981
+ strokeWidth: 1,
982
+ curveTightness: 0,
983
+ curveFitting: .95,
984
+ curveStepCount: 9,
985
+ fillStyle: "hachure",
986
+ fillWeight: -1,
987
+ hachureAngle: -41,
988
+ hachureGap: -1,
989
+ dashOffset: -1,
990
+ dashGap: -1,
991
+ zigzagOffset: -1,
992
+ seed: 0,
993
+ disableMultiStroke: !1,
994
+ disableMultiStrokeFill: !1,
995
+ preserveVertices: !1,
996
+ fillShapeRoughnessGain: .8
997
+ }, this.config = St || {}, this.config.options && (this.defaultOptions = this._o(this.config.options));
998
+ }
999
+ static newSeed() {
1000
+ return Math.floor(Math.random() * 2 ** 31);
1001
+ }
1002
+ _o(St) {
1003
+ return St ? Object.assign({}, this.defaultOptions, St) : this.defaultOptions;
1004
+ }
1005
+ _d(St, lr, ur) {
1006
+ return {
1007
+ shape: St,
1008
+ sets: lr || [],
1009
+ options: ur || this.defaultOptions
1010
+ };
1011
+ }
1012
+ line(St, lr, ur, dr, fr) {
1013
+ let pr = this._o(fr);
1014
+ return this._d("line", [v(St, lr, ur, dr, pr)], pr);
1015
+ }
1016
+ rectangle(St, lr, ur, dr, fr) {
1017
+ let pr = this._o(fr), mr = [], hr = O(St, lr, ur, dr, pr);
1018
+ if (pr.fill) {
1019
+ let fr = [
1020
+ [St, lr],
1021
+ [St + ur, lr],
1022
+ [St + ur, lr + dr],
1023
+ [St, lr + dr]
1024
+ ];
1025
+ pr.fillStyle === "solid" ? mr.push(I([fr], pr)) : mr.push(C([fr], pr));
1026
+ }
1027
+ return pr.stroke !== tt && mr.push(hr), this._d("rectangle", mr, pr);
1028
+ }
1029
+ ellipse(St, lr, ur, dr, fr) {
1030
+ let pr = this._o(fr), mr = [], hr = T(ur, dr, pr), gr = D(St, lr, pr, hr);
1031
+ if (pr.fill) if (pr.fillStyle === "solid") {
1032
+ let ur = D(St, lr, pr, hr).opset;
1033
+ ur.type = "fillPath", mr.push(ur);
1034
+ } else mr.push(C([gr.estimatedPoints], pr));
1035
+ return pr.stroke !== tt && mr.push(gr.opset), this._d("ellipse", mr, pr);
1036
+ }
1037
+ circle(St, lr, ur, dr) {
1038
+ let fr = this.ellipse(St, lr, ur, ur, dr);
1039
+ return fr.shape = "circle", fr;
1040
+ }
1041
+ linearPath(St, lr) {
1042
+ let ur = this._o(lr);
1043
+ return this._d("linearPath", [S(St, !1, ur)], ur);
1044
+ }
1045
+ arc(St, lr, ur, dr, fr, pr, mr = !1, hr) {
1046
+ let gr = this._o(hr), _r = [], vr = A(St, lr, ur, dr, fr, pr, mr, !0, gr);
1047
+ if (mr && gr.fill) if (gr.fillStyle === "solid") {
1048
+ let mr = Object.assign({}, gr);
1049
+ mr.disableMultiStroke = !0;
1050
+ let hr = A(St, lr, ur, dr, fr, pr, !0, !1, mr);
1051
+ hr.type = "fillPath", _r.push(hr);
1052
+ } else _r.push(function(St, lr, ur, dr, fr, pr, mr) {
1053
+ let hr = St, gr = lr, _r = Math.abs(ur / 2), vr = Math.abs(dr / 2);
1054
+ _r += G(.01 * _r, mr), vr += G(.01 * vr, mr);
1055
+ let yr = fr, br = pr;
1056
+ for (; yr < 0;) yr += 2 * Math.PI, br += 2 * Math.PI;
1057
+ br - yr > 2 * Math.PI && (yr = 0, br = 2 * Math.PI);
1058
+ let xr = (br - yr) / mr.curveStepCount, Sr = [];
1059
+ for (let St = yr; St <= br; St += xr) Sr.push([hr + _r * Math.cos(St), gr + vr * Math.sin(St)]);
1060
+ return Sr.push([hr + _r * Math.cos(br), gr + vr * Math.sin(br)]), Sr.push([hr, gr]), C([Sr], mr);
1061
+ }(St, lr, ur, dr, fr, pr, gr));
1062
+ return gr.stroke !== tt && _r.push(vr), this._d("arc", _r, gr);
1063
+ }
1064
+ curve(St, lr) {
1065
+ let ur = this._o(lr), dr = [], fr = L(St, ur);
1066
+ if (ur.fill && ur.fill !== tt) if (ur.fillStyle === "solid") {
1067
+ let lr = L(St, Object.assign(Object.assign({}, ur), {
1068
+ disableMultiStroke: !0,
1069
+ roughness: ur.roughness ? ur.roughness + ur.fillShapeRoughnessGain : 0
1070
+ }));
1071
+ dr.push({
1072
+ type: "fillPath",
1073
+ ops: this._mergedShape(lr.ops)
1074
+ });
1075
+ } else {
1076
+ let lr = [], fr = St;
1077
+ if (fr.length) {
1078
+ let St = typeof fr[0][0] == "number" ? [fr] : fr;
1079
+ for (let dr of St) dr.length < 3 ? lr.push(...dr) : dr.length === 3 ? lr.push(...Y(H([
1080
+ dr[0],
1081
+ dr[0],
1082
+ dr[1],
1083
+ dr[2]
1084
+ ]), 10, (1 + ur.roughness) / 2)) : lr.push(...Y(H(dr), 10, (1 + ur.roughness) / 2));
1085
+ }
1086
+ lr.length && dr.push(C([lr], ur));
1087
+ }
1088
+ return ur.stroke !== tt && dr.push(fr), this._d("curve", dr, ur);
1089
+ }
1090
+ polygon(St, lr) {
1091
+ let ur = this._o(lr), dr = [], fr = S(St, !0, ur);
1092
+ return ur.fill && (ur.fillStyle === "solid" ? dr.push(I([St], ur)) : dr.push(C([St], ur))), ur.stroke !== tt && dr.push(fr), this._d("polygon", dr, ur);
1093
+ }
1094
+ path(St, lr) {
1095
+ let ur = this._o(lr), dr = [];
1096
+ if (!St) return this._d("path", dr, ur);
1097
+ St = (St || "").replace(/\n/g, " ").replace(/(-\s)/g, "-").replace("/(ss)/g", " ");
1098
+ let fr = ur.fill && ur.fill !== "transparent" && ur.fill !== tt, pr = ur.stroke !== tt, mr = !!(ur.simplification && ur.simplification < 1), hr = function(St, lr, ur) {
1099
+ let dr = m(y(b(St))), fr = [], pr = [], mr = [0, 0], hr = [], gr = () => {
1100
+ hr.length >= 4 && pr.push(...Y(hr, lr)), hr = [];
1101
+ }, _r = () => {
1102
+ gr(), pr.length && (fr.push(pr), pr = []);
1103
+ };
1104
+ for (let { key: St, data: lr } of dr) switch (St) {
1105
+ case "M":
1106
+ _r(), mr = [lr[0], lr[1]], pr.push(mr);
1107
+ break;
1108
+ case "L":
1109
+ gr(), pr.push([lr[0], lr[1]]);
1110
+ break;
1111
+ case "C":
1112
+ if (!hr.length) {
1113
+ let St = pr.length ? pr[pr.length - 1] : mr;
1114
+ hr.push([St[0], St[1]]);
1115
+ }
1116
+ hr.push([lr[0], lr[1]]), hr.push([lr[2], lr[3]]), hr.push([lr[4], lr[5]]);
1117
+ break;
1118
+ case "Z": gr(), pr.push([mr[0], mr[1]]);
1119
+ }
1120
+ if (_r(), !ur) return fr;
1121
+ let vr = [];
1122
+ for (let St of fr) {
1123
+ let lr = U(St, ur);
1124
+ lr.length && vr.push(lr);
1125
+ }
1126
+ return vr;
1127
+ }(St, 1, mr ? 4 - 4 * (ur.simplification || 1) : (1 + ur.roughness) / 2), gr = _(St, ur);
1128
+ if (fr) if (ur.fillStyle === "solid") if (hr.length === 1) {
1129
+ let lr = _(St, Object.assign(Object.assign({}, ur), {
1130
+ disableMultiStroke: !0,
1131
+ roughness: ur.roughness ? ur.roughness + ur.fillShapeRoughnessGain : 0
1132
+ }));
1133
+ dr.push({
1134
+ type: "fillPath",
1135
+ ops: this._mergedShape(lr.ops)
1136
+ });
1137
+ } else dr.push(I(hr, ur));
1138
+ else dr.push(C(hr, ur));
1139
+ return pr && (mr ? hr.forEach(((St) => {
1140
+ dr.push(S(St, !1, ur));
1141
+ })) : dr.push(gr)), this._d("path", dr, ur);
1142
+ }
1143
+ opsToPath(St, lr) {
1144
+ let ur = "";
1145
+ for (let dr of St.ops) {
1146
+ let St = typeof lr == "number" && lr >= 0 ? dr.data.map(((St) => +St.toFixed(lr))) : dr.data;
1147
+ switch (dr.op) {
1148
+ case "move":
1149
+ ur += `M${St[0]} ${St[1]} `;
1150
+ break;
1151
+ case "bcurveTo":
1152
+ ur += `C${St[0]} ${St[1]}, ${St[2]} ${St[3]}, ${St[4]} ${St[5]} `;
1153
+ break;
1154
+ case "lineTo": ur += `L${St[0]} ${St[1]} `;
1155
+ }
1156
+ }
1157
+ return ur.trim();
1158
+ }
1159
+ toPaths(St) {
1160
+ let lr = St.sets || [], ur = St.options || this.defaultOptions, dr = [];
1161
+ for (let St of lr) {
1162
+ let lr = null;
1163
+ switch (St.type) {
1164
+ case "path":
1165
+ lr = {
1166
+ d: this.opsToPath(St),
1167
+ stroke: ur.stroke,
1168
+ strokeWidth: ur.strokeWidth,
1169
+ fill: tt
1170
+ };
1171
+ break;
1172
+ case "fillPath":
1173
+ lr = {
1174
+ d: this.opsToPath(St),
1175
+ stroke: tt,
1176
+ strokeWidth: 0,
1177
+ fill: ur.fill || tt
1178
+ };
1179
+ break;
1180
+ case "fillSketch": lr = this.fillSketch(St, ur);
1181
+ }
1182
+ lr && dr.push(lr);
1183
+ }
1184
+ return dr;
1185
+ }
1186
+ fillSketch(St, lr) {
1187
+ let ur = lr.fillWeight;
1188
+ return ur < 0 && (ur = lr.strokeWidth / 2), {
1189
+ d: this.opsToPath(St),
1190
+ stroke: lr.fill || tt,
1191
+ strokeWidth: ur,
1192
+ fill: tt
1193
+ };
1194
+ }
1195
+ _mergedShape(St) {
1196
+ return St.filter(((St, lr) => lr === 0 || St.op !== "move"));
1197
+ }
1198
+ }, st = class {
1199
+ constructor(St, lr) {
1200
+ this.canvas = St, this.ctx = this.canvas.getContext("2d"), this.gen = new et(lr);
1201
+ }
1202
+ draw(St) {
1203
+ let lr = St.sets || [], ur = St.options || this.getDefaultOptions(), dr = this.ctx, fr = St.options.fixedDecimalPlaceDigits;
1204
+ for (let pr of lr) switch (pr.type) {
1205
+ case "path":
1206
+ dr.save(), dr.strokeStyle = ur.stroke === "none" ? "transparent" : ur.stroke, dr.lineWidth = ur.strokeWidth, ur.strokeLineDash && dr.setLineDash(ur.strokeLineDash), ur.strokeLineDashOffset && (dr.lineDashOffset = ur.strokeLineDashOffset), this._drawToContext(dr, pr, fr), dr.restore();
1207
+ break;
1208
+ case "fillPath": {
1209
+ dr.save(), dr.fillStyle = ur.fill || "";
1210
+ let lr = St.shape === "curve" || St.shape === "polygon" || St.shape === "path" ? "evenodd" : "nonzero";
1211
+ this._drawToContext(dr, pr, fr, lr), dr.restore();
1212
+ break;
1213
+ }
1214
+ case "fillSketch": this.fillSketch(dr, pr, ur);
1215
+ }
1216
+ }
1217
+ fillSketch(St, lr, ur) {
1218
+ let dr = ur.fillWeight;
1219
+ dr < 0 && (dr = ur.strokeWidth / 2), St.save(), ur.fillLineDash && St.setLineDash(ur.fillLineDash), ur.fillLineDashOffset && (St.lineDashOffset = ur.fillLineDashOffset), St.strokeStyle = ur.fill || "", St.lineWidth = dr, this._drawToContext(St, lr, ur.fixedDecimalPlaceDigits), St.restore();
1220
+ }
1221
+ _drawToContext(St, lr, ur, dr = "nonzero") {
1222
+ St.beginPath();
1223
+ for (let dr of lr.ops) {
1224
+ let lr = typeof ur == "number" && ur >= 0 ? dr.data.map(((St) => +St.toFixed(ur))) : dr.data;
1225
+ switch (dr.op) {
1226
+ case "move":
1227
+ St.moveTo(lr[0], lr[1]);
1228
+ break;
1229
+ case "bcurveTo":
1230
+ St.bezierCurveTo(lr[0], lr[1], lr[2], lr[3], lr[4], lr[5]);
1231
+ break;
1232
+ case "lineTo": St.lineTo(lr[0], lr[1]);
1233
+ }
1234
+ }
1235
+ lr.type === "fillPath" ? St.fill(dr) : St.stroke();
1236
+ }
1237
+ get generator() {
1238
+ return this.gen;
1239
+ }
1240
+ getDefaultOptions() {
1241
+ return this.gen.defaultOptions;
1242
+ }
1243
+ line(St, lr, ur, dr, fr) {
1244
+ let pr = this.gen.line(St, lr, ur, dr, fr);
1245
+ return this.draw(pr), pr;
1246
+ }
1247
+ rectangle(St, lr, ur, dr, fr) {
1248
+ let pr = this.gen.rectangle(St, lr, ur, dr, fr);
1249
+ return this.draw(pr), pr;
1250
+ }
1251
+ ellipse(St, lr, ur, dr, fr) {
1252
+ let pr = this.gen.ellipse(St, lr, ur, dr, fr);
1253
+ return this.draw(pr), pr;
1254
+ }
1255
+ circle(St, lr, ur, dr) {
1256
+ let fr = this.gen.circle(St, lr, ur, dr);
1257
+ return this.draw(fr), fr;
1258
+ }
1259
+ linearPath(St, lr) {
1260
+ let ur = this.gen.linearPath(St, lr);
1261
+ return this.draw(ur), ur;
1262
+ }
1263
+ polygon(St, lr) {
1264
+ let ur = this.gen.polygon(St, lr);
1265
+ return this.draw(ur), ur;
1266
+ }
1267
+ arc(St, lr, ur, dr, fr, pr, mr = !1, hr) {
1268
+ let gr = this.gen.arc(St, lr, ur, dr, fr, pr, mr, hr);
1269
+ return this.draw(gr), gr;
1270
+ }
1271
+ curve(St, lr) {
1272
+ let ur = this.gen.curve(St, lr);
1273
+ return this.draw(ur), ur;
1274
+ }
1275
+ path(St, lr) {
1276
+ let ur = this.gen.path(St, lr);
1277
+ return this.draw(ur), ur;
1278
+ }
1279
+ }, nt = "http://www.w3.org/2000/svg", ot = class {
1280
+ constructor(St, lr) {
1281
+ this.svg = St, this.gen = new et(lr);
1282
+ }
1283
+ draw(St) {
1284
+ let lr = St.sets || [], ur = St.options || this.getDefaultOptions(), dr = this.svg.ownerDocument || window.document, fr = dr.createElementNS(nt, "g"), pr = St.options.fixedDecimalPlaceDigits;
1285
+ for (let mr of lr) {
1286
+ let lr = null;
1287
+ switch (mr.type) {
1288
+ case "path":
1289
+ lr = dr.createElementNS(nt, "path"), lr.setAttribute("d", this.opsToPath(mr, pr)), lr.setAttribute("stroke", ur.stroke), lr.setAttribute("stroke-width", ur.strokeWidth + ""), lr.setAttribute("fill", "none"), ur.strokeLineDash && lr.setAttribute("stroke-dasharray", ur.strokeLineDash.join(" ").trim()), ur.strokeLineDashOffset && lr.setAttribute("stroke-dashoffset", `${ur.strokeLineDashOffset}`);
1290
+ break;
1291
+ case "fillPath":
1292
+ lr = dr.createElementNS(nt, "path"), lr.setAttribute("d", this.opsToPath(mr, pr)), lr.setAttribute("stroke", "none"), lr.setAttribute("stroke-width", "0"), lr.setAttribute("fill", ur.fill || ""), St.shape !== "curve" && St.shape !== "polygon" || lr.setAttribute("fill-rule", "evenodd");
1293
+ break;
1294
+ case "fillSketch": lr = this.fillSketch(dr, mr, ur);
1295
+ }
1296
+ lr && fr.appendChild(lr);
1297
+ }
1298
+ return fr;
1299
+ }
1300
+ fillSketch(St, lr, ur) {
1301
+ let dr = ur.fillWeight;
1302
+ dr < 0 && (dr = ur.strokeWidth / 2);
1303
+ let fr = St.createElementNS(nt, "path");
1304
+ return fr.setAttribute("d", this.opsToPath(lr, ur.fixedDecimalPlaceDigits)), fr.setAttribute("stroke", ur.fill || ""), fr.setAttribute("stroke-width", dr + ""), fr.setAttribute("fill", "none"), ur.fillLineDash && fr.setAttribute("stroke-dasharray", ur.fillLineDash.join(" ").trim()), ur.fillLineDashOffset && fr.setAttribute("stroke-dashoffset", `${ur.fillLineDashOffset}`), fr;
1305
+ }
1306
+ get generator() {
1307
+ return this.gen;
1308
+ }
1309
+ getDefaultOptions() {
1310
+ return this.gen.defaultOptions;
1311
+ }
1312
+ opsToPath(St, lr) {
1313
+ return this.gen.opsToPath(St, lr);
1314
+ }
1315
+ line(St, lr, ur, dr, fr) {
1316
+ let pr = this.gen.line(St, lr, ur, dr, fr);
1317
+ return this.draw(pr);
1318
+ }
1319
+ rectangle(St, lr, ur, dr, fr) {
1320
+ let pr = this.gen.rectangle(St, lr, ur, dr, fr);
1321
+ return this.draw(pr);
1322
+ }
1323
+ ellipse(St, lr, ur, dr, fr) {
1324
+ let pr = this.gen.ellipse(St, lr, ur, dr, fr);
1325
+ return this.draw(pr);
1326
+ }
1327
+ circle(St, lr, ur, dr) {
1328
+ let fr = this.gen.circle(St, lr, ur, dr);
1329
+ return this.draw(fr);
1330
+ }
1331
+ linearPath(St, lr) {
1332
+ let ur = this.gen.linearPath(St, lr);
1333
+ return this.draw(ur);
1334
+ }
1335
+ polygon(St, lr) {
1336
+ let ur = this.gen.polygon(St, lr);
1337
+ return this.draw(ur);
1338
+ }
1339
+ arc(St, lr, ur, dr, fr, pr, mr = !1, hr) {
1340
+ let gr = this.gen.arc(St, lr, ur, dr, fr, pr, mr, hr);
1341
+ return this.draw(gr);
1342
+ }
1343
+ curve(St, lr) {
1344
+ let ur = this.gen.curve(St, lr);
1345
+ return this.draw(ur);
1346
+ }
1347
+ path(St, lr) {
1348
+ let ur = this.gen.path(St, lr);
1349
+ return this.draw(ur);
1350
+ }
1351
+ }, at = {
1352
+ canvas: (St, lr) => new st(St, lr),
1353
+ svg: (St, lr) => new ot(St, lr),
1354
+ generator: (St) => new et(St),
1355
+ newSeed: () => et.newSeed()
1356
+ }, labelHelper = /* @__PURE__ */ __name(async (ur, fr, hr) => {
1357
+ let _r, vr = fr.useHtmlLabels || evaluate(getConfig2()?.htmlLabels);
1358
+ _r = hr || "node default";
1359
+ let yr = ur.insert("g").attr("class", _r).attr("id", fr.domId || fr.id), Cr = yr.insert("g").attr("class", "label").attr("style", handleUndefinedAttr(fr.labelStyle)), wr;
1360
+ wr = fr.label === void 0 ? "" : typeof fr.label == "string" ? fr.label : fr.label[0];
1361
+ let Tr = await createText(Cr, sanitizeText(decodeEntities(wr), getConfig2()), {
1362
+ useHtmlLabels: vr,
1363
+ width: fr.width || getConfig2().flowchart?.wrappingWidth,
1364
+ cssClasses: "markdown-node-label",
1365
+ style: fr.labelStyle,
1366
+ addSvgBackground: !!fr.icon || !!fr.img
1367
+ }), Er = Tr.getBBox(), Dr = (fr?.padding ?? 0) / 2;
1368
+ if (vr) {
1369
+ let St = Tr.children[0], ur = select_default(Tr), dr = St.getElementsByTagName("img");
1370
+ if (dr) {
1371
+ let St = wr.replace(/<img[^>]*>/g, "").trim() === "";
1372
+ await Promise.all([...dr].map((ur) => new Promise((dr) => {
1373
+ function fr() {
1374
+ if (ur.style.display = "flex", ur.style.flexDirection = "column", St) {
1375
+ let [St = defaultConfig_default.fontSize] = parseFontSize(getConfig2().fontSize ? getConfig2().fontSize : window.getComputedStyle(document.body).fontSize), dr = St * 5 + "px";
1376
+ ur.style.minWidth = dr, ur.style.maxWidth = dr;
1377
+ } else ur.style.width = "100%";
1378
+ dr(ur);
1379
+ }
1380
+ __name(fr, "setupImage"), setTimeout(() => {
1381
+ ur.complete && fr();
1382
+ }), ur.addEventListener("error", fr), ur.addEventListener("load", fr);
1383
+ })));
1384
+ }
1385
+ Er = St.getBoundingClientRect(), ur.attr("width", Er.width), ur.attr("height", Er.height);
1386
+ }
1387
+ return vr ? Cr.attr("transform", "translate(" + -Er.width / 2 + ", " + -Er.height / 2 + ")") : Cr.attr("transform", "translate(0, " + -Er.height / 2 + ")"), fr.centerLabel && Cr.attr("transform", "translate(" + -Er.width / 2 + ", " + -Er.height / 2 + ")"), Cr.insert("rect", ":first-child"), {
1388
+ shapeSvg: yr,
1389
+ bbox: Er,
1390
+ halfPadding: Dr,
1391
+ label: Cr
1392
+ };
1393
+ }, "labelHelper"), insertLabel = /* @__PURE__ */ __name(async (lr, ur, dr) => {
1394
+ let fr = dr.useHtmlLabels || evaluate(getConfig2()?.flowchart?.htmlLabels), pr = lr.insert("g").attr("class", "label").attr("style", dr.labelStyle || ""), hr = await createText(pr, sanitizeText(decodeEntities(ur), getConfig2()), {
1395
+ useHtmlLabels: fr,
1396
+ width: dr.width || getConfig2()?.flowchart?.wrappingWidth,
1397
+ style: dr.labelStyle,
1398
+ addSvgBackground: !!dr.icon || !!dr.img
1399
+ }), _r = hr.getBBox(), vr = dr.padding / 2;
1400
+ if (evaluate(getConfig2()?.flowchart?.htmlLabels)) {
1401
+ let St = hr.children[0], lr = select_default(hr);
1402
+ _r = St.getBoundingClientRect(), lr.attr("width", _r.width), lr.attr("height", _r.height);
1403
+ }
1404
+ return fr ? pr.attr("transform", "translate(" + -_r.width / 2 + ", " + -_r.height / 2 + ")") : pr.attr("transform", "translate(0, " + -_r.height / 2 + ")"), dr.centerLabel && pr.attr("transform", "translate(" + -_r.width / 2 + ", " + -_r.height / 2 + ")"), pr.insert("rect", ":first-child"), {
1405
+ shapeSvg: lr,
1406
+ bbox: _r,
1407
+ halfPadding: vr,
1408
+ label: pr
1409
+ };
1410
+ }, "insertLabel"), updateNodeBounds = /* @__PURE__ */ __name((St, lr) => {
1411
+ let ur = lr.node().getBBox();
1412
+ St.width = ur.width, St.height = ur.height;
1413
+ }, "updateNodeBounds"), getNodeClasses = /* @__PURE__ */ __name((St, lr) => (St.look === "handDrawn" ? "rough-node" : "node") + " " + St.cssClasses + " " + (lr || ""), "getNodeClasses");
1414
+ function createPathFromPoints(St) {
1415
+ let lr = St.map((St, lr) => `${lr === 0 ? "M" : "L"}${St.x},${St.y}`);
1416
+ return lr.push("Z"), lr.join(" ");
1417
+ }
1418
+ __name(createPathFromPoints, "createPathFromPoints");
1419
+ function generateFullSineWavePoints(St, lr, ur, dr, fr, pr) {
1420
+ let mr = [], hr = ur - St, gr = dr - lr, _r = hr / pr, vr = 2 * Math.PI / _r, yr = lr + gr / 2;
1421
+ for (let lr = 0; lr <= 50; lr++) {
1422
+ let ur = St + lr / 50 * hr, dr = yr + fr * Math.sin(vr * (ur - St));
1423
+ mr.push({
1424
+ x: ur,
1425
+ y: dr
1426
+ });
1427
+ }
1428
+ return mr;
1429
+ }
1430
+ __name(generateFullSineWavePoints, "generateFullSineWavePoints");
1431
+ function generateCirclePoints(St, lr, ur, dr, fr, pr) {
1432
+ let mr = [], hr = fr * Math.PI / 180, gr = (pr * Math.PI / 180 - hr) / (dr - 1);
1433
+ for (let fr = 0; fr < dr; fr++) {
1434
+ let dr = hr + fr * gr, pr = St + ur * Math.cos(dr), _r = lr + ur * Math.sin(dr);
1435
+ mr.push({
1436
+ x: -pr,
1437
+ y: -_r
1438
+ });
1439
+ }
1440
+ return mr;
1441
+ }
1442
+ __name(generateCirclePoints, "generateCirclePoints");
1443
+ var intersect_rect_default = /* @__PURE__ */ __name((St, lr) => {
1444
+ var ur = St.x, dr = St.y, fr = lr.x - ur, pr = lr.y - dr, mr = St.width / 2, hr = St.height / 2, gr, _r;
1445
+ return Math.abs(pr) * mr > Math.abs(fr) * hr ? (pr < 0 && (hr = -hr), gr = pr === 0 ? 0 : hr * fr / pr, _r = hr) : (fr < 0 && (mr = -mr), gr = mr, _r = fr === 0 ? 0 : mr * pr / fr), {
1446
+ x: ur + gr,
1447
+ y: dr + _r
1448
+ };
1449
+ }, "intersectRect");
1450
+ function applyStyle(St, lr) {
1451
+ lr && St.attr("style", lr);
1452
+ }
1453
+ __name(applyStyle, "applyStyle");
1454
+ async function addHtmlLabel(St) {
1455
+ let lr = select_default(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")), ur = lr.append("xhtml:div"), dr = getConfig2(), fr = St.label;
1456
+ St.label && hasKatex(St.label) && (fr = await renderKatexSanitized(St.label.replace(common_default.lineBreakRegex, "\n"), dr));
1457
+ let pr = "<span class=\"" + (St.isNode ? "nodeLabel" : "edgeLabel") + "\" " + (St.labelStyle ? "style=\"" + St.labelStyle + "\"" : "") + ">" + fr + "</span>";
1458
+ return ur.html(sanitizeText(pr, dr)), applyStyle(ur, St.labelStyle), ur.style("display", "inline-block"), ur.style("padding-right", "1px"), ur.style("white-space", "nowrap"), ur.attr("xmlns", "http://www.w3.org/1999/xhtml"), lr.node();
1459
+ }
1460
+ __name(addHtmlLabel, "addHtmlLabel");
1461
+ var createLabel_default = /* @__PURE__ */ __name(async (lr, ur, dr, pr) => {
1462
+ let mr = lr || "";
1463
+ if (typeof mr == "object" && (mr = mr[0]), evaluate(getConfig2().flowchart.htmlLabels)) return mr = mr.replace(/\\n|\n/g, "<br />"), log.info("vertexText" + mr), await addHtmlLabel({
1464
+ isNode: pr,
1465
+ label: decodeEntities(mr).replace(/fa[blrs]?:fa-[\w-]+/g, (St) => `<i class='${St.replace(":", " ")}'></i>`),
1466
+ labelStyle: ur && ur.replace("fill:", "color:")
1467
+ });
1468
+ {
1469
+ let St = document.createElementNS("http://www.w3.org/2000/svg", "text");
1470
+ St.setAttribute("style", ur.replace("color:", "fill:"));
1471
+ let lr = [];
1472
+ lr = typeof mr == "string" ? mr.split(/\\n|\n|<br\s*\/?>/gi) : Array.isArray(mr) ? mr : [];
1473
+ for (let ur of lr) {
1474
+ let lr = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
1475
+ lr.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"), lr.setAttribute("dy", "1em"), lr.setAttribute("x", "0"), dr ? lr.setAttribute("class", "title-row") : lr.setAttribute("class", "row"), lr.textContent = ur.trim(), St.appendChild(lr);
1476
+ }
1477
+ return St;
1478
+ }
1479
+ }, "createLabel"), createRoundedRectPathD = /* @__PURE__ */ __name((St, lr, ur, dr, fr) => [
1480
+ "M",
1481
+ St + fr,
1482
+ lr,
1483
+ "H",
1484
+ St + ur - fr,
1485
+ "A",
1486
+ fr,
1487
+ fr,
1488
+ 0,
1489
+ 0,
1490
+ 1,
1491
+ St + ur,
1492
+ lr + fr,
1493
+ "V",
1494
+ lr + dr - fr,
1495
+ "A",
1496
+ fr,
1497
+ fr,
1498
+ 0,
1499
+ 0,
1500
+ 1,
1501
+ St + ur - fr,
1502
+ lr + dr,
1503
+ "H",
1504
+ St + fr,
1505
+ "A",
1506
+ fr,
1507
+ fr,
1508
+ 0,
1509
+ 0,
1510
+ 1,
1511
+ St,
1512
+ lr + dr - fr,
1513
+ "V",
1514
+ lr + fr,
1515
+ "A",
1516
+ fr,
1517
+ fr,
1518
+ 0,
1519
+ 0,
1520
+ 1,
1521
+ St + fr,
1522
+ lr,
1523
+ "Z"
1524
+ ].join(" "), "createRoundedRectPathD"), rect = /* @__PURE__ */ __name(async (St, lr) => {
1525
+ log.info("Creating subgraph rect for ", lr.id, lr);
1526
+ let ur = getConfig2(), { themeVariables: dr, handDrawnSeed: pr } = ur, { clusterBkg: hr, clusterBorder: gr } = dr, { labelStyles: _r, nodeStyles: vr, borderStyles: yr, backgroundStyles: xr } = styles2String(lr), Cr = St.insert("g").attr("class", "cluster " + lr.cssClasses).attr("id", lr.id).attr("data-look", lr.look), wr = evaluate(ur.flowchart.htmlLabels), Or = Cr.insert("g").attr("class", "cluster-label "), kr = await createText(Or, lr.label, {
1527
+ style: lr.labelStyle,
1528
+ useHtmlLabels: wr,
1529
+ isNode: !0
1530
+ }), jr = kr.getBBox();
1531
+ if (evaluate(ur.flowchart.htmlLabels)) {
1532
+ let St = kr.children[0], lr = select_default(kr);
1533
+ jr = St.getBoundingClientRect(), lr.attr("width", jr.width), lr.attr("height", jr.height);
1534
+ }
1535
+ let Mr = lr.width <= jr.width + lr.padding ? jr.width + lr.padding : lr.width;
1536
+ lr.width <= jr.width + lr.padding ? lr.diff = (Mr - lr.width) / 2 - lr.padding : lr.diff = -lr.padding;
1537
+ let Nr = lr.height, Pr = lr.x - Mr / 2, Fr = lr.y - Nr / 2;
1538
+ log.trace("Data ", lr, JSON.stringify(lr));
1539
+ let Ir;
1540
+ if (lr.look === "handDrawn") {
1541
+ let St = at.svg(Cr), ur = userNodeOverrides(lr, {
1542
+ roughness: .7,
1543
+ fill: hr,
1544
+ stroke: gr,
1545
+ fillWeight: 3,
1546
+ seed: pr
1547
+ }), dr = St.path(createRoundedRectPathD(Pr, Fr, Mr, Nr, 0), ur);
1548
+ Ir = Cr.insert(() => (log.debug("Rough node insert CXC", dr), dr), ":first-child"), Ir.select("path:nth-child(2)").attr("style", yr.join(";")), Ir.select("path").attr("style", xr.join(";").replace("fill", "stroke"));
1549
+ } else Ir = Cr.insert("rect", ":first-child"), Ir.attr("style", vr).attr("rx", lr.rx).attr("ry", lr.ry).attr("x", Pr).attr("y", Fr).attr("width", Mr).attr("height", Nr);
1550
+ let { subGraphTitleTopMargin: Lr } = getSubGraphTitleMargins(ur);
1551
+ if (Or.attr("transform", `translate(${lr.x - jr.width / 2}, ${lr.y - lr.height / 2 + Lr})`), _r) {
1552
+ let St = Or.select("span");
1553
+ St && St.attr("style", _r);
1554
+ }
1555
+ let Rr = Ir.node().getBBox();
1556
+ return lr.offsetX = 0, lr.width = Rr.width, lr.height = Rr.height, lr.offsetY = jr.height - lr.padding / 2, lr.intersect = function(St) {
1557
+ return intersect_rect_default(lr, St);
1558
+ }, {
1559
+ cluster: Cr,
1560
+ labelBBox: jr
1561
+ };
1562
+ }, "rect"), shapes = {
1563
+ rect,
1564
+ squareRect: rect,
1565
+ roundedWithTitle: /* @__PURE__ */ __name(async (St, lr) => {
1566
+ let ur = getConfig2(), { themeVariables: dr, handDrawnSeed: fr } = ur, { altBackground: pr, compositeBackground: hr, compositeTitleBackground: gr, nodeBorder: _r } = dr, vr = St.insert("g").attr("class", lr.cssClasses).attr("id", lr.id).attr("data-id", lr.id).attr("data-look", lr.look), yr = vr.insert("g", ":first-child"), xr = vr.insert("g").attr("class", "cluster-label"), Cr = vr.append("rect"), wr = xr.node().appendChild(await createLabel_default(lr.label, lr.labelStyle, void 0, !0)), Tr = wr.getBBox();
1567
+ if (evaluate(ur.flowchart.htmlLabels)) {
1568
+ let St = wr.children[0], lr = select_default(wr);
1569
+ Tr = St.getBoundingClientRect(), lr.attr("width", Tr.width), lr.attr("height", Tr.height);
1570
+ }
1571
+ let Er = 0 * lr.padding, Dr = Er / 2, Or = (lr.width <= Tr.width + lr.padding ? Tr.width + lr.padding : lr.width) + Er;
1572
+ lr.width <= Tr.width + lr.padding ? lr.diff = (Or - lr.width) / 2 - lr.padding : lr.diff = -lr.padding;
1573
+ let kr = lr.height + Er, Ar = lr.height + Er - Tr.height - 6, jr = lr.x - Or / 2, Mr = lr.y - kr / 2;
1574
+ lr.width = Or;
1575
+ let Nr = lr.y - lr.height / 2 - Dr + Tr.height + 2, Pr;
1576
+ if (lr.look === "handDrawn") {
1577
+ let St = lr.cssClasses.includes("statediagram-cluster-alt"), ur = at.svg(vr), dr = lr.rx || lr.ry ? ur.path(createRoundedRectPathD(jr, Mr, Or, kr, 10), {
1578
+ roughness: .7,
1579
+ fill: gr,
1580
+ fillStyle: "solid",
1581
+ stroke: _r,
1582
+ seed: fr
1583
+ }) : ur.rectangle(jr, Mr, Or, kr, { seed: fr });
1584
+ Pr = vr.insert(() => dr, ":first-child");
1585
+ let mr = ur.rectangle(jr, Nr, Or, Ar, {
1586
+ fill: St ? pr : hr,
1587
+ fillStyle: St ? "hachure" : "solid",
1588
+ stroke: _r,
1589
+ seed: fr
1590
+ });
1591
+ Pr = vr.insert(() => dr, ":first-child"), Cr = vr.insert(() => mr);
1592
+ } else Pr = yr.insert("rect", ":first-child"), Pr.attr("class", "outer").attr("x", jr).attr("y", Mr).attr("width", Or).attr("height", kr).attr("data-look", lr.look), Cr.attr("class", "inner").attr("x", jr).attr("y", Nr).attr("width", Or).attr("height", Ar);
1593
+ return xr.attr("transform", `translate(${lr.x - Tr.width / 2}, ${Mr + 1 - (evaluate(ur.flowchart.htmlLabels) ? 0 : 3)})`), lr.height = Pr.node().getBBox().height, lr.offsetX = 0, lr.offsetY = Tr.height - lr.padding / 2, lr.labelBBox = Tr, lr.intersect = function(St) {
1594
+ return intersect_rect_default(lr, St);
1595
+ }, {
1596
+ cluster: vr,
1597
+ labelBBox: Tr
1598
+ };
1599
+ }, "roundedWithTitle"),
1600
+ noteGroup: /* @__PURE__ */ __name((St, lr) => {
1601
+ let ur = St.insert("g").attr("class", "note-cluster").attr("id", lr.id), dr = ur.insert("rect", ":first-child"), fr = 0 * lr.padding, pr = fr / 2;
1602
+ dr.attr("rx", lr.rx).attr("ry", lr.ry).attr("x", lr.x - lr.width / 2 - pr).attr("y", lr.y - lr.height / 2 - pr).attr("width", lr.width + fr).attr("height", lr.height + fr).attr("fill", "none");
1603
+ let mr = dr.node().getBBox();
1604
+ return lr.width = mr.width, lr.height = mr.height, lr.intersect = function(St) {
1605
+ return intersect_rect_default(lr, St);
1606
+ }, {
1607
+ cluster: ur,
1608
+ labelBBox: {
1609
+ width: 0,
1610
+ height: 0
1611
+ }
1612
+ };
1613
+ }, "noteGroup"),
1614
+ divider: /* @__PURE__ */ __name((St, lr) => {
1615
+ let { themeVariables: ur, handDrawnSeed: dr } = getConfig2(), { nodeBorder: fr } = ur, pr = St.insert("g").attr("class", lr.cssClasses).attr("id", lr.id).attr("data-look", lr.look), mr = pr.insert("g", ":first-child"), hr = 0 * lr.padding, gr = lr.width + hr;
1616
+ lr.diff = -lr.padding;
1617
+ let _r = lr.height + hr, vr = lr.x - gr / 2, yr = lr.y - _r / 2;
1618
+ lr.width = gr;
1619
+ let xr;
1620
+ if (lr.look === "handDrawn") {
1621
+ let St = at.svg(pr).rectangle(vr, yr, gr, _r, {
1622
+ fill: "lightgrey",
1623
+ roughness: .5,
1624
+ strokeLineDash: [5],
1625
+ stroke: fr,
1626
+ seed: dr
1627
+ });
1628
+ xr = pr.insert(() => St, ":first-child");
1629
+ } else xr = mr.insert("rect", ":first-child"), xr.attr("class", "divider").attr("x", vr).attr("y", yr).attr("width", gr).attr("height", _r).attr("data-look", lr.look);
1630
+ return lr.height = xr.node().getBBox().height, lr.offsetX = 0, lr.offsetY = 0, lr.intersect = function(St) {
1631
+ return intersect_rect_default(lr, St);
1632
+ }, {
1633
+ cluster: pr,
1634
+ labelBBox: {}
1635
+ };
1636
+ }, "divider"),
1637
+ kanbanSection: /* @__PURE__ */ __name(async (St, lr) => {
1638
+ log.info("Creating subgraph rect for ", lr.id, lr);
1639
+ let ur = getConfig2(), { themeVariables: dr, handDrawnSeed: pr } = ur, { clusterBkg: hr, clusterBorder: gr } = dr, { labelStyles: _r, nodeStyles: vr, borderStyles: yr, backgroundStyles: xr } = styles2String(lr), Cr = St.insert("g").attr("class", "cluster " + lr.cssClasses).attr("id", lr.id).attr("data-look", lr.look), wr = evaluate(ur.flowchart.htmlLabels), Or = Cr.insert("g").attr("class", "cluster-label "), kr = await createText(Or, lr.label, {
1640
+ style: lr.labelStyle,
1641
+ useHtmlLabels: wr,
1642
+ isNode: !0,
1643
+ width: lr.width
1644
+ }), jr = kr.getBBox();
1645
+ if (evaluate(ur.flowchart.htmlLabels)) {
1646
+ let St = kr.children[0], lr = select_default(kr);
1647
+ jr = St.getBoundingClientRect(), lr.attr("width", jr.width), lr.attr("height", jr.height);
1648
+ }
1649
+ let Mr = lr.width <= jr.width + lr.padding ? jr.width + lr.padding : lr.width;
1650
+ lr.width <= jr.width + lr.padding ? lr.diff = (Mr - lr.width) / 2 - lr.padding : lr.diff = -lr.padding;
1651
+ let Nr = lr.height, Pr = lr.x - Mr / 2, Fr = lr.y - Nr / 2;
1652
+ log.trace("Data ", lr, JSON.stringify(lr));
1653
+ let Ir;
1654
+ if (lr.look === "handDrawn") {
1655
+ let St = at.svg(Cr), ur = userNodeOverrides(lr, {
1656
+ roughness: .7,
1657
+ fill: hr,
1658
+ stroke: gr,
1659
+ fillWeight: 4,
1660
+ seed: pr
1661
+ }), dr = St.path(createRoundedRectPathD(Pr, Fr, Mr, Nr, lr.rx), ur);
1662
+ Ir = Cr.insert(() => (log.debug("Rough node insert CXC", dr), dr), ":first-child"), Ir.select("path:nth-child(2)").attr("style", yr.join(";")), Ir.select("path").attr("style", xr.join(";").replace("fill", "stroke"));
1663
+ } else Ir = Cr.insert("rect", ":first-child"), Ir.attr("style", vr).attr("rx", lr.rx).attr("ry", lr.ry).attr("x", Pr).attr("y", Fr).attr("width", Mr).attr("height", Nr);
1664
+ let { subGraphTitleTopMargin: Lr } = getSubGraphTitleMargins(ur);
1665
+ if (Or.attr("transform", `translate(${lr.x - jr.width / 2}, ${lr.y - lr.height / 2 + Lr})`), _r) {
1666
+ let St = Or.select("span");
1667
+ St && St.attr("style", _r);
1668
+ }
1669
+ let Rr = Ir.node().getBBox();
1670
+ return lr.offsetX = 0, lr.width = Rr.width, lr.height = Rr.height, lr.offsetY = jr.height - lr.padding / 2, lr.intersect = function(St) {
1671
+ return intersect_rect_default(lr, St);
1672
+ }, {
1673
+ cluster: Cr,
1674
+ labelBBox: jr
1675
+ };
1676
+ }, "kanbanSection")
1677
+ }, clusterElems = /* @__PURE__ */ new Map(), insertCluster = /* @__PURE__ */ __name(async (St, lr) => {
1678
+ let ur = await shapes[lr.shape || "rect"](St, lr);
1679
+ return clusterElems.set(lr.id, ur), ur;
1680
+ }, "insertCluster"), clear = /* @__PURE__ */ __name(() => {
1681
+ clusterElems = /* @__PURE__ */ new Map();
1682
+ }, "clear");
1683
+ function intersectNode(St, lr) {
1684
+ return St.intersect(lr);
1685
+ }
1686
+ __name(intersectNode, "intersectNode");
1687
+ var intersect_node_default = intersectNode;
1688
+ function intersectEllipse(St, lr, ur, dr) {
1689
+ var fr = St.x, pr = St.y, mr = fr - dr.x, hr = pr - dr.y, gr = Math.sqrt(lr * lr * hr * hr + ur * ur * mr * mr), _r = Math.abs(lr * ur * mr / gr);
1690
+ dr.x < fr && (_r = -_r);
1691
+ var vr = Math.abs(lr * ur * hr / gr);
1692
+ return dr.y < pr && (vr = -vr), {
1693
+ x: fr + _r,
1694
+ y: pr + vr
1695
+ };
1696
+ }
1697
+ __name(intersectEllipse, "intersectEllipse");
1698
+ var intersect_ellipse_default = intersectEllipse;
1699
+ function intersectCircle(St, lr, ur) {
1700
+ return intersect_ellipse_default(St, lr, lr, ur);
1701
+ }
1702
+ __name(intersectCircle, "intersectCircle");
1703
+ var intersect_circle_default = intersectCircle;
1704
+ function intersectLine(St, lr, ur, dr) {
1705
+ {
1706
+ let fr = lr.y - St.y, pr = St.x - lr.x, mr = lr.x * St.y - St.x * lr.y, hr = fr * ur.x + pr * ur.y + mr, gr = fr * dr.x + pr * dr.y + mr, _r = 1e-6;
1707
+ if (hr !== 0 && gr !== 0 && sameSign(hr, gr)) return;
1708
+ let vr = dr.y - ur.y, yr = ur.x - dr.x, br = dr.x * ur.y - ur.x * dr.y, xr = vr * St.x + yr * St.y + br, Sr = vr * lr.x + yr * lr.y + br;
1709
+ if (Math.abs(xr) < _r && Math.abs(Sr) < _r && sameSign(xr, Sr)) return;
1710
+ let Cr = fr * yr - vr * pr;
1711
+ if (Cr === 0) return;
1712
+ let wr = Math.abs(Cr / 2), Tr = pr * br - yr * mr, Er = Tr < 0 ? (Tr - wr) / Cr : (Tr + wr) / Cr;
1713
+ return Tr = vr * mr - fr * br, {
1714
+ x: Er,
1715
+ y: Tr < 0 ? (Tr - wr) / Cr : (Tr + wr) / Cr
1716
+ };
1717
+ }
1718
+ }
1719
+ __name(intersectLine, "intersectLine");
1720
+ function sameSign(St, lr) {
1721
+ return St * lr > 0;
1722
+ }
1723
+ __name(sameSign, "sameSign");
1724
+ var intersect_line_default = intersectLine;
1725
+ function intersectPolygon(St, lr, ur) {
1726
+ let dr = St.x, fr = St.y, pr = [], mr = Infinity, hr = Infinity;
1727
+ typeof lr.forEach == "function" ? lr.forEach(function(St) {
1728
+ mr = Math.min(mr, St.x), hr = Math.min(hr, St.y);
1729
+ }) : (mr = Math.min(mr, lr.x), hr = Math.min(hr, lr.y));
1730
+ let gr = dr - St.width / 2 - mr, _r = fr - St.height / 2 - hr;
1731
+ for (let dr = 0; dr < lr.length; dr++) {
1732
+ let fr = lr[dr], mr = lr[dr < lr.length - 1 ? dr + 1 : 0], hr = intersect_line_default(St, ur, {
1733
+ x: gr + fr.x,
1734
+ y: _r + fr.y
1735
+ }, {
1736
+ x: gr + mr.x,
1737
+ y: _r + mr.y
1738
+ });
1739
+ hr && pr.push(hr);
1740
+ }
1741
+ return pr.length ? (pr.length > 1 && pr.sort(function(St, lr) {
1742
+ let dr = St.x - ur.x, fr = St.y - ur.y, pr = Math.sqrt(dr * dr + fr * fr), mr = lr.x - ur.x, hr = lr.y - ur.y, gr = Math.sqrt(mr * mr + hr * hr);
1743
+ return pr < gr ? -1 : pr === gr ? 0 : 1;
1744
+ }), pr[0]) : St;
1745
+ }
1746
+ __name(intersectPolygon, "intersectPolygon");
1747
+ var intersect_default = {
1748
+ node: intersect_node_default,
1749
+ circle: intersect_circle_default,
1750
+ ellipse: intersect_ellipse_default,
1751
+ polygon: intersectPolygon,
1752
+ rect: intersect_rect_default
1753
+ };
1754
+ function anchor(St, lr) {
1755
+ let { labelStyles: ur } = styles2String(lr);
1756
+ lr.labelStyle = ur;
1757
+ let pr = getNodeClasses(lr), mr = pr;
1758
+ pr || (mr = "anchor");
1759
+ let hr = St.insert("g").attr("class", mr).attr("id", lr.domId || lr.id), { cssStyles: gr } = lr, _r = at.svg(hr), vr = userNodeOverrides(lr, {
1760
+ fill: "black",
1761
+ stroke: "none",
1762
+ fillStyle: "solid"
1763
+ });
1764
+ lr.look !== "handDrawn" && (vr.roughness = 0);
1765
+ let yr = _r.circle(0, 0, 2, vr), br = hr.insert(() => yr, ":first-child");
1766
+ return br.attr("class", "anchor").attr("style", handleUndefinedAttr(gr)), updateNodeBounds(lr, br), lr.intersect = function(St) {
1767
+ return log.info("Circle intersect", lr, 1, St), intersect_default.circle(lr, 1, St);
1768
+ }, hr;
1769
+ }
1770
+ __name(anchor, "anchor");
1771
+ function generateArcPoints(St, lr, ur, dr, fr, pr, mr) {
1772
+ let hr = (St + ur) / 2, gr = (lr + dr) / 2, _r = Math.atan2(dr - lr, ur - St), vr = (ur - St) / 2, yr = (dr - lr) / 2, br = vr / fr, xr = yr / pr, Sr = Math.sqrt(br ** 2 + xr ** 2);
1773
+ if (Sr > 1) throw Error("The given radii are too small to create an arc between the points.");
1774
+ let Cr = Math.sqrt(1 - Sr ** 2), wr = hr + Cr * pr * Math.sin(_r) * (mr ? -1 : 1), Tr = gr - Cr * fr * Math.cos(_r) * (mr ? -1 : 1), Er = Math.atan2((lr - Tr) / pr, (St - wr) / fr), Dr = Math.atan2((dr - Tr) / pr, (ur - wr) / fr) - Er;
1775
+ mr && Dr < 0 && (Dr += 2 * Math.PI), !mr && Dr > 0 && (Dr -= 2 * Math.PI);
1776
+ let Or = [];
1777
+ for (let St = 0; St < 20; St++) {
1778
+ let lr = Er + St / 19 * Dr, ur = wr + fr * Math.cos(lr), dr = Tr + pr * Math.sin(lr);
1779
+ Or.push({
1780
+ x: ur,
1781
+ y: dr
1782
+ });
1783
+ }
1784
+ return Or;
1785
+ }
1786
+ __name(generateArcPoints, "generateArcPoints");
1787
+ async function bowTieRect(St, lr) {
1788
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
1789
+ lr.labelStyle = ur;
1790
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = pr.width + lr.padding + 20, hr = pr.height + lr.padding, gr = hr / 2, _r = gr / (2.5 + hr / 50), { cssStyles: vr } = lr, yr = [
1791
+ {
1792
+ x: mr / 2,
1793
+ y: -hr / 2
1794
+ },
1795
+ {
1796
+ x: -mr / 2,
1797
+ y: -hr / 2
1798
+ },
1799
+ ...generateArcPoints(-mr / 2, -hr / 2, -mr / 2, hr / 2, _r, gr, !1),
1800
+ {
1801
+ x: mr / 2,
1802
+ y: hr / 2
1803
+ },
1804
+ ...generateArcPoints(mr / 2, hr / 2, mr / 2, -hr / 2, _r, gr, !0)
1805
+ ], br = at.svg(fr), xr = userNodeOverrides(lr, {});
1806
+ lr.look !== "handDrawn" && (xr.roughness = 0, xr.fillStyle = "solid");
1807
+ let Sr = createPathFromPoints(yr), Cr = br.path(Sr, xr), wr = fr.insert(() => Cr, ":first-child");
1808
+ return wr.attr("class", "basic label-container"), vr && lr.look !== "handDrawn" && wr.selectAll("path").attr("style", vr), dr && lr.look !== "handDrawn" && wr.selectAll("path").attr("style", dr), wr.attr("transform", `translate(${_r / 2}, 0)`), updateNodeBounds(lr, wr), lr.intersect = function(St) {
1809
+ return intersect_default.polygon(lr, yr, St);
1810
+ }, fr;
1811
+ }
1812
+ __name(bowTieRect, "bowTieRect");
1813
+ function insertPolygonShape(St, lr, ur, dr) {
1814
+ return St.insert("polygon", ":first-child").attr("points", dr.map(function(St) {
1815
+ return St.x + "," + St.y;
1816
+ }).join(" ")).attr("class", "label-container").attr("transform", "translate(" + -lr / 2 + "," + ur / 2 + ")");
1817
+ }
1818
+ __name(insertPolygonShape, "insertPolygonShape");
1819
+ async function card(St, lr) {
1820
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
1821
+ lr.labelStyle = ur;
1822
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = pr.height + lr.padding, hr = pr.width + lr.padding + 12, gr = hr, _r = -mr, vr = [
1823
+ {
1824
+ x: 12,
1825
+ y: _r
1826
+ },
1827
+ {
1828
+ x: gr,
1829
+ y: _r
1830
+ },
1831
+ {
1832
+ x: gr,
1833
+ y: 0
1834
+ },
1835
+ {
1836
+ x: 0,
1837
+ y: 0
1838
+ },
1839
+ {
1840
+ x: 0,
1841
+ y: _r + 12
1842
+ },
1843
+ {
1844
+ x: 12,
1845
+ y: _r
1846
+ }
1847
+ ], yr, { cssStyles: br } = lr;
1848
+ if (lr.look === "handDrawn") {
1849
+ let St = at.svg(fr), ur = userNodeOverrides(lr, {}), dr = createPathFromPoints(vr), pr = St.path(dr, ur);
1850
+ yr = fr.insert(() => pr, ":first-child").attr("transform", `translate(${-hr / 2}, ${mr / 2})`), br && yr.attr("style", br);
1851
+ } else yr = insertPolygonShape(fr, hr, mr, vr);
1852
+ return dr && yr.attr("style", dr), updateNodeBounds(lr, yr), lr.intersect = function(St) {
1853
+ return intersect_default.polygon(lr, vr, St);
1854
+ }, fr;
1855
+ }
1856
+ __name(card, "card");
1857
+ function choice(St, lr) {
1858
+ let { nodeStyles: ur } = styles2String(lr);
1859
+ lr.label = "";
1860
+ let dr = St.insert("g").attr("class", getNodeClasses(lr)).attr("id", lr.domId ?? lr.id), { cssStyles: fr } = lr, pr = Math.max(28, lr.width ?? 0), mr = [
1861
+ {
1862
+ x: 0,
1863
+ y: pr / 2
1864
+ },
1865
+ {
1866
+ x: pr / 2,
1867
+ y: 0
1868
+ },
1869
+ {
1870
+ x: 0,
1871
+ y: -pr / 2
1872
+ },
1873
+ {
1874
+ x: -pr / 2,
1875
+ y: 0
1876
+ }
1877
+ ], hr = at.svg(dr), gr = userNodeOverrides(lr, {});
1878
+ lr.look !== "handDrawn" && (gr.roughness = 0, gr.fillStyle = "solid");
1879
+ let _r = createPathFromPoints(mr), vr = hr.path(_r, gr), yr = dr.insert(() => vr, ":first-child");
1880
+ return fr && lr.look !== "handDrawn" && yr.selectAll("path").attr("style", fr), ur && lr.look !== "handDrawn" && yr.selectAll("path").attr("style", ur), lr.width = 28, lr.height = 28, lr.intersect = function(St) {
1881
+ return intersect_default.polygon(lr, mr, St);
1882
+ }, dr;
1883
+ }
1884
+ __name(choice, "choice");
1885
+ async function circle(St, lr, ur) {
1886
+ let { labelStyles: pr, nodeStyles: mr } = styles2String(lr);
1887
+ lr.labelStyle = pr;
1888
+ let { shapeSvg: hr, bbox: gr, halfPadding: _r } = await labelHelper(St, lr, getNodeClasses(lr)), vr = ur?.padding ?? _r, yr = gr.width / 2 + vr, br, { cssStyles: xr } = lr;
1889
+ if (lr.look === "handDrawn") {
1890
+ let St = at.svg(hr), ur = userNodeOverrides(lr, {}), fr = St.circle(0, 0, yr * 2, ur);
1891
+ br = hr.insert(() => fr, ":first-child"), br.attr("class", "basic label-container").attr("style", handleUndefinedAttr(xr));
1892
+ } else br = hr.insert("circle", ":first-child").attr("class", "basic label-container").attr("style", mr).attr("r", yr).attr("cx", 0).attr("cy", 0);
1893
+ return updateNodeBounds(lr, br), lr.calcIntersect = function(St, lr) {
1894
+ let ur = St.width / 2;
1895
+ return intersect_default.circle(St, ur, lr);
1896
+ }, lr.intersect = function(St) {
1897
+ return log.info("Circle intersect", lr, yr, St), intersect_default.circle(lr, yr, St);
1898
+ }, hr;
1899
+ }
1900
+ __name(circle, "circle");
1901
+ function createLine(St) {
1902
+ let lr = Math.cos(Math.PI / 4), ur = Math.sin(Math.PI / 4), dr = St * 2, fr = {
1903
+ x: dr / 2 * lr,
1904
+ y: dr / 2 * ur
1905
+ }, pr = {
1906
+ x: -(dr / 2) * lr,
1907
+ y: dr / 2 * ur
1908
+ }, mr = {
1909
+ x: -(dr / 2) * lr,
1910
+ y: -(dr / 2) * ur
1911
+ }, hr = {
1912
+ x: dr / 2 * lr,
1913
+ y: -(dr / 2) * ur
1914
+ };
1915
+ return `M ${pr.x},${pr.y} L ${hr.x},${hr.y}
1916
+ M ${fr.x},${fr.y} L ${mr.x},${mr.y}`;
1917
+ }
1918
+ __name(createLine, "createLine");
1919
+ function crossedCircle(St, lr) {
1920
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
1921
+ lr.labelStyle = ur, lr.label = "";
1922
+ let pr = St.insert("g").attr("class", getNodeClasses(lr)).attr("id", lr.domId ?? lr.id), mr = Math.max(30, lr?.width ?? 0), { cssStyles: hr } = lr, gr = at.svg(pr), _r = userNodeOverrides(lr, {});
1923
+ lr.look !== "handDrawn" && (_r.roughness = 0, _r.fillStyle = "solid");
1924
+ let vr = gr.circle(0, 0, mr * 2, _r), yr = createLine(mr), br = gr.path(yr, _r), xr = pr.insert(() => vr, ":first-child");
1925
+ return xr.insert(() => br), hr && lr.look !== "handDrawn" && xr.selectAll("path").attr("style", hr), dr && lr.look !== "handDrawn" && xr.selectAll("path").attr("style", dr), updateNodeBounds(lr, xr), lr.intersect = function(St) {
1926
+ return log.info("crossedCircle intersect", lr, {
1927
+ radius: mr,
1928
+ point: St
1929
+ }), intersect_default.circle(lr, mr, St);
1930
+ }, pr;
1931
+ }
1932
+ __name(crossedCircle, "crossedCircle");
1933
+ function generateCirclePoints2(St, lr, ur, dr = 100, fr = 0, pr = 180) {
1934
+ let mr = [], hr = fr * Math.PI / 180, gr = (pr * Math.PI / 180 - hr) / (dr - 1);
1935
+ for (let fr = 0; fr < dr; fr++) {
1936
+ let dr = hr + fr * gr, pr = St + ur * Math.cos(dr), _r = lr + ur * Math.sin(dr);
1937
+ mr.push({
1938
+ x: -pr,
1939
+ y: -_r
1940
+ });
1941
+ }
1942
+ return mr;
1943
+ }
1944
+ __name(generateCirclePoints2, "generateCirclePoints");
1945
+ async function curlyBraceLeft(St, lr) {
1946
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
1947
+ lr.labelStyle = ur;
1948
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = pr.width + (lr.padding ?? 0), gr = pr.height + (lr.padding ?? 0), _r = Math.max(5, gr * .1), { cssStyles: vr } = lr, yr = [
1949
+ ...generateCirclePoints2(hr / 2, -gr / 2, _r, 30, -90, 0),
1950
+ {
1951
+ x: -hr / 2 - _r,
1952
+ y: _r
1953
+ },
1954
+ ...generateCirclePoints2(hr / 2 + _r * 2, -_r, _r, 20, -180, -270),
1955
+ ...generateCirclePoints2(hr / 2 + _r * 2, _r, _r, 20, -90, -180),
1956
+ {
1957
+ x: -hr / 2 - _r,
1958
+ y: -gr / 2
1959
+ },
1960
+ ...generateCirclePoints2(hr / 2, gr / 2, _r, 20, 0, 90)
1961
+ ], br = [
1962
+ {
1963
+ x: hr / 2,
1964
+ y: -gr / 2 - _r
1965
+ },
1966
+ {
1967
+ x: -hr / 2,
1968
+ y: -gr / 2 - _r
1969
+ },
1970
+ ...generateCirclePoints2(hr / 2, -gr / 2, _r, 20, -90, 0),
1971
+ {
1972
+ x: -hr / 2 - _r,
1973
+ y: -_r
1974
+ },
1975
+ ...generateCirclePoints2(hr / 2 + hr * .1, -_r, _r, 20, -180, -270),
1976
+ ...generateCirclePoints2(hr / 2 + hr * .1, _r, _r, 20, -90, -180),
1977
+ {
1978
+ x: -hr / 2 - _r,
1979
+ y: gr / 2
1980
+ },
1981
+ ...generateCirclePoints2(hr / 2, gr / 2, _r, 20, 0, 90),
1982
+ {
1983
+ x: -hr / 2,
1984
+ y: gr / 2 + _r
1985
+ },
1986
+ {
1987
+ x: hr / 2,
1988
+ y: gr / 2 + _r
1989
+ }
1990
+ ], xr = at.svg(fr), Sr = userNodeOverrides(lr, { fill: "none" });
1991
+ lr.look !== "handDrawn" && (Sr.roughness = 0, Sr.fillStyle = "solid");
1992
+ let Cr = createPathFromPoints(yr).replace("Z", ""), wr = xr.path(Cr, Sr), Tr = createPathFromPoints(br), Or = xr.path(Tr, { ...Sr }), kr = fr.insert("g", ":first-child");
1993
+ return kr.insert(() => Or, ":first-child").attr("stroke-opacity", 0), kr.insert(() => wr, ":first-child"), kr.attr("class", "text"), vr && lr.look !== "handDrawn" && kr.selectAll("path").attr("style", vr), dr && lr.look !== "handDrawn" && kr.selectAll("path").attr("style", dr), kr.attr("transform", `translate(${_r}, 0)`), mr.attr("transform", `translate(${-hr / 2 + _r - (pr.x - (pr.left ?? 0))},${-gr / 2 + (lr.padding ?? 0) / 2 - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, kr), lr.intersect = function(St) {
1994
+ return intersect_default.polygon(lr, br, St);
1995
+ }, fr;
1996
+ }
1997
+ __name(curlyBraceLeft, "curlyBraceLeft");
1998
+ function generateCirclePoints3(St, lr, ur, dr = 100, fr = 0, pr = 180) {
1999
+ let mr = [], hr = fr * Math.PI / 180, gr = (pr * Math.PI / 180 - hr) / (dr - 1);
2000
+ for (let fr = 0; fr < dr; fr++) {
2001
+ let dr = hr + fr * gr, pr = St + ur * Math.cos(dr), _r = lr + ur * Math.sin(dr);
2002
+ mr.push({
2003
+ x: pr,
2004
+ y: _r
2005
+ });
2006
+ }
2007
+ return mr;
2008
+ }
2009
+ __name(generateCirclePoints3, "generateCirclePoints");
2010
+ async function curlyBraceRight(St, lr) {
2011
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2012
+ lr.labelStyle = ur;
2013
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = pr.width + (lr.padding ?? 0), gr = pr.height + (lr.padding ?? 0), _r = Math.max(5, gr * .1), { cssStyles: vr } = lr, yr = [
2014
+ ...generateCirclePoints3(hr / 2, -gr / 2, _r, 20, -90, 0),
2015
+ {
2016
+ x: hr / 2 + _r,
2017
+ y: -_r
2018
+ },
2019
+ ...generateCirclePoints3(hr / 2 + _r * 2, -_r, _r, 20, -180, -270),
2020
+ ...generateCirclePoints3(hr / 2 + _r * 2, _r, _r, 20, -90, -180),
2021
+ {
2022
+ x: hr / 2 + _r,
2023
+ y: gr / 2
2024
+ },
2025
+ ...generateCirclePoints3(hr / 2, gr / 2, _r, 20, 0, 90)
2026
+ ], br = [
2027
+ {
2028
+ x: -hr / 2,
2029
+ y: -gr / 2 - _r
2030
+ },
2031
+ {
2032
+ x: hr / 2,
2033
+ y: -gr / 2 - _r
2034
+ },
2035
+ ...generateCirclePoints3(hr / 2, -gr / 2, _r, 20, -90, 0),
2036
+ {
2037
+ x: hr / 2 + _r,
2038
+ y: -_r
2039
+ },
2040
+ ...generateCirclePoints3(hr / 2 + _r * 2, -_r, _r, 20, -180, -270),
2041
+ ...generateCirclePoints3(hr / 2 + _r * 2, _r, _r, 20, -90, -180),
2042
+ {
2043
+ x: hr / 2 + _r,
2044
+ y: gr / 2
2045
+ },
2046
+ ...generateCirclePoints3(hr / 2, gr / 2, _r, 20, 0, 90),
2047
+ {
2048
+ x: hr / 2,
2049
+ y: gr / 2 + _r
2050
+ },
2051
+ {
2052
+ x: -hr / 2,
2053
+ y: gr / 2 + _r
2054
+ }
2055
+ ], xr = at.svg(fr), Sr = userNodeOverrides(lr, { fill: "none" });
2056
+ lr.look !== "handDrawn" && (Sr.roughness = 0, Sr.fillStyle = "solid");
2057
+ let Cr = createPathFromPoints(yr).replace("Z", ""), wr = xr.path(Cr, Sr), Tr = createPathFromPoints(br), Or = xr.path(Tr, { ...Sr }), kr = fr.insert("g", ":first-child");
2058
+ return kr.insert(() => Or, ":first-child").attr("stroke-opacity", 0), kr.insert(() => wr, ":first-child"), kr.attr("class", "text"), vr && lr.look !== "handDrawn" && kr.selectAll("path").attr("style", vr), dr && lr.look !== "handDrawn" && kr.selectAll("path").attr("style", dr), kr.attr("transform", `translate(${-_r}, 0)`), mr.attr("transform", `translate(${-hr / 2 + (lr.padding ?? 0) / 2 - (pr.x - (pr.left ?? 0))},${-gr / 2 + (lr.padding ?? 0) / 2 - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, kr), lr.intersect = function(St) {
2059
+ return intersect_default.polygon(lr, br, St);
2060
+ }, fr;
2061
+ }
2062
+ __name(curlyBraceRight, "curlyBraceRight");
2063
+ function generateCirclePoints4(St, lr, ur, dr = 100, fr = 0, pr = 180) {
2064
+ let mr = [], hr = fr * Math.PI / 180, gr = (pr * Math.PI / 180 - hr) / (dr - 1);
2065
+ for (let fr = 0; fr < dr; fr++) {
2066
+ let dr = hr + fr * gr, pr = St + ur * Math.cos(dr), _r = lr + ur * Math.sin(dr);
2067
+ mr.push({
2068
+ x: -pr,
2069
+ y: -_r
2070
+ });
2071
+ }
2072
+ return mr;
2073
+ }
2074
+ __name(generateCirclePoints4, "generateCirclePoints");
2075
+ async function curlyBraces(St, lr) {
2076
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2077
+ lr.labelStyle = ur;
2078
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = pr.width + (lr.padding ?? 0), gr = pr.height + (lr.padding ?? 0), _r = Math.max(5, gr * .1), { cssStyles: vr } = lr, yr = [
2079
+ ...generateCirclePoints4(hr / 2, -gr / 2, _r, 30, -90, 0),
2080
+ {
2081
+ x: -hr / 2 - _r,
2082
+ y: _r
2083
+ },
2084
+ ...generateCirclePoints4(hr / 2 + _r * 2, -_r, _r, 20, -180, -270),
2085
+ ...generateCirclePoints4(hr / 2 + _r * 2, _r, _r, 20, -90, -180),
2086
+ {
2087
+ x: -hr / 2 - _r,
2088
+ y: -gr / 2
2089
+ },
2090
+ ...generateCirclePoints4(hr / 2, gr / 2, _r, 20, 0, 90)
2091
+ ], br = [
2092
+ ...generateCirclePoints4(-hr / 2 + _r + _r / 2, -gr / 2, _r, 20, -90, -180),
2093
+ {
2094
+ x: hr / 2 - _r / 2,
2095
+ y: _r
2096
+ },
2097
+ ...generateCirclePoints4(-hr / 2 - _r / 2, -_r, _r, 20, 0, 90),
2098
+ ...generateCirclePoints4(-hr / 2 - _r / 2, _r, _r, 20, -90, 0),
2099
+ {
2100
+ x: hr / 2 - _r / 2,
2101
+ y: -_r
2102
+ },
2103
+ ...generateCirclePoints4(-hr / 2 + _r + _r / 2, gr / 2, _r, 30, -180, -270)
2104
+ ], xr = [
2105
+ {
2106
+ x: hr / 2,
2107
+ y: -gr / 2 - _r
2108
+ },
2109
+ {
2110
+ x: -hr / 2,
2111
+ y: -gr / 2 - _r
2112
+ },
2113
+ ...generateCirclePoints4(hr / 2, -gr / 2, _r, 20, -90, 0),
2114
+ {
2115
+ x: -hr / 2 - _r,
2116
+ y: -_r
2117
+ },
2118
+ ...generateCirclePoints4(hr / 2 + _r * 2, -_r, _r, 20, -180, -270),
2119
+ ...generateCirclePoints4(hr / 2 + _r * 2, _r, _r, 20, -90, -180),
2120
+ {
2121
+ x: -hr / 2 - _r,
2122
+ y: gr / 2
2123
+ },
2124
+ ...generateCirclePoints4(hr / 2, gr / 2, _r, 20, 0, 90),
2125
+ {
2126
+ x: -hr / 2,
2127
+ y: gr / 2 + _r
2128
+ },
2129
+ {
2130
+ x: hr / 2 - _r - _r / 2,
2131
+ y: gr / 2 + _r
2132
+ },
2133
+ ...generateCirclePoints4(-hr / 2 + _r + _r / 2, -gr / 2, _r, 20, -90, -180),
2134
+ {
2135
+ x: hr / 2 - _r / 2,
2136
+ y: _r
2137
+ },
2138
+ ...generateCirclePoints4(-hr / 2 - _r / 2, -_r, _r, 20, 0, 90),
2139
+ ...generateCirclePoints4(-hr / 2 - _r / 2, _r, _r, 20, -90, 0),
2140
+ {
2141
+ x: hr / 2 - _r / 2,
2142
+ y: -_r
2143
+ },
2144
+ ...generateCirclePoints4(-hr / 2 + _r + _r / 2, gr / 2, _r, 30, -180, -270)
2145
+ ], Sr = at.svg(fr), Cr = userNodeOverrides(lr, { fill: "none" });
2146
+ lr.look !== "handDrawn" && (Cr.roughness = 0, Cr.fillStyle = "solid");
2147
+ let wr = createPathFromPoints(yr).replace("Z", ""), Tr = Sr.path(wr, Cr), Or = createPathFromPoints(br).replace("Z", ""), kr = Sr.path(Or, Cr), Ar = createPathFromPoints(xr), jr = Sr.path(Ar, { ...Cr }), Mr = fr.insert("g", ":first-child");
2148
+ return Mr.insert(() => jr, ":first-child").attr("stroke-opacity", 0), Mr.insert(() => Tr, ":first-child"), Mr.insert(() => kr, ":first-child"), Mr.attr("class", "text"), vr && lr.look !== "handDrawn" && Mr.selectAll("path").attr("style", vr), dr && lr.look !== "handDrawn" && Mr.selectAll("path").attr("style", dr), Mr.attr("transform", `translate(${_r - _r / 4}, 0)`), mr.attr("transform", `translate(${-hr / 2 + (lr.padding ?? 0) / 2 - (pr.x - (pr.left ?? 0))},${-gr / 2 + (lr.padding ?? 0) / 2 - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, Mr), lr.intersect = function(St) {
2149
+ return intersect_default.polygon(lr, xr, St);
2150
+ }, fr;
2151
+ }
2152
+ __name(curlyBraces, "curlyBraces");
2153
+ async function curvedTrapezoid(St, lr) {
2154
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2155
+ lr.labelStyle = ur;
2156
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = Math.max(80, (pr.width + (lr.padding ?? 0) * 2) * 1.25, lr?.width ?? 0), hr = Math.max(20, pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), gr = hr / 2, { cssStyles: _r } = lr, vr = at.svg(fr), yr = userNodeOverrides(lr, {});
2157
+ lr.look !== "handDrawn" && (yr.roughness = 0, yr.fillStyle = "solid");
2158
+ let br = mr, xr = hr, Sr = br - gr, Cr = xr / 4, wr = [
2159
+ {
2160
+ x: Sr,
2161
+ y: 0
2162
+ },
2163
+ {
2164
+ x: Cr,
2165
+ y: 0
2166
+ },
2167
+ {
2168
+ x: 0,
2169
+ y: xr / 2
2170
+ },
2171
+ {
2172
+ x: Cr,
2173
+ y: xr
2174
+ },
2175
+ {
2176
+ x: Sr,
2177
+ y: xr
2178
+ },
2179
+ ...generateCirclePoints(-Sr, -xr / 2, gr, 50, 270, 90)
2180
+ ], Tr = createPathFromPoints(wr), Or = vr.path(Tr, yr), kr = fr.insert(() => Or, ":first-child");
2181
+ return kr.attr("class", "basic label-container"), _r && lr.look !== "handDrawn" && kr.selectChildren("path").attr("style", _r), dr && lr.look !== "handDrawn" && kr.selectChildren("path").attr("style", dr), kr.attr("transform", `translate(${-mr / 2}, ${-hr / 2})`), updateNodeBounds(lr, kr), lr.intersect = function(St) {
2182
+ return intersect_default.polygon(lr, wr, St);
2183
+ }, fr;
2184
+ }
2185
+ __name(curvedTrapezoid, "curvedTrapezoid");
2186
+ var createCylinderPathD = /* @__PURE__ */ __name((St, lr, ur, dr, fr, pr) => [
2187
+ `M${St},${lr + pr}`,
2188
+ `a${fr},${pr} 0,0,0 ${ur},0`,
2189
+ `a${fr},${pr} 0,0,0 ${-ur},0`,
2190
+ `l0,${dr}`,
2191
+ `a${fr},${pr} 0,0,0 ${ur},0`,
2192
+ `l0,${-dr}`
2193
+ ].join(" "), "createCylinderPathD"), createOuterCylinderPathD = /* @__PURE__ */ __name((St, lr, ur, dr, fr, pr) => [
2194
+ `M${St},${lr + pr}`,
2195
+ `M${St + ur},${lr + pr}`,
2196
+ `a${fr},${pr} 0,0,0 ${-ur},0`,
2197
+ `l0,${dr}`,
2198
+ `a${fr},${pr} 0,0,0 ${ur},0`,
2199
+ `l0,${-dr}`
2200
+ ].join(" "), "createOuterCylinderPathD"), createInnerCylinderPathD = /* @__PURE__ */ __name((St, lr, ur, dr, fr, pr) => [`M${St - ur / 2},${-dr / 2}`, `a${fr},${pr} 0,0,0 ${ur},0`].join(" "), "createInnerCylinderPathD");
2201
+ async function cylinder(St, lr) {
2202
+ let { labelStyles: ur, nodeStyles: fr } = styles2String(lr);
2203
+ lr.labelStyle = ur;
2204
+ let { shapeSvg: pr, bbox: mr, label: hr } = await labelHelper(St, lr, getNodeClasses(lr)), gr = Math.max(mr.width + lr.padding, lr.width ?? 0), _r = gr / 2, vr = _r / (2.5 + gr / 50), yr = Math.max(mr.height + vr + lr.padding, lr.height ?? 0), br, { cssStyles: xr } = lr;
2205
+ if (lr.look === "handDrawn") {
2206
+ let St = at.svg(pr), ur = createOuterCylinderPathD(0, 0, gr, yr, _r, vr), dr = createInnerCylinderPathD(0, vr, gr, yr, _r, vr), fr = St.path(ur, userNodeOverrides(lr, {})), mr = St.path(dr, userNodeOverrides(lr, { fill: "none" }));
2207
+ br = pr.insert(() => mr, ":first-child"), br = pr.insert(() => fr, ":first-child"), br.attr("class", "basic label-container"), xr && br.attr("style", xr);
2208
+ } else {
2209
+ let St = createCylinderPathD(0, 0, gr, yr, _r, vr);
2210
+ br = pr.insert("path", ":first-child").attr("d", St).attr("class", "basic label-container").attr("style", handleUndefinedAttr(xr)).attr("style", fr);
2211
+ }
2212
+ return br.attr("label-offset-y", vr), br.attr("transform", `translate(${-gr / 2}, ${-(yr / 2 + vr)})`), updateNodeBounds(lr, br), hr.attr("transform", `translate(${-(mr.width / 2) - (mr.x - (mr.left ?? 0))}, ${-(mr.height / 2) + (lr.padding ?? 0) / 1.5 - (mr.y - (mr.top ?? 0))})`), lr.intersect = function(St) {
2213
+ let ur = intersect_default.rect(lr, St), dr = ur.x - (lr.x ?? 0);
2214
+ if (_r != 0 && (Math.abs(dr) < (lr.width ?? 0) / 2 || Math.abs(dr) == (lr.width ?? 0) / 2 && Math.abs(ur.y - (lr.y ?? 0)) > (lr.height ?? 0) / 2 - vr)) {
2215
+ let fr = vr * vr * (1 - dr * dr / (_r * _r));
2216
+ fr > 0 && (fr = Math.sqrt(fr)), fr = vr - fr, St.y - (lr.y ?? 0) > 0 && (fr = -fr), ur.y += fr;
2217
+ }
2218
+ return ur;
2219
+ }, pr;
2220
+ }
2221
+ __name(cylinder, "cylinder");
2222
+ async function dividedRectangle(St, lr) {
2223
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2224
+ lr.labelStyle = ur;
2225
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = pr.width + lr.padding, gr = pr.height + lr.padding, _r = gr * .2, vr = -hr / 2, yr = -gr / 2 - _r / 2, { cssStyles: br } = lr, xr = at.svg(fr), Sr = userNodeOverrides(lr, {});
2226
+ lr.look !== "handDrawn" && (Sr.roughness = 0, Sr.fillStyle = "solid");
2227
+ let Cr = [
2228
+ {
2229
+ x: vr,
2230
+ y: yr + _r
2231
+ },
2232
+ {
2233
+ x: -vr,
2234
+ y: yr + _r
2235
+ },
2236
+ {
2237
+ x: -vr,
2238
+ y: -yr
2239
+ },
2240
+ {
2241
+ x: vr,
2242
+ y: -yr
2243
+ },
2244
+ {
2245
+ x: vr,
2246
+ y: yr
2247
+ },
2248
+ {
2249
+ x: -vr,
2250
+ y: yr
2251
+ },
2252
+ {
2253
+ x: -vr,
2254
+ y: yr + _r
2255
+ }
2256
+ ], wr = xr.polygon(Cr.map((St) => [St.x, St.y]), Sr), Tr = fr.insert(() => wr, ":first-child");
2257
+ return Tr.attr("class", "basic label-container"), br && lr.look !== "handDrawn" && Tr.selectAll("path").attr("style", br), dr && lr.look !== "handDrawn" && Tr.selectAll("path").attr("style", dr), mr.attr("transform", `translate(${vr + (lr.padding ?? 0) / 2 - (pr.x - (pr.left ?? 0))}, ${yr + _r + (lr.padding ?? 0) / 2 - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, Tr), lr.intersect = function(St) {
2258
+ return intersect_default.rect(lr, St);
2259
+ }, fr;
2260
+ }
2261
+ __name(dividedRectangle, "dividedRectangle");
2262
+ async function doublecircle(St, lr) {
2263
+ let { labelStyles: ur, nodeStyles: pr } = styles2String(lr);
2264
+ lr.labelStyle = ur;
2265
+ let { shapeSvg: mr, bbox: hr, halfPadding: gr } = await labelHelper(St, lr, getNodeClasses(lr)), _r = hr.width / 2 + gr + 5, vr = hr.width / 2 + gr, yr, { cssStyles: br } = lr;
2266
+ if (lr.look === "handDrawn") {
2267
+ let St = at.svg(mr), ur = userNodeOverrides(lr, {
2268
+ roughness: .2,
2269
+ strokeWidth: 2.5
2270
+ }), fr = userNodeOverrides(lr, {
2271
+ roughness: .2,
2272
+ strokeWidth: 1.5
2273
+ }), pr = St.circle(0, 0, _r * 2, ur), hr = St.circle(0, 0, vr * 2, fr);
2274
+ yr = mr.insert("g", ":first-child"), yr.attr("class", handleUndefinedAttr(lr.cssClasses)).attr("style", handleUndefinedAttr(br)), yr.node()?.appendChild(pr), yr.node()?.appendChild(hr);
2275
+ } else {
2276
+ yr = mr.insert("g", ":first-child");
2277
+ let St = yr.insert("circle", ":first-child"), lr = yr.insert("circle");
2278
+ yr.attr("class", "basic label-container").attr("style", pr), St.attr("class", "outer-circle").attr("style", pr).attr("r", _r).attr("cx", 0).attr("cy", 0), lr.attr("class", "inner-circle").attr("style", pr).attr("r", vr).attr("cx", 0).attr("cy", 0);
2279
+ }
2280
+ return updateNodeBounds(lr, yr), lr.intersect = function(St) {
2281
+ return log.info("DoubleCircle intersect", lr, _r, St), intersect_default.circle(lr, _r, St);
2282
+ }, mr;
2283
+ }
2284
+ __name(doublecircle, "doublecircle");
2285
+ function filledCircle(St, lr, { config: { themeVariables: ur } }) {
2286
+ let { labelStyles: dr, nodeStyles: pr } = styles2String(lr);
2287
+ lr.label = "", lr.labelStyle = dr;
2288
+ let mr = St.insert("g").attr("class", getNodeClasses(lr)).attr("id", lr.domId ?? lr.id), { cssStyles: hr } = lr, gr = at.svg(mr), { nodeBorder: _r } = ur, vr = userNodeOverrides(lr, { fillStyle: "solid" });
2289
+ lr.look !== "handDrawn" && (vr.roughness = 0);
2290
+ let yr = gr.circle(0, 0, 14, vr), br = mr.insert(() => yr, ":first-child");
2291
+ return br.selectAll("path").attr("style", `fill: ${_r} !important;`), hr && hr.length > 0 && lr.look !== "handDrawn" && br.selectAll("path").attr("style", hr), pr && lr.look !== "handDrawn" && br.selectAll("path").attr("style", pr), updateNodeBounds(lr, br), lr.intersect = function(St) {
2292
+ return log.info("filledCircle intersect", lr, {
2293
+ radius: 7,
2294
+ point: St
2295
+ }), intersect_default.circle(lr, 7, St);
2296
+ }, mr;
2297
+ }
2298
+ __name(filledCircle, "filledCircle");
2299
+ async function flippedTriangle(St, lr) {
2300
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2301
+ lr.labelStyle = ur;
2302
+ let { shapeSvg: pr, bbox: mr, label: hr } = await labelHelper(St, lr, getNodeClasses(lr)), gr = mr.width + (lr.padding ?? 0), _r = gr + mr.height, vr = gr + mr.height, yr = [
2303
+ {
2304
+ x: 0,
2305
+ y: -_r
2306
+ },
2307
+ {
2308
+ x: vr,
2309
+ y: -_r
2310
+ },
2311
+ {
2312
+ x: vr / 2,
2313
+ y: 0
2314
+ }
2315
+ ], { cssStyles: br } = lr, xr = at.svg(pr), Sr = userNodeOverrides(lr, {});
2316
+ lr.look !== "handDrawn" && (Sr.roughness = 0, Sr.fillStyle = "solid");
2317
+ let Cr = createPathFromPoints(yr), wr = xr.path(Cr, Sr), Tr = pr.insert(() => wr, ":first-child").attr("transform", `translate(${-_r / 2}, ${_r / 2})`);
2318
+ return br && lr.look !== "handDrawn" && Tr.selectChildren("path").attr("style", br), dr && lr.look !== "handDrawn" && Tr.selectChildren("path").attr("style", dr), lr.width = gr, lr.height = _r, updateNodeBounds(lr, Tr), hr.attr("transform", `translate(${-mr.width / 2 - (mr.x - (mr.left ?? 0))}, ${-_r / 2 + (lr.padding ?? 0) / 2 + (mr.y - (mr.top ?? 0))})`), lr.intersect = function(St) {
2319
+ return log.info("Triangle intersect", lr, yr, St), intersect_default.polygon(lr, yr, St);
2320
+ }, pr;
2321
+ }
2322
+ __name(flippedTriangle, "flippedTriangle");
2323
+ function forkJoin(St, lr, { dir: ur, config: { state: dr, themeVariables: fr } }) {
2324
+ let { nodeStyles: pr } = styles2String(lr);
2325
+ lr.label = "";
2326
+ let mr = St.insert("g").attr("class", getNodeClasses(lr)).attr("id", lr.domId ?? lr.id), { cssStyles: hr } = lr, gr = Math.max(70, lr?.width ?? 0), _r = Math.max(10, lr?.height ?? 0);
2327
+ ur === "LR" && (gr = Math.max(10, lr?.width ?? 0), _r = Math.max(70, lr?.height ?? 0));
2328
+ let vr = -1 * gr / 2, yr = -1 * _r / 2, br = at.svg(mr), xr = userNodeOverrides(lr, {
2329
+ stroke: fr.lineColor,
2330
+ fill: fr.lineColor
2331
+ });
2332
+ lr.look !== "handDrawn" && (xr.roughness = 0, xr.fillStyle = "solid");
2333
+ let Sr = br.rectangle(vr, yr, gr, _r, xr), Cr = mr.insert(() => Sr, ":first-child");
2334
+ hr && lr.look !== "handDrawn" && Cr.selectAll("path").attr("style", hr), pr && lr.look !== "handDrawn" && Cr.selectAll("path").attr("style", pr), updateNodeBounds(lr, Cr);
2335
+ let wr = dr?.padding ?? 0;
2336
+ return lr.width && lr.height && (lr.width += wr / 2 || 0, lr.height += wr / 2 || 0), lr.intersect = function(St) {
2337
+ return intersect_default.rect(lr, St);
2338
+ }, mr;
2339
+ }
2340
+ __name(forkJoin, "forkJoin");
2341
+ async function halfRoundedRectangle(St, lr) {
2342
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2343
+ lr.labelStyle = ur;
2344
+ let { shapeSvg: pr, bbox: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = Math.max(80, mr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), gr = Math.max(50, mr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), _r = gr / 2, { cssStyles: vr } = lr, yr = at.svg(pr), br = userNodeOverrides(lr, {});
2345
+ lr.look !== "handDrawn" && (br.roughness = 0, br.fillStyle = "solid");
2346
+ let xr = [
2347
+ {
2348
+ x: -hr / 2,
2349
+ y: -gr / 2
2350
+ },
2351
+ {
2352
+ x: hr / 2 - _r,
2353
+ y: -gr / 2
2354
+ },
2355
+ ...generateCirclePoints(-hr / 2 + _r, 0, _r, 50, 90, 270),
2356
+ {
2357
+ x: hr / 2 - _r,
2358
+ y: gr / 2
2359
+ },
2360
+ {
2361
+ x: -hr / 2,
2362
+ y: gr / 2
2363
+ }
2364
+ ], Sr = createPathFromPoints(xr), Cr = yr.path(Sr, br), wr = pr.insert(() => Cr, ":first-child");
2365
+ return wr.attr("class", "basic label-container"), vr && lr.look !== "handDrawn" && wr.selectChildren("path").attr("style", vr), dr && lr.look !== "handDrawn" && wr.selectChildren("path").attr("style", dr), updateNodeBounds(lr, wr), lr.intersect = function(St) {
2366
+ return log.info("Pill intersect", lr, {
2367
+ radius: _r,
2368
+ point: St
2369
+ }), intersect_default.polygon(lr, xr, St);
2370
+ }, pr;
2371
+ }
2372
+ __name(halfRoundedRectangle, "halfRoundedRectangle");
2373
+ async function hexagon(St, lr) {
2374
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2375
+ lr.labelStyle = ur;
2376
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = pr.height + (lr.padding ?? 0), hr = pr.width + (lr.padding ?? 0) * 2.5, { cssStyles: gr } = lr, _r = at.svg(fr), vr = userNodeOverrides(lr, {});
2377
+ lr.look !== "handDrawn" && (vr.roughness = 0, vr.fillStyle = "solid");
2378
+ let yr = hr / 2, br = yr / 6;
2379
+ yr += br;
2380
+ let xr = mr / 2, Sr = xr / 2, Cr = yr - Sr, wr = [
2381
+ {
2382
+ x: -Cr,
2383
+ y: -xr
2384
+ },
2385
+ {
2386
+ x: 0,
2387
+ y: -xr
2388
+ },
2389
+ {
2390
+ x: Cr,
2391
+ y: -xr
2392
+ },
2393
+ {
2394
+ x: yr,
2395
+ y: 0
2396
+ },
2397
+ {
2398
+ x: Cr,
2399
+ y: xr
2400
+ },
2401
+ {
2402
+ x: 0,
2403
+ y: xr
2404
+ },
2405
+ {
2406
+ x: -Cr,
2407
+ y: xr
2408
+ },
2409
+ {
2410
+ x: -yr,
2411
+ y: 0
2412
+ }
2413
+ ], Tr = createPathFromPoints(wr), Or = _r.path(Tr, vr), kr = fr.insert(() => Or, ":first-child");
2414
+ return kr.attr("class", "basic label-container"), gr && lr.look !== "handDrawn" && kr.selectChildren("path").attr("style", gr), dr && lr.look !== "handDrawn" && kr.selectChildren("path").attr("style", dr), lr.width = hr, lr.height = mr, updateNodeBounds(lr, kr), lr.intersect = function(St) {
2415
+ return intersect_default.polygon(lr, wr, St);
2416
+ }, fr;
2417
+ }
2418
+ __name(hexagon, "hexagon");
2419
+ async function hourglass(St, lr) {
2420
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2421
+ lr.label = "", lr.labelStyle = ur;
2422
+ let { shapeSvg: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = Math.max(30, lr?.width ?? 0), hr = Math.max(30, lr?.height ?? 0), { cssStyles: gr } = lr, _r = at.svg(pr), vr = userNodeOverrides(lr, {});
2423
+ lr.look !== "handDrawn" && (vr.roughness = 0, vr.fillStyle = "solid");
2424
+ let yr = [
2425
+ {
2426
+ x: 0,
2427
+ y: 0
2428
+ },
2429
+ {
2430
+ x: mr,
2431
+ y: 0
2432
+ },
2433
+ {
2434
+ x: 0,
2435
+ y: hr
2436
+ },
2437
+ {
2438
+ x: mr,
2439
+ y: hr
2440
+ }
2441
+ ], br = createPathFromPoints(yr), xr = _r.path(br, vr), Sr = pr.insert(() => xr, ":first-child");
2442
+ return Sr.attr("class", "basic label-container"), gr && lr.look !== "handDrawn" && Sr.selectChildren("path").attr("style", gr), dr && lr.look !== "handDrawn" && Sr.selectChildren("path").attr("style", dr), Sr.attr("transform", `translate(${-mr / 2}, ${-hr / 2})`), updateNodeBounds(lr, Sr), lr.intersect = function(St) {
2443
+ return log.info("Pill intersect", lr, { points: yr }), intersect_default.polygon(lr, yr, St);
2444
+ }, pr;
2445
+ }
2446
+ __name(hourglass, "hourglass");
2447
+ async function icon(St, lr, { config: { themeVariables: ur, flowchart: dr } }) {
2448
+ let { labelStyles: pr } = styles2String(lr);
2449
+ lr.labelStyle = pr;
2450
+ let mr = lr.assetHeight ?? 48, hr = lr.assetWidth ?? 48, gr = Math.max(mr, hr), _r = dr?.wrappingWidth;
2451
+ lr.width = Math.max(gr, _r ?? 0);
2452
+ let { shapeSvg: vr, bbox: yr, label: br } = await labelHelper(St, lr, "icon-shape default"), xr = lr.pos === "t", Sr = gr, Cr = gr, { nodeBorder: wr } = ur, { stylesMap: Tr } = compileStyles(lr), Or = -Cr / 2, Ar = -Sr / 2, Mr = lr.label ? 8 : 0, Nr = at.svg(vr), Pr = userNodeOverrides(lr, {
2453
+ stroke: "none",
2454
+ fill: "none"
2455
+ });
2456
+ lr.look !== "handDrawn" && (Pr.roughness = 0, Pr.fillStyle = "solid");
2457
+ let Fr = Nr.rectangle(Or, Ar, Cr, Sr, Pr), Ir = Math.max(Cr, yr.width), Lr = Sr + yr.height + Mr, Rr = Nr.rectangle(-Ir / 2, -Lr / 2, Ir, Lr, {
2458
+ ...Pr,
2459
+ fill: "transparent",
2460
+ stroke: "none"
2461
+ }), zr = vr.insert(() => Fr, ":first-child"), Br = vr.insert(() => Rr);
2462
+ if (lr.icon) {
2463
+ let St = vr.append("g");
2464
+ St.html(`<g>${await getIconSVG(lr.icon, {
2465
+ height: gr,
2466
+ width: gr,
2467
+ fallbackPrefix: ""
2468
+ })}</g>`);
2469
+ let ur = St.node().getBBox(), dr = ur.width, fr = ur.height, pr = ur.x, mr = ur.y;
2470
+ St.attr("transform", `translate(${-dr / 2 - pr},${xr ? yr.height / 2 + Mr / 2 - fr / 2 - mr : -yr.height / 2 - Mr / 2 - fr / 2 - mr})`), St.attr("style", `color: ${Tr.get("stroke") ?? wr};`);
2471
+ }
2472
+ return br.attr("transform", `translate(${-yr.width / 2 - (yr.x - (yr.left ?? 0))},${xr ? -Lr / 2 : Lr / 2 - yr.height})`), zr.attr("transform", `translate(0,${xr ? yr.height / 2 + Mr / 2 : -yr.height / 2 - Mr / 2})`), updateNodeBounds(lr, Br), lr.intersect = function(St) {
2473
+ if (log.info("iconSquare intersect", lr, St), !lr.label) return intersect_default.rect(lr, St);
2474
+ let ur = lr.x ?? 0, dr = lr.y ?? 0, pr = lr.height ?? 0, mr = [];
2475
+ return mr = xr ? [
2476
+ {
2477
+ x: ur - yr.width / 2,
2478
+ y: dr - pr / 2
2479
+ },
2480
+ {
2481
+ x: ur + yr.width / 2,
2482
+ y: dr - pr / 2
2483
+ },
2484
+ {
2485
+ x: ur + yr.width / 2,
2486
+ y: dr - pr / 2 + yr.height + Mr
2487
+ },
2488
+ {
2489
+ x: ur + Cr / 2,
2490
+ y: dr - pr / 2 + yr.height + Mr
2491
+ },
2492
+ {
2493
+ x: ur + Cr / 2,
2494
+ y: dr + pr / 2
2495
+ },
2496
+ {
2497
+ x: ur - Cr / 2,
2498
+ y: dr + pr / 2
2499
+ },
2500
+ {
2501
+ x: ur - Cr / 2,
2502
+ y: dr - pr / 2 + yr.height + Mr
2503
+ },
2504
+ {
2505
+ x: ur - yr.width / 2,
2506
+ y: dr - pr / 2 + yr.height + Mr
2507
+ }
2508
+ ] : [
2509
+ {
2510
+ x: ur - Cr / 2,
2511
+ y: dr - pr / 2
2512
+ },
2513
+ {
2514
+ x: ur + Cr / 2,
2515
+ y: dr - pr / 2
2516
+ },
2517
+ {
2518
+ x: ur + Cr / 2,
2519
+ y: dr - pr / 2 + Sr
2520
+ },
2521
+ {
2522
+ x: ur + yr.width / 2,
2523
+ y: dr - pr / 2 + Sr
2524
+ },
2525
+ {
2526
+ x: ur + yr.width / 2 / 2,
2527
+ y: dr + pr / 2
2528
+ },
2529
+ {
2530
+ x: ur - yr.width / 2,
2531
+ y: dr + pr / 2
2532
+ },
2533
+ {
2534
+ x: ur - yr.width / 2,
2535
+ y: dr - pr / 2 + Sr
2536
+ },
2537
+ {
2538
+ x: ur - Cr / 2,
2539
+ y: dr - pr / 2 + Sr
2540
+ }
2541
+ ], intersect_default.polygon(lr, mr, St);
2542
+ }, vr;
2543
+ }
2544
+ __name(icon, "icon");
2545
+ async function iconCircle(St, lr, { config: { themeVariables: ur, flowchart: dr } }) {
2546
+ let { labelStyles: pr } = styles2String(lr);
2547
+ lr.labelStyle = pr;
2548
+ let mr = lr.assetHeight ?? 48, hr = lr.assetWidth ?? 48, gr = Math.max(mr, hr), _r = dr?.wrappingWidth;
2549
+ lr.width = Math.max(gr, _r ?? 0);
2550
+ let { shapeSvg: vr, bbox: yr, label: br } = await labelHelper(St, lr, "icon-shape default"), xr = lr.label ? 8 : 0, Sr = lr.pos === "t", { nodeBorder: Cr, mainBkg: wr } = ur, { stylesMap: Tr } = compileStyles(lr), Or = at.svg(vr), Ar = userNodeOverrides(lr, {});
2551
+ lr.look !== "handDrawn" && (Ar.roughness = 0, Ar.fillStyle = "solid"), Ar.stroke = Tr.get("fill") ?? wr;
2552
+ let Mr = vr.append("g");
2553
+ lr.icon && Mr.html(`<g>${await getIconSVG(lr.icon, {
2554
+ height: gr,
2555
+ width: gr,
2556
+ fallbackPrefix: ""
2557
+ })}</g>`);
2558
+ let Nr = Mr.node().getBBox(), Pr = Nr.width, Fr = Nr.height, Ir = Nr.x, Lr = Nr.y, Rr = Math.max(Pr, Fr) * Math.SQRT2 + 40, zr = Or.circle(0, 0, Rr, Ar), Br = Math.max(Rr, yr.width), Vr = Rr + yr.height + xr, Hr = Or.rectangle(-Br / 2, -Vr / 2, Br, Vr, {
2559
+ ...Ar,
2560
+ fill: "transparent",
2561
+ stroke: "none"
2562
+ }), Ur = vr.insert(() => zr, ":first-child"), Wr = vr.insert(() => Hr);
2563
+ return Mr.attr("transform", `translate(${-Pr / 2 - Ir},${Sr ? yr.height / 2 + xr / 2 - Fr / 2 - Lr : -yr.height / 2 - xr / 2 - Fr / 2 - Lr})`), Mr.attr("style", `color: ${Tr.get("stroke") ?? Cr};`), br.attr("transform", `translate(${-yr.width / 2 - (yr.x - (yr.left ?? 0))},${Sr ? -Vr / 2 : Vr / 2 - yr.height})`), Ur.attr("transform", `translate(0,${Sr ? yr.height / 2 + xr / 2 : -yr.height / 2 - xr / 2})`), updateNodeBounds(lr, Wr), lr.intersect = function(St) {
2564
+ return log.info("iconSquare intersect", lr, St), intersect_default.rect(lr, St);
2565
+ }, vr;
2566
+ }
2567
+ __name(iconCircle, "iconCircle");
2568
+ async function iconRounded(St, lr, { config: { themeVariables: ur, flowchart: dr } }) {
2569
+ let { labelStyles: pr } = styles2String(lr);
2570
+ lr.labelStyle = pr;
2571
+ let mr = lr.assetHeight ?? 48, hr = lr.assetWidth ?? 48, gr = Math.max(mr, hr), _r = dr?.wrappingWidth;
2572
+ lr.width = Math.max(gr, _r ?? 0);
2573
+ let { shapeSvg: vr, bbox: yr, halfPadding: br, label: xr } = await labelHelper(St, lr, "icon-shape default"), Sr = lr.pos === "t", Cr = gr + br * 2, wr = gr + br * 2, { nodeBorder: Tr, mainBkg: Or } = ur, { stylesMap: Ar } = compileStyles(lr), Mr = -wr / 2, Nr = -Cr / 2, Pr = lr.label ? 8 : 0, Fr = at.svg(vr), Ir = userNodeOverrides(lr, {});
2574
+ lr.look !== "handDrawn" && (Ir.roughness = 0, Ir.fillStyle = "solid"), Ir.stroke = Ar.get("fill") ?? Or;
2575
+ let Lr = Fr.path(createRoundedRectPathD(Mr, Nr, wr, Cr, 5), Ir), Rr = Math.max(wr, yr.width), zr = Cr + yr.height + Pr, Br = Fr.rectangle(-Rr / 2, -zr / 2, Rr, zr, {
2576
+ ...Ir,
2577
+ fill: "transparent",
2578
+ stroke: "none"
2579
+ }), Vr = vr.insert(() => Lr, ":first-child").attr("class", "icon-shape2"), Hr = vr.insert(() => Br);
2580
+ if (lr.icon) {
2581
+ let St = vr.append("g");
2582
+ St.html(`<g>${await getIconSVG(lr.icon, {
2583
+ height: gr,
2584
+ width: gr,
2585
+ fallbackPrefix: ""
2586
+ })}</g>`);
2587
+ let ur = St.node().getBBox(), dr = ur.width, fr = ur.height, pr = ur.x, mr = ur.y;
2588
+ St.attr("transform", `translate(${-dr / 2 - pr},${Sr ? yr.height / 2 + Pr / 2 - fr / 2 - mr : -yr.height / 2 - Pr / 2 - fr / 2 - mr})`), St.attr("style", `color: ${Ar.get("stroke") ?? Tr};`);
2589
+ }
2590
+ return xr.attr("transform", `translate(${-yr.width / 2 - (yr.x - (yr.left ?? 0))},${Sr ? -zr / 2 : zr / 2 - yr.height})`), Vr.attr("transform", `translate(0,${Sr ? yr.height / 2 + Pr / 2 : -yr.height / 2 - Pr / 2})`), updateNodeBounds(lr, Hr), lr.intersect = function(St) {
2591
+ if (log.info("iconSquare intersect", lr, St), !lr.label) return intersect_default.rect(lr, St);
2592
+ let ur = lr.x ?? 0, dr = lr.y ?? 0, pr = lr.height ?? 0, mr = [];
2593
+ return mr = Sr ? [
2594
+ {
2595
+ x: ur - yr.width / 2,
2596
+ y: dr - pr / 2
2597
+ },
2598
+ {
2599
+ x: ur + yr.width / 2,
2600
+ y: dr - pr / 2
2601
+ },
2602
+ {
2603
+ x: ur + yr.width / 2,
2604
+ y: dr - pr / 2 + yr.height + Pr
2605
+ },
2606
+ {
2607
+ x: ur + wr / 2,
2608
+ y: dr - pr / 2 + yr.height + Pr
2609
+ },
2610
+ {
2611
+ x: ur + wr / 2,
2612
+ y: dr + pr / 2
2613
+ },
2614
+ {
2615
+ x: ur - wr / 2,
2616
+ y: dr + pr / 2
2617
+ },
2618
+ {
2619
+ x: ur - wr / 2,
2620
+ y: dr - pr / 2 + yr.height + Pr
2621
+ },
2622
+ {
2623
+ x: ur - yr.width / 2,
2624
+ y: dr - pr / 2 + yr.height + Pr
2625
+ }
2626
+ ] : [
2627
+ {
2628
+ x: ur - wr / 2,
2629
+ y: dr - pr / 2
2630
+ },
2631
+ {
2632
+ x: ur + wr / 2,
2633
+ y: dr - pr / 2
2634
+ },
2635
+ {
2636
+ x: ur + wr / 2,
2637
+ y: dr - pr / 2 + Cr
2638
+ },
2639
+ {
2640
+ x: ur + yr.width / 2,
2641
+ y: dr - pr / 2 + Cr
2642
+ },
2643
+ {
2644
+ x: ur + yr.width / 2 / 2,
2645
+ y: dr + pr / 2
2646
+ },
2647
+ {
2648
+ x: ur - yr.width / 2,
2649
+ y: dr + pr / 2
2650
+ },
2651
+ {
2652
+ x: ur - yr.width / 2,
2653
+ y: dr - pr / 2 + Cr
2654
+ },
2655
+ {
2656
+ x: ur - wr / 2,
2657
+ y: dr - pr / 2 + Cr
2658
+ }
2659
+ ], intersect_default.polygon(lr, mr, St);
2660
+ }, vr;
2661
+ }
2662
+ __name(iconRounded, "iconRounded");
2663
+ async function iconSquare(St, lr, { config: { themeVariables: ur, flowchart: dr } }) {
2664
+ let { labelStyles: pr } = styles2String(lr);
2665
+ lr.labelStyle = pr;
2666
+ let mr = lr.assetHeight ?? 48, hr = lr.assetWidth ?? 48, gr = Math.max(mr, hr), _r = dr?.wrappingWidth;
2667
+ lr.width = Math.max(gr, _r ?? 0);
2668
+ let { shapeSvg: vr, bbox: yr, halfPadding: br, label: xr } = await labelHelper(St, lr, "icon-shape default"), Sr = lr.pos === "t", Cr = gr + br * 2, wr = gr + br * 2, { nodeBorder: Tr, mainBkg: Or } = ur, { stylesMap: Ar } = compileStyles(lr), Mr = -wr / 2, Nr = -Cr / 2, Pr = lr.label ? 8 : 0, Fr = at.svg(vr), Ir = userNodeOverrides(lr, {});
2669
+ lr.look !== "handDrawn" && (Ir.roughness = 0, Ir.fillStyle = "solid"), Ir.stroke = Ar.get("fill") ?? Or;
2670
+ let Lr = Fr.path(createRoundedRectPathD(Mr, Nr, wr, Cr, .1), Ir), Rr = Math.max(wr, yr.width), zr = Cr + yr.height + Pr, Br = Fr.rectangle(-Rr / 2, -zr / 2, Rr, zr, {
2671
+ ...Ir,
2672
+ fill: "transparent",
2673
+ stroke: "none"
2674
+ }), Vr = vr.insert(() => Lr, ":first-child"), Hr = vr.insert(() => Br);
2675
+ if (lr.icon) {
2676
+ let St = vr.append("g");
2677
+ St.html(`<g>${await getIconSVG(lr.icon, {
2678
+ height: gr,
2679
+ width: gr,
2680
+ fallbackPrefix: ""
2681
+ })}</g>`);
2682
+ let ur = St.node().getBBox(), dr = ur.width, fr = ur.height, pr = ur.x, mr = ur.y;
2683
+ St.attr("transform", `translate(${-dr / 2 - pr},${Sr ? yr.height / 2 + Pr / 2 - fr / 2 - mr : -yr.height / 2 - Pr / 2 - fr / 2 - mr})`), St.attr("style", `color: ${Ar.get("stroke") ?? Tr};`);
2684
+ }
2685
+ return xr.attr("transform", `translate(${-yr.width / 2 - (yr.x - (yr.left ?? 0))},${Sr ? -zr / 2 : zr / 2 - yr.height})`), Vr.attr("transform", `translate(0,${Sr ? yr.height / 2 + Pr / 2 : -yr.height / 2 - Pr / 2})`), updateNodeBounds(lr, Hr), lr.intersect = function(St) {
2686
+ if (log.info("iconSquare intersect", lr, St), !lr.label) return intersect_default.rect(lr, St);
2687
+ let ur = lr.x ?? 0, dr = lr.y ?? 0, pr = lr.height ?? 0, mr = [];
2688
+ return mr = Sr ? [
2689
+ {
2690
+ x: ur - yr.width / 2,
2691
+ y: dr - pr / 2
2692
+ },
2693
+ {
2694
+ x: ur + yr.width / 2,
2695
+ y: dr - pr / 2
2696
+ },
2697
+ {
2698
+ x: ur + yr.width / 2,
2699
+ y: dr - pr / 2 + yr.height + Pr
2700
+ },
2701
+ {
2702
+ x: ur + wr / 2,
2703
+ y: dr - pr / 2 + yr.height + Pr
2704
+ },
2705
+ {
2706
+ x: ur + wr / 2,
2707
+ y: dr + pr / 2
2708
+ },
2709
+ {
2710
+ x: ur - wr / 2,
2711
+ y: dr + pr / 2
2712
+ },
2713
+ {
2714
+ x: ur - wr / 2,
2715
+ y: dr - pr / 2 + yr.height + Pr
2716
+ },
2717
+ {
2718
+ x: ur - yr.width / 2,
2719
+ y: dr - pr / 2 + yr.height + Pr
2720
+ }
2721
+ ] : [
2722
+ {
2723
+ x: ur - wr / 2,
2724
+ y: dr - pr / 2
2725
+ },
2726
+ {
2727
+ x: ur + wr / 2,
2728
+ y: dr - pr / 2
2729
+ },
2730
+ {
2731
+ x: ur + wr / 2,
2732
+ y: dr - pr / 2 + Cr
2733
+ },
2734
+ {
2735
+ x: ur + yr.width / 2,
2736
+ y: dr - pr / 2 + Cr
2737
+ },
2738
+ {
2739
+ x: ur + yr.width / 2 / 2,
2740
+ y: dr + pr / 2
2741
+ },
2742
+ {
2743
+ x: ur - yr.width / 2,
2744
+ y: dr + pr / 2
2745
+ },
2746
+ {
2747
+ x: ur - yr.width / 2,
2748
+ y: dr - pr / 2 + Cr
2749
+ },
2750
+ {
2751
+ x: ur - wr / 2,
2752
+ y: dr - pr / 2 + Cr
2753
+ }
2754
+ ], intersect_default.polygon(lr, mr, St);
2755
+ }, vr;
2756
+ }
2757
+ __name(iconSquare, "iconSquare");
2758
+ async function imageSquare(St, lr, { config: { flowchart: ur } }) {
2759
+ let dr = new Image();
2760
+ dr.src = lr?.img ?? "", await dr.decode();
2761
+ let pr = Number(dr.naturalWidth.toString().replace("px", "")), mr = Number(dr.naturalHeight.toString().replace("px", ""));
2762
+ lr.imageAspectRatio = pr / mr;
2763
+ let { labelStyles: hr } = styles2String(lr);
2764
+ lr.labelStyle = hr;
2765
+ let gr = ur?.wrappingWidth;
2766
+ lr.defaultWidth = ur?.wrappingWidth;
2767
+ let _r = Math.max(lr.label ? gr ?? 0 : 0, lr?.assetWidth ?? pr), vr = lr.constraint === "on" && lr?.assetHeight ? lr.assetHeight * lr.imageAspectRatio : _r, yr = lr.constraint === "on" ? vr / lr.imageAspectRatio : lr?.assetHeight ?? mr;
2768
+ lr.width = Math.max(vr, gr ?? 0);
2769
+ let { shapeSvg: br, bbox: xr, label: Sr } = await labelHelper(St, lr, "image-shape default"), Cr = lr.pos === "t", wr = -vr / 2, Tr = -yr / 2, Or = lr.label ? 8 : 0, kr = at.svg(br), Ar = userNodeOverrides(lr, {});
2770
+ lr.look !== "handDrawn" && (Ar.roughness = 0, Ar.fillStyle = "solid");
2771
+ let jr = kr.rectangle(wr, Tr, vr, yr, Ar), Mr = Math.max(vr, xr.width), Nr = yr + xr.height + Or, Pr = kr.rectangle(-Mr / 2, -Nr / 2, Mr, Nr, {
2772
+ ...Ar,
2773
+ fill: "none",
2774
+ stroke: "none"
2775
+ }), Fr = br.insert(() => jr, ":first-child"), Ir = br.insert(() => Pr);
2776
+ if (lr.img) {
2777
+ let St = br.append("image");
2778
+ St.attr("href", lr.img), St.attr("width", vr), St.attr("height", yr), St.attr("preserveAspectRatio", "none"), St.attr("transform", `translate(${-vr / 2},${Cr ? Nr / 2 - yr : -Nr / 2})`);
2779
+ }
2780
+ return Sr.attr("transform", `translate(${-xr.width / 2 - (xr.x - (xr.left ?? 0))},${Cr ? -yr / 2 - xr.height / 2 - Or / 2 : yr / 2 - xr.height / 2 + Or / 2})`), Fr.attr("transform", `translate(0,${Cr ? xr.height / 2 + Or / 2 : -xr.height / 2 - Or / 2})`), updateNodeBounds(lr, Ir), lr.intersect = function(St) {
2781
+ if (log.info("iconSquare intersect", lr, St), !lr.label) return intersect_default.rect(lr, St);
2782
+ let ur = lr.x ?? 0, dr = lr.y ?? 0, pr = lr.height ?? 0, mr = [];
2783
+ return mr = Cr ? [
2784
+ {
2785
+ x: ur - xr.width / 2,
2786
+ y: dr - pr / 2
2787
+ },
2788
+ {
2789
+ x: ur + xr.width / 2,
2790
+ y: dr - pr / 2
2791
+ },
2792
+ {
2793
+ x: ur + xr.width / 2,
2794
+ y: dr - pr / 2 + xr.height + Or
2795
+ },
2796
+ {
2797
+ x: ur + vr / 2,
2798
+ y: dr - pr / 2 + xr.height + Or
2799
+ },
2800
+ {
2801
+ x: ur + vr / 2,
2802
+ y: dr + pr / 2
2803
+ },
2804
+ {
2805
+ x: ur - vr / 2,
2806
+ y: dr + pr / 2
2807
+ },
2808
+ {
2809
+ x: ur - vr / 2,
2810
+ y: dr - pr / 2 + xr.height + Or
2811
+ },
2812
+ {
2813
+ x: ur - xr.width / 2,
2814
+ y: dr - pr / 2 + xr.height + Or
2815
+ }
2816
+ ] : [
2817
+ {
2818
+ x: ur - vr / 2,
2819
+ y: dr - pr / 2
2820
+ },
2821
+ {
2822
+ x: ur + vr / 2,
2823
+ y: dr - pr / 2
2824
+ },
2825
+ {
2826
+ x: ur + vr / 2,
2827
+ y: dr - pr / 2 + yr
2828
+ },
2829
+ {
2830
+ x: ur + xr.width / 2,
2831
+ y: dr - pr / 2 + yr
2832
+ },
2833
+ {
2834
+ x: ur + xr.width / 2 / 2,
2835
+ y: dr + pr / 2
2836
+ },
2837
+ {
2838
+ x: ur - xr.width / 2,
2839
+ y: dr + pr / 2
2840
+ },
2841
+ {
2842
+ x: ur - xr.width / 2,
2843
+ y: dr - pr / 2 + yr
2844
+ },
2845
+ {
2846
+ x: ur - vr / 2,
2847
+ y: dr - pr / 2 + yr
2848
+ }
2849
+ ], intersect_default.polygon(lr, mr, St);
2850
+ }, br;
2851
+ }
2852
+ __name(imageSquare, "imageSquare");
2853
+ async function inv_trapezoid(St, lr) {
2854
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2855
+ lr.labelStyle = ur;
2856
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = Math.max(pr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), hr = Math.max(pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), gr = [
2857
+ {
2858
+ x: 0,
2859
+ y: 0
2860
+ },
2861
+ {
2862
+ x: mr,
2863
+ y: 0
2864
+ },
2865
+ {
2866
+ x: mr + 3 * hr / 6,
2867
+ y: -hr
2868
+ },
2869
+ {
2870
+ x: -3 * hr / 6,
2871
+ y: -hr
2872
+ }
2873
+ ], _r, { cssStyles: vr } = lr;
2874
+ if (lr.look === "handDrawn") {
2875
+ let St = at.svg(fr), ur = userNodeOverrides(lr, {}), dr = createPathFromPoints(gr), pr = St.path(dr, ur);
2876
+ _r = fr.insert(() => pr, ":first-child").attr("transform", `translate(${-mr / 2}, ${hr / 2})`), vr && _r.attr("style", vr);
2877
+ } else _r = insertPolygonShape(fr, mr, hr, gr);
2878
+ return dr && _r.attr("style", dr), lr.width = mr, lr.height = hr, updateNodeBounds(lr, _r), lr.intersect = function(St) {
2879
+ return intersect_default.polygon(lr, gr, St);
2880
+ }, fr;
2881
+ }
2882
+ __name(inv_trapezoid, "inv_trapezoid");
2883
+ async function drawRect(St, lr, ur) {
2884
+ let { labelStyles: fr, nodeStyles: pr } = styles2String(lr);
2885
+ lr.labelStyle = fr;
2886
+ let { shapeSvg: mr, bbox: hr } = await labelHelper(St, lr, getNodeClasses(lr)), gr = Math.max(hr.width + ur.labelPaddingX * 2, lr?.width || 0), _r = Math.max(hr.height + ur.labelPaddingY * 2, lr?.height || 0), vr = -gr / 2, yr = -_r / 2, br, { rx: xr, ry: Sr } = lr, { cssStyles: Cr } = lr;
2887
+ if (ur?.rx && ur.ry && (xr = ur.rx, Sr = ur.ry), lr.look === "handDrawn") {
2888
+ let St = at.svg(mr), ur = userNodeOverrides(lr, {}), fr = xr || Sr ? St.path(createRoundedRectPathD(vr, yr, gr, _r, xr || 0), ur) : St.rectangle(vr, yr, gr, _r, ur);
2889
+ br = mr.insert(() => fr, ":first-child"), br.attr("class", "basic label-container").attr("style", handleUndefinedAttr(Cr));
2890
+ } else br = mr.insert("rect", ":first-child"), br.attr("class", "basic label-container").attr("style", pr).attr("rx", handleUndefinedAttr(xr)).attr("ry", handleUndefinedAttr(Sr)).attr("x", vr).attr("y", yr).attr("width", gr).attr("height", _r);
2891
+ return updateNodeBounds(lr, br), lr.calcIntersect = function(St, lr) {
2892
+ return intersect_default.rect(St, lr);
2893
+ }, lr.intersect = function(St) {
2894
+ return intersect_default.rect(lr, St);
2895
+ }, mr;
2896
+ }
2897
+ __name(drawRect, "drawRect");
2898
+ async function labelRect(St, lr) {
2899
+ let { shapeSvg: ur, bbox: dr, label: fr } = await labelHelper(St, lr, "label"), pr = ur.insert("rect", ":first-child");
2900
+ return pr.attr("width", .1).attr("height", .1), ur.attr("class", "label edgeLabel"), fr.attr("transform", `translate(${-(dr.width / 2) - (dr.x - (dr.left ?? 0))}, ${-(dr.height / 2) - (dr.y - (dr.top ?? 0))})`), updateNodeBounds(lr, pr), lr.intersect = function(St) {
2901
+ return intersect_default.rect(lr, St);
2902
+ }, ur;
2903
+ }
2904
+ __name(labelRect, "labelRect");
2905
+ async function lean_left(St, lr) {
2906
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2907
+ lr.labelStyle = ur;
2908
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = Math.max(pr.width + (lr.padding ?? 0), lr?.width ?? 0), hr = Math.max(pr.height + (lr.padding ?? 0), lr?.height ?? 0), gr = [
2909
+ {
2910
+ x: 0,
2911
+ y: 0
2912
+ },
2913
+ {
2914
+ x: mr + 3 * hr / 6,
2915
+ y: 0
2916
+ },
2917
+ {
2918
+ x: mr,
2919
+ y: -hr
2920
+ },
2921
+ {
2922
+ x: -(3 * hr) / 6,
2923
+ y: -hr
2924
+ }
2925
+ ], _r, { cssStyles: vr } = lr;
2926
+ if (lr.look === "handDrawn") {
2927
+ let St = at.svg(fr), ur = userNodeOverrides(lr, {}), dr = createPathFromPoints(gr), pr = St.path(dr, ur);
2928
+ _r = fr.insert(() => pr, ":first-child").attr("transform", `translate(${-mr / 2}, ${hr / 2})`), vr && _r.attr("style", vr);
2929
+ } else _r = insertPolygonShape(fr, mr, hr, gr);
2930
+ return dr && _r.attr("style", dr), lr.width = mr, lr.height = hr, updateNodeBounds(lr, _r), lr.intersect = function(St) {
2931
+ return intersect_default.polygon(lr, gr, St);
2932
+ }, fr;
2933
+ }
2934
+ __name(lean_left, "lean_left");
2935
+ async function lean_right(St, lr) {
2936
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2937
+ lr.labelStyle = ur;
2938
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = Math.max(pr.width + (lr.padding ?? 0), lr?.width ?? 0), hr = Math.max(pr.height + (lr.padding ?? 0), lr?.height ?? 0), gr = [
2939
+ {
2940
+ x: -3 * hr / 6,
2941
+ y: 0
2942
+ },
2943
+ {
2944
+ x: mr,
2945
+ y: 0
2946
+ },
2947
+ {
2948
+ x: mr + 3 * hr / 6,
2949
+ y: -hr
2950
+ },
2951
+ {
2952
+ x: 0,
2953
+ y: -hr
2954
+ }
2955
+ ], _r, { cssStyles: vr } = lr;
2956
+ if (lr.look === "handDrawn") {
2957
+ let St = at.svg(fr), ur = userNodeOverrides(lr, {}), dr = createPathFromPoints(gr), pr = St.path(dr, ur);
2958
+ _r = fr.insert(() => pr, ":first-child").attr("transform", `translate(${-mr / 2}, ${hr / 2})`), vr && _r.attr("style", vr);
2959
+ } else _r = insertPolygonShape(fr, mr, hr, gr);
2960
+ return dr && _r.attr("style", dr), lr.width = mr, lr.height = hr, updateNodeBounds(lr, _r), lr.intersect = function(St) {
2961
+ return intersect_default.polygon(lr, gr, St);
2962
+ }, fr;
2963
+ }
2964
+ __name(lean_right, "lean_right");
2965
+ function lightningBolt(St, lr) {
2966
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
2967
+ lr.label = "", lr.labelStyle = ur;
2968
+ let pr = St.insert("g").attr("class", getNodeClasses(lr)).attr("id", lr.domId ?? lr.id), { cssStyles: mr } = lr, hr = Math.max(35, lr?.width ?? 0), gr = Math.max(35, lr?.height ?? 0), _r = [
2969
+ {
2970
+ x: hr,
2971
+ y: 0
2972
+ },
2973
+ {
2974
+ x: 0,
2975
+ y: gr + 7 / 2
2976
+ },
2977
+ {
2978
+ x: hr - 14,
2979
+ y: gr + 7 / 2
2980
+ },
2981
+ {
2982
+ x: 0,
2983
+ y: 2 * gr
2984
+ },
2985
+ {
2986
+ x: hr,
2987
+ y: gr - 7 / 2
2988
+ },
2989
+ {
2990
+ x: 14,
2991
+ y: gr - 7 / 2
2992
+ }
2993
+ ], vr = at.svg(pr), yr = userNodeOverrides(lr, {});
2994
+ lr.look !== "handDrawn" && (yr.roughness = 0, yr.fillStyle = "solid");
2995
+ let br = createPathFromPoints(_r), xr = vr.path(br, yr), Sr = pr.insert(() => xr, ":first-child");
2996
+ return mr && lr.look !== "handDrawn" && Sr.selectAll("path").attr("style", mr), dr && lr.look !== "handDrawn" && Sr.selectAll("path").attr("style", dr), Sr.attr("transform", `translate(-${hr / 2},${-gr})`), updateNodeBounds(lr, Sr), lr.intersect = function(St) {
2997
+ return log.info("lightningBolt intersect", lr, St), intersect_default.polygon(lr, _r, St);
2998
+ }, pr;
2999
+ }
3000
+ __name(lightningBolt, "lightningBolt");
3001
+ var createCylinderPathD2 = /* @__PURE__ */ __name((St, lr, ur, dr, fr, pr, mr) => [
3002
+ `M${St},${lr + pr}`,
3003
+ `a${fr},${pr} 0,0,0 ${ur},0`,
3004
+ `a${fr},${pr} 0,0,0 ${-ur},0`,
3005
+ `l0,${dr}`,
3006
+ `a${fr},${pr} 0,0,0 ${ur},0`,
3007
+ `l0,${-dr}`,
3008
+ `M${St},${lr + pr + mr}`,
3009
+ `a${fr},${pr} 0,0,0 ${ur},0`
3010
+ ].join(" "), "createCylinderPathD"), createOuterCylinderPathD2 = /* @__PURE__ */ __name((St, lr, ur, dr, fr, pr, mr) => [
3011
+ `M${St},${lr + pr}`,
3012
+ `M${St + ur},${lr + pr}`,
3013
+ `a${fr},${pr} 0,0,0 ${-ur},0`,
3014
+ `l0,${dr}`,
3015
+ `a${fr},${pr} 0,0,0 ${ur},0`,
3016
+ `l0,${-dr}`,
3017
+ `M${St},${lr + pr + mr}`,
3018
+ `a${fr},${pr} 0,0,0 ${ur},0`
3019
+ ].join(" "), "createOuterCylinderPathD"), createInnerCylinderPathD2 = /* @__PURE__ */ __name((St, lr, ur, dr, fr, pr) => [`M${St - ur / 2},${-dr / 2}`, `a${fr},${pr} 0,0,0 ${ur},0`].join(" "), "createInnerCylinderPathD");
3020
+ async function linedCylinder(St, lr) {
3021
+ let { labelStyles: ur, nodeStyles: fr } = styles2String(lr);
3022
+ lr.labelStyle = ur;
3023
+ let { shapeSvg: pr, bbox: mr, label: hr } = await labelHelper(St, lr, getNodeClasses(lr)), gr = Math.max(mr.width + (lr.padding ?? 0), lr.width ?? 0), _r = gr / 2, vr = _r / (2.5 + gr / 50), yr = Math.max(mr.height + vr + (lr.padding ?? 0), lr.height ?? 0), br = yr * .1, xr, { cssStyles: Sr } = lr;
3024
+ if (lr.look === "handDrawn") {
3025
+ let St = at.svg(pr), ur = createOuterCylinderPathD2(0, 0, gr, yr, _r, vr, br), dr = createInnerCylinderPathD2(0, vr, gr, yr, _r, vr), fr = userNodeOverrides(lr, {}), mr = St.path(ur, fr), hr = St.path(dr, fr);
3026
+ pr.insert(() => hr, ":first-child").attr("class", "line"), xr = pr.insert(() => mr, ":first-child"), xr.attr("class", "basic label-container"), Sr && xr.attr("style", Sr);
3027
+ } else {
3028
+ let St = createCylinderPathD2(0, 0, gr, yr, _r, vr, br);
3029
+ xr = pr.insert("path", ":first-child").attr("d", St).attr("class", "basic label-container").attr("style", handleUndefinedAttr(Sr)).attr("style", fr);
3030
+ }
3031
+ return xr.attr("label-offset-y", vr), xr.attr("transform", `translate(${-gr / 2}, ${-(yr / 2 + vr)})`), updateNodeBounds(lr, xr), hr.attr("transform", `translate(${-(mr.width / 2) - (mr.x - (mr.left ?? 0))}, ${-(mr.height / 2) + vr - (mr.y - (mr.top ?? 0))})`), lr.intersect = function(St) {
3032
+ let ur = intersect_default.rect(lr, St), dr = ur.x - (lr.x ?? 0);
3033
+ if (_r != 0 && (Math.abs(dr) < (lr.width ?? 0) / 2 || Math.abs(dr) == (lr.width ?? 0) / 2 && Math.abs(ur.y - (lr.y ?? 0)) > (lr.height ?? 0) / 2 - vr)) {
3034
+ let fr = vr * vr * (1 - dr * dr / (_r * _r));
3035
+ fr > 0 && (fr = Math.sqrt(fr)), fr = vr - fr, St.y - (lr.y ?? 0) > 0 && (fr = -fr), ur.y += fr;
3036
+ }
3037
+ return ur;
3038
+ }, pr;
3039
+ }
3040
+ __name(linedCylinder, "linedCylinder");
3041
+ async function linedWaveEdgedRect(St, lr) {
3042
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3043
+ lr.labelStyle = ur;
3044
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = Math.max(pr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), gr = Math.max(pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), _r = gr / 4, vr = gr + _r, { cssStyles: yr } = lr, br = at.svg(fr), xr = userNodeOverrides(lr, {});
3045
+ lr.look !== "handDrawn" && (xr.roughness = 0, xr.fillStyle = "solid");
3046
+ let Sr = [
3047
+ {
3048
+ x: -hr / 2 - hr / 2 * .1,
3049
+ y: -vr / 2
3050
+ },
3051
+ {
3052
+ x: -hr / 2 - hr / 2 * .1,
3053
+ y: vr / 2
3054
+ },
3055
+ ...generateFullSineWavePoints(-hr / 2 - hr / 2 * .1, vr / 2, hr / 2 + hr / 2 * .1, vr / 2, _r, .8),
3056
+ {
3057
+ x: hr / 2 + hr / 2 * .1,
3058
+ y: -vr / 2
3059
+ },
3060
+ {
3061
+ x: -hr / 2 - hr / 2 * .1,
3062
+ y: -vr / 2
3063
+ },
3064
+ {
3065
+ x: -hr / 2,
3066
+ y: -vr / 2
3067
+ },
3068
+ {
3069
+ x: -hr / 2,
3070
+ y: vr / 2 * 1.1
3071
+ },
3072
+ {
3073
+ x: -hr / 2,
3074
+ y: -vr / 2
3075
+ }
3076
+ ], Cr = br.polygon(Sr.map((St) => [St.x, St.y]), xr), wr = fr.insert(() => Cr, ":first-child");
3077
+ return wr.attr("class", "basic label-container"), yr && lr.look !== "handDrawn" && wr.selectAll("path").attr("style", yr), dr && lr.look !== "handDrawn" && wr.selectAll("path").attr("style", dr), wr.attr("transform", `translate(0,${-_r / 2})`), mr.attr("transform", `translate(${-hr / 2 + (lr.padding ?? 0) + hr / 2 * .1 / 2 - (pr.x - (pr.left ?? 0))},${-gr / 2 + (lr.padding ?? 0) - _r / 2 - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, wr), lr.intersect = function(St) {
3078
+ return intersect_default.polygon(lr, Sr, St);
3079
+ }, fr;
3080
+ }
3081
+ __name(linedWaveEdgedRect, "linedWaveEdgedRect");
3082
+ async function multiRect(St, lr) {
3083
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3084
+ lr.labelStyle = ur;
3085
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = Math.max(pr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), gr = Math.max(pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), _r = -hr / 2, vr = -gr / 2, { cssStyles: yr } = lr, br = at.svg(fr), xr = userNodeOverrides(lr, {}), Sr = [
3086
+ {
3087
+ x: _r - 5,
3088
+ y: vr + 5
3089
+ },
3090
+ {
3091
+ x: _r - 5,
3092
+ y: vr + gr + 5
3093
+ },
3094
+ {
3095
+ x: _r + hr - 5,
3096
+ y: vr + gr + 5
3097
+ },
3098
+ {
3099
+ x: _r + hr - 5,
3100
+ y: vr + gr
3101
+ },
3102
+ {
3103
+ x: _r + hr,
3104
+ y: vr + gr
3105
+ },
3106
+ {
3107
+ x: _r + hr,
3108
+ y: vr + gr - 5
3109
+ },
3110
+ {
3111
+ x: _r + hr + 5,
3112
+ y: vr + gr - 5
3113
+ },
3114
+ {
3115
+ x: _r + hr + 5,
3116
+ y: vr - 5
3117
+ },
3118
+ {
3119
+ x: _r + 5,
3120
+ y: vr - 5
3121
+ },
3122
+ {
3123
+ x: _r + 5,
3124
+ y: vr
3125
+ },
3126
+ {
3127
+ x: _r,
3128
+ y: vr
3129
+ },
3130
+ {
3131
+ x: _r,
3132
+ y: vr + 5
3133
+ }
3134
+ ], Cr = [
3135
+ {
3136
+ x: _r,
3137
+ y: vr + 5
3138
+ },
3139
+ {
3140
+ x: _r + hr - 5,
3141
+ y: vr + 5
3142
+ },
3143
+ {
3144
+ x: _r + hr - 5,
3145
+ y: vr + gr
3146
+ },
3147
+ {
3148
+ x: _r + hr,
3149
+ y: vr + gr
3150
+ },
3151
+ {
3152
+ x: _r + hr,
3153
+ y: vr
3154
+ },
3155
+ {
3156
+ x: _r,
3157
+ y: vr
3158
+ }
3159
+ ];
3160
+ lr.look !== "handDrawn" && (xr.roughness = 0, xr.fillStyle = "solid");
3161
+ let wr = createPathFromPoints(Sr), Tr = br.path(wr, xr), Or = createPathFromPoints(Cr), kr = br.path(Or, {
3162
+ ...xr,
3163
+ fill: "none"
3164
+ }), Ar = fr.insert(() => kr, ":first-child");
3165
+ return Ar.insert(() => Tr, ":first-child"), Ar.attr("class", "basic label-container"), yr && lr.look !== "handDrawn" && Ar.selectAll("path").attr("style", yr), dr && lr.look !== "handDrawn" && Ar.selectAll("path").attr("style", dr), mr.attr("transform", `translate(${-(pr.width / 2) - 5 - (pr.x - (pr.left ?? 0))}, ${-(pr.height / 2) + 5 - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, Ar), lr.intersect = function(St) {
3166
+ return intersect_default.polygon(lr, Sr, St);
3167
+ }, fr;
3168
+ }
3169
+ __name(multiRect, "multiRect");
3170
+ async function multiWaveEdgedRectangle(St, lr) {
3171
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3172
+ lr.labelStyle = ur;
3173
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = Math.max(pr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), gr = Math.max(pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), _r = gr / 4, vr = gr + _r, yr = -hr / 2, br = -vr / 2, { cssStyles: xr } = lr, Sr = generateFullSineWavePoints(yr - 5, br + vr + 5, yr + hr - 5, br + vr + 5, _r, .8), Cr = Sr?.[Sr.length - 1], wr = [
3174
+ {
3175
+ x: yr - 5,
3176
+ y: br + 5
3177
+ },
3178
+ {
3179
+ x: yr - 5,
3180
+ y: br + vr + 5
3181
+ },
3182
+ ...Sr,
3183
+ {
3184
+ x: yr + hr - 5,
3185
+ y: Cr.y - 5
3186
+ },
3187
+ {
3188
+ x: yr + hr,
3189
+ y: Cr.y - 5
3190
+ },
3191
+ {
3192
+ x: yr + hr,
3193
+ y: Cr.y - 10
3194
+ },
3195
+ {
3196
+ x: yr + hr + 5,
3197
+ y: Cr.y - 10
3198
+ },
3199
+ {
3200
+ x: yr + hr + 5,
3201
+ y: br - 5
3202
+ },
3203
+ {
3204
+ x: yr + 5,
3205
+ y: br - 5
3206
+ },
3207
+ {
3208
+ x: yr + 5,
3209
+ y: br
3210
+ },
3211
+ {
3212
+ x: yr,
3213
+ y: br
3214
+ },
3215
+ {
3216
+ x: yr,
3217
+ y: br + 5
3218
+ }
3219
+ ], Tr = [
3220
+ {
3221
+ x: yr,
3222
+ y: br + 5
3223
+ },
3224
+ {
3225
+ x: yr + hr - 5,
3226
+ y: br + 5
3227
+ },
3228
+ {
3229
+ x: yr + hr - 5,
3230
+ y: Cr.y - 5
3231
+ },
3232
+ {
3233
+ x: yr + hr,
3234
+ y: Cr.y - 5
3235
+ },
3236
+ {
3237
+ x: yr + hr,
3238
+ y: br
3239
+ },
3240
+ {
3241
+ x: yr,
3242
+ y: br
3243
+ }
3244
+ ], Or = at.svg(fr), kr = userNodeOverrides(lr, {});
3245
+ lr.look !== "handDrawn" && (kr.roughness = 0, kr.fillStyle = "solid");
3246
+ let Ar = createPathFromPoints(wr), jr = Or.path(Ar, kr), Mr = createPathFromPoints(Tr), Nr = Or.path(Mr, kr), Pr = fr.insert(() => jr, ":first-child");
3247
+ return Pr.insert(() => Nr), Pr.attr("class", "basic label-container"), xr && lr.look !== "handDrawn" && Pr.selectAll("path").attr("style", xr), dr && lr.look !== "handDrawn" && Pr.selectAll("path").attr("style", dr), Pr.attr("transform", `translate(0,${-_r / 2})`), mr.attr("transform", `translate(${-(pr.width / 2) - 5 - (pr.x - (pr.left ?? 0))}, ${-(pr.height / 2) + 5 - _r / 2 - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, Pr), lr.intersect = function(St) {
3248
+ return intersect_default.polygon(lr, wr, St);
3249
+ }, fr;
3250
+ }
3251
+ __name(multiWaveEdgedRectangle, "multiWaveEdgedRectangle");
3252
+ async function note(St, lr, { config: { themeVariables: ur } }) {
3253
+ let { labelStyles: dr, nodeStyles: fr } = styles2String(lr);
3254
+ lr.labelStyle = dr, lr.useHtmlLabels || getConfig().flowchart?.htmlLabels !== !1 || (lr.centerLabel = !0);
3255
+ let { shapeSvg: pr, bbox: mr, label: hr } = await labelHelper(St, lr, getNodeClasses(lr)), gr = Math.max(mr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), _r = Math.max(mr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), vr = -gr / 2, yr = -_r / 2, { cssStyles: br } = lr, xr = at.svg(pr), Sr = userNodeOverrides(lr, {
3256
+ fill: ur.noteBkgColor,
3257
+ stroke: ur.noteBorderColor
3258
+ });
3259
+ lr.look !== "handDrawn" && (Sr.roughness = 0, Sr.fillStyle = "solid");
3260
+ let Cr = xr.rectangle(vr, yr, gr, _r, Sr), Tr = pr.insert(() => Cr, ":first-child");
3261
+ return Tr.attr("class", "basic label-container"), br && lr.look !== "handDrawn" && Tr.selectAll("path").attr("style", br), fr && lr.look !== "handDrawn" && Tr.selectAll("path").attr("style", fr), hr.attr("transform", `translate(${-mr.width / 2 - (mr.x - (mr.left ?? 0))}, ${-(mr.height / 2) - (mr.y - (mr.top ?? 0))})`), updateNodeBounds(lr, Tr), lr.intersect = function(St) {
3262
+ return intersect_default.rect(lr, St);
3263
+ }, pr;
3264
+ }
3265
+ __name(note, "note");
3266
+ var createDecisionBoxPathD = /* @__PURE__ */ __name((St, lr, ur) => [
3267
+ `M${St + ur / 2},${lr}`,
3268
+ `L${St + ur},${lr - ur / 2}`,
3269
+ `L${St + ur / 2},${lr - ur}`,
3270
+ `L${St},${lr - ur / 2}`,
3271
+ "Z"
3272
+ ].join(" "), "createDecisionBoxPathD");
3273
+ async function question(St, lr) {
3274
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3275
+ lr.labelStyle = ur;
3276
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = pr.width + lr.padding + (pr.height + lr.padding), hr = .5, gr = [
3277
+ {
3278
+ x: mr / 2,
3279
+ y: 0
3280
+ },
3281
+ {
3282
+ x: mr,
3283
+ y: -mr / 2
3284
+ },
3285
+ {
3286
+ x: mr / 2,
3287
+ y: -mr
3288
+ },
3289
+ {
3290
+ x: 0,
3291
+ y: -mr / 2
3292
+ }
3293
+ ], _r, { cssStyles: vr } = lr;
3294
+ if (lr.look === "handDrawn") {
3295
+ let St = at.svg(fr), ur = userNodeOverrides(lr, {}), dr = createDecisionBoxPathD(0, 0, mr), pr = St.path(dr, ur);
3296
+ _r = fr.insert(() => pr, ":first-child").attr("transform", `translate(${-mr / 2 + hr}, ${mr / 2})`), vr && _r.attr("style", vr);
3297
+ } else _r = insertPolygonShape(fr, mr, mr, gr), _r.attr("transform", `translate(${-mr / 2 + hr}, ${mr / 2})`);
3298
+ return dr && _r.attr("style", dr), updateNodeBounds(lr, _r), lr.calcIntersect = function(St, lr) {
3299
+ let ur = St.width, dr = [
3300
+ {
3301
+ x: ur / 2,
3302
+ y: 0
3303
+ },
3304
+ {
3305
+ x: ur,
3306
+ y: -ur / 2
3307
+ },
3308
+ {
3309
+ x: ur / 2,
3310
+ y: -ur
3311
+ },
3312
+ {
3313
+ x: 0,
3314
+ y: -ur / 2
3315
+ }
3316
+ ], fr = intersect_default.polygon(St, dr, lr);
3317
+ return {
3318
+ x: fr.x - .5,
3319
+ y: fr.y - .5
3320
+ };
3321
+ }, lr.intersect = function(St) {
3322
+ return this.calcIntersect(lr, St);
3323
+ }, fr;
3324
+ }
3325
+ __name(question, "question");
3326
+ async function rect_left_inv_arrow(St, lr) {
3327
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3328
+ lr.labelStyle = ur;
3329
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = Math.max(pr.width + (lr.padding ?? 0), lr?.width ?? 0), gr = Math.max(pr.height + (lr.padding ?? 0), lr?.height ?? 0), _r = -hr / 2, vr = -gr / 2, yr = vr / 2, br = [
3330
+ {
3331
+ x: _r + yr,
3332
+ y: vr
3333
+ },
3334
+ {
3335
+ x: _r,
3336
+ y: 0
3337
+ },
3338
+ {
3339
+ x: _r + yr,
3340
+ y: -vr
3341
+ },
3342
+ {
3343
+ x: -_r,
3344
+ y: -vr
3345
+ },
3346
+ {
3347
+ x: -_r,
3348
+ y: vr
3349
+ }
3350
+ ], { cssStyles: xr } = lr, Sr = at.svg(fr), Cr = userNodeOverrides(lr, {});
3351
+ lr.look !== "handDrawn" && (Cr.roughness = 0, Cr.fillStyle = "solid");
3352
+ let wr = createPathFromPoints(br), Tr = Sr.path(wr, Cr), Or = fr.insert(() => Tr, ":first-child");
3353
+ return Or.attr("class", "basic label-container"), xr && lr.look !== "handDrawn" && Or.selectAll("path").attr("style", xr), dr && lr.look !== "handDrawn" && Or.selectAll("path").attr("style", dr), Or.attr("transform", `translate(${-yr / 2},0)`), mr.attr("transform", `translate(${-yr / 2 - pr.width / 2 - (pr.x - (pr.left ?? 0))}, ${-(pr.height / 2) - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, Or), lr.intersect = function(St) {
3354
+ return intersect_default.polygon(lr, br, St);
3355
+ }, fr;
3356
+ }
3357
+ __name(rect_left_inv_arrow, "rect_left_inv_arrow");
3358
+ async function rectWithTitle(St, lr) {
3359
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3360
+ lr.labelStyle = ur;
3361
+ let pr;
3362
+ pr = lr.cssClasses ? "node " + lr.cssClasses : "node default";
3363
+ let hr = St.insert("g").attr("class", pr).attr("id", lr.domId || lr.id), gr = hr.insert("g"), _r = hr.insert("g").attr("class", "label").attr("style", dr), vr = lr.description, yr = lr.label, xr = _r.node().appendChild(await createLabel_default(yr, lr.labelStyle, !0, !0)), Cr = {
3364
+ width: 0,
3365
+ height: 0
3366
+ };
3367
+ if (evaluate(getConfig2()?.flowchart?.htmlLabels)) {
3368
+ let St = xr.children[0], lr = select_default(xr);
3369
+ Cr = St.getBoundingClientRect(), lr.attr("width", Cr.width), lr.attr("height", Cr.height);
3370
+ }
3371
+ log.info("Text 2", vr);
3372
+ let wr = vr || [], Tr = xr.getBBox(), Or = _r.node().appendChild(await createLabel_default(wr.join ? wr.join("<br/>") : wr, lr.labelStyle, !0, !0)), kr = Or.children[0], Ar = select_default(Or);
3373
+ Cr = kr.getBoundingClientRect(), Ar.attr("width", Cr.width), Ar.attr("height", Cr.height);
3374
+ let jr = (lr.padding || 0) / 2;
3375
+ select_default(Or).attr("transform", "translate( " + (Cr.width > Tr.width ? 0 : (Tr.width - Cr.width) / 2) + ", " + (Tr.height + jr + 5) + ")"), select_default(xr).attr("transform", "translate( " + (Cr.width < Tr.width ? 0 : -(Tr.width - Cr.width) / 2) + ", 0)"), Cr = _r.node().getBBox(), _r.attr("transform", "translate(" + -Cr.width / 2 + ", " + (-Cr.height / 2 - jr + 3) + ")");
3376
+ let Mr = Cr.width + (lr.padding || 0), Nr = Cr.height + (lr.padding || 0), Pr = -Cr.width / 2 - jr, Fr = -Cr.height / 2 - jr, Ir, Lr;
3377
+ if (lr.look === "handDrawn") {
3378
+ let St = at.svg(hr), ur = userNodeOverrides(lr, {}), dr = St.path(createRoundedRectPathD(Pr, Fr, Mr, Nr, lr.rx || 0), ur), pr = St.line(-Cr.width / 2 - jr, -Cr.height / 2 - jr + Tr.height + jr, Cr.width / 2 + jr, -Cr.height / 2 - jr + Tr.height + jr, ur);
3379
+ Lr = hr.insert(() => (log.debug("Rough node insert CXC", dr), pr), ":first-child"), Ir = hr.insert(() => (log.debug("Rough node insert CXC", dr), dr), ":first-child");
3380
+ } else Ir = gr.insert("rect", ":first-child"), Lr = gr.insert("line"), Ir.attr("class", "outer title-state").attr("style", dr).attr("x", -Cr.width / 2 - jr).attr("y", -Cr.height / 2 - jr).attr("width", Cr.width + (lr.padding || 0)).attr("height", Cr.height + (lr.padding || 0)), Lr.attr("class", "divider").attr("x1", -Cr.width / 2 - jr).attr("x2", Cr.width / 2 + jr).attr("y1", -Cr.height / 2 - jr + Tr.height + jr).attr("y2", -Cr.height / 2 - jr + Tr.height + jr);
3381
+ return updateNodeBounds(lr, Ir), lr.intersect = function(St) {
3382
+ return intersect_default.rect(lr, St);
3383
+ }, hr;
3384
+ }
3385
+ __name(rectWithTitle, "rectWithTitle");
3386
+ function generateArcPoints2(St, lr, ur, dr, fr, pr, mr) {
3387
+ let hr = (St + ur) / 2, gr = (lr + dr) / 2, _r = Math.atan2(dr - lr, ur - St), vr = (ur - St) / 2, yr = (dr - lr) / 2, br = vr / fr, xr = yr / pr, Sr = Math.sqrt(br ** 2 + xr ** 2);
3388
+ if (Sr > 1) throw Error("The given radii are too small to create an arc between the points.");
3389
+ let Cr = Math.sqrt(1 - Sr ** 2), wr = hr + Cr * pr * Math.sin(_r) * (mr ? -1 : 1), Tr = gr - Cr * fr * Math.cos(_r) * (mr ? -1 : 1), Er = Math.atan2((lr - Tr) / pr, (St - wr) / fr), Dr = Math.atan2((dr - Tr) / pr, (ur - wr) / fr) - Er;
3390
+ mr && Dr < 0 && (Dr += 2 * Math.PI), !mr && Dr > 0 && (Dr -= 2 * Math.PI);
3391
+ let Or = [];
3392
+ for (let St = 0; St < 20; St++) {
3393
+ let lr = Er + St / 19 * Dr, ur = wr + fr * Math.cos(lr), dr = Tr + pr * Math.sin(lr);
3394
+ Or.push({
3395
+ x: ur,
3396
+ y: dr
3397
+ });
3398
+ }
3399
+ return Or;
3400
+ }
3401
+ __name(generateArcPoints2, "generateArcPoints");
3402
+ async function roundedRect(St, lr) {
3403
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3404
+ lr.labelStyle = ur;
3405
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = lr?.padding ?? 0, hr = lr?.padding ?? 0, gr = (lr?.width ? lr?.width : pr.width) + mr * 2, _r = (lr?.height ? lr?.height : pr.height) + hr * 2, vr = lr.radius || 5, yr = lr.taper || 5, { cssStyles: br } = lr, xr = at.svg(fr), Sr = userNodeOverrides(lr, {});
3406
+ lr.stroke && (Sr.stroke = lr.stroke), lr.look !== "handDrawn" && (Sr.roughness = 0, Sr.fillStyle = "solid");
3407
+ let Cr = [
3408
+ {
3409
+ x: -gr / 2 + yr,
3410
+ y: -_r / 2
3411
+ },
3412
+ {
3413
+ x: gr / 2 - yr,
3414
+ y: -_r / 2
3415
+ },
3416
+ ...generateArcPoints2(gr / 2 - yr, -_r / 2, gr / 2, -_r / 2 + yr, vr, vr, !0),
3417
+ {
3418
+ x: gr / 2,
3419
+ y: -_r / 2 + yr
3420
+ },
3421
+ {
3422
+ x: gr / 2,
3423
+ y: _r / 2 - yr
3424
+ },
3425
+ ...generateArcPoints2(gr / 2, _r / 2 - yr, gr / 2 - yr, _r / 2, vr, vr, !0),
3426
+ {
3427
+ x: gr / 2 - yr,
3428
+ y: _r / 2
3429
+ },
3430
+ {
3431
+ x: -gr / 2 + yr,
3432
+ y: _r / 2
3433
+ },
3434
+ ...generateArcPoints2(-gr / 2 + yr, _r / 2, -gr / 2, _r / 2 - yr, vr, vr, !0),
3435
+ {
3436
+ x: -gr / 2,
3437
+ y: _r / 2 - yr
3438
+ },
3439
+ {
3440
+ x: -gr / 2,
3441
+ y: -_r / 2 + yr
3442
+ },
3443
+ ...generateArcPoints2(-gr / 2, -_r / 2 + yr, -gr / 2 + yr, -_r / 2, vr, vr, !0)
3444
+ ], wr = createPathFromPoints(Cr), Tr = xr.path(wr, Sr), Or = fr.insert(() => Tr, ":first-child");
3445
+ return Or.attr("class", "basic label-container outer-path"), br && lr.look !== "handDrawn" && Or.selectChildren("path").attr("style", br), dr && lr.look !== "handDrawn" && Or.selectChildren("path").attr("style", dr), updateNodeBounds(lr, Or), lr.intersect = function(St) {
3446
+ return intersect_default.polygon(lr, Cr, St);
3447
+ }, fr;
3448
+ }
3449
+ __name(roundedRect, "roundedRect");
3450
+ async function shadedProcess(St, lr) {
3451
+ let { labelStyles: ur, nodeStyles: fr } = styles2String(lr);
3452
+ lr.labelStyle = ur;
3453
+ let { shapeSvg: pr, bbox: mr, label: hr } = await labelHelper(St, lr, getNodeClasses(lr)), gr = lr?.padding ?? 0, _r = Math.max(mr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), vr = Math.max(mr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), yr = -mr.width / 2 - gr, br = -mr.height / 2 - gr, { cssStyles: xr } = lr, Sr = at.svg(pr), Cr = userNodeOverrides(lr, {});
3454
+ lr.look !== "handDrawn" && (Cr.roughness = 0, Cr.fillStyle = "solid");
3455
+ let wr = [
3456
+ {
3457
+ x: yr,
3458
+ y: br
3459
+ },
3460
+ {
3461
+ x: yr + _r + 8,
3462
+ y: br
3463
+ },
3464
+ {
3465
+ x: yr + _r + 8,
3466
+ y: br + vr
3467
+ },
3468
+ {
3469
+ x: yr - 8,
3470
+ y: br + vr
3471
+ },
3472
+ {
3473
+ x: yr - 8,
3474
+ y: br
3475
+ },
3476
+ {
3477
+ x: yr,
3478
+ y: br
3479
+ },
3480
+ {
3481
+ x: yr,
3482
+ y: br + vr
3483
+ }
3484
+ ], Tr = Sr.polygon(wr.map((St) => [St.x, St.y]), Cr), Or = pr.insert(() => Tr, ":first-child");
3485
+ return Or.attr("class", "basic label-container").attr("style", handleUndefinedAttr(xr)), fr && lr.look !== "handDrawn" && Or.selectAll("path").attr("style", fr), xr && lr.look !== "handDrawn" && Or.selectAll("path").attr("style", fr), hr.attr("transform", `translate(${-_r / 2 + 4 + (lr.padding ?? 0) - (mr.x - (mr.left ?? 0))},${-vr / 2 + (lr.padding ?? 0) - (mr.y - (mr.top ?? 0))})`), updateNodeBounds(lr, Or), lr.intersect = function(St) {
3486
+ return intersect_default.rect(lr, St);
3487
+ }, pr;
3488
+ }
3489
+ __name(shadedProcess, "shadedProcess");
3490
+ async function slopedRect(St, lr) {
3491
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3492
+ lr.labelStyle = ur;
3493
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = Math.max(pr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), gr = Math.max(pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), _r = -hr / 2, vr = -gr / 2, { cssStyles: yr } = lr, br = at.svg(fr), xr = userNodeOverrides(lr, {});
3494
+ lr.look !== "handDrawn" && (xr.roughness = 0, xr.fillStyle = "solid");
3495
+ let Sr = [
3496
+ {
3497
+ x: _r,
3498
+ y: vr
3499
+ },
3500
+ {
3501
+ x: _r,
3502
+ y: vr + gr
3503
+ },
3504
+ {
3505
+ x: _r + hr,
3506
+ y: vr + gr
3507
+ },
3508
+ {
3509
+ x: _r + hr,
3510
+ y: vr - gr / 2
3511
+ }
3512
+ ], Cr = createPathFromPoints(Sr), wr = br.path(Cr, xr), Tr = fr.insert(() => wr, ":first-child");
3513
+ return Tr.attr("class", "basic label-container"), yr && lr.look !== "handDrawn" && Tr.selectChildren("path").attr("style", yr), dr && lr.look !== "handDrawn" && Tr.selectChildren("path").attr("style", dr), Tr.attr("transform", `translate(0, ${gr / 4})`), mr.attr("transform", `translate(${-hr / 2 + (lr.padding ?? 0) - (pr.x - (pr.left ?? 0))}, ${-gr / 4 + (lr.padding ?? 0) - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, Tr), lr.intersect = function(St) {
3514
+ return intersect_default.polygon(lr, Sr, St);
3515
+ }, fr;
3516
+ }
3517
+ __name(slopedRect, "slopedRect");
3518
+ async function squareRect2(St, lr) {
3519
+ return drawRect(St, lr, {
3520
+ rx: 0,
3521
+ ry: 0,
3522
+ classes: "",
3523
+ labelPaddingX: lr.labelPaddingX ?? (lr?.padding || 0) * 2,
3524
+ labelPaddingY: (lr?.padding || 0) * 1
3525
+ });
3526
+ }
3527
+ __name(squareRect2, "squareRect");
3528
+ async function stadium(St, lr) {
3529
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3530
+ lr.labelStyle = ur;
3531
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = pr.height + lr.padding, hr = pr.width + mr / 4 + lr.padding, gr = mr / 2, { cssStyles: _r } = lr, vr = at.svg(fr), yr = userNodeOverrides(lr, {});
3532
+ lr.look !== "handDrawn" && (yr.roughness = 0, yr.fillStyle = "solid");
3533
+ let br = [
3534
+ {
3535
+ x: -hr / 2 + gr,
3536
+ y: -mr / 2
3537
+ },
3538
+ {
3539
+ x: hr / 2 - gr,
3540
+ y: -mr / 2
3541
+ },
3542
+ ...generateCirclePoints(-hr / 2 + gr, 0, gr, 50, 90, 270),
3543
+ {
3544
+ x: hr / 2 - gr,
3545
+ y: mr / 2
3546
+ },
3547
+ ...generateCirclePoints(hr / 2 - gr, 0, gr, 50, 270, 450)
3548
+ ], xr = createPathFromPoints(br), Sr = vr.path(xr, yr), Cr = fr.insert(() => Sr, ":first-child");
3549
+ return Cr.attr("class", "basic label-container outer-path"), _r && lr.look !== "handDrawn" && Cr.selectChildren("path").attr("style", _r), dr && lr.look !== "handDrawn" && Cr.selectChildren("path").attr("style", dr), updateNodeBounds(lr, Cr), lr.intersect = function(St) {
3550
+ return intersect_default.polygon(lr, br, St);
3551
+ }, fr;
3552
+ }
3553
+ __name(stadium, "stadium");
3554
+ async function state(St, lr) {
3555
+ return drawRect(St, lr, {
3556
+ rx: 5,
3557
+ ry: 5,
3558
+ classes: "flowchart-node"
3559
+ });
3560
+ }
3561
+ __name(state, "state");
3562
+ function stateEnd(St, lr, { config: { themeVariables: ur } }) {
3563
+ let { labelStyles: dr, nodeStyles: fr } = styles2String(lr);
3564
+ lr.labelStyle = dr;
3565
+ let { cssStyles: pr } = lr, { lineColor: mr, stateBorder: hr, nodeBorder: gr } = ur, _r = St.insert("g").attr("class", "node default").attr("id", lr.domId || lr.id), vr = at.svg(_r), yr = userNodeOverrides(lr, {});
3566
+ lr.look !== "handDrawn" && (yr.roughness = 0, yr.fillStyle = "solid");
3567
+ let br = vr.circle(0, 0, 14, {
3568
+ ...yr,
3569
+ stroke: mr,
3570
+ strokeWidth: 2
3571
+ }), xr = hr ?? gr, Sr = vr.circle(0, 0, 5, {
3572
+ ...yr,
3573
+ fill: xr,
3574
+ stroke: xr,
3575
+ strokeWidth: 2,
3576
+ fillStyle: "solid"
3577
+ }), Cr = _r.insert(() => br, ":first-child");
3578
+ return Cr.insert(() => Sr), pr && Cr.selectAll("path").attr("style", pr), fr && Cr.selectAll("path").attr("style", fr), updateNodeBounds(lr, Cr), lr.intersect = function(St) {
3579
+ return intersect_default.circle(lr, 7, St);
3580
+ }, _r;
3581
+ }
3582
+ __name(stateEnd, "stateEnd");
3583
+ function stateStart(St, lr, { config: { themeVariables: ur } }) {
3584
+ let { lineColor: dr } = ur, fr = St.insert("g").attr("class", "node default").attr("id", lr.domId || lr.id), pr;
3585
+ if (lr.look === "handDrawn") {
3586
+ let St = at.svg(fr).circle(0, 0, 14, solidStateFill(dr));
3587
+ pr = fr.insert(() => St), pr.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14);
3588
+ } else pr = fr.insert("circle", ":first-child"), pr.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14);
3589
+ return updateNodeBounds(lr, pr), lr.intersect = function(St) {
3590
+ return intersect_default.circle(lr, 7, St);
3591
+ }, fr;
3592
+ }
3593
+ __name(stateStart, "stateStart");
3594
+ async function subroutine(St, lr) {
3595
+ let { labelStyles: ur, nodeStyles: fr } = styles2String(lr);
3596
+ lr.labelStyle = ur;
3597
+ let { shapeSvg: pr, bbox: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = (lr?.padding || 0) / 2, gr = mr.width + lr.padding, _r = mr.height + lr.padding, vr = -mr.width / 2 - hr, yr = -mr.height / 2 - hr, br = [
3598
+ {
3599
+ x: 0,
3600
+ y: 0
3601
+ },
3602
+ {
3603
+ x: gr,
3604
+ y: 0
3605
+ },
3606
+ {
3607
+ x: gr,
3608
+ y: -_r
3609
+ },
3610
+ {
3611
+ x: 0,
3612
+ y: -_r
3613
+ },
3614
+ {
3615
+ x: 0,
3616
+ y: 0
3617
+ },
3618
+ {
3619
+ x: -8,
3620
+ y: 0
3621
+ },
3622
+ {
3623
+ x: gr + 8,
3624
+ y: 0
3625
+ },
3626
+ {
3627
+ x: gr + 8,
3628
+ y: -_r
3629
+ },
3630
+ {
3631
+ x: -8,
3632
+ y: -_r
3633
+ },
3634
+ {
3635
+ x: -8,
3636
+ y: 0
3637
+ }
3638
+ ];
3639
+ if (lr.look === "handDrawn") {
3640
+ let St = at.svg(pr), ur = userNodeOverrides(lr, {}), fr = St.rectangle(vr - 8, yr, gr + 16, _r, ur), mr = St.line(vr, yr, vr, yr + _r, ur), hr = St.line(vr + gr, yr, vr + gr, yr + _r, ur);
3641
+ pr.insert(() => mr, ":first-child"), pr.insert(() => hr, ":first-child");
3642
+ let br = pr.insert(() => fr, ":first-child"), { cssStyles: xr } = lr;
3643
+ br.attr("class", "basic label-container").attr("style", handleUndefinedAttr(xr)), updateNodeBounds(lr, br);
3644
+ } else {
3645
+ let St = insertPolygonShape(pr, gr, _r, br);
3646
+ fr && St.attr("style", fr), updateNodeBounds(lr, St);
3647
+ }
3648
+ return lr.intersect = function(St) {
3649
+ return intersect_default.polygon(lr, br, St);
3650
+ }, pr;
3651
+ }
3652
+ __name(subroutine, "subroutine");
3653
+ async function taggedRect(St, lr) {
3654
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3655
+ lr.labelStyle = ur;
3656
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = Math.max(pr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), hr = Math.max(pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), gr = -mr / 2, _r = -hr / 2, vr = .2 * hr, yr = .2 * hr, { cssStyles: br } = lr, xr = at.svg(fr), Sr = userNodeOverrides(lr, {}), Cr = [
3657
+ {
3658
+ x: gr - vr / 2,
3659
+ y: _r
3660
+ },
3661
+ {
3662
+ x: gr + mr + vr / 2,
3663
+ y: _r
3664
+ },
3665
+ {
3666
+ x: gr + mr + vr / 2,
3667
+ y: _r + hr
3668
+ },
3669
+ {
3670
+ x: gr - vr / 2,
3671
+ y: _r + hr
3672
+ }
3673
+ ], wr = [
3674
+ {
3675
+ x: gr + mr - vr / 2,
3676
+ y: _r + hr
3677
+ },
3678
+ {
3679
+ x: gr + mr + vr / 2,
3680
+ y: _r + hr
3681
+ },
3682
+ {
3683
+ x: gr + mr + vr / 2,
3684
+ y: _r + hr - yr
3685
+ }
3686
+ ];
3687
+ lr.look !== "handDrawn" && (Sr.roughness = 0, Sr.fillStyle = "solid");
3688
+ let Tr = createPathFromPoints(Cr), Or = xr.path(Tr, Sr), kr = createPathFromPoints(wr), Ar = xr.path(kr, {
3689
+ ...Sr,
3690
+ fillStyle: "solid"
3691
+ }), jr = fr.insert(() => Ar, ":first-child");
3692
+ return jr.insert(() => Or, ":first-child"), jr.attr("class", "basic label-container"), br && lr.look !== "handDrawn" && jr.selectAll("path").attr("style", br), dr && lr.look !== "handDrawn" && jr.selectAll("path").attr("style", dr), updateNodeBounds(lr, jr), lr.intersect = function(St) {
3693
+ return intersect_default.polygon(lr, Cr, St);
3694
+ }, fr;
3695
+ }
3696
+ __name(taggedRect, "taggedRect");
3697
+ async function taggedWaveEdgedRectangle(St, lr) {
3698
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3699
+ lr.labelStyle = ur;
3700
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = Math.max(pr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), gr = Math.max(pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), _r = gr / 4, vr = .2 * hr, yr = .2 * gr, br = gr + _r, { cssStyles: xr } = lr, Sr = at.svg(fr), Cr = userNodeOverrides(lr, {});
3701
+ lr.look !== "handDrawn" && (Cr.roughness = 0, Cr.fillStyle = "solid");
3702
+ let wr = [
3703
+ {
3704
+ x: -hr / 2 - hr / 2 * .1,
3705
+ y: br / 2
3706
+ },
3707
+ ...generateFullSineWavePoints(-hr / 2 - hr / 2 * .1, br / 2, hr / 2 + hr / 2 * .1, br / 2, _r, .8),
3708
+ {
3709
+ x: hr / 2 + hr / 2 * .1,
3710
+ y: -br / 2
3711
+ },
3712
+ {
3713
+ x: -hr / 2 - hr / 2 * .1,
3714
+ y: -br / 2
3715
+ }
3716
+ ], Tr = -hr / 2 + hr / 2 * .1, Or = -br / 2 - yr * .4, kr = [
3717
+ {
3718
+ x: Tr + hr - vr,
3719
+ y: (Or + gr) * 1.4
3720
+ },
3721
+ {
3722
+ x: Tr + hr,
3723
+ y: Or + gr - yr
3724
+ },
3725
+ {
3726
+ x: Tr + hr,
3727
+ y: (Or + gr) * .9
3728
+ },
3729
+ ...generateFullSineWavePoints(Tr + hr, (Or + gr) * 1.3, Tr + hr - vr, (Or + gr) * 1.5, -gr * .03, .5)
3730
+ ], Ar = createPathFromPoints(wr), jr = Sr.path(Ar, Cr), Mr = createPathFromPoints(kr), Nr = Sr.path(Mr, {
3731
+ ...Cr,
3732
+ fillStyle: "solid"
3733
+ }), Pr = fr.insert(() => Nr, ":first-child");
3734
+ return Pr.insert(() => jr, ":first-child"), Pr.attr("class", "basic label-container"), xr && lr.look !== "handDrawn" && Pr.selectAll("path").attr("style", xr), dr && lr.look !== "handDrawn" && Pr.selectAll("path").attr("style", dr), Pr.attr("transform", `translate(0,${-_r / 2})`), mr.attr("transform", `translate(${-hr / 2 + (lr.padding ?? 0) - (pr.x - (pr.left ?? 0))},${-gr / 2 + (lr.padding ?? 0) - _r / 2 - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, Pr), lr.intersect = function(St) {
3735
+ return intersect_default.polygon(lr, wr, St);
3736
+ }, fr;
3737
+ }
3738
+ __name(taggedWaveEdgedRectangle, "taggedWaveEdgedRectangle");
3739
+ async function text(St, lr) {
3740
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3741
+ lr.labelStyle = ur;
3742
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = Math.max(pr.width + lr.padding, lr?.width || 0), hr = Math.max(pr.height + lr.padding, lr?.height || 0), gr = -mr / 2, _r = -hr / 2, vr = fr.insert("rect", ":first-child");
3743
+ return vr.attr("class", "text").attr("style", dr).attr("rx", 0).attr("ry", 0).attr("x", gr).attr("y", _r).attr("width", mr).attr("height", hr), updateNodeBounds(lr, vr), lr.intersect = function(St) {
3744
+ return intersect_default.rect(lr, St);
3745
+ }, fr;
3746
+ }
3747
+ __name(text, "text");
3748
+ var createCylinderPathD3 = /* @__PURE__ */ __name((St, lr, ur, dr, fr, pr) => `M${St},${lr}
3749
+ a${fr},${pr} 0,0,1 0,${-dr}
3750
+ l${ur},0
3751
+ a${fr},${pr} 0,0,1 0,${dr}
3752
+ M${ur},${-dr}
3753
+ a${fr},${pr} 0,0,0 0,${dr}
3754
+ l${-ur},0`, "createCylinderPathD"), createOuterCylinderPathD3 = /* @__PURE__ */ __name((St, lr, ur, dr, fr, pr) => [
3755
+ `M${St},${lr}`,
3756
+ `M${St + ur},${lr}`,
3757
+ `a${fr},${pr} 0,0,0 0,${-dr}`,
3758
+ `l${-ur},0`,
3759
+ `a${fr},${pr} 0,0,0 0,${dr}`,
3760
+ `l${ur},0`
3761
+ ].join(" "), "createOuterCylinderPathD"), createInnerCylinderPathD3 = /* @__PURE__ */ __name((St, lr, ur, dr, fr, pr) => [`M${St + ur / 2},${-dr / 2}`, `a${fr},${pr} 0,0,0 0,${dr}`].join(" "), "createInnerCylinderPathD");
3762
+ async function tiltedCylinder(St, lr) {
3763
+ let { labelStyles: ur, nodeStyles: fr } = styles2String(lr);
3764
+ lr.labelStyle = ur;
3765
+ let { shapeSvg: pr, bbox: mr, label: hr, halfPadding: gr } = await labelHelper(St, lr, getNodeClasses(lr)), _r = lr.look === "neo" ? gr * 2 : gr, vr = mr.height + _r, yr = vr / 2, br = yr / (2.5 + vr / 50), xr = mr.width + br + _r, { cssStyles: Sr } = lr, Cr;
3766
+ if (lr.look === "handDrawn") {
3767
+ let St = at.svg(pr), ur = createOuterCylinderPathD3(0, 0, xr, vr, br, yr), dr = createInnerCylinderPathD3(0, 0, xr, vr, br, yr), fr = St.path(ur, userNodeOverrides(lr, {})), mr = St.path(dr, userNodeOverrides(lr, { fill: "none" }));
3768
+ Cr = pr.insert(() => mr, ":first-child"), Cr = pr.insert(() => fr, ":first-child"), Cr.attr("class", "basic label-container"), Sr && Cr.attr("style", Sr);
3769
+ } else {
3770
+ let St = createCylinderPathD3(0, 0, xr, vr, br, yr);
3771
+ Cr = pr.insert("path", ":first-child").attr("d", St).attr("class", "basic label-container").attr("style", handleUndefinedAttr(Sr)).attr("style", fr), Cr.attr("class", "basic label-container"), Sr && Cr.selectAll("path").attr("style", Sr), fr && Cr.selectAll("path").attr("style", fr);
3772
+ }
3773
+ return Cr.attr("label-offset-x", br), Cr.attr("transform", `translate(${-xr / 2}, ${vr / 2} )`), hr.attr("transform", `translate(${-(mr.width / 2) - br - (mr.x - (mr.left ?? 0))}, ${-(mr.height / 2) - (mr.y - (mr.top ?? 0))})`), updateNodeBounds(lr, Cr), lr.intersect = function(St) {
3774
+ let ur = intersect_default.rect(lr, St), dr = ur.y - (lr.y ?? 0);
3775
+ if (yr != 0 && (Math.abs(dr) < (lr.height ?? 0) / 2 || Math.abs(dr) == (lr.height ?? 0) / 2 && Math.abs(ur.x - (lr.x ?? 0)) > (lr.width ?? 0) / 2 - br)) {
3776
+ let fr = br * br * (1 - dr * dr / (yr * yr));
3777
+ fr != 0 && (fr = Math.sqrt(Math.abs(fr))), fr = br - fr, St.x - (lr.x ?? 0) > 0 && (fr = -fr), ur.x += fr;
3778
+ }
3779
+ return ur;
3780
+ }, pr;
3781
+ }
3782
+ __name(tiltedCylinder, "tiltedCylinder");
3783
+ async function trapezoid(St, lr) {
3784
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3785
+ lr.labelStyle = ur;
3786
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = pr.width + lr.padding, hr = pr.height + lr.padding, gr = [
3787
+ {
3788
+ x: -3 * hr / 6,
3789
+ y: 0
3790
+ },
3791
+ {
3792
+ x: mr + 3 * hr / 6,
3793
+ y: 0
3794
+ },
3795
+ {
3796
+ x: mr,
3797
+ y: -hr
3798
+ },
3799
+ {
3800
+ x: 0,
3801
+ y: -hr
3802
+ }
3803
+ ], _r, { cssStyles: vr } = lr;
3804
+ if (lr.look === "handDrawn") {
3805
+ let St = at.svg(fr), ur = userNodeOverrides(lr, {}), dr = createPathFromPoints(gr), pr = St.path(dr, ur);
3806
+ _r = fr.insert(() => pr, ":first-child").attr("transform", `translate(${-mr / 2}, ${hr / 2})`), vr && _r.attr("style", vr);
3807
+ } else _r = insertPolygonShape(fr, mr, hr, gr);
3808
+ return dr && _r.attr("style", dr), lr.width = mr, lr.height = hr, updateNodeBounds(lr, _r), lr.intersect = function(St) {
3809
+ return intersect_default.polygon(lr, gr, St);
3810
+ }, fr;
3811
+ }
3812
+ __name(trapezoid, "trapezoid");
3813
+ async function trapezoidalPentagon(St, lr) {
3814
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3815
+ lr.labelStyle = ur;
3816
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = Math.max(60, pr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), hr = Math.max(20, pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), { cssStyles: gr } = lr, _r = at.svg(fr), vr = userNodeOverrides(lr, {});
3817
+ lr.look !== "handDrawn" && (vr.roughness = 0, vr.fillStyle = "solid");
3818
+ let yr = [
3819
+ {
3820
+ x: -mr / 2 * .8,
3821
+ y: -hr / 2
3822
+ },
3823
+ {
3824
+ x: mr / 2 * .8,
3825
+ y: -hr / 2
3826
+ },
3827
+ {
3828
+ x: mr / 2,
3829
+ y: -hr / 2 * .6
3830
+ },
3831
+ {
3832
+ x: mr / 2,
3833
+ y: hr / 2
3834
+ },
3835
+ {
3836
+ x: -mr / 2,
3837
+ y: hr / 2
3838
+ },
3839
+ {
3840
+ x: -mr / 2,
3841
+ y: -hr / 2 * .6
3842
+ }
3843
+ ], br = createPathFromPoints(yr), xr = _r.path(br, vr), Sr = fr.insert(() => xr, ":first-child");
3844
+ return Sr.attr("class", "basic label-container"), gr && lr.look !== "handDrawn" && Sr.selectChildren("path").attr("style", gr), dr && lr.look !== "handDrawn" && Sr.selectChildren("path").attr("style", dr), updateNodeBounds(lr, Sr), lr.intersect = function(St) {
3845
+ return intersect_default.polygon(lr, yr, St);
3846
+ }, fr;
3847
+ }
3848
+ __name(trapezoidalPentagon, "trapezoidalPentagon");
3849
+ async function triangle(St, lr) {
3850
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3851
+ lr.labelStyle = ur;
3852
+ let { shapeSvg: pr, bbox: mr, label: hr } = await labelHelper(St, lr, getNodeClasses(lr)), gr = evaluate(getConfig2().flowchart?.htmlLabels), _r = mr.width + (lr.padding ?? 0), vr = _r + mr.height, yr = _r + mr.height, xr = [
3853
+ {
3854
+ x: 0,
3855
+ y: 0
3856
+ },
3857
+ {
3858
+ x: yr,
3859
+ y: 0
3860
+ },
3861
+ {
3862
+ x: yr / 2,
3863
+ y: -vr
3864
+ }
3865
+ ], { cssStyles: Cr } = lr, wr = at.svg(pr), Tr = userNodeOverrides(lr, {});
3866
+ lr.look !== "handDrawn" && (Tr.roughness = 0, Tr.fillStyle = "solid");
3867
+ let Or = createPathFromPoints(xr), kr = wr.path(Or, Tr), Ar = pr.insert(() => kr, ":first-child").attr("transform", `translate(${-vr / 2}, ${vr / 2})`);
3868
+ return Cr && lr.look !== "handDrawn" && Ar.selectChildren("path").attr("style", Cr), dr && lr.look !== "handDrawn" && Ar.selectChildren("path").attr("style", dr), lr.width = _r, lr.height = vr, updateNodeBounds(lr, Ar), hr.attr("transform", `translate(${-mr.width / 2 - (mr.x - (mr.left ?? 0))}, ${vr / 2 - (mr.height + (lr.padding ?? 0) / (gr ? 2 : 1) - (mr.y - (mr.top ?? 0)))})`), lr.intersect = function(St) {
3869
+ return log.info("Triangle intersect", lr, xr, St), intersect_default.polygon(lr, xr, St);
3870
+ }, pr;
3871
+ }
3872
+ __name(triangle, "triangle");
3873
+ async function waveEdgedRectangle(St, lr) {
3874
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3875
+ lr.labelStyle = ur;
3876
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = Math.max(pr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), gr = Math.max(pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), _r = gr / 8, vr = gr + _r, { cssStyles: yr } = lr, br = 70 - hr, xr = br > 0 ? br / 2 : 0, Sr = at.svg(fr), Cr = userNodeOverrides(lr, {});
3877
+ lr.look !== "handDrawn" && (Cr.roughness = 0, Cr.fillStyle = "solid");
3878
+ let wr = [
3879
+ {
3880
+ x: -hr / 2 - xr,
3881
+ y: vr / 2
3882
+ },
3883
+ ...generateFullSineWavePoints(-hr / 2 - xr, vr / 2, hr / 2 + xr, vr / 2, _r, .8),
3884
+ {
3885
+ x: hr / 2 + xr,
3886
+ y: -vr / 2
3887
+ },
3888
+ {
3889
+ x: -hr / 2 - xr,
3890
+ y: -vr / 2
3891
+ }
3892
+ ], Tr = createPathFromPoints(wr), Or = Sr.path(Tr, Cr), kr = fr.insert(() => Or, ":first-child");
3893
+ return kr.attr("class", "basic label-container"), yr && lr.look !== "handDrawn" && kr.selectAll("path").attr("style", yr), dr && lr.look !== "handDrawn" && kr.selectAll("path").attr("style", dr), kr.attr("transform", `translate(0,${-_r / 2})`), mr.attr("transform", `translate(${-hr / 2 + (lr.padding ?? 0) - (pr.x - (pr.left ?? 0))},${-gr / 2 + (lr.padding ?? 0) - _r - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, kr), lr.intersect = function(St) {
3894
+ return intersect_default.polygon(lr, wr, St);
3895
+ }, fr;
3896
+ }
3897
+ __name(waveEdgedRectangle, "waveEdgedRectangle");
3898
+ async function waveRectangle(St, lr) {
3899
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3900
+ lr.labelStyle = ur;
3901
+ let { shapeSvg: fr, bbox: pr } = await labelHelper(St, lr, getNodeClasses(lr)), mr = Math.max(pr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), hr = Math.max(pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), gr = mr / hr, _r = mr, vr = hr;
3902
+ _r > vr * gr ? vr = _r / gr : _r = vr * gr, _r = Math.max(_r, 100), vr = Math.max(vr, 50);
3903
+ let yr = Math.min(vr * .2, vr / 4), br = vr + yr * 2, { cssStyles: xr } = lr, Sr = at.svg(fr), Cr = userNodeOverrides(lr, {});
3904
+ lr.look !== "handDrawn" && (Cr.roughness = 0, Cr.fillStyle = "solid");
3905
+ let wr = [
3906
+ {
3907
+ x: -_r / 2,
3908
+ y: br / 2
3909
+ },
3910
+ ...generateFullSineWavePoints(-_r / 2, br / 2, _r / 2, br / 2, yr, 1),
3911
+ {
3912
+ x: _r / 2,
3913
+ y: -br / 2
3914
+ },
3915
+ ...generateFullSineWavePoints(_r / 2, -br / 2, -_r / 2, -br / 2, yr, -1)
3916
+ ], Tr = createPathFromPoints(wr), Or = Sr.path(Tr, Cr), kr = fr.insert(() => Or, ":first-child");
3917
+ return kr.attr("class", "basic label-container"), xr && lr.look !== "handDrawn" && kr.selectAll("path").attr("style", xr), dr && lr.look !== "handDrawn" && kr.selectAll("path").attr("style", dr), updateNodeBounds(lr, kr), lr.intersect = function(St) {
3918
+ return intersect_default.polygon(lr, wr, St);
3919
+ }, fr;
3920
+ }
3921
+ __name(waveRectangle, "waveRectangle");
3922
+ async function windowPane(St, lr) {
3923
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
3924
+ lr.labelStyle = ur;
3925
+ let { shapeSvg: fr, bbox: pr, label: mr } = await labelHelper(St, lr, getNodeClasses(lr)), hr = Math.max(pr.width + (lr.padding ?? 0) * 2, lr?.width ?? 0), gr = Math.max(pr.height + (lr.padding ?? 0) * 2, lr?.height ?? 0), _r = -hr / 2, vr = -gr / 2, { cssStyles: yr } = lr, br = at.svg(fr), xr = userNodeOverrides(lr, {}), Sr = [
3926
+ {
3927
+ x: _r - 5,
3928
+ y: vr - 5
3929
+ },
3930
+ {
3931
+ x: _r - 5,
3932
+ y: vr + gr
3933
+ },
3934
+ {
3935
+ x: _r + hr,
3936
+ y: vr + gr
3937
+ },
3938
+ {
3939
+ x: _r + hr,
3940
+ y: vr - 5
3941
+ }
3942
+ ], Cr = `M${_r - 5},${vr - 5} L${_r + hr},${vr - 5} L${_r + hr},${vr + gr} L${_r - 5},${vr + gr} L${_r - 5},${vr - 5}
3943
+ M${_r - 5},${vr} L${_r + hr},${vr}
3944
+ M${_r},${vr - 5} L${_r},${vr + gr}`;
3945
+ lr.look !== "handDrawn" && (xr.roughness = 0, xr.fillStyle = "solid");
3946
+ let wr = br.path(Cr, xr), Tr = fr.insert(() => wr, ":first-child");
3947
+ return Tr.attr("transform", `translate(${5 / 2}, ${5 / 2})`), Tr.attr("class", "basic label-container"), yr && lr.look !== "handDrawn" && Tr.selectAll("path").attr("style", yr), dr && lr.look !== "handDrawn" && Tr.selectAll("path").attr("style", dr), mr.attr("transform", `translate(${-(pr.width / 2) + 5 / 2 - (pr.x - (pr.left ?? 0))}, ${-(pr.height / 2) + 5 / 2 - (pr.y - (pr.top ?? 0))})`), updateNodeBounds(lr, Tr), lr.intersect = function(St) {
3948
+ return intersect_default.polygon(lr, Sr, St);
3949
+ }, fr;
3950
+ }
3951
+ __name(windowPane, "windowPane");
3952
+ async function erBox(St, lr) {
3953
+ let dr = lr;
3954
+ if (dr.alias && (lr.label = dr.alias), lr.look === "handDrawn") {
3955
+ let { themeVariables: ur } = getConfig(), { background: dr } = ur;
3956
+ await erBox(St, {
3957
+ ...lr,
3958
+ id: lr.id + "-background",
3959
+ look: "default",
3960
+ cssStyles: ["stroke: none", `fill: ${dr}`]
3961
+ });
3962
+ }
3963
+ let fr = getConfig();
3964
+ lr.useHtmlLabels = fr.htmlLabels;
3965
+ let pr = fr.er?.diagramPadding ?? 10, hr = fr.er?.entityPadding ?? 6, { cssStyles: gr } = lr, { labelStyles: _r, nodeStyles: vr } = styles2String(lr);
3966
+ if (dr.attributes.length === 0 && lr.label) {
3967
+ let dr = {
3968
+ rx: 0,
3969
+ ry: 0,
3970
+ labelPaddingX: pr,
3971
+ labelPaddingY: pr * 1.5,
3972
+ classes: ""
3973
+ };
3974
+ calculateTextWidth(lr.label, fr) + dr.labelPaddingX * 2 < fr.er.minEntityWidth && (lr.width = fr.er.minEntityWidth);
3975
+ let mr = await drawRect(St, lr, dr);
3976
+ if (!evaluate(fr.htmlLabels)) {
3977
+ let St = mr.select("text"), lr = St.node()?.getBBox();
3978
+ St.attr("transform", `translate(${-lr.width / 2}, 0)`);
3979
+ }
3980
+ return mr;
3981
+ }
3982
+ fr.htmlLabels || (pr *= 1.25, hr *= 1.25);
3983
+ let yr = getNodeClasses(lr);
3984
+ yr ||= "node default";
3985
+ let br = St.insert("g").attr("class", yr).attr("id", lr.domId || lr.id), xr = await addText(br, lr.label ?? "", fr, 0, 0, ["name"], _r);
3986
+ xr.height += hr;
3987
+ let Cr = 0, Tr = [], Or = [], kr = 0, Ar = 0, jr = 0, Mr = 0, Nr = !0, Pr = !0;
3988
+ for (let St of dr.attributes) {
3989
+ let lr = await addText(br, St.type, fr, 0, Cr, ["attribute-type"], _r);
3990
+ kr = Math.max(kr, lr.width + pr);
3991
+ let ur = await addText(br, St.name, fr, 0, Cr, ["attribute-name"], _r);
3992
+ Ar = Math.max(Ar, ur.width + pr);
3993
+ let dr = await addText(br, St.keys.join(), fr, 0, Cr, ["attribute-keys"], _r);
3994
+ jr = Math.max(jr, dr.width + pr);
3995
+ let mr = await addText(br, St.comment, fr, 0, Cr, ["attribute-comment"], _r);
3996
+ Mr = Math.max(Mr, mr.width + pr);
3997
+ let gr = Math.max(lr.height, ur.height, dr.height, mr.height) + hr;
3998
+ Or.push({
3999
+ yOffset: Cr,
4000
+ rowHeight: gr
4001
+ }), Cr += gr;
4002
+ }
4003
+ let Fr = 4;
4004
+ jr <= pr && (Nr = !1, jr = 0, Fr--), Mr <= pr && (Pr = !1, Mr = 0, Fr--);
4005
+ let Ir = br.node().getBBox();
4006
+ if (xr.width + pr * 2 - (kr + Ar + jr + Mr) > 0) {
4007
+ let St = xr.width + pr * 2 - (kr + Ar + jr + Mr);
4008
+ kr += St / Fr, Ar += St / Fr, jr > 0 && (jr += St / Fr), Mr > 0 && (Mr += St / Fr);
4009
+ }
4010
+ let Lr = kr + Ar + jr + Mr, Rr = at.svg(br), zr = userNodeOverrides(lr, {});
4011
+ lr.look !== "handDrawn" && (zr.roughness = 0, zr.fillStyle = "solid");
4012
+ let Br = 0;
4013
+ Or.length > 0 && (Br = Or.reduce((St, lr) => St + (lr?.rowHeight ?? 0), 0));
4014
+ let Vr = Math.max(Ir.width + pr * 2, lr?.width || 0, Lr), Hr = Math.max((Br ?? 0) + xr.height, lr?.height || 0), Ur = -Vr / 2, Wr = -Hr / 2;
4015
+ br.selectAll("g:not(:first-child)").each((St, lr, ur) => {
4016
+ let dr = select_default(ur[lr]), fr = dr.attr("transform"), gr = 0, _r = 0;
4017
+ if (fr) {
4018
+ let St = RegExp(/translate\(([^,]+),([^)]+)\)/).exec(fr);
4019
+ St && (gr = parseFloat(St[1]), _r = parseFloat(St[2]), dr.attr("class").includes("attribute-name") ? gr += kr : dr.attr("class").includes("attribute-keys") ? gr += kr + Ar : dr.attr("class").includes("attribute-comment") && (gr += kr + Ar + jr));
4020
+ }
4021
+ dr.attr("transform", `translate(${Ur + pr / 2 + gr}, ${_r + Wr + xr.height + hr / 2})`);
4022
+ }), br.select(".name").attr("transform", "translate(" + -xr.width / 2 + ", " + (Wr + hr / 2) + ")");
4023
+ let Gr = Rr.rectangle(Ur, Wr, Vr, Hr, zr), Kr = br.insert(() => Gr, ":first-child").attr("style", gr.join("")), { themeVariables: qr } = getConfig(), { rowEven: Jr, rowOdd: Yr, nodeBorder: Xr } = qr;
4024
+ Tr.push(0);
4025
+ for (let [St, lr] of Or.entries()) {
4026
+ let ur = (St + 1) % 2 == 0 && lr.yOffset !== 0, dr = Rr.rectangle(Ur, xr.height + Wr + lr?.yOffset, Vr, lr?.rowHeight, {
4027
+ ...zr,
4028
+ fill: ur ? Jr : Yr,
4029
+ stroke: Xr
4030
+ });
4031
+ br.insert(() => dr, "g.label").attr("style", gr.join("")).attr("class", `row-rect-${ur ? "even" : "odd"}`);
4032
+ }
4033
+ let Zr = Rr.line(Ur, xr.height + Wr, Vr + Ur, xr.height + Wr, zr);
4034
+ br.insert(() => Zr).attr("class", "divider"), Zr = Rr.line(kr + Ur, xr.height + Wr, kr + Ur, Hr + Wr, zr), br.insert(() => Zr).attr("class", "divider"), Nr && (Zr = Rr.line(kr + Ar + Ur, xr.height + Wr, kr + Ar + Ur, Hr + Wr, zr), br.insert(() => Zr).attr("class", "divider")), Pr && (Zr = Rr.line(kr + Ar + jr + Ur, xr.height + Wr, kr + Ar + jr + Ur, Hr + Wr, zr), br.insert(() => Zr).attr("class", "divider"));
4035
+ for (let St of Tr) Zr = Rr.line(Ur, xr.height + Wr + St, Vr + Ur, xr.height + Wr + St, zr), br.insert(() => Zr).attr("class", "divider");
4036
+ if (updateNodeBounds(lr, Kr), vr && lr.look !== "handDrawn") {
4037
+ let St = vr.split(";")?.filter((St) => St.includes("stroke"))?.map((St) => `${St}`).join("; ");
4038
+ br.selectAll("path").attr("style", St ?? ""), br.selectAll(".row-rect-even path").attr("style", vr);
4039
+ }
4040
+ return lr.intersect = function(St) {
4041
+ return intersect_default.rect(lr, St);
4042
+ }, br;
4043
+ }
4044
+ __name(erBox, "erBox");
4045
+ async function addText(St, lr, dr, fr = 0, pr = 0, gr = [], _r = "") {
4046
+ let vr = St.insert("g").attr("class", `label ${gr.join(" ")}`).attr("transform", `translate(${fr}, ${pr})`).attr("style", _r);
4047
+ lr !== parseGenericTypes(lr) && (lr = parseGenericTypes(lr), lr = lr.replaceAll("<", "&lt;").replaceAll(">", "&gt;"));
4048
+ let yr = vr.node().appendChild(await createText(vr, lr, {
4049
+ width: calculateTextWidth(lr, dr) + 100,
4050
+ style: _r,
4051
+ useHtmlLabels: dr.htmlLabels
4052
+ }, dr));
4053
+ if (lr.includes("&lt;") || lr.includes("&gt;")) {
4054
+ let St = yr.children[0];
4055
+ for (St.textContent = St.textContent.replaceAll("&lt;", "<").replaceAll("&gt;", ">"); St.childNodes[0];) St = St.childNodes[0], St.textContent = St.textContent.replaceAll("&lt;", "<").replaceAll("&gt;", ">");
4056
+ }
4057
+ let br = yr.getBBox();
4058
+ if (evaluate(dr.htmlLabels)) {
4059
+ let St = yr.children[0];
4060
+ St.style.textAlign = "start";
4061
+ let lr = select_default(yr);
4062
+ br = St.getBoundingClientRect(), lr.attr("width", br.width), lr.attr("height", br.height);
4063
+ }
4064
+ return br;
4065
+ }
4066
+ __name(addText, "addText");
4067
+ async function textHelper(St, lr, ur, dr, fr = ur.class.padding ?? 12) {
4068
+ let pr = dr ? 0 : 3, mr = St.insert("g").attr("class", getNodeClasses(lr)).attr("id", lr.domId || lr.id), hr = null, gr = null, _r = null, vr = null, yr = 0, br = 0, xr = 0;
4069
+ if (hr = mr.insert("g").attr("class", "annotation-group text"), lr.annotations.length > 0) {
4070
+ let St = lr.annotations[0];
4071
+ await addText2(hr, { text: `\xAB${St}\xBB` }, 0), yr = hr.node().getBBox().height;
4072
+ }
4073
+ gr = mr.insert("g").attr("class", "label-group text"), await addText2(gr, lr, 0, ["font-weight: bolder"]);
4074
+ let Sr = gr.node().getBBox();
4075
+ br = Sr.height, _r = mr.insert("g").attr("class", "members-group text");
4076
+ let Cr = 0;
4077
+ for (let St of lr.members) {
4078
+ let lr = await addText2(_r, St, Cr, [St.parseClassifier()]);
4079
+ Cr += lr + pr;
4080
+ }
4081
+ xr = _r.node().getBBox().height, xr <= 0 && (xr = fr / 2), vr = mr.insert("g").attr("class", "methods-group text");
4082
+ let wr = 0;
4083
+ for (let St of lr.methods) {
4084
+ let lr = await addText2(vr, St, wr, [St.parseClassifier()]);
4085
+ wr += lr + pr;
4086
+ }
4087
+ let Tr = mr.node().getBBox();
4088
+ if (hr !== null) {
4089
+ let St = hr.node().getBBox();
4090
+ hr.attr("transform", `translate(${-St.width / 2})`);
4091
+ }
4092
+ return gr.attr("transform", `translate(${-Sr.width / 2}, ${yr})`), Tr = mr.node().getBBox(), _r.attr("transform", `translate(0, ${yr + br + fr * 2})`), Tr = mr.node().getBBox(), vr.attr("transform", `translate(0, ${yr + br + (xr ? xr + fr * 4 : fr * 2)})`), Tr = mr.node().getBBox(), {
4093
+ shapeSvg: mr,
4094
+ bbox: Tr
4095
+ };
4096
+ }
4097
+ __name(textHelper, "textHelper");
4098
+ async function addText2(lr, dr, fr, hr = []) {
4099
+ let gr = lr.insert("g").attr("class", "label").attr("style", hr.join("; ")), vr = getConfig(), br = "useHtmlLabels" in dr ? dr.useHtmlLabels : evaluate(vr.htmlLabels) ?? !0, xr = "";
4100
+ xr = "text" in dr ? dr.text : dr.label, !br && xr.startsWith("\\") && (xr = xr.substring(1)), hasKatex(xr) && (br = !0);
4101
+ let Cr = await createText(gr, sanitizeText3(decodeEntities(xr)), {
4102
+ width: calculateTextWidth(xr, vr) + 50,
4103
+ classes: "markdown-node-label",
4104
+ useHtmlLabels: br
4105
+ }, vr), Tr, Er = 1;
4106
+ if (br) {
4107
+ let St = Cr.children[0], lr = select_default(Cr);
4108
+ Er = St.innerHTML.split("<br>").length, St.innerHTML.includes("</math>") && (Er += St.innerHTML.split("<mrow>").length - 1);
4109
+ let ur = St.getElementsByTagName("img");
4110
+ if (ur) {
4111
+ let St = xr.replace(/<img[^>]*>/g, "").trim() === "";
4112
+ await Promise.all([...ur].map((lr) => new Promise((ur) => {
4113
+ function dr() {
4114
+ if (lr.style.display = "flex", lr.style.flexDirection = "column", St) {
4115
+ let St = vr.fontSize?.toString() ?? window.getComputedStyle(document.body).fontSize, ur = parseInt(St, 10) * 5 + "px";
4116
+ lr.style.minWidth = ur, lr.style.maxWidth = ur;
4117
+ } else lr.style.width = "100%";
4118
+ ur(lr);
4119
+ }
4120
+ __name(dr, "setupImage"), setTimeout(() => {
4121
+ lr.complete && dr();
4122
+ }), lr.addEventListener("error", dr), lr.addEventListener("load", dr);
4123
+ })));
4124
+ }
4125
+ Tr = St.getBoundingClientRect(), lr.attr("width", Tr.width), lr.attr("height", Tr.height);
4126
+ } else {
4127
+ hr.includes("font-weight: bolder") && select_default(Cr).selectAll("tspan").attr("font-weight", ""), Er = Cr.children.length;
4128
+ let St = Cr.children[0];
4129
+ (Cr.textContent === "" || Cr.textContent.includes("&gt")) && (St.textContent = xr[0] + xr.substring(1).replaceAll("&gt;", ">").replaceAll("&lt;", "<").trim(), xr[1] === " " && (St.textContent = St.textContent[0] + " " + St.textContent.substring(1))), St.textContent === "undefined" && (St.textContent = ""), Tr = Cr.getBBox();
4130
+ }
4131
+ return gr.attr("transform", "translate(0," + (-Tr.height / (2 * Er) + fr) + ")"), Tr.height;
4132
+ }
4133
+ __name(addText2, "addText");
4134
+ async function classBox(St, lr) {
4135
+ let ur = getConfig2(), dr = ur.class.padding ?? 12, fr = dr, pr = lr.useHtmlLabels ?? evaluate(ur.htmlLabels) ?? !0, hr = lr;
4136
+ hr.annotations = hr.annotations ?? [], hr.members = hr.members ?? [], hr.methods = hr.methods ?? [];
4137
+ let { shapeSvg: gr, bbox: _r } = await textHelper(St, lr, ur, pr, fr), { labelStyles: vr, nodeStyles: yr } = styles2String(lr);
4138
+ lr.labelStyle = vr, lr.cssStyles = hr.styles || "";
4139
+ let xr = hr.styles?.join(";") || yr || "";
4140
+ lr.cssStyles ||= xr.replaceAll("!important", "").split(";");
4141
+ let Cr = hr.members.length === 0 && hr.methods.length === 0 && !ur.class?.hideEmptyMembersBox, wr = at.svg(gr), Tr = userNodeOverrides(lr, {});
4142
+ lr.look !== "handDrawn" && (Tr.roughness = 0, Tr.fillStyle = "solid");
4143
+ let Or = _r.width, kr = _r.height;
4144
+ hr.members.length === 0 && hr.methods.length === 0 ? kr += fr : hr.members.length > 0 && hr.methods.length === 0 && (kr += fr * 2);
4145
+ let Ar = -Or / 2, jr = -kr / 2, Mr = wr.rectangle(Ar - dr, jr - dr - (Cr ? dr : hr.members.length === 0 && hr.methods.length === 0 ? -dr / 2 : 0), Or + 2 * dr, kr + 2 * dr + (Cr ? dr * 2 : hr.members.length === 0 && hr.methods.length === 0 ? -dr : 0), Tr), Nr = gr.insert(() => Mr, ":first-child");
4146
+ Nr.attr("class", "basic label-container");
4147
+ let Pr = Nr.node().getBBox();
4148
+ gr.selectAll(".text").each((St, lr, ur) => {
4149
+ let fr = select_default(ur[lr]), _r = fr.attr("transform"), vr = 0;
4150
+ if (_r) {
4151
+ let St = RegExp(/translate\(([^,]+),([^)]+)\)/).exec(_r);
4152
+ St && (vr = parseFloat(St[2]));
4153
+ }
4154
+ let yr = vr + jr + dr - (Cr ? dr : hr.members.length === 0 && hr.methods.length === 0 ? -dr / 2 : 0);
4155
+ pr || (yr -= 4);
4156
+ let br = Ar;
4157
+ (fr.attr("class").includes("label-group") || fr.attr("class").includes("annotation-group")) && (br = -fr.node()?.getBBox().width / 2 || 0, gr.selectAll("text").each(function(St, lr, ur) {
4158
+ window.getComputedStyle(ur[lr]).textAnchor === "middle" && (br = 0);
4159
+ })), fr.attr("transform", `translate(${br}, ${yr})`);
4160
+ });
4161
+ let Fr = gr.select(".annotation-group").node().getBBox().height - (Cr ? dr / 2 : 0) || 0, Ir = gr.select(".label-group").node().getBBox().height - (Cr ? dr / 2 : 0) || 0, Lr = gr.select(".members-group").node().getBBox().height - (Cr ? dr / 2 : 0) || 0;
4162
+ if (hr.members.length > 0 || hr.methods.length > 0 || Cr) {
4163
+ let St = wr.line(Pr.x, Fr + Ir + jr + dr, Pr.x + Pr.width, Fr + Ir + jr + dr, Tr);
4164
+ gr.insert(() => St).attr("class", "divider").attr("style", xr);
4165
+ }
4166
+ if (Cr || hr.members.length > 0 || hr.methods.length > 0) {
4167
+ let St = wr.line(Pr.x, Fr + Ir + Lr + jr + fr * 2 + dr, Pr.x + Pr.width, Fr + Ir + Lr + jr + dr + fr * 2, Tr);
4168
+ gr.insert(() => St).attr("class", "divider").attr("style", xr);
4169
+ }
4170
+ if (hr.look !== "handDrawn" && gr.selectAll("path").attr("style", xr), Nr.select(":nth-child(2)").attr("style", xr), gr.selectAll(".divider").select("path").attr("style", xr), lr.labelStyle ? gr.selectAll("span").attr("style", lr.labelStyle) : gr.selectAll("span").attr("style", xr), !pr) {
4171
+ let St = RegExp(/color\s*:\s*([^;]*)/), lr = St.exec(xr);
4172
+ if (lr) {
4173
+ let St = lr[0].replace("color", "fill");
4174
+ gr.selectAll("tspan").attr("style", St);
4175
+ } else if (vr) {
4176
+ let lr = St.exec(vr);
4177
+ if (lr) {
4178
+ let St = lr[0].replace("color", "fill");
4179
+ gr.selectAll("tspan").attr("style", St);
4180
+ }
4181
+ }
4182
+ }
4183
+ return updateNodeBounds(lr, Nr), lr.intersect = function(St) {
4184
+ return intersect_default.rect(lr, St);
4185
+ }, gr;
4186
+ }
4187
+ __name(classBox, "classBox");
4188
+ async function requirementBox(St, lr) {
4189
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
4190
+ lr.labelStyle = ur;
4191
+ let fr = lr, pr = lr, hr = "verifyMethod" in lr, gr = getNodeClasses(lr), _r = St.insert("g").attr("class", gr).attr("id", lr.domId ?? lr.id), vr;
4192
+ vr = hr ? await addText3(_r, `&lt;&lt;${fr.type}&gt;&gt;`, 0, lr.labelStyle) : await addText3(_r, "&lt;&lt;Element&gt;&gt;", 0, lr.labelStyle);
4193
+ let yr = vr, br = await addText3(_r, fr.name, yr, lr.labelStyle + "; font-weight: bold;");
4194
+ if (yr += br + 20, hr) {
4195
+ let St = await addText3(_r, `${fr.requirementId ? `ID: ${fr.requirementId}` : ""}`, yr, lr.labelStyle);
4196
+ yr += St;
4197
+ let ur = await addText3(_r, `${fr.text ? `Text: ${fr.text}` : ""}`, yr, lr.labelStyle);
4198
+ yr += ur;
4199
+ let dr = await addText3(_r, `${fr.risk ? `Risk: ${fr.risk}` : ""}`, yr, lr.labelStyle);
4200
+ yr += dr, await addText3(_r, `${fr.verifyMethod ? `Verification: ${fr.verifyMethod}` : ""}`, yr, lr.labelStyle);
4201
+ } else {
4202
+ let St = await addText3(_r, `${pr.type ? `Type: ${pr.type}` : ""}`, yr, lr.labelStyle);
4203
+ yr += St, await addText3(_r, `${pr.docRef ? `Doc Ref: ${pr.docRef}` : ""}`, yr, lr.labelStyle);
4204
+ }
4205
+ let xr = (_r.node()?.getBBox().width ?? 200) + 20, Sr = (_r.node()?.getBBox().height ?? 200) + 20, Cr = -xr / 2, wr = -Sr / 2, Tr = at.svg(_r), Or = userNodeOverrides(lr, {});
4206
+ lr.look !== "handDrawn" && (Or.roughness = 0, Or.fillStyle = "solid");
4207
+ let kr = Tr.rectangle(Cr, wr, xr, Sr, Or), Ar = _r.insert(() => kr, ":first-child");
4208
+ if (Ar.attr("class", "basic label-container").attr("style", dr), _r.selectAll(".label").each((St, lr, ur) => {
4209
+ let dr = select_default(ur[lr]), fr = dr.attr("transform"), pr = 0, hr = 0;
4210
+ if (fr) {
4211
+ let St = RegExp(/translate\(([^,]+),([^)]+)\)/).exec(fr);
4212
+ St && (pr = parseFloat(St[1]), hr = parseFloat(St[2]));
4213
+ }
4214
+ let gr = hr - Sr / 2, _r = Cr + 20 / 2;
4215
+ (lr === 0 || lr === 1) && (_r = pr), dr.attr("transform", `translate(${_r}, ${gr + 20})`);
4216
+ }), yr > vr + br + 20) {
4217
+ let St = Tr.line(Cr, wr + vr + br + 20, Cr + xr, wr + vr + br + 20, Or);
4218
+ _r.insert(() => St).attr("style", dr);
4219
+ }
4220
+ return updateNodeBounds(lr, Ar), lr.intersect = function(St) {
4221
+ return intersect_default.rect(lr, St);
4222
+ }, _r;
4223
+ }
4224
+ __name(requirementBox, "requirementBox");
4225
+ async function addText3(lr, dr, fr, pr = "") {
4226
+ if (dr === "") return 0;
4227
+ let hr = lr.insert("g").attr("class", "label").attr("style", pr), gr = getConfig2(), vr = gr.htmlLabels ?? !0, yr = await createText(hr, sanitizeText3(decodeEntities(dr)), {
4228
+ width: calculateTextWidth(dr, gr) + 50,
4229
+ classes: "markdown-node-label",
4230
+ useHtmlLabels: vr,
4231
+ style: pr
4232
+ }, gr), xr;
4233
+ if (vr) {
4234
+ let St = yr.children[0], lr = select_default(yr);
4235
+ xr = St.getBoundingClientRect(), lr.attr("width", xr.width), lr.attr("height", xr.height);
4236
+ } else {
4237
+ let St = yr.children[0];
4238
+ for (let lr of St.children) lr.textContent = lr.textContent.replaceAll("&gt;", ">").replaceAll("&lt;", "<"), pr && lr.setAttribute("style", pr);
4239
+ xr = yr.getBBox(), xr.height += 6;
4240
+ }
4241
+ return hr.attr("transform", `translate(${-xr.width / 2},${-xr.height / 2 + fr})`), xr.height;
4242
+ }
4243
+ __name(addText3, "addText");
4244
+ var colorFromPriority = /* @__PURE__ */ __name((St) => {
4245
+ switch (St) {
4246
+ case "Very High": return "red";
4247
+ case "High": return "orange";
4248
+ case "Medium": return null;
4249
+ case "Low": return "blue";
4250
+ case "Very Low": return "lightblue";
4251
+ }
4252
+ }, "colorFromPriority");
4253
+ async function kanbanItem(St, lr, { config: ur }) {
4254
+ let { labelStyles: dr, nodeStyles: fr } = styles2String(lr);
4255
+ lr.labelStyle = dr || "";
4256
+ let pr = lr.width;
4257
+ lr.width = (lr.width ?? 200) - 10;
4258
+ let { shapeSvg: mr, bbox: hr, label: gr } = await labelHelper(St, lr, getNodeClasses(lr)), _r = lr.padding || 10, vr = "", yr;
4259
+ "ticket" in lr && lr.ticket && ur?.kanban?.ticketBaseUrl && (vr = ur?.kanban?.ticketBaseUrl.replace("#TICKET#", lr.ticket), yr = mr.insert("svg:a", ":first-child").attr("class", "kanban-ticket-link").attr("xlink:href", vr).attr("target", "_blank"));
4260
+ let br = {
4261
+ useHtmlLabels: lr.useHtmlLabels,
4262
+ labelStyle: lr.labelStyle || "",
4263
+ width: lr.width,
4264
+ img: lr.img,
4265
+ padding: lr.padding || 8,
4266
+ centerLabel: !1
4267
+ }, xr, Sr;
4268
+ yr ? {label: xr, bbox: Sr} = await insertLabel(yr, "ticket" in lr && lr.ticket || "", br) : {label: xr, bbox: Sr} = await insertLabel(mr, "ticket" in lr && lr.ticket || "", br);
4269
+ let { label: Cr, bbox: wr } = await insertLabel(mr, "assigned" in lr && lr.assigned || "", br);
4270
+ lr.width = pr;
4271
+ let Tr = lr?.width || 0, Or = Math.max(Sr.height, wr.height) / 2, kr = Math.max(hr.height + 20, lr?.height || 0) + Or, Ar = -Tr / 2, jr = -kr / 2;
4272
+ gr.attr("transform", "translate(" + (_r - Tr / 2) + ", " + (-Or - hr.height / 2) + ")"), xr.attr("transform", "translate(" + (_r - Tr / 2) + ", " + (-Or + hr.height / 2) + ")"), Cr.attr("transform", "translate(" + (_r + Tr / 2 - wr.width - 20) + ", " + (-Or + hr.height / 2) + ")");
4273
+ let Mr, { rx: Nr, ry: Pr } = lr, { cssStyles: Fr } = lr;
4274
+ if (lr.look === "handDrawn") {
4275
+ let St = at.svg(mr), ur = userNodeOverrides(lr, {}), dr = Nr || Pr ? St.path(createRoundedRectPathD(Ar, jr, Tr, kr, Nr || 0), ur) : St.rectangle(Ar, jr, Tr, kr, ur);
4276
+ Mr = mr.insert(() => dr, ":first-child"), Mr.attr("class", "basic label-container").attr("style", Fr || null);
4277
+ } else {
4278
+ Mr = mr.insert("rect", ":first-child"), Mr.attr("class", "basic label-container __APA__").attr("style", fr).attr("rx", Nr ?? 5).attr("ry", Pr ?? 5).attr("x", Ar).attr("y", jr).attr("width", Tr).attr("height", kr);
4279
+ let St = "priority" in lr && lr.priority;
4280
+ if (St) {
4281
+ let lr = mr.append("line"), ur = Ar + 2, dr = jr + Math.floor((Nr ?? 0) / 2), fr = jr + kr - Math.floor((Nr ?? 0) / 2);
4282
+ lr.attr("x1", ur).attr("y1", dr).attr("x2", ur).attr("y2", fr).attr("stroke-width", "4").attr("stroke", colorFromPriority(St));
4283
+ }
4284
+ }
4285
+ return updateNodeBounds(lr, Mr), lr.height = kr, lr.intersect = function(St) {
4286
+ return intersect_default.rect(lr, St);
4287
+ }, mr;
4288
+ }
4289
+ __name(kanbanItem, "kanbanItem");
4290
+ async function bang(St, lr) {
4291
+ let { labelStyles: ur, nodeStyles: pr } = styles2String(lr);
4292
+ lr.labelStyle = ur;
4293
+ let { shapeSvg: mr, bbox: hr, halfPadding: gr, label: _r } = await labelHelper(St, lr, getNodeClasses(lr)), vr = hr.width + 10 * gr, yr = hr.height + 8 * gr, br = .15 * vr, { cssStyles: xr } = lr, Sr = hr.width + 20, Cr = hr.height + 20, wr = Math.max(vr, Sr), Tr = Math.max(yr, Cr);
4294
+ _r.attr("transform", `translate(${-hr.width / 2}, ${-hr.height / 2})`);
4295
+ let Or, kr = `M0 0
4296
+ a${br},${br} 1 0,0 ${wr * .25},${-1 * Tr * .1}
4297
+ a${br},${br} 1 0,0 ${wr * .25},0
4298
+ a${br},${br} 1 0,0 ${wr * .25},0
4299
+ a${br},${br} 1 0,0 ${wr * .25},${Tr * .1}
4300
+
4301
+ a${br},${br} 1 0,0 ${wr * .15},${Tr * .33}
4302
+ a${br * .8},${br * .8} 1 0,0 0,${Tr * .34}
4303
+ a${br},${br} 1 0,0 ${-1 * wr * .15},${Tr * .33}
4304
+
4305
+ a${br},${br} 1 0,0 ${-1 * wr * .25},${Tr * .15}
4306
+ a${br},${br} 1 0,0 ${-1 * wr * .25},0
4307
+ a${br},${br} 1 0,0 ${-1 * wr * .25},0
4308
+ a${br},${br} 1 0,0 ${-1 * wr * .25},${-1 * Tr * .15}
4309
+
4310
+ a${br},${br} 1 0,0 ${-1 * wr * .1},${-1 * Tr * .33}
4311
+ a${br * .8},${br * .8} 1 0,0 0,${-1 * Tr * .34}
4312
+ a${br},${br} 1 0,0 ${wr * .1},${-1 * Tr * .33}
4313
+ H0 V0 Z`;
4314
+ if (lr.look === "handDrawn") {
4315
+ let St = at.svg(mr), ur = userNodeOverrides(lr, {}), fr = St.path(kr, ur);
4316
+ Or = mr.insert(() => fr, ":first-child"), Or.attr("class", "basic label-container").attr("style", handleUndefinedAttr(xr));
4317
+ } else Or = mr.insert("path", ":first-child").attr("class", "basic label-container").attr("style", pr).attr("d", kr);
4318
+ return Or.attr("transform", `translate(${-wr / 2}, ${-Tr / 2})`), updateNodeBounds(lr, Or), lr.calcIntersect = function(St, lr) {
4319
+ return intersect_default.rect(St, lr);
4320
+ }, lr.intersect = function(St) {
4321
+ return log.info("Bang intersect", lr, St), intersect_default.rect(lr, St);
4322
+ }, mr;
4323
+ }
4324
+ __name(bang, "bang");
4325
+ async function cloud(St, lr) {
4326
+ let { labelStyles: ur, nodeStyles: pr } = styles2String(lr);
4327
+ lr.labelStyle = ur;
4328
+ let { shapeSvg: mr, bbox: hr, halfPadding: gr, label: _r } = await labelHelper(St, lr, getNodeClasses(lr)), vr = hr.width + 2 * gr, yr = hr.height + 2 * gr, br = .15 * vr, xr = .25 * vr, Sr = .35 * vr, Cr = .2 * vr, { cssStyles: wr } = lr, Tr, Or = `M0 0
4329
+ a${br},${br} 0 0,1 ${vr * .25},${-1 * vr * .1}
4330
+ a${Sr},${Sr} 1 0,1 ${vr * .4},${-1 * vr * .1}
4331
+ a${xr},${xr} 1 0,1 ${vr * .35},${vr * .2}
4332
+
4333
+ a${br},${br} 1 0,1 ${vr * .15},${yr * .35}
4334
+ a${Cr},${Cr} 1 0,1 ${-1 * vr * .15},${yr * .65}
4335
+
4336
+ a${xr},${br} 1 0,1 ${-1 * vr * .25},${vr * .15}
4337
+ a${Sr},${Sr} 1 0,1 ${-1 * vr * .5},0
4338
+ a${br},${br} 1 0,1 ${-1 * vr * .25},${-1 * vr * .15}
4339
+
4340
+ a${br},${br} 1 0,1 ${-1 * vr * .1},${-1 * yr * .35}
4341
+ a${Cr},${Cr} 1 0,1 ${vr * .1},${-1 * yr * .65}
4342
+ H0 V0 Z`;
4343
+ if (lr.look === "handDrawn") {
4344
+ let St = at.svg(mr), ur = userNodeOverrides(lr, {}), fr = St.path(Or, ur);
4345
+ Tr = mr.insert(() => fr, ":first-child"), Tr.attr("class", "basic label-container").attr("style", handleUndefinedAttr(wr));
4346
+ } else Tr = mr.insert("path", ":first-child").attr("class", "basic label-container").attr("style", pr).attr("d", Or);
4347
+ return _r.attr("transform", `translate(${-hr.width / 2}, ${-hr.height / 2})`), Tr.attr("transform", `translate(${-vr / 2}, ${-yr / 2})`), updateNodeBounds(lr, Tr), lr.calcIntersect = function(St, lr) {
4348
+ return intersect_default.rect(St, lr);
4349
+ }, lr.intersect = function(St) {
4350
+ return log.info("Cloud intersect", lr, St), intersect_default.rect(lr, St);
4351
+ }, mr;
4352
+ }
4353
+ __name(cloud, "cloud");
4354
+ async function defaultMindmapNode(St, lr) {
4355
+ let { labelStyles: ur, nodeStyles: dr } = styles2String(lr);
4356
+ lr.labelStyle = ur;
4357
+ let { shapeSvg: fr, bbox: pr, halfPadding: mr, label: hr } = await labelHelper(St, lr, getNodeClasses(lr)), gr = pr.width + 8 * mr, _r = pr.height + 2 * mr, vr = `
4358
+ M${-gr / 2} ${_r / 2 - 5}
4359
+ v${-_r + 10}
4360
+ q0,-5 5,-5
4361
+ h${gr - 10}
4362
+ q5,0 5,5
4363
+ v${_r - 10}
4364
+ q0,5 -5,5
4365
+ h${-gr + 10}
4366
+ q-5,0 -5,-5
4367
+ Z
4368
+ `, yr = fr.append("path").attr("id", "node-" + lr.id).attr("class", "node-bkg node-" + lr.type).attr("style", dr).attr("d", vr);
4369
+ return fr.append("line").attr("class", "node-line-").attr("x1", -gr / 2).attr("y1", _r / 2).attr("x2", gr / 2).attr("y2", _r / 2), hr.attr("transform", `translate(${-pr.width / 2}, ${-pr.height / 2})`), fr.append(() => hr.node()), updateNodeBounds(lr, yr), lr.calcIntersect = function(St, lr) {
4370
+ return intersect_default.rect(St, lr);
4371
+ }, lr.intersect = function(St) {
4372
+ return intersect_default.rect(lr, St);
4373
+ }, fr;
4374
+ }
4375
+ __name(defaultMindmapNode, "defaultMindmapNode");
4376
+ async function mindmapCircle(St, lr) {
4377
+ return circle(St, lr, { padding: lr.padding ?? 0 });
4378
+ }
4379
+ __name(mindmapCircle, "mindmapCircle");
4380
+ var shapesDefs = [
4381
+ {
4382
+ semanticName: "Process",
4383
+ name: "Rectangle",
4384
+ shortName: "rect",
4385
+ description: "Standard process shape",
4386
+ aliases: [
4387
+ "proc",
4388
+ "process",
4389
+ "rectangle"
4390
+ ],
4391
+ internalAliases: ["squareRect"],
4392
+ handler: squareRect2
4393
+ },
4394
+ {
4395
+ semanticName: "Event",
4396
+ name: "Rounded Rectangle",
4397
+ shortName: "rounded",
4398
+ description: "Represents an event",
4399
+ aliases: ["event"],
4400
+ internalAliases: ["roundedRect"],
4401
+ handler: roundedRect
4402
+ },
4403
+ {
4404
+ semanticName: "Terminal Point",
4405
+ name: "Stadium",
4406
+ shortName: "stadium",
4407
+ description: "Terminal point",
4408
+ aliases: ["terminal", "pill"],
4409
+ handler: stadium
4410
+ },
4411
+ {
4412
+ semanticName: "Subprocess",
4413
+ name: "Framed Rectangle",
4414
+ shortName: "fr-rect",
4415
+ description: "Subprocess",
4416
+ aliases: [
4417
+ "subprocess",
4418
+ "subproc",
4419
+ "framed-rectangle",
4420
+ "subroutine"
4421
+ ],
4422
+ handler: subroutine
4423
+ },
4424
+ {
4425
+ semanticName: "Database",
4426
+ name: "Cylinder",
4427
+ shortName: "cyl",
4428
+ description: "Database storage",
4429
+ aliases: [
4430
+ "db",
4431
+ "database",
4432
+ "cylinder"
4433
+ ],
4434
+ handler: cylinder
4435
+ },
4436
+ {
4437
+ semanticName: "Start",
4438
+ name: "Circle",
4439
+ shortName: "circle",
4440
+ description: "Starting point",
4441
+ aliases: ["circ"],
4442
+ handler: circle
4443
+ },
4444
+ {
4445
+ semanticName: "Bang",
4446
+ name: "Bang",
4447
+ shortName: "bang",
4448
+ description: "Bang",
4449
+ aliases: ["bang"],
4450
+ handler: bang
4451
+ },
4452
+ {
4453
+ semanticName: "Cloud",
4454
+ name: "Cloud",
4455
+ shortName: "cloud",
4456
+ description: "cloud",
4457
+ aliases: ["cloud"],
4458
+ handler: cloud
4459
+ },
4460
+ {
4461
+ semanticName: "Decision",
4462
+ name: "Diamond",
4463
+ shortName: "diam",
4464
+ description: "Decision-making step",
4465
+ aliases: [
4466
+ "decision",
4467
+ "diamond",
4468
+ "question"
4469
+ ],
4470
+ handler: question
4471
+ },
4472
+ {
4473
+ semanticName: "Prepare Conditional",
4474
+ name: "Hexagon",
4475
+ shortName: "hex",
4476
+ description: "Preparation or condition step",
4477
+ aliases: ["hexagon", "prepare"],
4478
+ handler: hexagon
4479
+ },
4480
+ {
4481
+ semanticName: "Data Input/Output",
4482
+ name: "Lean Right",
4483
+ shortName: "lean-r",
4484
+ description: "Represents input or output",
4485
+ aliases: ["lean-right", "in-out"],
4486
+ internalAliases: ["lean_right"],
4487
+ handler: lean_right
4488
+ },
4489
+ {
4490
+ semanticName: "Data Input/Output",
4491
+ name: "Lean Left",
4492
+ shortName: "lean-l",
4493
+ description: "Represents output or input",
4494
+ aliases: ["lean-left", "out-in"],
4495
+ internalAliases: ["lean_left"],
4496
+ handler: lean_left
4497
+ },
4498
+ {
4499
+ semanticName: "Priority Action",
4500
+ name: "Trapezoid Base Bottom",
4501
+ shortName: "trap-b",
4502
+ description: "Priority action",
4503
+ aliases: [
4504
+ "priority",
4505
+ "trapezoid-bottom",
4506
+ "trapezoid"
4507
+ ],
4508
+ handler: trapezoid
4509
+ },
4510
+ {
4511
+ semanticName: "Manual Operation",
4512
+ name: "Trapezoid Base Top",
4513
+ shortName: "trap-t",
4514
+ description: "Represents a manual task",
4515
+ aliases: [
4516
+ "manual",
4517
+ "trapezoid-top",
4518
+ "inv-trapezoid"
4519
+ ],
4520
+ internalAliases: ["inv_trapezoid"],
4521
+ handler: inv_trapezoid
4522
+ },
4523
+ {
4524
+ semanticName: "Stop",
4525
+ name: "Double Circle",
4526
+ shortName: "dbl-circ",
4527
+ description: "Represents a stop point",
4528
+ aliases: ["double-circle"],
4529
+ internalAliases: ["doublecircle"],
4530
+ handler: doublecircle
4531
+ },
4532
+ {
4533
+ semanticName: "Text Block",
4534
+ name: "Text Block",
4535
+ shortName: "text",
4536
+ description: "Text block",
4537
+ handler: text
4538
+ },
4539
+ {
4540
+ semanticName: "Card",
4541
+ name: "Notched Rectangle",
4542
+ shortName: "notch-rect",
4543
+ description: "Represents a card",
4544
+ aliases: ["card", "notched-rectangle"],
4545
+ handler: card
4546
+ },
4547
+ {
4548
+ semanticName: "Lined/Shaded Process",
4549
+ name: "Lined Rectangle",
4550
+ shortName: "lin-rect",
4551
+ description: "Lined process shape",
4552
+ aliases: [
4553
+ "lined-rectangle",
4554
+ "lined-process",
4555
+ "lin-proc",
4556
+ "shaded-process"
4557
+ ],
4558
+ handler: shadedProcess
4559
+ },
4560
+ {
4561
+ semanticName: "Start",
4562
+ name: "Small Circle",
4563
+ shortName: "sm-circ",
4564
+ description: "Small starting point",
4565
+ aliases: ["start", "small-circle"],
4566
+ internalAliases: ["stateStart"],
4567
+ handler: stateStart
4568
+ },
4569
+ {
4570
+ semanticName: "Stop",
4571
+ name: "Framed Circle",
4572
+ shortName: "fr-circ",
4573
+ description: "Stop point",
4574
+ aliases: ["stop", "framed-circle"],
4575
+ internalAliases: ["stateEnd"],
4576
+ handler: stateEnd
4577
+ },
4578
+ {
4579
+ semanticName: "Fork/Join",
4580
+ name: "Filled Rectangle",
4581
+ shortName: "fork",
4582
+ description: "Fork or join in process flow",
4583
+ aliases: ["join"],
4584
+ internalAliases: ["forkJoin"],
4585
+ handler: forkJoin
4586
+ },
4587
+ {
4588
+ semanticName: "Collate",
4589
+ name: "Hourglass",
4590
+ shortName: "hourglass",
4591
+ description: "Represents a collate operation",
4592
+ aliases: ["hourglass", "collate"],
4593
+ handler: hourglass
4594
+ },
4595
+ {
4596
+ semanticName: "Comment",
4597
+ name: "Curly Brace",
4598
+ shortName: "brace",
4599
+ description: "Adds a comment",
4600
+ aliases: ["comment", "brace-l"],
4601
+ handler: curlyBraceLeft
4602
+ },
4603
+ {
4604
+ semanticName: "Comment Right",
4605
+ name: "Curly Brace",
4606
+ shortName: "brace-r",
4607
+ description: "Adds a comment",
4608
+ handler: curlyBraceRight
4609
+ },
4610
+ {
4611
+ semanticName: "Comment with braces on both sides",
4612
+ name: "Curly Braces",
4613
+ shortName: "braces",
4614
+ description: "Adds a comment",
4615
+ handler: curlyBraces
4616
+ },
4617
+ {
4618
+ semanticName: "Com Link",
4619
+ name: "Lightning Bolt",
4620
+ shortName: "bolt",
4621
+ description: "Communication link",
4622
+ aliases: ["com-link", "lightning-bolt"],
4623
+ handler: lightningBolt
4624
+ },
4625
+ {
4626
+ semanticName: "Document",
4627
+ name: "Document",
4628
+ shortName: "doc",
4629
+ description: "Represents a document",
4630
+ aliases: ["doc", "document"],
4631
+ handler: waveEdgedRectangle
4632
+ },
4633
+ {
4634
+ semanticName: "Delay",
4635
+ name: "Half-Rounded Rectangle",
4636
+ shortName: "delay",
4637
+ description: "Represents a delay",
4638
+ aliases: ["half-rounded-rectangle"],
4639
+ handler: halfRoundedRectangle
4640
+ },
4641
+ {
4642
+ semanticName: "Direct Access Storage",
4643
+ name: "Horizontal Cylinder",
4644
+ shortName: "h-cyl",
4645
+ description: "Direct access storage",
4646
+ aliases: ["das", "horizontal-cylinder"],
4647
+ handler: tiltedCylinder
4648
+ },
4649
+ {
4650
+ semanticName: "Disk Storage",
4651
+ name: "Lined Cylinder",
4652
+ shortName: "lin-cyl",
4653
+ description: "Disk storage",
4654
+ aliases: ["disk", "lined-cylinder"],
4655
+ handler: linedCylinder
4656
+ },
4657
+ {
4658
+ semanticName: "Display",
4659
+ name: "Curved Trapezoid",
4660
+ shortName: "curv-trap",
4661
+ description: "Represents a display",
4662
+ aliases: ["curved-trapezoid", "display"],
4663
+ handler: curvedTrapezoid
4664
+ },
4665
+ {
4666
+ semanticName: "Divided Process",
4667
+ name: "Divided Rectangle",
4668
+ shortName: "div-rect",
4669
+ description: "Divided process shape",
4670
+ aliases: [
4671
+ "div-proc",
4672
+ "divided-rectangle",
4673
+ "divided-process"
4674
+ ],
4675
+ handler: dividedRectangle
4676
+ },
4677
+ {
4678
+ semanticName: "Extract",
4679
+ name: "Triangle",
4680
+ shortName: "tri",
4681
+ description: "Extraction process",
4682
+ aliases: ["extract", "triangle"],
4683
+ handler: triangle
4684
+ },
4685
+ {
4686
+ semanticName: "Internal Storage",
4687
+ name: "Window Pane",
4688
+ shortName: "win-pane",
4689
+ description: "Internal storage",
4690
+ aliases: ["internal-storage", "window-pane"],
4691
+ handler: windowPane
4692
+ },
4693
+ {
4694
+ semanticName: "Junction",
4695
+ name: "Filled Circle",
4696
+ shortName: "f-circ",
4697
+ description: "Junction point",
4698
+ aliases: ["junction", "filled-circle"],
4699
+ handler: filledCircle
4700
+ },
4701
+ {
4702
+ semanticName: "Loop Limit",
4703
+ name: "Trapezoidal Pentagon",
4704
+ shortName: "notch-pent",
4705
+ description: "Loop limit step",
4706
+ aliases: ["loop-limit", "notched-pentagon"],
4707
+ handler: trapezoidalPentagon
4708
+ },
4709
+ {
4710
+ semanticName: "Manual File",
4711
+ name: "Flipped Triangle",
4712
+ shortName: "flip-tri",
4713
+ description: "Manual file operation",
4714
+ aliases: ["manual-file", "flipped-triangle"],
4715
+ handler: flippedTriangle
4716
+ },
4717
+ {
4718
+ semanticName: "Manual Input",
4719
+ name: "Sloped Rectangle",
4720
+ shortName: "sl-rect",
4721
+ description: "Manual input step",
4722
+ aliases: ["manual-input", "sloped-rectangle"],
4723
+ handler: slopedRect
4724
+ },
4725
+ {
4726
+ semanticName: "Multi-Document",
4727
+ name: "Stacked Document",
4728
+ shortName: "docs",
4729
+ description: "Multiple documents",
4730
+ aliases: [
4731
+ "documents",
4732
+ "st-doc",
4733
+ "stacked-document"
4734
+ ],
4735
+ handler: multiWaveEdgedRectangle
4736
+ },
4737
+ {
4738
+ semanticName: "Multi-Process",
4739
+ name: "Stacked Rectangle",
4740
+ shortName: "st-rect",
4741
+ description: "Multiple processes",
4742
+ aliases: [
4743
+ "procs",
4744
+ "processes",
4745
+ "stacked-rectangle"
4746
+ ],
4747
+ handler: multiRect
4748
+ },
4749
+ {
4750
+ semanticName: "Stored Data",
4751
+ name: "Bow Tie Rectangle",
4752
+ shortName: "bow-rect",
4753
+ description: "Stored data",
4754
+ aliases: ["stored-data", "bow-tie-rectangle"],
4755
+ handler: bowTieRect
4756
+ },
4757
+ {
4758
+ semanticName: "Summary",
4759
+ name: "Crossed Circle",
4760
+ shortName: "cross-circ",
4761
+ description: "Summary",
4762
+ aliases: ["summary", "crossed-circle"],
4763
+ handler: crossedCircle
4764
+ },
4765
+ {
4766
+ semanticName: "Tagged Document",
4767
+ name: "Tagged Document",
4768
+ shortName: "tag-doc",
4769
+ description: "Tagged document",
4770
+ aliases: ["tag-doc", "tagged-document"],
4771
+ handler: taggedWaveEdgedRectangle
4772
+ },
4773
+ {
4774
+ semanticName: "Tagged Process",
4775
+ name: "Tagged Rectangle",
4776
+ shortName: "tag-rect",
4777
+ description: "Tagged process",
4778
+ aliases: [
4779
+ "tagged-rectangle",
4780
+ "tag-proc",
4781
+ "tagged-process"
4782
+ ],
4783
+ handler: taggedRect
4784
+ },
4785
+ {
4786
+ semanticName: "Paper Tape",
4787
+ name: "Flag",
4788
+ shortName: "flag",
4789
+ description: "Paper tape",
4790
+ aliases: ["paper-tape"],
4791
+ handler: waveRectangle
4792
+ },
4793
+ {
4794
+ semanticName: "Odd",
4795
+ name: "Odd",
4796
+ shortName: "odd",
4797
+ description: "Odd shape",
4798
+ internalAliases: ["rect_left_inv_arrow"],
4799
+ handler: rect_left_inv_arrow
4800
+ },
4801
+ {
4802
+ semanticName: "Lined Document",
4803
+ name: "Lined Document",
4804
+ shortName: "lin-doc",
4805
+ description: "Lined document",
4806
+ aliases: ["lined-document"],
4807
+ handler: linedWaveEdgedRect
4808
+ }
4809
+ ], shapes2 = (/* @__PURE__ */ __name(() => {
4810
+ let St = {
4811
+ state,
4812
+ choice,
4813
+ note,
4814
+ rectWithTitle,
4815
+ labelRect,
4816
+ iconSquare,
4817
+ iconCircle,
4818
+ icon,
4819
+ iconRounded,
4820
+ imageSquare,
4821
+ anchor,
4822
+ kanbanItem,
4823
+ mindmapCircle,
4824
+ defaultMindmapNode,
4825
+ classBox,
4826
+ erBox,
4827
+ requirementBox
4828
+ }, lr = [...Object.entries(St), ...shapesDefs.flatMap((St) => [
4829
+ St.shortName,
4830
+ ..."aliases" in St ? St.aliases : [],
4831
+ ..."internalAliases" in St ? St.internalAliases : []
4832
+ ].map((lr) => [lr, St.handler]))];
4833
+ return Object.fromEntries(lr);
4834
+ }, "generateShapeMap"))();
4835
+ function isValidShape(St) {
4836
+ return St in shapes2;
4837
+ }
4838
+ __name(isValidShape, "isValidShape");
4839
+ var nodeElems = /* @__PURE__ */ new Map();
4840
+ async function insertNode(St, lr, ur) {
4841
+ let dr, fr;
4842
+ lr.shape === "rect" && (lr.rx && lr.ry ? lr.shape = "roundedRect" : lr.shape = "squareRect");
4843
+ let pr = lr.shape ? shapes2[lr.shape] : void 0;
4844
+ if (!pr) throw Error(`No such shape: ${lr.shape}. Please check your syntax.`);
4845
+ if (lr.link) {
4846
+ let mr;
4847
+ ur.config.securityLevel === "sandbox" ? mr = "_top" : lr.linkTarget && (mr = lr.linkTarget || "_blank"), dr = St.insert("svg:a").attr("xlink:href", lr.link).attr("target", mr ?? null), fr = await pr(dr, lr, ur);
4848
+ } else fr = await pr(St, lr, ur), dr = fr;
4849
+ return lr.tooltip && fr.attr("title", lr.tooltip), nodeElems.set(lr.id, dr), lr.haveCallback && dr.attr("class", dr.attr("class") + " clickable"), dr;
4850
+ }
4851
+ __name(insertNode, "insertNode");
4852
+ var setNodeElem = /* @__PURE__ */ __name((St, lr) => {
4853
+ nodeElems.set(lr.id, St);
4854
+ }, "setNodeElem"), clear2 = /* @__PURE__ */ __name(() => {
4855
+ nodeElems.clear();
4856
+ }, "clear"), positionNode = /* @__PURE__ */ __name((St) => {
4857
+ let lr = nodeElems.get(St.id);
4858
+ log.trace("Transforming node", St.diff, St, "translate(" + (St.x - St.width / 2 - 5) + ", " + St.width / 2 + ")");
4859
+ let ur = St.diff || 0;
4860
+ return St.clusterNode ? lr.attr("transform", "translate(" + (St.x + ur - St.width / 2) + ", " + (St.y - St.height / 2 - 8) + ")") : lr.attr("transform", "translate(" + St.x + ", " + St.y + ")"), ur;
4861
+ }, "positionNode");
4862
+ export { insertNode as a, positionNode as c, at as d, insertCluster as i, setNodeElem as l, clear2 as n, isValidShape as o, createLabel_default as r, labelHelper as s, clear as t, updateNodeBounds as u };