@bytechain.cn/colamd 1.5.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 (157) hide show
  1. package/.github/workflows/release.yml +66 -0
  2. package/.trae/documents/fix-mermaid-colors-and-sankey.md +50 -0
  3. package/CLAUDE.md +87 -0
  4. package/LICENSE +21 -0
  5. package/README.md +540 -0
  6. package/README_CN.md +543 -0
  7. package/demo.md +486 -0
  8. package/dist/main/index.js +735 -0
  9. package/dist/preload/index.js +71 -0
  10. package/dist/renderer/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  11. package/dist/renderer/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  12. package/dist/renderer/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  13. package/dist/renderer/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  14. package/dist/renderer/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  15. package/dist/renderer/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  16. package/dist/renderer/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  17. package/dist/renderer/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  18. package/dist/renderer/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  19. package/dist/renderer/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  20. package/dist/renderer/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  21. package/dist/renderer/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  22. package/dist/renderer/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  23. package/dist/renderer/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  24. package/dist/renderer/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  25. package/dist/renderer/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  26. package/dist/renderer/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  27. package/dist/renderer/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  28. package/dist/renderer/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  29. package/dist/renderer/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  30. package/dist/renderer/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  31. package/dist/renderer/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  32. package/dist/renderer/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  33. package/dist/renderer/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  34. package/dist/renderer/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  35. package/dist/renderer/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  36. package/dist/renderer/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  37. package/dist/renderer/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  38. package/dist/renderer/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  39. package/dist/renderer/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  40. package/dist/renderer/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  41. package/dist/renderer/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  42. package/dist/renderer/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  43. package/dist/renderer/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  44. package/dist/renderer/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  45. package/dist/renderer/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  46. package/dist/renderer/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  47. package/dist/renderer/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  48. package/dist/renderer/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  49. package/dist/renderer/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  50. package/dist/renderer/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  51. package/dist/renderer/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  52. package/dist/renderer/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  53. package/dist/renderer/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  54. package/dist/renderer/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  55. package/dist/renderer/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  56. package/dist/renderer/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  57. package/dist/renderer/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  58. package/dist/renderer/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  59. package/dist/renderer/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  60. package/dist/renderer/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  61. package/dist/renderer/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  62. package/dist/renderer/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  63. package/dist/renderer/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  64. package/dist/renderer/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  65. package/dist/renderer/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  66. package/dist/renderer/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  67. package/dist/renderer/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  68. package/dist/renderer/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  69. package/dist/renderer/assets/arc-tTbbM8LO.js +131 -0
  70. package/dist/renderer/assets/architectureDiagram-3BPJPVTR-CEgYow6c.js +8720 -0
  71. package/dist/renderer/assets/blockDiagram-GPEHLZMM-LHyVtPwW.js +3825 -0
  72. package/dist/renderer/assets/c4Diagram-AAUBKEIU-C1P1eJrf.js +2482 -0
  73. package/dist/renderer/assets/channel-upve91Tq.js +7 -0
  74. package/dist/renderer/assets/chunk-2J33WTMH-lag2vhq9.js +24 -0
  75. package/dist/renderer/assets/chunk-4BX2VUAB-BXJ8Ggh-.js +16 -0
  76. package/dist/renderer/assets/chunk-55IACEB6-CiBpxRa1.js +13 -0
  77. package/dist/renderer/assets/chunk-727SXJPM-ODeKQFXC.js +2016 -0
  78. package/dist/renderer/assets/chunk-AQP2D5EJ-BK7xJolB.js +1953 -0
  79. package/dist/renderer/assets/chunk-FMBD7UC4-BxpCZPtz.js +19 -0
  80. package/dist/renderer/assets/chunk-ND2GUHAM-CqqaU9Ue.js +116 -0
  81. package/dist/renderer/assets/chunk-QZHKN3VN-Biq_K124.js +19 -0
  82. package/dist/renderer/assets/classDiagram-4FO5ZUOK-Cq95X99o.js +23 -0
  83. package/dist/renderer/assets/classDiagram-v2-Q7XG4LA2-Cq95X99o.js +23 -0
  84. package/dist/renderer/assets/cose-bilkent-S5V4N54A-XasiD0bu.js +4942 -0
  85. package/dist/renderer/assets/cytoscape.esm-CpHeHM5e.js +30269 -0
  86. package/dist/renderer/assets/dagre-BM42HDAG-Nq84Gfx4.js +705 -0
  87. package/dist/renderer/assets/defaultLocale-B2RvLBDe.js +206 -0
  88. package/dist/renderer/assets/diagram-2AECGRRQ-DwuB1GWt.js +301 -0
  89. package/dist/renderer/assets/diagram-5GNKFQAL-C2tgeI1h.js +169 -0
  90. package/dist/renderer/assets/diagram-KO2AKTUF-D5KzjNBc.js +632 -0
  91. package/dist/renderer/assets/diagram-LMA3HP47-C12xHS1c.js +212 -0
  92. package/dist/renderer/assets/diagram-OG6HWLK6-CnxI9oEa.js +851 -0
  93. package/dist/renderer/assets/erDiagram-TEJ5UH35-D_uPaKwn.js +1227 -0
  94. package/dist/renderer/assets/flowDiagram-I6XJVG4X-B6q_1-tE.js +2332 -0
  95. package/dist/renderer/assets/ganttDiagram-6RSMTGT7-CFo7ifF9.js +3720 -0
  96. package/dist/renderer/assets/gitGraphDiagram-PVQCEYII-WSexHTnq.js +1373 -0
  97. package/dist/renderer/assets/graph-DyX_9f6d.js +1988 -0
  98. package/dist/renderer/assets/index-DW7LS8C1.js +72292 -0
  99. package/dist/renderer/assets/index-dyHEFYvY.css +2184 -0
  100. package/dist/renderer/assets/infoDiagram-5YYISTIA-DaeJdLRq.js +31 -0
  101. package/dist/renderer/assets/init-ZxktEp_H.js +16 -0
  102. package/dist/renderer/assets/ishikawaDiagram-YF4QCWOH-DDCZc35f.js +967 -0
  103. package/dist/renderer/assets/journeyDiagram-JHISSGLW-BEdmpAgl.js +1255 -0
  104. package/dist/renderer/assets/kanban-definition-UN3LZRKU-BEFtQcFb.js +1052 -0
  105. package/dist/renderer/assets/layout-CAJgQHdw.js +2610 -0
  106. package/dist/renderer/assets/linear-B2ggJ8Am.js +340 -0
  107. package/dist/renderer/assets/mindmap-definition-RKZ34NQL-DSxVgHB5.js +1180 -0
  108. package/dist/renderer/assets/ordinal-DSZU4PqD.js +76 -0
  109. package/dist/renderer/assets/pieDiagram-4H26LBE5-CwYoJBuL.js +246 -0
  110. package/dist/renderer/assets/quadrantDiagram-W4KKPZXB-CST9Fvg9.js +1344 -0
  111. package/dist/renderer/assets/requirementDiagram-4Y6WPE33-DtrH52jS.js +1204 -0
  112. package/dist/renderer/assets/sankeyDiagram-5OEKKPKP-ca1tPzJ_.js +1274 -0
  113. package/dist/renderer/assets/sequenceDiagram-3UESZ5HK-Dfp1EJZ7.js +4514 -0
  114. package/dist/renderer/assets/stateDiagram-AJRCARHV-Bha2QoNB.js +450 -0
  115. package/dist/renderer/assets/stateDiagram-v2-BHNVJYJU-DWgFUYu1.js +21 -0
  116. package/dist/renderer/assets/timeline-definition-PNZ67QCA-C3h_-OTj.js +1596 -0
  117. package/dist/renderer/assets/vennDiagram-CIIHVFJN-DFzjSrZi.js +2486 -0
  118. package/dist/renderer/assets/wardley-L42UT6IY-Cx-VbqoS.js +30699 -0
  119. package/dist/renderer/assets/wardleyDiagram-YWT4CUSO-S2D9XqX6.js +975 -0
  120. package/dist/renderer/assets/xychartDiagram-2RQKCTM6-Cfxigbts.js +1932 -0
  121. package/dist/renderer/index.html +19 -0
  122. package/docs/agent-diff-view.md +48 -0
  123. package/electron-builder.yml +57 -0
  124. package/electron.vite.config.ts +30 -0
  125. package/package.json +40 -0
  126. package/resources/entitlements.mac.plist +12 -0
  127. package/resources/icon.icns +0 -0
  128. package/resources/icon.png +0 -0
  129. package/resources/icon.svg +23 -0
  130. package/resources/templates/slides/icon.png +0 -0
  131. package/resources/templates/slides/slides-template.md +74 -0
  132. package/resources/templates/slides/template.html +535 -0
  133. package/scripts/afterPack.js +13 -0
  134. package/src/main/index.ts +881 -0
  135. package/src/preload/index.ts +110 -0
  136. package/src/renderer/editor/editor.ts +204 -0
  137. package/src/renderer/editor/html-view.ts +15 -0
  138. package/src/renderer/editor/plugins/index.ts +76 -0
  139. package/src/renderer/editor/plugins/math-plugin.ts +297 -0
  140. package/src/renderer/editor/plugins/mermaid-plugin-custom.css +431 -0
  141. package/src/renderer/editor/plugins/mermaid-plugin-dark.css +428 -0
  142. package/src/renderer/editor/plugins/mermaid-plugin-elegant.css +443 -0
  143. package/src/renderer/editor/plugins/mermaid-plugin-newsprint.css +208 -0
  144. package/src/renderer/editor/plugins/mermaid-plugin.css +111 -0
  145. package/src/renderer/editor/plugins/mermaid-plugin.ts +679 -0
  146. package/src/renderer/env.d.ts +7 -0
  147. package/src/renderer/index.html +18 -0
  148. package/src/renderer/main.ts +303 -0
  149. package/src/renderer/themes/base.css +509 -0
  150. package/src/renderer/themes/theme-manager.ts +40 -0
  151. package/themes/README.md +280 -0
  152. package/themes/elegant.css +664 -0
  153. package/themes/guizang.css +732 -0
  154. package/tsconfig.json +14 -0
  155. package/tsconfig.main.json +11 -0
  156. package/tsconfig.preload.json +11 -0
  157. package/tsconfig.renderer.json +12 -0
@@ -0,0 +1,206 @@
1
+ function formatDecimal(x) {
2
+ return Math.abs(x = Math.round(x)) >= 1e21 ? x.toLocaleString("en").replace(/,/g, "") : x.toString(10);
3
+ }
4
+ function formatDecimalParts(x, p) {
5
+ if (!isFinite(x) || x === 0) return null;
6
+ var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e"), coefficient = x.slice(0, i);
7
+ return [
8
+ coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
9
+ +x.slice(i + 1)
10
+ ];
11
+ }
12
+ function exponent(x) {
13
+ return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;
14
+ }
15
+ function formatGroup(grouping, thousands) {
16
+ return function(value, width) {
17
+ var i = value.length, t = [], j = 0, g = grouping[0], length = 0;
18
+ while (i > 0 && g > 0) {
19
+ if (length + g + 1 > width) g = Math.max(1, width - length);
20
+ t.push(value.substring(i -= g, i + g));
21
+ if ((length += g + 1) > width) break;
22
+ g = grouping[j = (j + 1) % grouping.length];
23
+ }
24
+ return t.reverse().join(thousands);
25
+ };
26
+ }
27
+ function formatNumerals(numerals) {
28
+ return function(value) {
29
+ return value.replace(/[0-9]/g, function(i) {
30
+ return numerals[+i];
31
+ });
32
+ };
33
+ }
34
+ var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
35
+ function formatSpecifier(specifier) {
36
+ if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
37
+ var match;
38
+ return new FormatSpecifier({
39
+ fill: match[1],
40
+ align: match[2],
41
+ sign: match[3],
42
+ symbol: match[4],
43
+ zero: match[5],
44
+ width: match[6],
45
+ comma: match[7],
46
+ precision: match[8] && match[8].slice(1),
47
+ trim: match[9],
48
+ type: match[10]
49
+ });
50
+ }
51
+ formatSpecifier.prototype = FormatSpecifier.prototype;
52
+ function FormatSpecifier(specifier) {
53
+ this.fill = specifier.fill === void 0 ? " " : specifier.fill + "";
54
+ this.align = specifier.align === void 0 ? ">" : specifier.align + "";
55
+ this.sign = specifier.sign === void 0 ? "-" : specifier.sign + "";
56
+ this.symbol = specifier.symbol === void 0 ? "" : specifier.symbol + "";
57
+ this.zero = !!specifier.zero;
58
+ this.width = specifier.width === void 0 ? void 0 : +specifier.width;
59
+ this.comma = !!specifier.comma;
60
+ this.precision = specifier.precision === void 0 ? void 0 : +specifier.precision;
61
+ this.trim = !!specifier.trim;
62
+ this.type = specifier.type === void 0 ? "" : specifier.type + "";
63
+ }
64
+ FormatSpecifier.prototype.toString = function() {
65
+ return this.fill + this.align + this.sign + this.symbol + (this.zero ? "0" : "") + (this.width === void 0 ? "" : Math.max(1, this.width | 0)) + (this.comma ? "," : "") + (this.precision === void 0 ? "" : "." + Math.max(0, this.precision | 0)) + (this.trim ? "~" : "") + this.type;
66
+ };
67
+ function formatTrim(s) {
68
+ out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
69
+ switch (s[i]) {
70
+ case ".":
71
+ i0 = i1 = i;
72
+ break;
73
+ case "0":
74
+ if (i0 === 0) i0 = i;
75
+ i1 = i;
76
+ break;
77
+ default:
78
+ if (!+s[i]) break out;
79
+ if (i0 > 0) i0 = 0;
80
+ break;
81
+ }
82
+ }
83
+ return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
84
+ }
85
+ var prefixExponent;
86
+ function formatPrefixAuto(x, p) {
87
+ var d = formatDecimalParts(x, p);
88
+ if (!d) return prefixExponent = void 0, x.toPrecision(p);
89
+ var coefficient = d[0], exponent2 = d[1], i = exponent2 - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent2 / 3))) * 3) + 1, n = coefficient.length;
90
+ return i === n ? coefficient : i > n ? coefficient + new Array(i - n + 1).join("0") : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) : "0." + new Array(1 - i).join("0") + formatDecimalParts(x, Math.max(0, p + i - 1))[0];
91
+ }
92
+ function formatRounded(x, p) {
93
+ var d = formatDecimalParts(x, p);
94
+ if (!d) return x + "";
95
+ var coefficient = d[0], exponent2 = d[1];
96
+ return exponent2 < 0 ? "0." + new Array(-exponent2).join("0") + coefficient : coefficient.length > exponent2 + 1 ? coefficient.slice(0, exponent2 + 1) + "." + coefficient.slice(exponent2 + 1) : coefficient + new Array(exponent2 - coefficient.length + 2).join("0");
97
+ }
98
+ const formatTypes = {
99
+ "%": (x, p) => (x * 100).toFixed(p),
100
+ "b": (x) => Math.round(x).toString(2),
101
+ "c": (x) => x + "",
102
+ "d": formatDecimal,
103
+ "e": (x, p) => x.toExponential(p),
104
+ "f": (x, p) => x.toFixed(p),
105
+ "g": (x, p) => x.toPrecision(p),
106
+ "o": (x) => Math.round(x).toString(8),
107
+ "p": (x, p) => formatRounded(x * 100, p),
108
+ "r": formatRounded,
109
+ "s": formatPrefixAuto,
110
+ "X": (x) => Math.round(x).toString(16).toUpperCase(),
111
+ "x": (x) => Math.round(x).toString(16)
112
+ };
113
+ function identity(x) {
114
+ return x;
115
+ }
116
+ var map = Array.prototype.map, prefixes = ["y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];
117
+ function formatLocale(locale2) {
118
+ var group = locale2.grouping === void 0 || locale2.thousands === void 0 ? identity : formatGroup(map.call(locale2.grouping, Number), locale2.thousands + ""), currencyPrefix = locale2.currency === void 0 ? "" : locale2.currency[0] + "", currencySuffix = locale2.currency === void 0 ? "" : locale2.currency[1] + "", decimal = locale2.decimal === void 0 ? "." : locale2.decimal + "", numerals = locale2.numerals === void 0 ? identity : formatNumerals(map.call(locale2.numerals, String)), percent = locale2.percent === void 0 ? "%" : locale2.percent + "", minus = locale2.minus === void 0 ? "−" : locale2.minus + "", nan = locale2.nan === void 0 ? "NaN" : locale2.nan + "";
119
+ function newFormat(specifier, options) {
120
+ specifier = formatSpecifier(specifier);
121
+ var fill = specifier.fill, align = specifier.align, sign = specifier.sign, symbol = specifier.symbol, zero = specifier.zero, width = specifier.width, comma = specifier.comma, precision = specifier.precision, trim = specifier.trim, type = specifier.type;
122
+ if (type === "n") comma = true, type = "g";
123
+ else if (!formatTypes[type]) precision === void 0 && (precision = 12), trim = true, type = "g";
124
+ if (zero || fill === "0" && align === "=") zero = true, fill = "0", align = "=";
125
+ var prefix = (options && options.prefix !== void 0 ? options.prefix : "") + (symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : ""), suffix = (symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "") + (options && options.suffix !== void 0 ? options.suffix : "");
126
+ var formatType = formatTypes[type], maybeSuffix = /[defgprs%]/.test(type);
127
+ precision = precision === void 0 ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));
128
+ function format2(value) {
129
+ var valuePrefix = prefix, valueSuffix = suffix, i, n, c;
130
+ if (type === "c") {
131
+ valueSuffix = formatType(value) + valueSuffix;
132
+ value = "";
133
+ } else {
134
+ value = +value;
135
+ var valueNegative = value < 0 || 1 / value < 0;
136
+ value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
137
+ if (trim) value = formatTrim(value);
138
+ if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
139
+ valuePrefix = (valueNegative ? sign === "(" ? sign : minus : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
140
+ valueSuffix = (type === "s" && !isNaN(value) && prefixExponent !== void 0 ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
141
+ if (maybeSuffix) {
142
+ i = -1, n = value.length;
143
+ while (++i < n) {
144
+ if (c = value.charCodeAt(i), 48 > c || c > 57) {
145
+ valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
146
+ value = value.slice(0, i);
147
+ break;
148
+ }
149
+ }
150
+ }
151
+ }
152
+ if (comma && !zero) value = group(value, Infinity);
153
+ var length = valuePrefix.length + value.length + valueSuffix.length, padding = length < width ? new Array(width - length + 1).join(fill) : "";
154
+ if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
155
+ switch (align) {
156
+ case "<":
157
+ value = valuePrefix + value + valueSuffix + padding;
158
+ break;
159
+ case "=":
160
+ value = valuePrefix + padding + value + valueSuffix;
161
+ break;
162
+ case "^":
163
+ value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);
164
+ break;
165
+ default:
166
+ value = padding + valuePrefix + value + valueSuffix;
167
+ break;
168
+ }
169
+ return numerals(value);
170
+ }
171
+ format2.toString = function() {
172
+ return specifier + "";
173
+ };
174
+ return format2;
175
+ }
176
+ function formatPrefix2(specifier, value) {
177
+ var e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3, k = Math.pow(10, -e), f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier), { suffix: prefixes[8 + e / 3] });
178
+ return function(value2) {
179
+ return f(k * value2);
180
+ };
181
+ }
182
+ return {
183
+ format: newFormat,
184
+ formatPrefix: formatPrefix2
185
+ };
186
+ }
187
+ var locale;
188
+ var format;
189
+ var formatPrefix;
190
+ defaultLocale({
191
+ thousands: ",",
192
+ grouping: [3],
193
+ currency: ["$", ""]
194
+ });
195
+ function defaultLocale(definition) {
196
+ locale = formatLocale(definition);
197
+ format = locale.format;
198
+ formatPrefix = locale.formatPrefix;
199
+ return locale;
200
+ }
201
+ export {
202
+ formatPrefix as a,
203
+ format as b,
204
+ exponent as e,
205
+ formatSpecifier as f
206
+ };
@@ -0,0 +1,301 @@
1
+ import { s as setAccDescription, g as getAccDescription, q as getDiagramTitle, p as setDiagramTitle, a as getAccTitle, b as setAccTitle, _ as __name, I as selectSvgElement, z as clear, F as cleanAndMerge, D as getConfig, G as defaultConfig_default, l as log, K as getThemeVariables3, e as configureSvgSize } from "./index-DW7LS8C1.js";
2
+ import { p as populateCommonDb } from "./chunk-4BX2VUAB-BXJ8Ggh-.js";
3
+ import { p as parse } from "./wardley-L42UT6IY-Cx-VbqoS.js";
4
+ var defaultOptions = {
5
+ showLegend: true,
6
+ ticks: 5,
7
+ max: null,
8
+ min: 0,
9
+ graticule: "circle"
10
+ };
11
+ var defaultRadarData = {
12
+ axes: [],
13
+ curves: [],
14
+ options: defaultOptions
15
+ };
16
+ var data = structuredClone(defaultRadarData);
17
+ var DEFAULT_RADAR_CONFIG = defaultConfig_default.radar;
18
+ var getConfig2 = /* @__PURE__ */ __name(() => {
19
+ const config = cleanAndMerge({
20
+ ...DEFAULT_RADAR_CONFIG,
21
+ ...getConfig().radar
22
+ });
23
+ return config;
24
+ }, "getConfig");
25
+ var getAxes = /* @__PURE__ */ __name(() => data.axes, "getAxes");
26
+ var getCurves = /* @__PURE__ */ __name(() => data.curves, "getCurves");
27
+ var getOptions = /* @__PURE__ */ __name(() => data.options, "getOptions");
28
+ var setAxes = /* @__PURE__ */ __name((axes) => {
29
+ data.axes = axes.map((axis) => {
30
+ return {
31
+ name: axis.name,
32
+ label: axis.label ?? axis.name
33
+ };
34
+ });
35
+ }, "setAxes");
36
+ var setCurves = /* @__PURE__ */ __name((curves) => {
37
+ data.curves = curves.map((curve) => {
38
+ return {
39
+ name: curve.name,
40
+ label: curve.label ?? curve.name,
41
+ entries: computeCurveEntries(curve.entries)
42
+ };
43
+ });
44
+ }, "setCurves");
45
+ var computeCurveEntries = /* @__PURE__ */ __name((entries) => {
46
+ if (entries[0].axis == void 0) {
47
+ return entries.map((entry) => entry.value);
48
+ }
49
+ const axes = getAxes();
50
+ if (axes.length === 0) {
51
+ throw new Error("Axes must be populated before curves for reference entries");
52
+ }
53
+ return axes.map((axis) => {
54
+ const entry = entries.find((entry2) => entry2.axis?.$refText === axis.name);
55
+ if (entry === void 0) {
56
+ throw new Error("Missing entry for axis " + axis.label);
57
+ }
58
+ return entry.value;
59
+ });
60
+ }, "computeCurveEntries");
61
+ var setOptions = /* @__PURE__ */ __name((options) => {
62
+ const optionMap = options.reduce(
63
+ (acc, option) => {
64
+ acc[option.name] = option;
65
+ return acc;
66
+ },
67
+ {}
68
+ );
69
+ data.options = {
70
+ showLegend: optionMap.showLegend?.value ?? defaultOptions.showLegend,
71
+ ticks: optionMap.ticks?.value ?? defaultOptions.ticks,
72
+ max: optionMap.max?.value ?? defaultOptions.max,
73
+ min: optionMap.min?.value ?? defaultOptions.min,
74
+ graticule: optionMap.graticule?.value ?? defaultOptions.graticule
75
+ };
76
+ }, "setOptions");
77
+ var clear2 = /* @__PURE__ */ __name(() => {
78
+ clear();
79
+ data = structuredClone(defaultRadarData);
80
+ }, "clear");
81
+ var db = {
82
+ getAxes,
83
+ getCurves,
84
+ getOptions,
85
+ setAxes,
86
+ setCurves,
87
+ setOptions,
88
+ getConfig: getConfig2,
89
+ clear: clear2,
90
+ setAccTitle,
91
+ getAccTitle,
92
+ setDiagramTitle,
93
+ getDiagramTitle,
94
+ getAccDescription,
95
+ setAccDescription
96
+ };
97
+ var populate = /* @__PURE__ */ __name((ast) => {
98
+ populateCommonDb(ast, db);
99
+ const { axes, curves, options } = ast;
100
+ db.setAxes(axes);
101
+ db.setCurves(curves);
102
+ db.setOptions(options);
103
+ }, "populate");
104
+ var parser = {
105
+ parse: /* @__PURE__ */ __name(async (input) => {
106
+ const ast = await parse("radar", input);
107
+ log.debug(ast);
108
+ populate(ast);
109
+ }, "parse")
110
+ };
111
+ var draw = /* @__PURE__ */ __name((_text, id, _version, diagram2) => {
112
+ const db2 = diagram2.db;
113
+ const axes = db2.getAxes();
114
+ const curves = db2.getCurves();
115
+ const options = db2.getOptions();
116
+ const config = db2.getConfig();
117
+ const title = db2.getDiagramTitle();
118
+ const svg = selectSvgElement(id);
119
+ const g = drawFrame(svg, config);
120
+ const maxValue = options.max ?? Math.max(...curves.map((curve) => Math.max(...curve.entries)));
121
+ const minValue = options.min;
122
+ const radius = Math.min(config.width, config.height) / 2;
123
+ drawGraticule(g, axes, radius, options.ticks, options.graticule);
124
+ drawAxes(g, axes, radius, config);
125
+ drawCurves(g, axes, curves, minValue, maxValue, options.graticule, config);
126
+ drawLegend(g, curves, options.showLegend, config);
127
+ g.append("text").attr("class", "radarTitle").text(title).attr("x", 0).attr("y", -config.height / 2 - config.marginTop);
128
+ }, "draw");
129
+ var drawFrame = /* @__PURE__ */ __name((svg, config) => {
130
+ const totalWidth = config.width + config.marginLeft + config.marginRight;
131
+ const totalHeight = config.height + config.marginTop + config.marginBottom;
132
+ const center = {
133
+ x: config.marginLeft + config.width / 2,
134
+ y: config.marginTop + config.height / 2
135
+ };
136
+ configureSvgSize(svg, totalHeight, totalWidth, config.useMaxWidth ?? true);
137
+ svg.attr("viewBox", `0 0 ${totalWidth} ${totalHeight}`);
138
+ return svg.append("g").attr("transform", `translate(${center.x}, ${center.y})`);
139
+ }, "drawFrame");
140
+ var drawGraticule = /* @__PURE__ */ __name((g, axes, radius, ticks, graticule) => {
141
+ if (graticule === "circle") {
142
+ for (let i = 0; i < ticks; i++) {
143
+ const r = radius * (i + 1) / ticks;
144
+ g.append("circle").attr("r", r).attr("class", "radarGraticule");
145
+ }
146
+ } else if (graticule === "polygon") {
147
+ const numAxes = axes.length;
148
+ for (let i = 0; i < ticks; i++) {
149
+ const r = radius * (i + 1) / ticks;
150
+ const points = axes.map((_, j) => {
151
+ const angle = 2 * j * Math.PI / numAxes - Math.PI / 2;
152
+ const x = r * Math.cos(angle);
153
+ const y = r * Math.sin(angle);
154
+ return `${x},${y}`;
155
+ }).join(" ");
156
+ g.append("polygon").attr("points", points).attr("class", "radarGraticule");
157
+ }
158
+ }
159
+ }, "drawGraticule");
160
+ var drawAxes = /* @__PURE__ */ __name((g, axes, radius, config) => {
161
+ const numAxes = axes.length;
162
+ for (let i = 0; i < numAxes; i++) {
163
+ const label = axes[i].label;
164
+ const angle = 2 * i * Math.PI / numAxes - Math.PI / 2;
165
+ g.append("line").attr("x1", 0).attr("y1", 0).attr("x2", radius * config.axisScaleFactor * Math.cos(angle)).attr("y2", radius * config.axisScaleFactor * Math.sin(angle)).attr("class", "radarAxisLine");
166
+ g.append("text").text(label).attr("x", radius * config.axisLabelFactor * Math.cos(angle)).attr("y", radius * config.axisLabelFactor * Math.sin(angle)).attr("class", "radarAxisLabel");
167
+ }
168
+ }, "drawAxes");
169
+ function drawCurves(g, axes, curves, minValue, maxValue, graticule, config) {
170
+ const numAxes = axes.length;
171
+ const radius = Math.min(config.width, config.height) / 2;
172
+ curves.forEach((curve, index) => {
173
+ if (curve.entries.length !== numAxes) {
174
+ return;
175
+ }
176
+ const points = curve.entries.map((entry, i) => {
177
+ const angle = 2 * Math.PI * i / numAxes - Math.PI / 2;
178
+ const r = relativeRadius(entry, minValue, maxValue, radius);
179
+ const x = r * Math.cos(angle);
180
+ const y = r * Math.sin(angle);
181
+ return { x, y };
182
+ });
183
+ if (graticule === "circle") {
184
+ g.append("path").attr("d", closedRoundCurve(points, config.curveTension)).attr("class", `radarCurve-${index}`);
185
+ } else if (graticule === "polygon") {
186
+ g.append("polygon").attr("points", points.map((p) => `${p.x},${p.y}`).join(" ")).attr("class", `radarCurve-${index}`);
187
+ }
188
+ });
189
+ }
190
+ __name(drawCurves, "drawCurves");
191
+ function relativeRadius(value, minValue, maxValue, radius) {
192
+ const clippedValue = Math.min(Math.max(value, minValue), maxValue);
193
+ return radius * (clippedValue - minValue) / (maxValue - minValue);
194
+ }
195
+ __name(relativeRadius, "relativeRadius");
196
+ function closedRoundCurve(points, tension) {
197
+ const numPoints = points.length;
198
+ let d = `M${points[0].x},${points[0].y}`;
199
+ for (let i = 0; i < numPoints; i++) {
200
+ const p0 = points[(i - 1 + numPoints) % numPoints];
201
+ const p1 = points[i];
202
+ const p2 = points[(i + 1) % numPoints];
203
+ const p3 = points[(i + 2) % numPoints];
204
+ const cp1 = {
205
+ x: p1.x + (p2.x - p0.x) * tension,
206
+ y: p1.y + (p2.y - p0.y) * tension
207
+ };
208
+ const cp2 = {
209
+ x: p2.x - (p3.x - p1.x) * tension,
210
+ y: p2.y - (p3.y - p1.y) * tension
211
+ };
212
+ d += ` C${cp1.x},${cp1.y} ${cp2.x},${cp2.y} ${p2.x},${p2.y}`;
213
+ }
214
+ return `${d} Z`;
215
+ }
216
+ __name(closedRoundCurve, "closedRoundCurve");
217
+ function drawLegend(g, curves, showLegend, config) {
218
+ if (!showLegend) {
219
+ return;
220
+ }
221
+ const legendX = (config.width / 2 + config.marginRight) * 3 / 4;
222
+ const legendY = -(config.height / 2 + config.marginTop) * 3 / 4;
223
+ const lineHeight = 20;
224
+ curves.forEach((curve, index) => {
225
+ const itemGroup = g.append("g").attr("transform", `translate(${legendX}, ${legendY + index * lineHeight})`);
226
+ itemGroup.append("rect").attr("width", 12).attr("height", 12).attr("class", `radarLegendBox-${index}`);
227
+ itemGroup.append("text").attr("x", 16).attr("y", 0).attr("class", "radarLegendText").text(curve.label);
228
+ });
229
+ }
230
+ __name(drawLegend, "drawLegend");
231
+ var renderer = { draw };
232
+ var genIndexStyles = /* @__PURE__ */ __name((themeVariables, radarOptions) => {
233
+ let sections = "";
234
+ for (let i = 0; i < themeVariables.THEME_COLOR_LIMIT; i++) {
235
+ const indexColor = themeVariables[`cScale${i}`];
236
+ sections += `
237
+ .radarCurve-${i} {
238
+ color: ${indexColor};
239
+ fill: ${indexColor};
240
+ fill-opacity: ${radarOptions.curveOpacity};
241
+ stroke: ${indexColor};
242
+ stroke-width: ${radarOptions.curveStrokeWidth};
243
+ }
244
+ .radarLegendBox-${i} {
245
+ fill: ${indexColor};
246
+ fill-opacity: ${radarOptions.curveOpacity};
247
+ stroke: ${indexColor};
248
+ }
249
+ `;
250
+ }
251
+ return sections;
252
+ }, "genIndexStyles");
253
+ var buildRadarStyleOptions = /* @__PURE__ */ __name((radar) => {
254
+ const defaultThemeVariables = getThemeVariables3();
255
+ const currentConfig = getConfig();
256
+ const themeVariables = cleanAndMerge(defaultThemeVariables, currentConfig.themeVariables);
257
+ const radarOptions = cleanAndMerge(themeVariables.radar, radar);
258
+ return { themeVariables, radarOptions };
259
+ }, "buildRadarStyleOptions");
260
+ var styles = /* @__PURE__ */ __name(({ radar } = {}) => {
261
+ const { themeVariables, radarOptions } = buildRadarStyleOptions(radar);
262
+ return `
263
+ .radarTitle {
264
+ font-size: ${themeVariables.fontSize};
265
+ color: ${themeVariables.titleColor};
266
+ dominant-baseline: hanging;
267
+ text-anchor: middle;
268
+ }
269
+ .radarAxisLine {
270
+ stroke: ${radarOptions.axisColor};
271
+ stroke-width: ${radarOptions.axisStrokeWidth};
272
+ }
273
+ .radarAxisLabel {
274
+ dominant-baseline: middle;
275
+ text-anchor: middle;
276
+ font-size: ${radarOptions.axisLabelFontSize}px;
277
+ color: ${radarOptions.axisColor};
278
+ }
279
+ .radarGraticule {
280
+ fill: ${radarOptions.graticuleColor};
281
+ fill-opacity: ${radarOptions.graticuleOpacity};
282
+ stroke: ${radarOptions.graticuleColor};
283
+ stroke-width: ${radarOptions.graticuleStrokeWidth};
284
+ }
285
+ .radarLegendText {
286
+ text-anchor: start;
287
+ font-size: ${radarOptions.legendFontSize}px;
288
+ dominant-baseline: hanging;
289
+ }
290
+ ${genIndexStyles(themeVariables, radarOptions)}
291
+ `;
292
+ }, "styles");
293
+ var diagram = {
294
+ parser,
295
+ db,
296
+ renderer,
297
+ styles
298
+ };
299
+ export {
300
+ diagram
301
+ };
@@ -0,0 +1,169 @@
1
+ import { p as setDiagramTitle, b as setAccTitle, s as setAccDescription, q as getDiagramTitle, g as getAccDescription, a as getAccTitle, _ as __name, F as cleanAndMerge, l as log, I as selectSvgElement, e as configureSvgSize, D as getConfig, z as clear, G as defaultConfig_default } from "./index-DW7LS8C1.js";
2
+ import { p as populateCommonDb } from "./chunk-4BX2VUAB-BXJ8Ggh-.js";
3
+ import { I as ImperativeState } from "./chunk-QZHKN3VN-Biq_K124.js";
4
+ import { p as parse } from "./wardley-L42UT6IY-Cx-VbqoS.js";
5
+ var state = new ImperativeState(() => ({
6
+ cnt: 1,
7
+ stack: [
8
+ {
9
+ id: 0,
10
+ level: -1,
11
+ name: "/",
12
+ children: []
13
+ }
14
+ ]
15
+ }));
16
+ var clear2 = /* @__PURE__ */ __name(() => {
17
+ state.reset();
18
+ clear();
19
+ }, "clear");
20
+ var getRoot = /* @__PURE__ */ __name(() => {
21
+ return state.records.stack[0];
22
+ }, "getRoot");
23
+ var getCount = /* @__PURE__ */ __name(() => state.records.cnt, "getCount");
24
+ var defaultConfig = defaultConfig_default.treeView;
25
+ var getConfig2 = /* @__PURE__ */ __name(() => {
26
+ return cleanAndMerge(defaultConfig, getConfig().treeView);
27
+ }, "getConfig");
28
+ var addNode = /* @__PURE__ */ __name((level, name) => {
29
+ while (level <= state.records.stack[state.records.stack.length - 1].level) {
30
+ state.records.stack.pop();
31
+ }
32
+ const node = {
33
+ id: state.records.cnt++,
34
+ level,
35
+ name,
36
+ children: []
37
+ };
38
+ state.records.stack[state.records.stack.length - 1].children.push(node);
39
+ state.records.stack.push(node);
40
+ }, "addNode");
41
+ var db = {
42
+ clear: clear2,
43
+ addNode,
44
+ getRoot,
45
+ getCount,
46
+ getConfig: getConfig2,
47
+ getAccTitle,
48
+ getAccDescription,
49
+ getDiagramTitle,
50
+ setAccDescription,
51
+ setAccTitle,
52
+ setDiagramTitle
53
+ };
54
+ var db_default = db;
55
+ var populate = /* @__PURE__ */ __name((ast) => {
56
+ populateCommonDb(ast, db_default);
57
+ ast.nodes.map((node) => db_default.addNode(node.indent ? parseInt(node.indent) : 0, node.name));
58
+ }, "populate");
59
+ var parser = {
60
+ parse: /* @__PURE__ */ __name(async (input) => {
61
+ const ast = await parse("treeView", input);
62
+ log.debug(ast);
63
+ populate(ast);
64
+ }, "parse")
65
+ };
66
+ var positionLabel = /* @__PURE__ */ __name((x, y, node, domElem, config) => {
67
+ const label = domElem.append("text").text(node.name).attr("dominant-baseline", "middle").attr("class", "treeView-node-label");
68
+ const { height: labelHeight, width: labelWidth } = label.node().getBBox();
69
+ const height = labelHeight + config.paddingY * 2;
70
+ const width = labelWidth + config.paddingX * 2;
71
+ label.attr("x", x + config.paddingX);
72
+ label.attr("y", y + height / 2);
73
+ node.BBox = {
74
+ x,
75
+ y,
76
+ width,
77
+ height
78
+ };
79
+ }, "positionLabel");
80
+ var positionLine = /* @__PURE__ */ __name((domElem, x1, y1, x2, y2, lineThickness) => {
81
+ return domElem.append("line").attr("x1", x1).attr("y1", y1).attr("x2", x2).attr("y2", y2).attr("stroke-width", lineThickness).attr("class", "treeView-node-line");
82
+ }, "positionLine");
83
+ var drawTree = /* @__PURE__ */ __name((elem, root, config) => {
84
+ let totalHeight = 0;
85
+ let totalWidth = 0;
86
+ const drawNode = /* @__PURE__ */ __name((elem2, node, config2, depth) => {
87
+ const indent = depth * (config2.rowIndent + config2.paddingX);
88
+ positionLabel(indent, totalHeight, node, elem2, config2);
89
+ const { height, width } = node.BBox;
90
+ positionLine(
91
+ elem2,
92
+ indent - config2.rowIndent,
93
+ totalHeight + height / 2,
94
+ indent,
95
+ totalHeight + height / 2,
96
+ config2.lineThickness
97
+ );
98
+ totalWidth = Math.max(totalWidth, indent + width);
99
+ totalHeight += height;
100
+ }, "drawNode");
101
+ const processNode = /* @__PURE__ */ __name((node, depth = 0) => {
102
+ drawNode(elem, node, config, depth);
103
+ node.children.forEach((child) => {
104
+ processNode(child, depth + 1);
105
+ });
106
+ const { x, y, height } = node.BBox;
107
+ if (node.children.length) {
108
+ const { y: endY, height: endHeight } = node.children[node.children.length - 1].BBox;
109
+ positionLine(
110
+ elem,
111
+ x + config.paddingX,
112
+ y + height,
113
+ x + config.paddingX,
114
+ endY + endHeight / 2 + config.lineThickness / 2,
115
+ config.lineThickness
116
+ );
117
+ }
118
+ }, "processNode");
119
+ processNode(root);
120
+ return { totalHeight, totalWidth };
121
+ }, "drawTree");
122
+ var draw = /* @__PURE__ */ __name((text, id, _ver, diagObj) => {
123
+ log.debug("Rendering treeView diagram\n" + text);
124
+ const db2 = diagObj.db;
125
+ const root = db2.getRoot();
126
+ const config = db2.getConfig();
127
+ const svg = selectSvgElement(id);
128
+ const treeElem = svg.append("g");
129
+ treeElem.attr("class", "tree-view");
130
+ const { totalHeight, totalWidth } = drawTree(treeElem, root, config);
131
+ svg.attr("viewBox", `-${config.lineThickness / 2} 0 ${totalWidth} ${totalHeight}`);
132
+ configureSvgSize(svg, totalHeight, totalWidth, config.useMaxWidth);
133
+ }, "draw");
134
+ var renderer = {
135
+ draw
136
+ };
137
+ var renderer_default = renderer;
138
+ var defaultTreeViewDiagramStyles = {
139
+ labelFontSize: "16px",
140
+ labelColor: "black",
141
+ lineColor: "black"
142
+ };
143
+ var styles = /* @__PURE__ */ __name(({
144
+ treeView
145
+ }) => {
146
+ const { labelFontSize, labelColor, lineColor } = cleanAndMerge(
147
+ defaultTreeViewDiagramStyles,
148
+ treeView
149
+ );
150
+ return `
151
+ .treeView-node-label {
152
+ font-size: ${labelFontSize};
153
+ fill: ${labelColor};
154
+ }
155
+ .treeView-node-line {
156
+ stroke: ${lineColor};
157
+ }
158
+ `;
159
+ }, "styles");
160
+ var styles_default = styles;
161
+ var diagram = {
162
+ db: db_default,
163
+ renderer: renderer_default,
164
+ parser,
165
+ styles: styles_default
166
+ };
167
+ export {
168
+ diagram
169
+ };