@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.
- package/.github/workflows/release.yml +66 -0
- package/.trae/documents/fix-mermaid-colors-and-sankey.md +50 -0
- package/CLAUDE.md +87 -0
- package/LICENSE +21 -0
- package/README.md +540 -0
- package/README_CN.md +543 -0
- package/demo.md +486 -0
- package/dist/main/index.js +735 -0
- package/dist/preload/index.js +71 -0
- package/dist/renderer/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/renderer/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/renderer/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/renderer/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/renderer/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/renderer/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/renderer/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/renderer/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/renderer/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/renderer/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/renderer/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/renderer/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/renderer/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/renderer/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/renderer/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/renderer/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/renderer/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/renderer/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/renderer/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/renderer/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/renderer/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/renderer/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/renderer/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/renderer/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/renderer/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/renderer/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/renderer/assets/arc-tTbbM8LO.js +131 -0
- package/dist/renderer/assets/architectureDiagram-3BPJPVTR-CEgYow6c.js +8720 -0
- package/dist/renderer/assets/blockDiagram-GPEHLZMM-LHyVtPwW.js +3825 -0
- package/dist/renderer/assets/c4Diagram-AAUBKEIU-C1P1eJrf.js +2482 -0
- package/dist/renderer/assets/channel-upve91Tq.js +7 -0
- package/dist/renderer/assets/chunk-2J33WTMH-lag2vhq9.js +24 -0
- package/dist/renderer/assets/chunk-4BX2VUAB-BXJ8Ggh-.js +16 -0
- package/dist/renderer/assets/chunk-55IACEB6-CiBpxRa1.js +13 -0
- package/dist/renderer/assets/chunk-727SXJPM-ODeKQFXC.js +2016 -0
- package/dist/renderer/assets/chunk-AQP2D5EJ-BK7xJolB.js +1953 -0
- package/dist/renderer/assets/chunk-FMBD7UC4-BxpCZPtz.js +19 -0
- package/dist/renderer/assets/chunk-ND2GUHAM-CqqaU9Ue.js +116 -0
- package/dist/renderer/assets/chunk-QZHKN3VN-Biq_K124.js +19 -0
- package/dist/renderer/assets/classDiagram-4FO5ZUOK-Cq95X99o.js +23 -0
- package/dist/renderer/assets/classDiagram-v2-Q7XG4LA2-Cq95X99o.js +23 -0
- package/dist/renderer/assets/cose-bilkent-S5V4N54A-XasiD0bu.js +4942 -0
- package/dist/renderer/assets/cytoscape.esm-CpHeHM5e.js +30269 -0
- package/dist/renderer/assets/dagre-BM42HDAG-Nq84Gfx4.js +705 -0
- package/dist/renderer/assets/defaultLocale-B2RvLBDe.js +206 -0
- package/dist/renderer/assets/diagram-2AECGRRQ-DwuB1GWt.js +301 -0
- package/dist/renderer/assets/diagram-5GNKFQAL-C2tgeI1h.js +169 -0
- package/dist/renderer/assets/diagram-KO2AKTUF-D5KzjNBc.js +632 -0
- package/dist/renderer/assets/diagram-LMA3HP47-C12xHS1c.js +212 -0
- package/dist/renderer/assets/diagram-OG6HWLK6-CnxI9oEa.js +851 -0
- package/dist/renderer/assets/erDiagram-TEJ5UH35-D_uPaKwn.js +1227 -0
- package/dist/renderer/assets/flowDiagram-I6XJVG4X-B6q_1-tE.js +2332 -0
- package/dist/renderer/assets/ganttDiagram-6RSMTGT7-CFo7ifF9.js +3720 -0
- package/dist/renderer/assets/gitGraphDiagram-PVQCEYII-WSexHTnq.js +1373 -0
- package/dist/renderer/assets/graph-DyX_9f6d.js +1988 -0
- package/dist/renderer/assets/index-DW7LS8C1.js +72292 -0
- package/dist/renderer/assets/index-dyHEFYvY.css +2184 -0
- package/dist/renderer/assets/infoDiagram-5YYISTIA-DaeJdLRq.js +31 -0
- package/dist/renderer/assets/init-ZxktEp_H.js +16 -0
- package/dist/renderer/assets/ishikawaDiagram-YF4QCWOH-DDCZc35f.js +967 -0
- package/dist/renderer/assets/journeyDiagram-JHISSGLW-BEdmpAgl.js +1255 -0
- package/dist/renderer/assets/kanban-definition-UN3LZRKU-BEFtQcFb.js +1052 -0
- package/dist/renderer/assets/layout-CAJgQHdw.js +2610 -0
- package/dist/renderer/assets/linear-B2ggJ8Am.js +340 -0
- package/dist/renderer/assets/mindmap-definition-RKZ34NQL-DSxVgHB5.js +1180 -0
- package/dist/renderer/assets/ordinal-DSZU4PqD.js +76 -0
- package/dist/renderer/assets/pieDiagram-4H26LBE5-CwYoJBuL.js +246 -0
- package/dist/renderer/assets/quadrantDiagram-W4KKPZXB-CST9Fvg9.js +1344 -0
- package/dist/renderer/assets/requirementDiagram-4Y6WPE33-DtrH52jS.js +1204 -0
- package/dist/renderer/assets/sankeyDiagram-5OEKKPKP-ca1tPzJ_.js +1274 -0
- package/dist/renderer/assets/sequenceDiagram-3UESZ5HK-Dfp1EJZ7.js +4514 -0
- package/dist/renderer/assets/stateDiagram-AJRCARHV-Bha2QoNB.js +450 -0
- package/dist/renderer/assets/stateDiagram-v2-BHNVJYJU-DWgFUYu1.js +21 -0
- package/dist/renderer/assets/timeline-definition-PNZ67QCA-C3h_-OTj.js +1596 -0
- package/dist/renderer/assets/vennDiagram-CIIHVFJN-DFzjSrZi.js +2486 -0
- package/dist/renderer/assets/wardley-L42UT6IY-Cx-VbqoS.js +30699 -0
- package/dist/renderer/assets/wardleyDiagram-YWT4CUSO-S2D9XqX6.js +975 -0
- package/dist/renderer/assets/xychartDiagram-2RQKCTM6-Cfxigbts.js +1932 -0
- package/dist/renderer/index.html +19 -0
- package/docs/agent-diff-view.md +48 -0
- package/electron-builder.yml +57 -0
- package/electron.vite.config.ts +30 -0
- package/package.json +40 -0
- package/resources/entitlements.mac.plist +12 -0
- package/resources/icon.icns +0 -0
- package/resources/icon.png +0 -0
- package/resources/icon.svg +23 -0
- package/resources/templates/slides/icon.png +0 -0
- package/resources/templates/slides/slides-template.md +74 -0
- package/resources/templates/slides/template.html +535 -0
- package/scripts/afterPack.js +13 -0
- package/src/main/index.ts +881 -0
- package/src/preload/index.ts +110 -0
- package/src/renderer/editor/editor.ts +204 -0
- package/src/renderer/editor/html-view.ts +15 -0
- package/src/renderer/editor/plugins/index.ts +76 -0
- package/src/renderer/editor/plugins/math-plugin.ts +297 -0
- package/src/renderer/editor/plugins/mermaid-plugin-custom.css +431 -0
- package/src/renderer/editor/plugins/mermaid-plugin-dark.css +428 -0
- package/src/renderer/editor/plugins/mermaid-plugin-elegant.css +443 -0
- package/src/renderer/editor/plugins/mermaid-plugin-newsprint.css +208 -0
- package/src/renderer/editor/plugins/mermaid-plugin.css +111 -0
- package/src/renderer/editor/plugins/mermaid-plugin.ts +679 -0
- package/src/renderer/env.d.ts +7 -0
- package/src/renderer/index.html +18 -0
- package/src/renderer/main.ts +303 -0
- package/src/renderer/themes/base.css +509 -0
- package/src/renderer/themes/theme-manager.ts +40 -0
- package/themes/README.md +280 -0
- package/themes/elegant.css +664 -0
- package/themes/guizang.css +732 -0
- package/tsconfig.json +14 -0
- package/tsconfig.main.json +11 -0
- package/tsconfig.preload.json +11 -0
- 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
|
+
};
|