mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-27 20:26:47 +02:00
Compare commits
1055 Commits
@mermaid-j
...
renovate/p
Author | SHA1 | Date | |
---|---|---|---|
![]() |
23fd1c59e6 | ||
![]() |
ee5969bc1e | ||
![]() |
29886b8dd4 | ||
![]() |
e0b45c2d2b | ||
![]() |
d4c76968e9 | ||
![]() |
7171237b96 | ||
![]() |
066883f4cd | ||
![]() |
96778f7789 | ||
![]() |
d4c058bd56 | ||
![]() |
b638a0a9c1 | ||
![]() |
fd9aa36c77 | ||
![]() |
46a9f1b31e | ||
![]() |
83c6224cc0 | ||
![]() |
d8161b1923 | ||
![]() |
8223141af9 | ||
![]() |
99f98a6876 | ||
![]() |
ef28f548df | ||
![]() |
e448c53b53 | ||
![]() |
cad144734d | ||
![]() |
5e57f22e23 | ||
![]() |
fc2c32603d | ||
![]() |
8c7da5af56 | ||
![]() |
4b89af3aca | ||
![]() |
c534d3d364 | ||
![]() |
4db72f5357 | ||
![]() |
2aa8330279 | ||
![]() |
803e2e14be | ||
![]() |
685516a85e | ||
![]() |
880f7454a3 | ||
![]() |
1f46c9e9bb | ||
![]() |
ec7099dc27 | ||
![]() |
e6ee145edf | ||
![]() |
5cc264feb7 | ||
![]() |
690cc73259 | ||
![]() |
b9ef683fb6 | ||
![]() |
6a6289f2aa | ||
![]() |
accb4c6369 | ||
![]() |
52be254ad3 | ||
![]() |
9c071a9064 | ||
![]() |
91d7229f1b | ||
![]() |
60feec465b | ||
![]() |
d1ae687d1e | ||
![]() |
7af6723ac0 | ||
![]() |
da90f6760b | ||
![]() |
d74013c642 | ||
![]() |
ce996346f8 | ||
![]() |
29edfa7f56 | ||
![]() |
14a4ab81c9 | ||
![]() |
13d72262d9 | ||
![]() |
62dee0bad4 | ||
![]() |
9e81e1146a | ||
![]() |
2260948b7b | ||
![]() |
186429ae32 | ||
![]() |
657a9ef785 | ||
![]() |
4f24489d81 | ||
![]() |
2a514fa69e | ||
![]() |
bf3ca9d1ef | ||
![]() |
e53c17a012 | ||
![]() |
bb2d6973ba | ||
![]() |
aeaf626bb5 | ||
![]() |
9322771b5c | ||
![]() |
2fe3063bf5 | ||
![]() |
4e55a45b1b | ||
![]() |
3d319824a6 | ||
![]() |
aa5d443a46 | ||
![]() |
356da0b4d7 | ||
![]() |
22530a8bdf | ||
![]() |
e6574ef40c | ||
![]() |
c4eb526162 | ||
![]() |
4d62d59632 | ||
![]() |
5af489d8dd | ||
![]() |
096fbe933e | ||
![]() |
e539909e87 | ||
![]() |
074701e316 | ||
![]() |
cfc76ef1cb | ||
![]() |
4b31361506 | ||
![]() |
20a18971ea | ||
![]() |
e1e36dfcb3 | ||
![]() |
165ffefad5 | ||
![]() |
9258b2933b | ||
![]() |
f5445b266e | ||
![]() |
7a1530d911 | ||
![]() |
d93d9a521d | ||
![]() |
e32e80ea7f | ||
![]() |
c99bce6bab | ||
![]() |
3256807d25 | ||
![]() |
0133f1c0c5 | ||
![]() |
12e01bdb5c | ||
![]() |
a776b4f0ab | ||
![]() |
8d79bc9b19 | ||
![]() |
ecf7ab4355 | ||
![]() |
c61a431e2d | ||
![]() |
526b35c602 | ||
![]() |
8090580c67 | ||
![]() |
9d685178d2 | ||
![]() |
b451c66d7c | ||
![]() |
1dd11705d9 | ||
![]() |
17142ef8d7 | ||
![]() |
29de40478f | ||
![]() |
4ab98c2ec7 | ||
![]() |
aeb51e56e2 | ||
![]() |
ddcd8a5e73 | ||
![]() |
e464d080ef | ||
![]() |
1a9b94ca2d | ||
![]() |
e4b33a1d99 | ||
![]() |
e27a9da61d | ||
![]() |
03cf10003f | ||
![]() |
8e31fdb611 | ||
![]() |
5dd748148f | ||
![]() |
895f9d43ff | ||
![]() |
fb890a2be8 | ||
![]() |
5986189a52 | ||
![]() |
1988dfc956 | ||
![]() |
e48b0ba61d | ||
![]() |
1a4b8662cf | ||
![]() |
6083463c8e | ||
![]() |
1a14e331ea | ||
![]() |
ebb6680eba | ||
![]() |
6d1d46f88a | ||
![]() |
435790f931 | ||
![]() |
ffe9c1090e | ||
![]() |
a476e99d4c | ||
![]() |
0cc0b63e52 | ||
![]() |
694844050a | ||
![]() |
1be1620000 | ||
![]() |
c36cd05c45 | ||
![]() |
b7a591b8d3 | ||
![]() |
8bb29fc879 | ||
![]() |
e073c80019 | ||
![]() |
01aaef39b4 | ||
![]() |
3d640fc620 | ||
![]() |
724197c910 | ||
![]() |
6180c5f2ff | ||
![]() |
a9f7a94ae3 | ||
![]() |
3ffe9618ae | ||
![]() |
da539c1fa1 | ||
![]() |
5e8aa2dccf | ||
![]() |
ac04172cf8 | ||
![]() |
cf5b4b89a8 | ||
![]() |
1c269e0432 | ||
![]() |
999b836508 | ||
![]() |
326e4e3693 | ||
![]() |
9c92da487f | ||
![]() |
10752f1357 | ||
![]() |
1a80854242 | ||
![]() |
fc9c600a31 | ||
![]() |
da8ce0b93e | ||
![]() |
00a79353fc | ||
![]() |
1ceeca1ef1 | ||
![]() |
94890390ef | ||
![]() |
adfeb093cb | ||
![]() |
366d217928 | ||
![]() |
b94f1336ab | ||
![]() |
020c6d66e0 | ||
![]() |
cfc2551bdc | ||
![]() |
000308c8f5 | ||
![]() |
6039a8b930 | ||
![]() |
cd282f2245 | ||
![]() |
a27d90fe9c | ||
![]() |
64bf34b9ab | ||
![]() |
bcd3e33243 | ||
![]() |
9faf2f9fb2 | ||
![]() |
f683b03645 | ||
![]() |
9cef40d164 | ||
![]() |
b2754bc553 | ||
![]() |
04612e078a | ||
![]() |
af585bdcc7 | ||
![]() |
37bfa2aa75 | ||
![]() |
54640ce476 | ||
![]() |
47b4c56b2b | ||
![]() |
6b1b0bf151 | ||
![]() |
7ba332ad4a | ||
![]() |
b65a73f432 | ||
![]() |
412d2a09d3 | ||
![]() |
7886fed8b2 | ||
![]() |
af3d5b6528 | ||
![]() |
404286a90d | ||
![]() |
827a9af790 | ||
![]() |
a14cd0e2a1 | ||
![]() |
0823e08a54 | ||
![]() |
95733b6295 | ||
![]() |
5cafe241d0 | ||
![]() |
c847817a54 | ||
![]() |
8b86d617e7 | ||
![]() |
3ab0961bdc | ||
![]() |
cc2112c7aa | ||
![]() |
0892870b5d | ||
![]() |
500f90a105 | ||
![]() |
14983158a2 | ||
![]() |
767754f4fb | ||
![]() |
cff59c58b4 | ||
![]() |
3fea9e8759 | ||
![]() |
e5ea2ed0b1 | ||
![]() |
34e7f9704b | ||
![]() |
ac976245ad | ||
![]() |
1176d30668 | ||
![]() |
5b241bbb97 | ||
![]() |
7e5e47843b | ||
![]() |
6728852b7a | ||
![]() |
15e7c890ed | ||
![]() |
9e2cd1a926 | ||
![]() |
abf2227faf | ||
![]() |
7db942b0e1 | ||
![]() |
70041c806f | ||
![]() |
77e2703f72 | ||
![]() |
771801b366 | ||
![]() |
a9a0a9b2de | ||
![]() |
1e5e835c41 | ||
![]() |
1f3f8da0f7 | ||
![]() |
b11f40e8ce | ||
![]() |
1fe045e638 | ||
![]() |
1c750ffc70 | ||
![]() |
b0ec93f29c | ||
![]() |
6b071c135a | ||
![]() |
42a3c3487f | ||
![]() |
d7b8ed2c5a | ||
![]() |
96c21c7e54 | ||
![]() |
e95e4d155a | ||
![]() |
688170558c | ||
![]() |
832f012e10 | ||
![]() |
2e2e8c4152 | ||
![]() |
6ff6e08c4b | ||
![]() |
d7f1f12549 | ||
![]() |
6e56869566 | ||
![]() |
d3e2be35be | ||
![]() |
852cb35f0a | ||
![]() |
260a045da0 | ||
![]() |
a28965064d | ||
![]() |
355eeeb9cc | ||
![]() |
5449d6a447 | ||
![]() |
34e91f8b65 | ||
![]() |
627ee1f34d | ||
![]() |
28840ebd84 | ||
![]() |
4145879003 | ||
![]() |
0451e343ef | ||
![]() |
a2dbc8e4b3 | ||
![]() |
e097b480d5 | ||
![]() |
f76e27db70 | ||
![]() |
3e3ae08930 | ||
![]() |
966c112eb1 | ||
![]() |
55527e70c2 | ||
![]() |
447d1cf988 | ||
![]() |
003d1c7a70 | ||
![]() |
daf8d8d3be | ||
![]() |
d7a55b422b | ||
![]() |
12e3d31437 | ||
![]() |
ad024b01d6 | ||
![]() |
c12aea588c | ||
![]() |
9dfbf1166d | ||
![]() |
98bf9b4cb4 | ||
![]() |
e9ce8cf4da | ||
![]() |
d90634bf2b | ||
![]() |
90707e8062 | ||
![]() |
7e23f984e6 | ||
![]() |
b3a12237c0 | ||
![]() |
aea16eaf7e | ||
![]() |
bb7cd70034 | ||
![]() |
fad6676d18 | ||
![]() |
637680d4d9 | ||
![]() |
35a92efcdc | ||
![]() |
5f6f5110fd | ||
![]() |
af47269342 | ||
![]() |
d3c0893937 | ||
![]() |
75ef9bc681 | ||
![]() |
45edc91591 | ||
![]() |
f4edd19371 | ||
![]() |
b611a13e04 | ||
![]() |
7a38eb715d | ||
![]() |
2715ddb338 | ||
![]() |
ca2eca58c9 | ||
![]() |
fce7cabb71 | ||
![]() |
38e6dc497a | ||
![]() |
5f0c53c8a7 | ||
![]() |
f9da4433ff | ||
![]() |
fc07f0d8ab | ||
![]() |
b4fae2d096 | ||
![]() |
ce7a487dfc | ||
![]() |
6dd9af0dd4 | ||
![]() |
3151241559 | ||
![]() |
8c0d12027d | ||
![]() |
dda9c9b46e | ||
![]() |
cdd1a70b67 | ||
![]() |
12c94a177b | ||
![]() |
d8bd4dea93 | ||
![]() |
6deb476182 | ||
![]() |
ed297ee235 | ||
![]() |
03c1201fcb | ||
![]() |
3ca317c5a0 | ||
![]() |
4d83263388 | ||
![]() |
254e5cbd51 | ||
![]() |
a58dd3c6ce | ||
![]() |
10b7bb568f | ||
![]() |
1aa2870224 | ||
![]() |
8fbcbb6dc9 | ||
![]() |
3e545d7925 | ||
![]() |
75d2a259ed | ||
![]() |
746280b3e2 | ||
![]() |
fa4e30bb15 | ||
![]() |
950b107dd4 | ||
![]() |
35b84761a9 | ||
![]() |
0da2922ee7 | ||
![]() |
85eba01663 | ||
![]() |
ea72740d1f | ||
![]() |
79ba50216a | ||
![]() |
71b04f93b0 | ||
![]() |
27185f62e4 | ||
![]() |
9655d07adf | ||
![]() |
2b3cb6a362 | ||
![]() |
427dc38857 | ||
![]() |
ec21042c53 | ||
![]() |
89ac2932c4 | ||
![]() |
e828609749 | ||
![]() |
91f141f772 | ||
![]() |
c77b968f1e | ||
![]() |
ba13981905 | ||
![]() |
a7a94b95e1 | ||
![]() |
31f141c61a | ||
![]() |
fb017bebfd | ||
![]() |
648698a43a | ||
![]() |
a5e4729c76 | ||
![]() |
c884def5fc | ||
![]() |
4a86b68e01 | ||
![]() |
592c5bb880 | ||
![]() |
da0c6c6c32 | ||
![]() |
1414380181 | ||
![]() |
6686ee9253 | ||
![]() |
7f109c7b94 | ||
![]() |
b9c3375be3 | ||
![]() |
4254bdd473 | ||
![]() |
4012cbf013 | ||
![]() |
939da082b2 | ||
![]() |
d9396eedd6 | ||
![]() |
5f9601b6a8 | ||
![]() |
378f8ece0c | ||
![]() |
8693be56ee | ||
![]() |
148a42a31a | ||
![]() |
8980ca4526 | ||
![]() |
814b68b4a9 | ||
![]() |
bfa0eefa32 | ||
![]() |
caa04aad8b | ||
![]() |
3dc06ea9bd | ||
![]() |
c311c1ba5d | ||
![]() |
11a86d9c06 | ||
![]() |
037bec189c | ||
![]() |
9b164dd185 | ||
![]() |
4ee124bf91 | ||
![]() |
e70be4f155 | ||
![]() |
6621f6ddb2 | ||
![]() |
579c22cf5d | ||
![]() |
33e08daf17 | ||
![]() |
24257de8a6 | ||
![]() |
42ac1848dd | ||
![]() |
3920ad442d | ||
![]() |
e7970c66ee | ||
![]() |
c7b96be683 | ||
![]() |
0623a87d70 | ||
![]() |
c5f89eaa9a | ||
![]() |
1fbe550285 | ||
![]() |
b3724f04c4 | ||
![]() |
2f58a0e188 | ||
![]() |
6f1e0e4d17 | ||
![]() |
7dd8ddc3eb | ||
![]() |
222d7170f7 | ||
![]() |
3137cff4a5 | ||
![]() |
b45b1d7795 | ||
![]() |
e1030b186e | ||
![]() |
334c8c2962 | ||
![]() |
bdaa3f693a | ||
![]() |
be13fb0391 | ||
![]() |
c120901744 | ||
![]() |
1f07a781e4 | ||
![]() |
3132387ede | ||
![]() |
f41b4c96f9 | ||
![]() |
26bd456c01 | ||
![]() |
8ef7040a8d | ||
![]() |
badb019d38 | ||
![]() |
e7ec8ed527 | ||
![]() |
d85a393bcd | ||
![]() |
7c1e655675 | ||
![]() |
df2ccaa14b | ||
![]() |
797ba43d6e | ||
![]() |
53d27b771d | ||
![]() |
d628a971ef | ||
![]() |
2c0931da46 | ||
![]() |
8049b6aef8 | ||
![]() |
84802118be | ||
![]() |
e2ef425245 | ||
![]() |
da98732961 | ||
![]() |
efa11a7325 | ||
![]() |
8224a81ab6 | ||
![]() |
e5f6ea0b13 | ||
![]() |
98442294ed | ||
![]() |
a3d164fde8 | ||
![]() |
9dc987b28b | ||
![]() |
72c0d9df26 | ||
![]() |
cfbce54638 | ||
![]() |
6979aa1013 | ||
![]() |
9562a769db | ||
![]() |
5cfda33d04 | ||
![]() |
ea60525988 | ||
![]() |
9da6fb39ae | ||
![]() |
83b9a17277 | ||
![]() |
e682172823 | ||
![]() |
85c5b9b4c0 | ||
![]() |
1e68ed9cc1 | ||
![]() |
1337c60784 | ||
![]() |
a12d1f731a | ||
![]() |
b6ba9b79df | ||
![]() |
ce227b5519 | ||
![]() |
8a703bd09f | ||
![]() |
c4de3cdc57 | ||
![]() |
ef449a601b | ||
![]() |
8e84a1a8af | ||
![]() |
a3552e7936 | ||
![]() |
646cdf0d32 | ||
![]() |
99048bfa01 | ||
![]() |
ca80f719ea | ||
![]() |
0cabc6e8ed | ||
![]() |
5fe0f53179 | ||
![]() |
e2e3cd2bbd | ||
![]() |
ffb9016d65 | ||
![]() |
3c03f289b4 | ||
![]() |
c6035936b6 | ||
![]() |
818699f347 | ||
![]() |
f23a26e528 | ||
![]() |
48e6e60753 | ||
![]() |
dc3ed65c18 | ||
![]() |
43092e6e11 | ||
![]() |
878e77acab | ||
![]() |
2372cd7b21 | ||
![]() |
51f0cb2892 | ||
![]() |
14e3d77c75 | ||
![]() |
875fef691b | ||
![]() |
7075f833d0 | ||
![]() |
d629c5eae5 | ||
![]() |
80904da253 | ||
![]() |
e6be1e9202 | ||
![]() |
6f5d889f19 | ||
![]() |
63827db60d | ||
![]() |
41108358f6 | ||
![]() |
ec0786a6fa | ||
![]() |
2ea6695b4b | ||
![]() |
6485d1fbca | ||
![]() |
d0f1dafd49 | ||
![]() |
f970fc8bea | ||
![]() |
015afc53d5 | ||
![]() |
1f44143936 | ||
![]() |
db461a4c6c | ||
![]() |
fe33d5fb53 | ||
![]() |
64c4d4197b | ||
![]() |
ed7bab76f2 | ||
![]() |
f338802642 | ||
![]() |
445595f942 | ||
![]() |
66ce617bea | ||
![]() |
3e07a5acff | ||
![]() |
df1e739194 | ||
![]() |
2def5a0768 | ||
![]() |
2746bccef3 | ||
![]() |
f0c3dfe3b3 | ||
![]() |
942ae8dcbc | ||
![]() |
cadcddd40c | ||
![]() |
bca6ed67c3 | ||
![]() |
f20c677982 | ||
![]() |
e46fd145b2 | ||
![]() |
b1cf291273 | ||
![]() |
cac1779c22 | ||
![]() |
96bd7de40d | ||
![]() |
82874c6584 | ||
![]() |
e79147dcfc | ||
![]() |
28131bab98 | ||
![]() |
9d6b9369e6 | ||
![]() |
80351d9f59 | ||
![]() |
7b307f812f | ||
![]() |
071df09395 | ||
![]() |
0d047ccbcc | ||
![]() |
680d65114c | ||
![]() |
d463f00160 | ||
![]() |
941bc69835 | ||
![]() |
107b6cae87 | ||
![]() |
1b044a24fa | ||
![]() |
17a156901a | ||
![]() |
fa22ed137c | ||
![]() |
6b886abf39 | ||
![]() |
4fd64c5bc0 | ||
![]() |
7e245f970f | ||
![]() |
4f8f929340 | ||
![]() |
3629e8e480 | ||
![]() |
ff48c2e1da | ||
![]() |
1bd13b50f1 | ||
![]() |
bbe3489b4f | ||
![]() |
31ba692f65 | ||
![]() |
b073175fe9 | ||
![]() |
e2e22de1d9 | ||
![]() |
c370ebe520 | ||
![]() |
d732fa5f86 | ||
![]() |
ce1bfb2af5 | ||
![]() |
c6d8590d8f | ||
![]() |
10505a0392 | ||
![]() |
e0a075ecca | ||
![]() |
2a10143406 | ||
![]() |
40eb0cc240 | ||
![]() |
d702a7164e | ||
![]() |
8a0bc64282 | ||
![]() |
ac0283ff97 | ||
![]() |
84faddc9e5 | ||
![]() |
5e3f21f572 | ||
![]() |
05c74ed9ce | ||
![]() |
b106346119 | ||
![]() |
c09232c44d | ||
![]() |
714496af6d | ||
![]() |
5d61a30237 | ||
![]() |
02ff3c1216 | ||
![]() |
1f897a851b | ||
![]() |
8af636c58d | ||
![]() |
954f6cc8fc | ||
![]() |
a566353030 | ||
![]() |
d396c6b760 | ||
![]() |
8d9f027f40 | ||
![]() |
560700eaf8 | ||
![]() |
819843cf2a | ||
![]() |
5e2870f6f2 | ||
![]() |
c364ff463a | ||
![]() |
8738288bc0 | ||
![]() |
74ef4ce9c6 | ||
![]() |
2b41bf083c | ||
![]() |
249f22763b | ||
![]() |
444d35b9b4 | ||
![]() |
83543bc790 | ||
![]() |
379559c992 | ||
![]() |
c61b879711 | ||
![]() |
67806022b9 | ||
![]() |
f8c54317c5 | ||
![]() |
65f778d183 | ||
![]() |
ed67c36440 | ||
![]() |
908043183e | ||
![]() |
97b79c3578 | ||
![]() |
8d4c5d5278 | ||
![]() |
9988a61ec5 | ||
![]() |
d4e737e451 | ||
![]() |
b821454927 | ||
![]() |
cee43a45f6 | ||
![]() |
475532a839 | ||
![]() |
c8daf9aa43 | ||
![]() |
cf8fc2a541 | ||
![]() |
08b6524a35 | ||
![]() |
221aa3ed19 | ||
![]() |
640a65f9a7 | ||
![]() |
c17277e743 | ||
![]() |
7b3fd044e8 | ||
![]() |
566b3db15f | ||
![]() |
2483e6e434 | ||
![]() |
e7b39f3fa3 | ||
![]() |
19884294bc | ||
![]() |
e6b63fd70a | ||
![]() |
1c1d7d0300 | ||
![]() |
e8ee4bdb48 | ||
![]() |
2afa96c2a8 | ||
![]() |
7c42d08ef2 | ||
![]() |
d0520e6a50 | ||
![]() |
a703a195d4 | ||
![]() |
05b5607265 | ||
![]() |
2b28966f8d | ||
![]() |
4077088f18 | ||
![]() |
867484a2cc | ||
![]() |
5ea7088e04 | ||
![]() |
646230d603 | ||
![]() |
5a7e734da4 | ||
![]() |
2924b94fbc | ||
![]() |
f8c6ae5d17 | ||
![]() |
8d7330aeb3 | ||
![]() |
6a6c9f6254 | ||
![]() |
b0b76ef7a2 | ||
![]() |
53e89d97a0 | ||
![]() |
59b400652b | ||
![]() |
e8124d8828 | ||
![]() |
26e3bea2fe | ||
![]() |
1fda77db13 | ||
![]() |
5b2227b3be | ||
![]() |
68670535bf | ||
![]() |
7a6f13707f | ||
![]() |
9d838d4e7a | ||
![]() |
a92ae7a16c | ||
![]() |
8800de9309 | ||
![]() |
d2c53552ff | ||
![]() |
91a7564db6 | ||
![]() |
a037cdcf13 | ||
![]() |
3753967c8f | ||
![]() |
549dc86b21 | ||
![]() |
e97f25f13e | ||
![]() |
c3c609a965 | ||
![]() |
c81a7d13e0 | ||
![]() |
e561acac23 | ||
![]() |
86a0a7fe3a | ||
![]() |
5a8f32b8cb | ||
![]() |
c6e640ab75 | ||
![]() |
f6862c5af5 | ||
![]() |
bd8b93327e | ||
![]() |
4a63901af9 | ||
![]() |
8c52edf3ef | ||
![]() |
da610bff1d | ||
![]() |
db389e589d | ||
![]() |
24aec8c280 | ||
![]() |
8c4fc3c6ff | ||
![]() |
d72ee5fc95 | ||
![]() |
b3ff80f211 | ||
![]() |
8a34154efa | ||
![]() |
79b47be35f | ||
![]() |
054f5444d6 | ||
![]() |
beb80db25a | ||
![]() |
fbdbd9d0dd | ||
![]() |
8ce1f70066 | ||
![]() |
334294c6af | ||
![]() |
e0f3f2bd5a | ||
![]() |
6dad2ab327 | ||
![]() |
4d2e424c30 | ||
![]() |
ff217957fc | ||
![]() |
866b29c050 | ||
![]() |
a463d11e57 | ||
![]() |
5267f7c6ea | ||
![]() |
2bdecc2842 | ||
![]() |
d8efe9a55d | ||
![]() |
ae564f30af | ||
![]() |
2a6da19956 | ||
![]() |
de41669320 | ||
![]() |
02b997f4e4 | ||
![]() |
90c0908ed5 | ||
![]() |
a7d76b2695 | ||
![]() |
e46c7ae996 | ||
![]() |
af7a5fe77d | ||
![]() |
f9fbadbbe2 | ||
![]() |
dec82de586 | ||
![]() |
598c72853f | ||
![]() |
b1e1a0c0d7 | ||
![]() |
a9f3b432ff | ||
![]() |
cd2ab38927 | ||
![]() |
04448e3b6a | ||
![]() |
2a12a64c06 | ||
![]() |
586b528a16 | ||
![]() |
36e6e6e1be | ||
![]() |
1de7d31d90 | ||
![]() |
34d91d0e88 | ||
![]() |
101dc6d52c | ||
![]() |
1fbe17e04c | ||
![]() |
8fed1c86b0 | ||
![]() |
b808801347 | ||
![]() |
58ec4ca39f | ||
![]() |
7e3d547094 | ||
![]() |
79f010143a | ||
![]() |
aa9df775cd | ||
![]() |
2601ec89c8 | ||
![]() |
566415c189 | ||
![]() |
cbabc7b709 | ||
![]() |
873962c739 | ||
![]() |
2aeb435f19 | ||
![]() |
e0818c9e47 | ||
![]() |
a3753d8f4d | ||
![]() |
308e2cc107 | ||
![]() |
a578cb8def | ||
![]() |
a823bf043b | ||
![]() |
3980c99c22 | ||
![]() |
c81f63b462 | ||
![]() |
16167a64e5 | ||
![]() |
cba4d733f0 | ||
![]() |
6a0fb67ab7 | ||
![]() |
4bfd0f753d | ||
![]() |
bf83262d7c | ||
![]() |
ccdd0f0146 | ||
![]() |
82646432a1 | ||
![]() |
c82579097c | ||
![]() |
92132ad4f1 | ||
![]() |
8564ebbdbd | ||
![]() |
1ca6ff93ff | ||
![]() |
20098b287b | ||
![]() |
0474a8422b | ||
![]() |
075f0f580f | ||
![]() |
78ded6452f | ||
![]() |
08085b8821 | ||
![]() |
5f35d70ce2 | ||
![]() |
08951dbbf0 | ||
![]() |
7caf377963 | ||
![]() |
0103da0179 | ||
![]() |
a6c9ab04dc | ||
![]() |
b9c472e091 | ||
![]() |
4ed4756220 | ||
![]() |
4b12ebee51 | ||
![]() |
d6e1541bc8 | ||
![]() |
0507fe114e | ||
![]() |
2bb77406fb | ||
![]() |
2215bf6aaa | ||
![]() |
206cc51578 | ||
![]() |
c4c55277cb | ||
![]() |
0c2d222aa6 | ||
![]() |
fc3d4859db | ||
![]() |
c7714fd666 | ||
![]() |
e2bf95c922 | ||
![]() |
a79a50b77f | ||
![]() |
9133fcb9a8 | ||
![]() |
00e9ed2024 | ||
![]() |
5919d39812 | ||
![]() |
f5fa0ae876 | ||
![]() |
de9eb67040 | ||
![]() |
cb7518a960 | ||
![]() |
34bf5c8be1 | ||
![]() |
7d1319f97c | ||
![]() |
9c46e960e7 | ||
![]() |
cd956e1b60 | ||
![]() |
78cf1706a9 | ||
![]() |
607e9ab989 | ||
![]() |
0cf0b684cf | ||
![]() |
cb0cb5dfc7 | ||
![]() |
330c48fa3f | ||
![]() |
2ff6de11dc | ||
![]() |
385fab8c67 | ||
![]() |
e49911e748 | ||
![]() |
8a84ede164 | ||
![]() |
d79b7b2d97 | ||
![]() |
844f879f63 | ||
![]() |
cf789d2c91 | ||
![]() |
4936ef5c30 | ||
![]() |
f006718e56 | ||
![]() |
d720776918 | ||
![]() |
f43398dd44 | ||
![]() |
43ad451940 | ||
![]() |
94c099caa1 | ||
![]() |
a3fed10d55 | ||
![]() |
2a859f2739 | ||
![]() |
dbbe014c5b | ||
![]() |
c7fa906115 | ||
![]() |
3c69bd34c7 | ||
![]() |
ceef0558be | ||
![]() |
63b90e8b9b | ||
![]() |
f5d27bf7ef | ||
![]() |
5a03f07853 | ||
![]() |
8474cf43fe | ||
![]() |
f56895832f | ||
![]() |
8975a1907a | ||
![]() |
62b4228df4 | ||
![]() |
c552dc7551 | ||
![]() |
e425a45755 | ||
![]() |
d177211286 | ||
![]() |
a07d365c1c | ||
![]() |
1f512e9671 | ||
![]() |
12b6371abf | ||
![]() |
88ae4ef704 | ||
![]() |
df9df9dc32 | ||
![]() |
ea321168bd | ||
![]() |
d7730aba46 | ||
![]() |
5310d60e63 | ||
![]() |
3ae87ca06a | ||
![]() |
24f23efdad | ||
![]() |
e2520dde20 | ||
![]() |
3e8204aa21 | ||
![]() |
0b57984d27 | ||
![]() |
bcaa40f1d5 | ||
![]() |
0107494b59 | ||
![]() |
11c3ac58fd | ||
![]() |
af2eb13932 | ||
![]() |
41e84b726a | ||
![]() |
a1ba65c0c0 | ||
![]() |
5fe6e5dccc | ||
![]() |
946452c7b4 | ||
![]() |
4bb6351489 | ||
![]() |
8c63a2e411 | ||
![]() |
4467fd4363 | ||
![]() |
7e567a8759 | ||
![]() |
edf062720d | ||
![]() |
3348eea6af | ||
![]() |
ae7ffab9ac | ||
![]() |
ecdbc676d2 | ||
![]() |
6a01b04e3c | ||
![]() |
aafe8de3d3 | ||
![]() |
24287637b5 | ||
![]() |
f69cc17795 | ||
![]() |
f5c99a2a4f | ||
![]() |
244703a904 | ||
![]() |
59a9e1b300 | ||
![]() |
167a625413 | ||
![]() |
296cb64fa5 | ||
![]() |
934f4da507 | ||
![]() |
6957f35782 | ||
![]() |
b00be59ea8 | ||
![]() |
dff00f2c4f | ||
![]() |
2009177375 | ||
![]() |
eb9987435a | ||
![]() |
a300d0db94 | ||
![]() |
7e7f3c56c2 | ||
![]() |
81fa2a675f | ||
![]() |
2203792164 | ||
![]() |
5bbc9b4f5b | ||
![]() |
ea987861f3 | ||
![]() |
8005262d76 | ||
![]() |
463eb07979 | ||
![]() |
a3cf9de01b | ||
![]() |
9a90aca8e6 | ||
![]() |
8c9b38ed90 | ||
![]() |
963b1e3ec5 | ||
![]() |
208d29e3d6 | ||
![]() |
5c865e7b71 | ||
![]() |
7ce9dbcece | ||
![]() |
36fe04bd46 | ||
![]() |
ff786b4ef8 | ||
![]() |
b81b665137 | ||
![]() |
178c7130c6 | ||
![]() |
f87d0dd88a | ||
![]() |
2396f90269 | ||
![]() |
97e35fd30a | ||
![]() |
7a5f999f42 | ||
![]() |
cd8d74bb96 | ||
![]() |
3e6f680df2 | ||
![]() |
56c6853e05 | ||
![]() |
2e5d955e77 | ||
![]() |
7733faf6c4 | ||
![]() |
b053a88993 | ||
![]() |
01e2af0cfd | ||
![]() |
f55ff99f74 | ||
![]() |
d25770ee73 | ||
![]() |
2b05d7e1ed | ||
![]() |
7c77c46ede | ||
![]() |
30735266a4 | ||
![]() |
926862c196 | ||
![]() |
44e668e704 | ||
![]() |
404216273a | ||
![]() |
5a6831ae7e | ||
![]() |
da6937f474 | ||
![]() |
cbb496da79 | ||
![]() |
03119fea2c | ||
![]() |
5351211256 | ||
![]() |
92c0aa4331 | ||
![]() |
7bd5c03d87 | ||
![]() |
de72e18a7f | ||
![]() |
3f493acc6a | ||
![]() |
d2239549e6 | ||
![]() |
f8d8f74f34 | ||
![]() |
74a9336d42 | ||
![]() |
ca2b16119d | ||
![]() |
2d9034c983 | ||
![]() |
aa6cb86899 | ||
![]() |
99797632ab | ||
![]() |
4fdb1d5906 | ||
![]() |
43e66a6089 | ||
![]() |
5acbd7e762 | ||
![]() |
febae345fc | ||
![]() |
28bdbbca1a | ||
![]() |
4b896fa22e | ||
![]() |
a25ee49edd | ||
![]() |
695b5b2fb2 | ||
![]() |
9b77af540b | ||
![]() |
7829138fb2 | ||
![]() |
7e7a4fc665 | ||
![]() |
a2bf5103ce | ||
![]() |
8b7a4db2ef | ||
![]() |
a43965ac2c | ||
![]() |
8eb2000b98 | ||
![]() |
73f8dee643 | ||
![]() |
8bdd7ec719 | ||
![]() |
7e1cec95ef | ||
![]() |
ec2c76a703 | ||
![]() |
7facc8f50d | ||
![]() |
52cd9e8e55 | ||
![]() |
9208e7faaf | ||
![]() |
d0ee6079b3 | ||
![]() |
34e6112fea | ||
![]() |
0c759d0075 | ||
![]() |
5b7c1aad9e | ||
![]() |
865c453547 | ||
![]() |
c0b14021b7 | ||
![]() |
2798e27b1e | ||
![]() |
f4c08a0c6f | ||
![]() |
c28c05780c | ||
![]() |
6a538da07d | ||
![]() |
b2dfa74865 | ||
![]() |
930e917215 | ||
![]() |
c8e87b113b | ||
![]() |
8627fb0f62 | ||
![]() |
cdbd3e58a3 | ||
![]() |
630c4d6954 | ||
![]() |
fd4493733f | ||
![]() |
e588743bf4 | ||
![]() |
04d68e7f9a | ||
![]() |
9795b6e089 | ||
![]() |
a9be1a4146 | ||
![]() |
617c7393bf | ||
![]() |
ceb8d4c7ef | ||
![]() |
32c70a0f6a | ||
![]() |
af2632f14a | ||
![]() |
8f89ba1930 | ||
![]() |
c1db4f2ed0 | ||
![]() |
ad6f855f5e | ||
![]() |
f2f2a1d275 | ||
![]() |
17fcf43cdb | ||
![]() |
4fff67e4af | ||
![]() |
350543a5e2 | ||
![]() |
99a2dc7c1f | ||
![]() |
34e756fde6 | ||
![]() |
f74fad057a | ||
![]() |
32ea973b12 | ||
![]() |
0104d19f66 | ||
![]() |
e8986eb546 | ||
![]() |
936d1074b2 | ||
![]() |
a401a4ab49 | ||
![]() |
2bc3a0f97c | ||
![]() |
ce68da3fee | ||
![]() |
f7e31a978b | ||
![]() |
2d583b186d | ||
![]() |
b322392f97 | ||
![]() |
573b6d9ba7 | ||
![]() |
ea39254556 | ||
![]() |
044a3d9686 | ||
![]() |
f28f7b713d | ||
![]() |
cfbd05515e | ||
![]() |
1125f5a283 | ||
![]() |
fa4d4806fa | ||
![]() |
20927a1c8e | ||
![]() |
b2ab34ca2b | ||
![]() |
55e1dd0ead | ||
![]() |
a403f78168 | ||
![]() |
6c45aa3602 | ||
![]() |
91bcd2da8c | ||
![]() |
ec2330875e | ||
![]() |
c8f01b14a8 | ||
![]() |
cdaea58096 | ||
![]() |
b3d8fa917f | ||
![]() |
91931531a6 | ||
![]() |
50e4641666 | ||
![]() |
1bed6432ac | ||
![]() |
6cc192680a | ||
![]() |
3dd6107e76 | ||
![]() |
ee5dc5ae80 | ||
![]() |
b7940b64cd | ||
![]() |
1ddaf10b89 | ||
![]() |
02b833f251 | ||
![]() |
0ce0c3cd75 | ||
![]() |
11f7f426cb | ||
![]() |
a31adc63a9 | ||
![]() |
91e2c04e56 | ||
![]() |
a2f0d8e4d6 | ||
![]() |
f60ecfc2c4 | ||
![]() |
06877dcc47 | ||
![]() |
050fbd9da2 | ||
![]() |
1be1e34e72 | ||
![]() |
9e29fd0c4a | ||
![]() |
a2650adec2 | ||
![]() |
b0c1460940 | ||
![]() |
7c7fd4bc5e | ||
![]() |
baa261fdd1 | ||
![]() |
aaf15fccc1 | ||
![]() |
3724d11255 | ||
![]() |
5510f18d33 | ||
![]() |
edbf125c83 | ||
![]() |
ad6248147c | ||
![]() |
d47e4724cb | ||
![]() |
4f592115e0 | ||
![]() |
d2d78a5576 | ||
![]() |
e045e0b42d | ||
![]() |
50816a7f98 | ||
![]() |
a318ea3692 | ||
![]() |
1424127127 | ||
![]() |
9c27125f2d | ||
![]() |
6140be24da | ||
![]() |
2fb7bc2806 | ||
![]() |
83a6e696c6 | ||
![]() |
a89e001d01 | ||
![]() |
6a81a907d1 | ||
![]() |
16573d97f5 | ||
![]() |
5abda14809 | ||
![]() |
bb4b92a663 | ||
![]() |
9bd599666b | ||
![]() |
36894fe14a | ||
![]() |
efe834e772 | ||
![]() |
8857e77495 | ||
![]() |
5dab86a067 | ||
![]() |
9ef35549f4 | ||
![]() |
4beed963b8 | ||
![]() |
3122c3b75c | ||
![]() |
dffa689e2b | ||
![]() |
5ed2278887 | ||
![]() |
d6376ca1ff | ||
![]() |
99bd0c48fa | ||
![]() |
eb7289a65a | ||
![]() |
80c6b945fa | ||
![]() |
a81c3187ba | ||
![]() |
39a5abc714 | ||
![]() |
6650efc1a6 | ||
![]() |
a4754ad195 | ||
![]() |
91cbe5bc01 | ||
![]() |
d2996dd553 | ||
![]() |
7a7836ad90 | ||
![]() |
7ca9242b24 | ||
![]() |
438f388b5c | ||
![]() |
e89c77a5ca | ||
![]() |
31984acfe0 | ||
![]() |
9badfe7489 | ||
![]() |
27912bee8c | ||
![]() |
7aef182fbf | ||
![]() |
2fb6ea7b77 | ||
![]() |
add48da4c8 | ||
![]() |
d63d3bf1e7 | ||
![]() |
33e5694a75 | ||
![]() |
302ba725ae | ||
![]() |
5f7c68def7 | ||
![]() |
82d019234a | ||
![]() |
d618b8398e | ||
![]() |
db4ea020ba | ||
![]() |
5366e8b692 | ||
![]() |
fbac4c61bb | ||
![]() |
d81ddf246c | ||
![]() |
ffe1bb359f | ||
![]() |
88a39f8e16 | ||
![]() |
9fb46ae88f | ||
![]() |
798fb98b2a | ||
![]() |
7c0af381d1 | ||
![]() |
384f59eee2 | ||
![]() |
03ff28e927 | ||
![]() |
16a1a90705 | ||
![]() |
3221cbfa0a | ||
![]() |
f0a8ccb177 | ||
![]() |
a30705cdcc | ||
![]() |
9ff09f28e7 | ||
![]() |
eddd8313c9 | ||
![]() |
c828867852 | ||
![]() |
5fca47c5ec | ||
![]() |
4cd3f0a8bb | ||
![]() |
73653c348d | ||
![]() |
0bc07f356d | ||
![]() |
6d33d93b15 | ||
![]() |
d54eed9d62 | ||
![]() |
0fdfd91069 | ||
![]() |
93577619b2 | ||
![]() |
b602f67abe | ||
![]() |
70038e90ce | ||
![]() |
49f2de9547 | ||
![]() |
80eaafa001 | ||
![]() |
cedc1d4e28 | ||
![]() |
882e4971eb | ||
![]() |
3a12a63c32 | ||
![]() |
c1d31476cd | ||
![]() |
b23b97f612 | ||
![]() |
bd1789c54b | ||
![]() |
5feececff6 | ||
![]() |
87b0025691 | ||
![]() |
e32747dc6f | ||
![]() |
6936f6cd02 | ||
![]() |
841619a7d2 | ||
![]() |
905cc365e7 | ||
![]() |
55266c4085 | ||
![]() |
5f95a26218 | ||
![]() |
91b7d4234e | ||
![]() |
0280316b03 | ||
![]() |
7afe87bb52 | ||
![]() |
9632049bf2 | ||
![]() |
13a6f04945 | ||
![]() |
58a744782a | ||
![]() |
63d5808848 | ||
![]() |
a1541aa6f5 | ||
![]() |
5f3c4fccaf |
@@ -33,4 +33,9 @@ export const packageOptions = {
|
|||||||
packageName: 'mermaid-layout-elk',
|
packageName: 'mermaid-layout-elk',
|
||||||
file: 'layouts.ts',
|
file: 'layouts.ts',
|
||||||
},
|
},
|
||||||
|
examples: {
|
||||||
|
name: 'mermaid-examples',
|
||||||
|
packageName: 'examples',
|
||||||
|
file: 'index.ts',
|
||||||
|
},
|
||||||
} as const satisfies Record<string, PackageOptions>;
|
} as const satisfies Record<string, PackageOptions>;
|
||||||
|
@@ -10,13 +10,16 @@ const buildType = (packageName: string) => {
|
|||||||
console.log(out.toString());
|
console.log(out.toString());
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
|
||||||
if (e.stdout.length > 0) {
|
if (e.stdout.length > 0) {
|
||||||
console.error(e.stdout.toString());
|
console.error(e.stdout.toString());
|
||||||
}
|
}
|
||||||
if (e.stderr.length > 0) {
|
if (e.stderr.length > 0) {
|
||||||
console.error(e.stderr.toString());
|
console.error(e.stderr.toString());
|
||||||
}
|
}
|
||||||
|
// Exit the build process if we are in CI
|
||||||
|
if (process.env.CI) {
|
||||||
|
throw new Error(`Failed to build types for ${packageName}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
5
.changeset/crazy-loops-matter.md
Normal file
5
.changeset/crazy-loops-matter.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'mermaid': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: Handle arrows correctly when auto number is enabled
|
@@ -47,13 +47,13 @@ edgesep
|
|||||||
EMPTYSTR
|
EMPTYSTR
|
||||||
enddate
|
enddate
|
||||||
ERDIAGRAM
|
ERDIAGRAM
|
||||||
|
eslint
|
||||||
flatmap
|
flatmap
|
||||||
forwardable
|
forwardable
|
||||||
frontmatter
|
frontmatter
|
||||||
funs
|
funs
|
||||||
gantt
|
gantt
|
||||||
GENERICTYPE
|
GENERICTYPE
|
||||||
getBoundarys
|
|
||||||
grammr
|
grammr
|
||||||
graphtype
|
graphtype
|
||||||
halign
|
halign
|
||||||
@@ -88,6 +88,7 @@ NODIR
|
|||||||
NSTR
|
NSTR
|
||||||
outdir
|
outdir
|
||||||
Qcontrolx
|
Qcontrolx
|
||||||
|
QSTR
|
||||||
reinit
|
reinit
|
||||||
rels
|
rels
|
||||||
reqs
|
reqs
|
||||||
|
@@ -2,8 +2,11 @@
|
|||||||
Ashish Jain
|
Ashish Jain
|
||||||
cpettitt
|
cpettitt
|
||||||
Dong Cai
|
Dong Cai
|
||||||
|
fourcube
|
||||||
|
knsv
|
||||||
|
Knut Sveidqvist
|
||||||
Nikolay Rozhkov
|
Nikolay Rozhkov
|
||||||
Peng Xiao
|
Peng Xiao
|
||||||
Per Brolin
|
Per Brolin
|
||||||
|
Sidharth Vinod
|
||||||
subhash-halder
|
subhash-halder
|
||||||
Vinod Sidharth
|
|
||||||
|
@@ -26,6 +26,7 @@ dompurify
|
|||||||
elkjs
|
elkjs
|
||||||
fcose
|
fcose
|
||||||
fontawesome
|
fontawesome
|
||||||
|
Fonticons
|
||||||
Forgejo
|
Forgejo
|
||||||
Foswiki
|
Foswiki
|
||||||
Gitea
|
Gitea
|
||||||
|
@@ -13,11 +13,10 @@ gitgraph
|
|||||||
gzipped
|
gzipped
|
||||||
handDrawn
|
handDrawn
|
||||||
kanban
|
kanban
|
||||||
knsv
|
|
||||||
Knut
|
|
||||||
marginx
|
marginx
|
||||||
marginy
|
marginy
|
||||||
Markdownish
|
Markdownish
|
||||||
|
mermaidchart
|
||||||
mermaidjs
|
mermaidjs
|
||||||
mindmap
|
mindmap
|
||||||
mindmaps
|
mindmaps
|
||||||
@@ -35,7 +34,6 @@ sandboxed
|
|||||||
siebling
|
siebling
|
||||||
statediagram
|
statediagram
|
||||||
substate
|
substate
|
||||||
Sveidqvist
|
|
||||||
unfixable
|
unfixable
|
||||||
Viewbox
|
Viewbox
|
||||||
viewports
|
viewports
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import { build } from 'esbuild';
|
import { build } from 'esbuild';
|
||||||
import { mkdir, writeFile } from 'node:fs/promises';
|
import { cp, mkdir, readFile, rename, writeFile } from 'node:fs/promises';
|
||||||
import { packageOptions } from '../.build/common.js';
|
import { packageOptions } from '../.build/common.js';
|
||||||
import { generateLangium } from '../.build/generateLangium.js';
|
import { generateLangium } from '../.build/generateLangium.js';
|
||||||
import type { MermaidBuildOptions } from './util.js';
|
import type { MermaidBuildOptions } from './util.js';
|
||||||
@@ -31,6 +31,27 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => {
|
|||||||
// mermaid.js
|
// mermaid.js
|
||||||
{ ...iifeOptions },
|
{ ...iifeOptions },
|
||||||
// mermaid.min.js
|
// mermaid.min.js
|
||||||
|
{ ...iifeOptions, minify: true, metafile: shouldVisualize },
|
||||||
|
// mermaid.tiny.min.js
|
||||||
|
{
|
||||||
|
...iifeOptions,
|
||||||
|
minify: true,
|
||||||
|
includeLargeFeatures: false,
|
||||||
|
metafile: shouldVisualize,
|
||||||
|
sourcemap: false,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (entryName === 'mermaid-zenuml') {
|
||||||
|
const iifeOptions: MermaidBuildOptions = {
|
||||||
|
...commonOptions,
|
||||||
|
format: 'iife',
|
||||||
|
globalName: 'mermaid-zenuml',
|
||||||
|
};
|
||||||
|
buildConfigs.push(
|
||||||
|
// mermaid-zenuml.js
|
||||||
|
{ ...iifeOptions },
|
||||||
|
// mermaid-zenuml.min.js
|
||||||
{ ...iifeOptions, minify: true, metafile: shouldVisualize }
|
{ ...iifeOptions, minify: true, metafile: shouldVisualize }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -57,6 +78,21 @@ const handler = (e) => {
|
|||||||
process.exit(1);
|
process.exit(1);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const buildTinyMermaid = async () => {
|
||||||
|
await mkdir('./packages/tiny/dist', { recursive: true });
|
||||||
|
await rename(
|
||||||
|
'./packages/mermaid/dist/mermaid.tiny.min.js',
|
||||||
|
'./packages/tiny/dist/mermaid.tiny.js'
|
||||||
|
);
|
||||||
|
// Copy version from mermaid's package.json to tiny's package.json
|
||||||
|
const mermaidPkg = JSON.parse(await readFile('./packages/mermaid/package.json', 'utf8'));
|
||||||
|
const tinyPkg = JSON.parse(await readFile('./packages/tiny/package.json', 'utf8'));
|
||||||
|
tinyPkg.version = mermaidPkg.version;
|
||||||
|
|
||||||
|
await writeFile('./packages/tiny/package.json', JSON.stringify(tinyPkg, null, 2) + '\n');
|
||||||
|
await cp('./packages/mermaid/CHANGELOG.md', './packages/tiny/CHANGELOG.md');
|
||||||
|
};
|
||||||
|
|
||||||
const main = async () => {
|
const main = async () => {
|
||||||
await generateLangium();
|
await generateLangium();
|
||||||
await mkdir('stats', { recursive: true });
|
await mkdir('stats', { recursive: true });
|
||||||
@@ -65,6 +101,7 @@ const main = async () => {
|
|||||||
for (const pkg of packageNames) {
|
for (const pkg of packageNames) {
|
||||||
await buildPackage(pkg).catch(handler);
|
await buildPackage(pkg).catch(handler);
|
||||||
}
|
}
|
||||||
|
await buildTinyMermaid();
|
||||||
};
|
};
|
||||||
|
|
||||||
void main();
|
void main();
|
||||||
|
@@ -14,6 +14,7 @@ export interface MermaidBuildOptions extends BuildOptions {
|
|||||||
metafile: boolean;
|
metafile: boolean;
|
||||||
format: 'esm' | 'iife';
|
format: 'esm' | 'iife';
|
||||||
options: PackageOptions;
|
options: PackageOptions;
|
||||||
|
includeLargeFeatures: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const defaultOptions: Omit<MermaidBuildOptions, 'entryName' | 'options'> = {
|
export const defaultOptions: Omit<MermaidBuildOptions, 'entryName' | 'options'> = {
|
||||||
@@ -21,6 +22,7 @@ export const defaultOptions: Omit<MermaidBuildOptions, 'entryName' | 'options'>
|
|||||||
metafile: false,
|
metafile: false,
|
||||||
core: false,
|
core: false,
|
||||||
format: 'esm',
|
format: 'esm',
|
||||||
|
includeLargeFeatures: true,
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
const buildOptions = (override: BuildOptions): BuildOptions => {
|
const buildOptions = (override: BuildOptions): BuildOptions => {
|
||||||
@@ -39,12 +41,18 @@ const buildOptions = (override: BuildOptions): BuildOptions => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const getFileName = (fileName: string, { core, format, minify }: MermaidBuildOptions) => {
|
const getFileName = (
|
||||||
|
fileName: string,
|
||||||
|
{ core, format, minify, includeLargeFeatures }: MermaidBuildOptions
|
||||||
|
) => {
|
||||||
if (core) {
|
if (core) {
|
||||||
fileName += '.core';
|
fileName += '.core';
|
||||||
} else if (format === 'esm') {
|
} else if (format === 'esm') {
|
||||||
fileName += '.esm';
|
fileName += '.esm';
|
||||||
}
|
}
|
||||||
|
if (!includeLargeFeatures) {
|
||||||
|
fileName += '.tiny';
|
||||||
|
}
|
||||||
if (minify) {
|
if (minify) {
|
||||||
fileName += '.min';
|
fileName += '.min';
|
||||||
}
|
}
|
||||||
@@ -54,23 +62,27 @@ const getFileName = (fileName: string, { core, format, minify }: MermaidBuildOpt
|
|||||||
export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
|
export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
|
||||||
const {
|
const {
|
||||||
core,
|
core,
|
||||||
metafile,
|
|
||||||
format,
|
format,
|
||||||
minify,
|
|
||||||
options: { name, file, packageName },
|
options: { name, file, packageName },
|
||||||
|
globalName = 'mermaid',
|
||||||
|
includeLargeFeatures,
|
||||||
|
...rest
|
||||||
} = options;
|
} = options;
|
||||||
|
|
||||||
const external: string[] = ['require', 'fs', 'path'];
|
const external: string[] = ['require', 'fs', 'path'];
|
||||||
const outFileName = getFileName(name, options);
|
const outFileName = getFileName(name, options);
|
||||||
const output: BuildOptions = buildOptions({
|
const output: BuildOptions = buildOptions({
|
||||||
|
...rest,
|
||||||
absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
|
absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
|
||||||
entryPoints: {
|
entryPoints: {
|
||||||
[outFileName]: `src/${file}`,
|
[outFileName]: `src/${file}`,
|
||||||
},
|
},
|
||||||
metafile,
|
globalName,
|
||||||
minify,
|
|
||||||
logLevel: 'info',
|
logLevel: 'info',
|
||||||
chunkNames: `chunks/${outFileName}/[name]-[hash]`,
|
chunkNames: `chunks/${outFileName}/[name]-[hash]`,
|
||||||
define: {
|
define: {
|
||||||
|
// This needs to be stringified for esbuild
|
||||||
|
includeLargeFeatures: `${includeLargeFeatures}`,
|
||||||
'import.meta.vitest': 'undefined',
|
'import.meta.vitest': 'undefined',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -89,11 +101,12 @@ export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
|
|||||||
if (format === 'iife') {
|
if (format === 'iife') {
|
||||||
output.format = 'iife';
|
output.format = 'iife';
|
||||||
output.splitting = false;
|
output.splitting = false;
|
||||||
output.globalName = '__esbuild_esm_mermaid';
|
const originalGlobalName = output.globalName ?? 'mermaid';
|
||||||
|
output.globalName = `__esbuild_esm_mermaid_nm[${JSON.stringify(originalGlobalName)}]`;
|
||||||
// Workaround for removing the .default access in esbuild IIFE.
|
// Workaround for removing the .default access in esbuild IIFE.
|
||||||
// https://github.com/mermaid-js/mermaid/pull/4109#discussion_r1292317396
|
// https://github.com/mermaid-js/mermaid/pull/4109#discussion_r1292317396
|
||||||
output.footer = {
|
output.footer = {
|
||||||
js: 'globalThis.mermaid = globalThis.__esbuild_esm_mermaid.default;',
|
js: `globalThis[${JSON.stringify(originalGlobalName)}] = globalThis.${output.globalName}.default;`,
|
||||||
};
|
};
|
||||||
output.outExtension = { '.js': '.js' };
|
output.outExtension = { '.js': '.js' };
|
||||||
} else {
|
} else {
|
||||||
|
2
.github/ISSUE_TEMPLATE/theme_proposal.yml
vendored
2
.github/ISSUE_TEMPLATE/theme_proposal.yml
vendored
@@ -29,7 +29,7 @@ body:
|
|||||||
label: Colors
|
label: Colors
|
||||||
description: |-
|
description: |-
|
||||||
A detailed list of the different colour values to use.
|
A detailed list of the different colour values to use.
|
||||||
A list of currently used variable names can be found [here](https://mermaid-js.github.io/mermaid/#/theming?id=theme-variables-reference-table)
|
See the [list of currently used variable names](https://mermaid-js.github.io/mermaid/#/theming?id=theme-variables-reference-table)
|
||||||
placeholder: |-
|
placeholder: |-
|
||||||
- background: #f4f4f4
|
- background: #f4f4f4
|
||||||
- primaryColor: #fff4dd
|
- primaryColor: #fff4dd
|
||||||
|
14
.github/lychee.toml
vendored
14
.github/lychee.toml
vendored
@@ -46,11 +46,21 @@ exclude = [
|
|||||||
# Drupal 403
|
# Drupal 403
|
||||||
"https://(www.)?drupal.org",
|
"https://(www.)?drupal.org",
|
||||||
|
|
||||||
# Swimm returns 404, eventhough the link is valid
|
# Phbpp 403
|
||||||
|
"https://(www.)?phpbb.com",
|
||||||
|
|
||||||
|
# Swimm returns 404, even though the link is valid
|
||||||
"https://docs.swimm.io",
|
"https://docs.swimm.io",
|
||||||
|
|
||||||
|
# Certificate Error
|
||||||
|
"https://noteshub.app",
|
||||||
|
|
||||||
# Timeout
|
# Timeout
|
||||||
"https://huehive.co"
|
"https://huehive.co",
|
||||||
|
"https://foswiki.org",
|
||||||
|
"https://www.gnu.org",
|
||||||
|
"https://redmine.org",
|
||||||
|
"https://mermaid-preview.com"
|
||||||
]
|
]
|
||||||
|
|
||||||
# Exclude all private IPs from checking.
|
# Exclude all private IPs from checking.
|
||||||
|
2
.github/stale.yml
vendored
2
.github/stale.yml
vendored
@@ -15,5 +15,5 @@ markComment: >
|
|||||||
If you are still interested in this issue and it is still relevant you can comment to revive it.
|
If you are still interested in this issue and it is still relevant you can comment to revive it.
|
||||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||||
closeComment: >
|
closeComment: >
|
||||||
This issue has been been automatically closed due to a lack of activity.
|
This issue has been automatically closed due to a lack of activity.
|
||||||
This is done to maintain a clean list of issues that the community is interested in developing.
|
This is done to maintain a clean list of issues that the community is interested in developing.
|
||||||
|
2
.github/workflows/autofix.yml
vendored
2
.github/workflows/autofix.yml
vendored
@@ -42,4 +42,4 @@ jobs:
|
|||||||
working-directory: ./packages/mermaid
|
working-directory: ./packages/mermaid
|
||||||
run: pnpm run docs:build
|
run: pnpm run docs:build
|
||||||
|
|
||||||
- uses: autofix-ci/action@551dded8c6cc8a1054039c8bc0b8b48c51dfc6ef # main
|
- uses: autofix-ci/action@635ffb0c9798bd160680f18fd73371e355b85f27 # main
|
||||||
|
6
.github/workflows/codeql.yml
vendored
6
.github/workflows/codeql.yml
vendored
@@ -36,7 +36,7 @@ jobs:
|
|||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
uses: github/codeql-action/init@5378192d256ef1302a6980fffe5ca04426d43091 # v3.28.21
|
||||||
with:
|
with:
|
||||||
config-file: ./.github/codeql/codeql-config.yml
|
config-file: ./.github/codeql/codeql-config.yml
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
@@ -48,7 +48,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
uses: github/codeql-action/autobuild@5378192d256ef1302a6980fffe5ca04426d43091 # v3.28.21
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
@@ -62,4 +62,4 @@ jobs:
|
|||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
uses: github/codeql-action/analyze@5378192d256ef1302a6980fffe5ca04426d43091 # v3.28.21
|
||||||
|
6
.github/workflows/e2e-applitools.yml
vendored
6
.github/workflows/e2e-applitools.yml
vendored
@@ -45,16 +45,18 @@ jobs:
|
|||||||
- if: ${{ env.USE_APPLI }}
|
- if: ${{ env.USE_APPLI }}
|
||||||
name: Notify applitools of new batch
|
name: Notify applitools of new batch
|
||||||
# Copied from docs https://applitools.com/docs/topics/integrations/github-integration-ci-setup.html
|
# Copied from docs https://applitools.com/docs/topics/integrations/github-integration-ci-setup.html
|
||||||
run: curl -L -d '' -X POST "$APPLITOOLS_SERVER_URL/api/externals/github/push?apiKey=$APPLITOOLS_API_KEY&CommitSha=$GITHUB_SHA&BranchName=${APPLITOOLS_BRANCH}$&ParentBranchName=$APPLITOOLS_PARENT_BRANCH"
|
|
||||||
env:
|
env:
|
||||||
# e.g. mermaid-js/mermaid/my-branch
|
# e.g. mermaid-js/mermaid/my-branch
|
||||||
APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }}
|
APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }}
|
||||||
APPLITOOLS_PARENT_BRANCH: ${{ github.event.inputs.parent_branch }}
|
APPLITOOLS_PARENT_BRANCH: ${{ github.event.inputs.parent_branch }}
|
||||||
APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }}
|
APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }}
|
||||||
APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com'
|
APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com'
|
||||||
|
uses: wei/curl@012398a392d02480afa2720780031f8621d5f94c
|
||||||
|
with:
|
||||||
|
args: -X POST "$APPLITOOLS_SERVER_URL/api/externals/github/push?apiKey=$APPLITOOLS_API_KEY&CommitSha=$GITHUB_SHA&BranchName=${APPLITOOLS_BRANCH}$&ParentBranchName=$APPLITOOLS_PARENT_BRANCH"
|
||||||
|
|
||||||
- name: Cypress run
|
- name: Cypress run
|
||||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
uses: cypress-io/github-action@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16
|
||||||
id: cypress
|
id: cypress
|
||||||
with:
|
with:
|
||||||
start: pnpm run dev
|
start: pnpm run dev
|
||||||
|
36
.github/workflows/e2e-timings.yml
vendored
36
.github/workflows/e2e-timings.yml
vendored
@@ -11,6 +11,7 @@ concurrency: ${{ github.workflow }}-${{ github.ref }}
|
|||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
timings:
|
timings:
|
||||||
@@ -26,11 +27,12 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
uses: cypress-io/github-action@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16
|
||||||
with:
|
with:
|
||||||
runTests: false
|
runTests: false
|
||||||
|
|
||||||
- name: Cypress run
|
- name: Cypress run
|
||||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
uses: cypress-io/github-action@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16
|
||||||
id: cypress
|
id: cypress
|
||||||
with:
|
with:
|
||||||
install: false
|
install: false
|
||||||
@@ -44,15 +46,25 @@ jobs:
|
|||||||
SPLIT: 1
|
SPLIT: 1
|
||||||
SPLIT_INDEX: 0
|
SPLIT_INDEX: 0
|
||||||
SPLIT_FILE: 'cypress/timings.json'
|
SPLIT_FILE: 'cypress/timings.json'
|
||||||
- name: Commit changes
|
|
||||||
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
|
- name: Compare timings
|
||||||
|
id: compare
|
||||||
|
run: |
|
||||||
|
OUTPUT=$(pnpm tsx scripts/compare-timings.ts)
|
||||||
|
echo "$OUTPUT" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
echo "output<<EOF" >> $GITHUB_OUTPUT
|
||||||
|
echo "$OUTPUT" >> $GITHUB_OUTPUT
|
||||||
|
echo "EOF" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Commit and create pull request
|
||||||
|
uses: peter-evans/create-pull-request@cb4d3bfce175d44325c6b7697f81e0afe8a79bdf
|
||||||
with:
|
with:
|
||||||
add: 'cypress/timings.json'
|
add-paths: |
|
||||||
author_name: 'github-actions[bot]'
|
cypress/timings.json
|
||||||
author_email: '41898282+github-actions[bot]@users.noreply.github.com'
|
commit-message: 'chore: update E2E timings'
|
||||||
message: 'chore: update E2E timings'
|
branch: update-timings
|
||||||
- name: Create Pull Request
|
|
||||||
uses: peter-evans/create-pull-request@v5
|
|
||||||
with:
|
|
||||||
branch: release-promotion
|
|
||||||
title: Update E2E Timings
|
title: Update E2E Timings
|
||||||
|
body: ${{ steps.compare.outputs.output }}
|
||||||
|
delete-branch: true
|
||||||
|
sign-commits: true
|
||||||
|
10
.github/workflows/e2e.yml
vendored
10
.github/workflows/e2e.yml
vendored
@@ -45,7 +45,7 @@ jobs:
|
|||||||
node-version-file: '.node-version'
|
node-version-file: '.node-version'
|
||||||
- name: Cache snapshots
|
- name: Cache snapshots
|
||||||
id: cache-snapshot
|
id: cache-snapshot
|
||||||
uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
|
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
|
||||||
with:
|
with:
|
||||||
path: ./cypress/snapshots
|
path: ./cypress/snapshots
|
||||||
key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
|
key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
|
||||||
@@ -59,7 +59,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
|
if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
|
||||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
uses: cypress-io/github-action@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16
|
||||||
with:
|
with:
|
||||||
# just perform install
|
# just perform install
|
||||||
runTests: false
|
runTests: false
|
||||||
@@ -95,13 +95,13 @@ jobs:
|
|||||||
# These cached snapshots are downloaded, providing the reference snapshots.
|
# These cached snapshots are downloaded, providing the reference snapshots.
|
||||||
- name: Cache snapshots
|
- name: Cache snapshots
|
||||||
id: cache-snapshot
|
id: cache-snapshot
|
||||||
uses: actions/cache/restore@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
|
uses: actions/cache/restore@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
|
||||||
with:
|
with:
|
||||||
path: ./cypress/snapshots
|
path: ./cypress/snapshots
|
||||||
key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
|
key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
uses: cypress-io/github-action@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16
|
||||||
with:
|
with:
|
||||||
runTests: false
|
runTests: false
|
||||||
|
|
||||||
@@ -117,7 +117,7 @@ jobs:
|
|||||||
# Install NPM dependencies, cache them correctly
|
# Install NPM dependencies, cache them correctly
|
||||||
# and run all Cypress tests
|
# and run all Cypress tests
|
||||||
- name: Cypress run
|
- name: Cypress run
|
||||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
uses: cypress-io/github-action@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16
|
||||||
id: cypress
|
id: cypress
|
||||||
with:
|
with:
|
||||||
install: false
|
install: false
|
||||||
|
2
.github/workflows/link-checker.yml
vendored
2
.github/workflows/link-checker.yml
vendored
@@ -32,7 +32,7 @@ jobs:
|
|||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Restore lychee cache
|
- name: Restore lychee cache
|
||||||
uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
|
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
|
||||||
with:
|
with:
|
||||||
path: .lycheecache
|
path: .lycheecache
|
||||||
key: cache-lychee-${{ github.sha }}
|
key: cache-lychee-${{ github.sha }}
|
||||||
|
26
.github/workflows/pr-labeler.yml
vendored
26
.github/workflows/pr-labeler.yml
vendored
@@ -29,3 +29,29 @@ jobs:
|
|||||||
disable-releaser: true
|
disable-releaser: true
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Add "Sponsored by MermaidChart" label
|
||||||
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
const prNumber = context.payload.pull_request.number;
|
||||||
|
const { data: commits } = await github.rest.pulls.listCommits({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
pull_number: prNumber,
|
||||||
|
});
|
||||||
|
|
||||||
|
const isSponsored = commits.every(
|
||||||
|
(c) => c.commit.author.email?.endsWith('@mermaidchart.com')
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isSponsored) {
|
||||||
|
console.log('PR is sponsored. Adding label.');
|
||||||
|
await github.rest.issues.addLabels({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: prNumber,
|
||||||
|
labels: ['Sponsored by MermaidChart'],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -36,7 +36,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Create Release Pull Request or Publish to npm
|
- name: Create Release Pull Request or Publish to npm
|
||||||
id: changesets
|
id: changesets
|
||||||
uses: changesets/action@c8bada60c408975afd1a20b3db81d6eee6789308 # v1.4.9
|
uses: changesets/action@06245a4e0a36c064a573d4150030f5ec548e4fcc # v1.4.10
|
||||||
with:
|
with:
|
||||||
version: pnpm changeset:version
|
version: pnpm changeset:version
|
||||||
publish: pnpm changeset:publish
|
publish: pnpm changeset:publish
|
||||||
|
6
.github/workflows/scorecard.yml
vendored
6
.github/workflows/scorecard.yml
vendored
@@ -20,18 +20,18 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Run analysis
|
- name: Run analysis
|
||||||
uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1
|
uses: ossf/scorecard-action@05b42c624433fc40578a4040d5cf5e36ddca8cde # v2.4.2
|
||||||
with:
|
with:
|
||||||
results_file: results.sarif
|
results_file: results.sarif
|
||||||
results_format: sarif
|
results_format: sarif
|
||||||
publish_results: true
|
publish_results: true
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: SARIF file
|
name: SARIF file
|
||||||
path: results.sarif
|
path: results.sarif
|
||||||
retention-days: 5
|
retention-days: 5
|
||||||
- name: Upload to code-scanning
|
- name: Upload to code-scanning
|
||||||
uses: github/codeql-action/upload-sarif@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
uses: github/codeql-action/upload-sarif@5378192d256ef1302a6980fffe5ca04426d43091 # v3.28.21
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
2
.github/workflows/update-browserlist.yml
vendored
2
.github/workflows/update-browserlist.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
|||||||
message: 'chore: update browsers list'
|
message: 'chore: update browsers list'
|
||||||
push: false
|
push: false
|
||||||
- name: Create Pull Request
|
- name: Create Pull Request
|
||||||
uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6
|
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||||
with:
|
with:
|
||||||
branch: update-browserslist
|
branch: update-browserslist
|
||||||
title: Update Browserslist
|
title: Update Browserslist
|
||||||
|
70
.github/workflows/validate-lockfile.yml
vendored
Normal file
70
.github/workflows/validate-lockfile.yml
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
name: Validate pnpm-lock.yaml
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- 'pnpm-lock.yaml'
|
||||||
|
- '**/package.json'
|
||||||
|
- '.github/workflows/validate-lockfile.yml'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
validate-lockfile:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
|
||||||
|
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
|
|
||||||
|
- name: Validate pnpm-lock.yaml entries
|
||||||
|
id: validate # give this step an ID so we can reference its outputs
|
||||||
|
run: |
|
||||||
|
issues=()
|
||||||
|
|
||||||
|
# 1) No tarball references
|
||||||
|
if grep -qF 'tarball:' pnpm-lock.yaml; then
|
||||||
|
issues+=("• Tarball references found (forbidden)")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2) No unwanted vitepress paths
|
||||||
|
if grep -qF 'packages/mermaid/src/vitepress' pnpm-lock.yaml; then
|
||||||
|
issues+=("• Disallowed path 'packages/mermaid/src/vitepress' present. Run `rm -rf packages/mermaid/src/vitepress && pnpm install` to regenerate.")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3) Lockfile only changes when package.json changes
|
||||||
|
git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} > changed.txt
|
||||||
|
if grep -q '^pnpm-lock.yaml$' changed.txt && ! grep -q 'package.json' changed.txt; then
|
||||||
|
issues+=("• pnpm-lock.yaml changed without any package.json modification")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If any issues, output them and fail
|
||||||
|
if [ ${#issues[@]} -gt 0 ]; then
|
||||||
|
# Use the new GITHUB_OUTPUT approach to set a multiline output
|
||||||
|
{
|
||||||
|
echo "errors<<EOF"
|
||||||
|
printf '%s\n' "${issues[@]}"
|
||||||
|
echo "EOF"
|
||||||
|
} >> $GITHUB_OUTPUT
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Comment on PR if validation failed
|
||||||
|
if: failure()
|
||||||
|
uses: peter-evans/create-or-update-comment@v4
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
issue-number: ${{ github.event.pull_request.number }}
|
||||||
|
body: |
|
||||||
|
The following issue(s) were detected:
|
||||||
|
${{ steps.validate.outputs.errors }}
|
||||||
|
|
||||||
|
Please address these and push an update.
|
||||||
|
|
||||||
|
_Posted automatically by GitHub Actions_
|
@@ -94,6 +94,10 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
|
|||||||
}),
|
}),
|
||||||
...visualizerOptions(packageName, core),
|
...visualizerOptions(packageName, core),
|
||||||
],
|
],
|
||||||
|
define: {
|
||||||
|
// Needs to be string
|
||||||
|
includeLargeFeatures: 'true',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
if (watch && config.build) {
|
if (watch && config.build) {
|
||||||
|
1005
CHANGELOG.md
1005
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
1
CHANGELOG.md
Symbolic link
1
CHANGELOG.md
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
./packages/mermaid/CHANGELOG.md
|
@@ -44,7 +44,7 @@ Try Live Editor previews of future releases: <a href="https://develop.git.mermai
|
|||||||
|
|
||||||
**Thanks to all involved, people committing pull requests, people answering questions! 🙏**
|
**Thanks to all involved, people committing pull requests, people answering questions! 🙏**
|
||||||
|
|
||||||
<a href="https://mermaid.js.org/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a>
|
<a href="https://mermaid.js.org/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt='Banner for "The Official Guide to Mermaid.js" book'></a>
|
||||||
|
|
||||||
## Table of content
|
## Table of content
|
||||||
|
|
||||||
@@ -95,10 +95,6 @@ In our release process we rely heavily on visual regression tests using [applito
|
|||||||
|
|
||||||
<!-- </Main description> -->
|
<!-- </Main description> -->
|
||||||
|
|
||||||
## Mermaid AI Bot
|
|
||||||
|
|
||||||
[Mermaid](https://codeparrot.ai/oracle?owner=mermaid-js&repo=mermaid) Bot will help you understand this repository better. You can ask for code examples, installation guide, debugging help and much more.
|
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
**The following are some examples of the diagrams, charts and graphs that can be made using Mermaid. Click here to jump into the [text syntax](https://mermaid.js.org/intro/syntax-reference.html).**
|
**The following are some examples of the diagrams, charts and graphs that can be made using Mermaid. Click here to jump into the [text syntax](https://mermaid.js.org/intro/syntax-reference.html).**
|
||||||
@@ -451,7 +447,7 @@ For public sites, it can be precarious to retrieve text from users on the intern
|
|||||||
|
|
||||||
As an extra level of security for sites with external users we are happy to introduce a new security level in which the diagram is rendered in a sandboxed iframe preventing javascript in the code from being executed. This is a great step forward for better security.
|
As an extra level of security for sites with external users we are happy to introduce a new security level in which the diagram is rendered in a sandboxed iframe preventing javascript in the code from being executed. This is a great step forward for better security.
|
||||||
|
|
||||||
_Unfortunately you can not have a cake and eat it at the same time which in this case means that some of the interactive functionality gets blocked along with the possible malicious code._
|
_Unfortunately you cannot have a cake and eat it at the same time which in this case means that some of the interactive functionality gets blocked along with the possible malicious code._
|
||||||
|
|
||||||
## Reporting vulnerabilities
|
## Reporting vulnerabilities
|
||||||
|
|
||||||
|
@@ -43,13 +43,13 @@ Mermaid
|
|||||||
|
|
||||||
**感谢所有参与进来提交 PR,解答疑问的人们! 🙏**
|
**感谢所有参与进来提交 PR,解答疑问的人们! 🙏**
|
||||||
|
|
||||||
<a href="https://mermaid.js.org/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a>
|
<a href="https://mermaid.js.org/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt='Banner for "The Official Guide to Mermaid.js" book'></a>
|
||||||
|
|
||||||
## 关于 Mermaid
|
## 关于 Mermaid
|
||||||
|
|
||||||
<!-- <Main description> -->
|
<!-- <Main description> -->
|
||||||
|
|
||||||
Mermaid 是一个基于 Javascript 的图表绘制工具,通过解析类 Markdown 的文本语法来实现图表的创建和动态修改。Mermaid 诞生的主要目的是让文档的更新能够及时跟上开发进度。
|
Mermaid 是一个基于 JavaScript 的图表绘制工具,通过解析类 Markdown 的文本语法来实现图表的创建和动态修改。Mermaid 诞生的主要目的是让文档的更新能够及时跟上开发进度。
|
||||||
|
|
||||||
> Doc-Rot 是 Mermaid 致力于解决的一个难题。
|
> Doc-Rot 是 Mermaid 致力于解决的一个难题。
|
||||||
|
|
||||||
|
@@ -1,13 +0,0 @@
|
|||||||
import { MockedD3 } from '../packages/mermaid/src/tests/MockedD3.js';
|
|
||||||
|
|
||||||
export const select = function () {
|
|
||||||
return new MockedD3();
|
|
||||||
};
|
|
||||||
|
|
||||||
export const selectAll = function () {
|
|
||||||
return new MockedD3();
|
|
||||||
};
|
|
||||||
|
|
||||||
export const curveBasis = 'basis';
|
|
||||||
export const curveLinear = 'linear';
|
|
||||||
export const curveCardinal = 'cardinal';
|
|
@@ -26,7 +26,10 @@ export default eyesPlugin(
|
|||||||
config.env.useArgos = process.env.RUN_VISUAL_TEST === 'true';
|
config.env.useArgos = process.env.RUN_VISUAL_TEST === 'true';
|
||||||
|
|
||||||
if (config.env.useArgos) {
|
if (config.env.useArgos) {
|
||||||
registerArgosTask(on, config);
|
registerArgosTask(on, config, {
|
||||||
|
// Enable upload to Argos only when it runs on CI.
|
||||||
|
uploadToArgos: !!process.env.CI,
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
addMatchImageSnapshotPlugin(on, config);
|
addMatchImageSnapshotPlugin(on, config);
|
||||||
}
|
}
|
||||||
|
@@ -14,7 +14,7 @@ interface CodeObject {
|
|||||||
mermaid: CypressMermaidConfig;
|
mermaid: CypressMermaidConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
const utf8ToB64 = (str: string): string => {
|
export const utf8ToB64 = (str: string): string => {
|
||||||
return Buffer.from(decodeURIComponent(encodeURIComponent(str))).toString('base64');
|
return Buffer.from(decodeURIComponent(encodeURIComponent(str))).toString('base64');
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ const batchId: string =
|
|||||||
'mermaid-batch-' +
|
'mermaid-batch-' +
|
||||||
(Cypress.env('useAppli')
|
(Cypress.env('useAppli')
|
||||||
? Date.now().toString()
|
? Date.now().toString()
|
||||||
: Cypress.env('CYPRESS_COMMIT') || Date.now().toString());
|
: (Cypress.env('CYPRESS_COMMIT') ?? Date.now().toString()));
|
||||||
|
|
||||||
export const mermaidUrl = (
|
export const mermaidUrl = (
|
||||||
graphStr: string | string[],
|
graphStr: string | string[],
|
||||||
@@ -61,9 +61,7 @@ export const imgSnapshotTest = (
|
|||||||
sequence: {
|
sequence: {
|
||||||
...(_options.sequence ?? {}),
|
...(_options.sequence ?? {}),
|
||||||
actorFontFamily: 'courier',
|
actorFontFamily: 'courier',
|
||||||
noteFontFamily: _options.sequence?.noteFontFamily
|
noteFontFamily: _options.sequence?.noteFontFamily ?? 'courier',
|
||||||
? _options.sequence.noteFontFamily
|
|
||||||
: 'courier',
|
|
||||||
messageFontFamily: 'courier',
|
messageFontFamily: 'courier',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@@ -69,7 +69,9 @@ describe('Configuration', () => {
|
|||||||
.and('include', 'url(#');
|
.and('include', 'url(#');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('should handle arrowMarkerAbsolute explicitly set to "false" as false', () => {
|
// This has been broken for a long time, but something about the Cypress environment was
|
||||||
|
// rewriting the URL to be relative, causing the test to incorrectly pass.
|
||||||
|
it.skip('should handle arrowMarkerAbsolute explicitly set to "false" as false', () => {
|
||||||
renderGraph(
|
renderGraph(
|
||||||
`graph TD
|
`graph TD
|
||||||
A[Christmas] -->|Get money| B(Go shopping)
|
A[Christmas] -->|Get money| B(Go shopping)
|
||||||
@@ -112,7 +114,7 @@ describe('Configuration', () => {
|
|||||||
.first()
|
.first()
|
||||||
.should('have.attr', 'marker-end')
|
.should('have.attr', 'marker-end')
|
||||||
.should('exist')
|
.should('exist')
|
||||||
.and('include', 'url(http://localhost');
|
.and('include', 'url(http\\:\\/\\/localhost');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('should not taint the initial configuration when using multiple directives', () => {
|
it('should not taint the initial configuration when using multiple directives', () => {
|
||||||
|
@@ -20,7 +20,7 @@ describe('Interaction', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('Graph: should handle a click on a node with a bound url', () => {
|
it('Graph: should handle a click on a node with a bound url', () => {
|
||||||
// When there is a URL, cy.contains selects the a tag instead of the span. The .node is a child of a, so we have to use find instead of parent.
|
// When there is a URL, `cy.contains()` selects the `a` tag instead of the `span` tag. The .node is a child of `a`, so we have to use `find()` instead of `parent`.
|
||||||
cy.contains('URLTest1').find('.node').click();
|
cy.contains('URLTest1').find('.node').click();
|
||||||
cy.location().should(({ href }) => {
|
cy.location().should(({ href }) => {
|
||||||
expect(href).to.eq('http://localhost:9000/empty.html');
|
expect(href).to.eq('http://localhost:9000/empty.html');
|
||||||
@@ -146,7 +146,7 @@ describe('Interaction', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Interaction - security level other, missspelling', () => {
|
describe('Interaction - security level other, misspelling', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.visit('http://localhost:9000/click_security_other.html');
|
cy.visit('http://localhost:9000/click_security_other.html');
|
||||||
});
|
});
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { mermaidUrl } from '../../helpers/util.ts';
|
import { imgSnapshotTest, mermaidUrl, utf8ToB64 } from '../../helpers/util.ts';
|
||||||
describe('XSS', () => {
|
describe('XSS', () => {
|
||||||
it('should handle xss in tags', () => {
|
it('should handle xss in tags', () => {
|
||||||
const str =
|
const str =
|
||||||
@@ -141,4 +141,37 @@ describe('XSS', () => {
|
|||||||
cy.wait(1000);
|
cy.wait(1000);
|
||||||
cy.get('#the-malware').should('not.exist');
|
cy.get('#the-malware').should('not.exist');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should sanitize icon labels in architecture diagrams', () => {
|
||||||
|
const str = JSON.stringify({
|
||||||
|
code: `architecture-beta
|
||||||
|
group api(cloud)[API]
|
||||||
|
service db "<img src=x onerror=\\"xssAttack()\\">" [Database] in api`,
|
||||||
|
});
|
||||||
|
imgSnapshotTest(utf8ToB64(str), {}, true);
|
||||||
|
cy.wait(1000);
|
||||||
|
cy.get('#the-malware').should('not.exist');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should sanitize katex blocks', () => {
|
||||||
|
const str = JSON.stringify({
|
||||||
|
code: `sequenceDiagram
|
||||||
|
participant A as Alice<img src="x" onerror="xssAttack()">$$\\text{Alice}$$
|
||||||
|
A->>John: Hello John, how are you?`,
|
||||||
|
});
|
||||||
|
imgSnapshotTest(utf8ToB64(str), {}, true);
|
||||||
|
cy.wait(1000);
|
||||||
|
cy.get('#the-malware').should('not.exist');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should sanitize labels', () => {
|
||||||
|
const str = JSON.stringify({
|
||||||
|
code: `erDiagram
|
||||||
|
"<img src=x onerror=xssAttack()>" ||--|| ENTITY2 : "<img src=x onerror=xssAttack()>"
|
||||||
|
`,
|
||||||
|
});
|
||||||
|
imgSnapshotTest(utf8ToB64(str), {}, true);
|
||||||
|
cy.wait(1000);
|
||||||
|
cy.get('#the-malware').should('not.exist');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -19,6 +19,25 @@ describe.skip('architecture diagram', () => {
|
|||||||
`
|
`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it('should render a simple architecture diagram with titleAndAccessibilities', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`architecture-beta
|
||||||
|
title Simple Architecture Diagram
|
||||||
|
accTitle: Accessibility Title
|
||||||
|
accDescr: Accessibility Description
|
||||||
|
group api(cloud)[API]
|
||||||
|
|
||||||
|
service db(database)[Database] in api
|
||||||
|
service disk1(disk)[Storage] in api
|
||||||
|
service disk2(disk)[Storage] in api
|
||||||
|
service server(server)[Server] in api
|
||||||
|
|
||||||
|
db:L -- R:server
|
||||||
|
disk1:T -- B:server
|
||||||
|
disk2:T -- B:db
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
it('should render an architecture diagram with groups within groups', () => {
|
it('should render an architecture diagram with groups within groups', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`architecture-beta
|
`architecture-beta
|
||||||
@@ -172,7 +191,7 @@ describe.skip('architecture diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render an architecture diagram with a resonable height', () => {
|
it('should render an architecture diagram with a reasonable height', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`architecture-beta
|
`architecture-beta
|
||||||
group federated(cloud)[Federated Environment]
|
group federated(cloud)[Federated Environment]
|
||||||
|
@@ -14,9 +14,9 @@ describe('Block diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('BL2: should handle colums statement in sub-blocks', () => {
|
it('BL2: should handle columns statement in sub-blocks', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
id1["Hello"]
|
id1["Hello"]
|
||||||
block
|
block
|
||||||
columns 3
|
columns 3
|
||||||
@@ -30,9 +30,9 @@ describe('Block diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('BL3: should align block widths and handle colums statement in sub-blocks', () => {
|
it('BL3: should align block widths and handle columns statement in sub-blocks', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
block
|
block
|
||||||
columns 1
|
columns 1
|
||||||
id1
|
id1
|
||||||
@@ -46,9 +46,9 @@ describe('Block diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('BL4: should align block widths and handle colums statements in deeper sub-blocks then 1 level', () => {
|
it('BL4: should align block widths and handle columns statements in deeper sub-blocks then 1 level', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 1
|
columns 1
|
||||||
block
|
block
|
||||||
columns 1
|
columns 1
|
||||||
@@ -66,9 +66,9 @@ describe('Block diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('BL5: should align block widths and handle colums statements in deeper sub-blocks then 1 level (alt)', () => {
|
it('BL5: should align block widths and handle columns statements in deeper sub-blocks then 1 level (alt)', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 1
|
columns 1
|
||||||
block
|
block
|
||||||
id1
|
id1
|
||||||
@@ -87,7 +87,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL6: should handle block arrows and spece statements', () => {
|
it('BL6: should handle block arrows and spece statements', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 3
|
columns 3
|
||||||
space:3
|
space:3
|
||||||
ida idb idc
|
ida idb idc
|
||||||
@@ -106,7 +106,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL7: should handle different types of edges', () => {
|
it('BL7: should handle different types of edges', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 3
|
columns 3
|
||||||
A space:5
|
A space:5
|
||||||
A --o B
|
A --o B
|
||||||
@@ -119,7 +119,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL8: should handle sub-blocks without columns statements', () => {
|
it('BL8: should handle sub-blocks without columns statements', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 2
|
columns 2
|
||||||
C A B
|
C A B
|
||||||
block
|
block
|
||||||
@@ -133,7 +133,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL9: should handle edges from blocks in sub blocks to other blocks', () => {
|
it('BL9: should handle edges from blocks in sub blocks to other blocks', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 3
|
columns 3
|
||||||
B space
|
B space
|
||||||
block
|
block
|
||||||
@@ -147,7 +147,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL10: should handle edges from composite blocks', () => {
|
it('BL10: should handle edges from composite blocks', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 3
|
columns 3
|
||||||
B space
|
B space
|
||||||
block BL
|
block BL
|
||||||
@@ -161,7 +161,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL11: should handle edges to composite blocks', () => {
|
it('BL11: should handle edges to composite blocks', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 3
|
columns 3
|
||||||
B space
|
B space
|
||||||
block BL
|
block BL
|
||||||
@@ -175,7 +175,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL12: edges should handle labels', () => {
|
it('BL12: edges should handle labels', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
A
|
A
|
||||||
space
|
space
|
||||||
A -- "apa" --> E
|
A -- "apa" --> E
|
||||||
@@ -186,7 +186,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL13: should handle block arrows in different directions', () => {
|
it('BL13: should handle block arrows in different directions', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 3
|
columns 3
|
||||||
space blockArrowId1<["down"]>(down) space
|
space blockArrowId1<["down"]>(down) space
|
||||||
blockArrowId2<["right"]>(right) blockArrowId3<["Sync"]>(x, y) blockArrowId4<["left"]>(left)
|
blockArrowId2<["right"]>(right) blockArrowId3<["Sync"]>(x, y) blockArrowId4<["left"]>(left)
|
||||||
@@ -199,7 +199,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL14: should style statements and class statements', () => {
|
it('BL14: should style statements and class statements', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
A
|
A
|
||||||
B
|
B
|
||||||
classDef blue fill:#66f,stroke:#333,stroke-width:2px;
|
classDef blue fill:#66f,stroke:#333,stroke-width:2px;
|
||||||
@@ -212,7 +212,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL15: width alignment - D and E should share available space', () => {
|
it('BL15: width alignment - D and E should share available space', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
block
|
block
|
||||||
D
|
D
|
||||||
E
|
E
|
||||||
@@ -225,7 +225,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL16: width alignment - C should be as wide as the composite block', () => {
|
it('BL16: width alignment - C should be as wide as the composite block', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
block
|
block
|
||||||
A("This is the text")
|
A("This is the text")
|
||||||
B
|
B
|
||||||
@@ -236,9 +236,9 @@ describe('Block diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('BL17: width alignment - blocks shold be equal in width', () => {
|
it('BL17: width alignment - blocks should be equal in width', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
A("This is the text")
|
A("This is the text")
|
||||||
B
|
B
|
||||||
C
|
C
|
||||||
@@ -249,7 +249,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL18: block types 1 - square, rounded and circle', () => {
|
it('BL18: block types 1 - square, rounded and circle', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
A["square"]
|
A["square"]
|
||||||
B("rounded")
|
B("rounded")
|
||||||
C(("circle"))
|
C(("circle"))
|
||||||
@@ -260,7 +260,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL19: block types 2 - odd, diamond and hexagon', () => {
|
it('BL19: block types 2 - odd, diamond and hexagon', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
A>"rect_left_inv_arrow"]
|
A>"rect_left_inv_arrow"]
|
||||||
B{"diamond"}
|
B{"diamond"}
|
||||||
C{{"hexagon"}}
|
C{{"hexagon"}}
|
||||||
@@ -271,7 +271,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL20: block types 3 - stadium', () => {
|
it('BL20: block types 3 - stadium', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
A(["stadium"])
|
A(["stadium"])
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
@@ -280,7 +280,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL21: block types 4 - lean right, lean left, trapezoid and inv trapezoid', () => {
|
it('BL21: block types 4 - lean right, lean left, trapezoid and inv trapezoid', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
A[/"lean right"/]
|
A[/"lean right"/]
|
||||||
B[\"lean left"\]
|
B[\"lean left"\]
|
||||||
C[/"trapezoid"\]
|
C[/"trapezoid"\]
|
||||||
@@ -292,7 +292,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL22: block types 1 - square, rounded and circle', () => {
|
it('BL22: block types 1 - square, rounded and circle', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
A["square"]
|
A["square"]
|
||||||
B("rounded")
|
B("rounded")
|
||||||
C(("circle"))
|
C(("circle"))
|
||||||
@@ -303,7 +303,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL23: sizing - it should be possible to make a block wider', () => {
|
it('BL23: sizing - it should be possible to make a block wider', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
A("rounded"):2
|
A("rounded"):2
|
||||||
B:2
|
B:2
|
||||||
C
|
C
|
||||||
@@ -314,7 +314,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL24: sizing - it should be possible to make a composite block wider', () => {
|
it('BL24: sizing - it should be possible to make a composite block wider', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
block:2
|
block:2
|
||||||
A
|
A
|
||||||
end
|
end
|
||||||
@@ -326,7 +326,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL25: block in the middle with space on each side', () => {
|
it('BL25: block in the middle with space on each side', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 3
|
columns 3
|
||||||
space
|
space
|
||||||
middle["In the middle"]
|
middle["In the middle"]
|
||||||
@@ -337,7 +337,7 @@ describe('Block diagram', () => {
|
|||||||
});
|
});
|
||||||
it('BL26: space and an edge', () => {
|
it('BL26: space and an edge', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 5
|
columns 5
|
||||||
A space B
|
A space B
|
||||||
A --x B
|
A --x B
|
||||||
@@ -347,7 +347,7 @@ describe('Block diagram', () => {
|
|||||||
});
|
});
|
||||||
it('BL27: block sizes for regular blocks', () => {
|
it('BL27: block sizes for regular blocks', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 3
|
columns 3
|
||||||
a["A wide one"] b:2 c:2 d
|
a["A wide one"] b:2 c:2 d
|
||||||
`,
|
`,
|
||||||
@@ -356,7 +356,7 @@ describe('Block diagram', () => {
|
|||||||
});
|
});
|
||||||
it('BL28: composite block with a set width - f should use the available space', () => {
|
it('BL28: composite block with a set width - f should use the available space', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 3
|
columns 3
|
||||||
a:3
|
a:3
|
||||||
block:e:3
|
block:e:3
|
||||||
@@ -370,7 +370,7 @@ describe('Block diagram', () => {
|
|||||||
|
|
||||||
it('BL29: composite block with a set width - f and g should split the available space', () => {
|
it('BL29: composite block with a set width - f and g should split the available space', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`block-beta
|
`block
|
||||||
columns 3
|
columns 3
|
||||||
a:3
|
a:3
|
||||||
block:e:3
|
block:e:3
|
||||||
@@ -384,4 +384,28 @@ describe('Block diagram', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('BL30: block should overflow if too wide for columns', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`block-beta
|
||||||
|
columns 2
|
||||||
|
fit:2
|
||||||
|
overflow:3
|
||||||
|
short:1
|
||||||
|
also_overflow:2
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('BL31: edge without arrow syntax should render with no arrowheads', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`block-beta
|
||||||
|
a
|
||||||
|
b
|
||||||
|
a --- b
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -429,7 +429,7 @@ describe('Class diagram', () => {
|
|||||||
classDiagram
|
classDiagram
|
||||||
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
||||||
+String Also
|
+String Also
|
||||||
-Stirng Many
|
-String Many
|
||||||
#int Members
|
#int Members
|
||||||
+And()
|
+And()
|
||||||
-Many()
|
-Many()
|
||||||
@@ -443,7 +443,7 @@ describe('Class diagram', () => {
|
|||||||
classDiagram
|
classDiagram
|
||||||
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
||||||
+String Also
|
+String Also
|
||||||
-Stirng Many
|
-String Many
|
||||||
#int Members
|
#int Members
|
||||||
+And()
|
+And()
|
||||||
-Many()
|
-Many()
|
||||||
@@ -459,7 +459,7 @@ describe('Class diagram', () => {
|
|||||||
namespace testingNamespace {
|
namespace testingNamespace {
|
||||||
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
||||||
+String Also
|
+String Also
|
||||||
-Stirng Many
|
-String Many
|
||||||
#int Members
|
#int Members
|
||||||
+And()
|
+And()
|
||||||
-Many()
|
-Many()
|
||||||
@@ -495,4 +495,34 @@ describe('Class diagram', () => {
|
|||||||
cy.get('a').should('have.attr', 'target', '_blank').should('have.attr', 'rel', 'noopener');
|
cy.get('a').should('have.attr', 'target', '_blank').should('have.attr', 'rel', 'noopener');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Include char sequence "graph" in text (#6795)', () => {
|
||||||
|
it('has a label with char sequence "graph"', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
classDiagram
|
||||||
|
class Person {
|
||||||
|
+String name
|
||||||
|
-Int id
|
||||||
|
#double age
|
||||||
|
+Text demographicProfile
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
{ flowchart: { defaultRenderer: 'elk' } }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle backticks for namespace and class names', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
classDiagram
|
||||||
|
namespace \`A::B\` {
|
||||||
|
class \`IPC::Sender\`
|
||||||
|
}
|
||||||
|
RenderProcessHost --|> \`IPC::Sender\`
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -354,4 +354,19 @@ ORDER ||--|{ LINE-ITEM : contains
|
|||||||
{ logLevel: 1 }
|
{ logLevel: 1 }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Include char sequence "graph" in text (#6795)', () => {
|
||||||
|
it('has a label with char sequence "graph"', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
erDiagram
|
||||||
|
p[Photograph] {
|
||||||
|
varchar(12) jobId
|
||||||
|
date dateCreated
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
{ flowchart: { defaultRenderer: 'elk' } }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -208,13 +208,13 @@ describe('Flowchart ELK', () => {
|
|||||||
`flowchart-elk TB
|
`flowchart-elk TB
|
||||||
internet
|
internet
|
||||||
nat
|
nat
|
||||||
routeur
|
router
|
||||||
lb1
|
lb1
|
||||||
lb2
|
lb2
|
||||||
compute1
|
compute1
|
||||||
compute2
|
compute2
|
||||||
subgraph project
|
subgraph project
|
||||||
routeur
|
router
|
||||||
nat
|
nat
|
||||||
subgraph subnet1
|
subgraph subnet1
|
||||||
compute1
|
compute1
|
||||||
@@ -225,8 +225,8 @@ describe('Flowchart ELK', () => {
|
|||||||
lb2
|
lb2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
internet --> routeur
|
internet --> router
|
||||||
routeur --> subnet1 & subnet2
|
router --> subnet1 & subnet2
|
||||||
subnet1 & subnet2 --> nat --> internet
|
subnet1 & subnet2 --> nat --> internet
|
||||||
`,
|
`,
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
@@ -443,7 +443,7 @@ flowchart-elk TD
|
|||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('63-elk: title on subgraphs should be themable', () => {
|
it('63-elk: title on subgraphs should be themeable', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
%%{init:{"theme":"base", "themeVariables": {"primaryColor":"#411d4e", "titleColor":"white", "darkMode":true}}}%%
|
%%{init:{"theme":"base", "themeVariables": {"primaryColor":"#411d4e", "titleColor":"white", "darkMode":true}}}%%
|
||||||
@@ -1053,6 +1053,21 @@ flowchart LR
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('6647-elk: should keep node order when using elk layout unless it would add crossings', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
layout: elk
|
||||||
|
---
|
||||||
|
flowchart TB
|
||||||
|
a --> a1 & a2 & a3 & a4
|
||||||
|
b --> b1 & b2
|
||||||
|
b2 --> b3
|
||||||
|
b1 --> b4
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Title and arrow styling #4813', () => {
|
describe('Title and arrow styling #4813', () => {
|
||||||
|
28
cypress/integration/rendering/flowchart-icon.spec.js
Normal file
28
cypress/integration/rendering/flowchart-icon.spec.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
|
const themes = ['default', 'forest', 'dark', 'base', 'neutral'];
|
||||||
|
|
||||||
|
describe('when rendering flowchart with icons', () => {
|
||||||
|
for (const theme of themes) {
|
||||||
|
it(`should render icons from fontawesome library on theme ${theme}`, () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`flowchart TD
|
||||||
|
A("fab:fa-twitter Twitter") --> B("fab:fa-facebook Facebook")
|
||||||
|
B --> C("fa:fa-coffee Coffee")
|
||||||
|
C --> D("fa:fa-car Car")
|
||||||
|
D --> E("fab:fa-github GitHub")
|
||||||
|
`,
|
||||||
|
{ theme }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should render registered icons on theme ${theme}`, () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`flowchart TD
|
||||||
|
A("fa:fa-bell Bell")
|
||||||
|
`,
|
||||||
|
{ theme }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
@@ -99,7 +99,7 @@ describe('Flowchart v2', () => {
|
|||||||
const style = svg.attr('style');
|
const style = svg.attr('style');
|
||||||
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
||||||
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
||||||
expect(maxWidthValue).to.be.within(417 * 0.95, 417 * 1.05);
|
expect(maxWidthValue).to.be.within(440 * 0.95, 440 * 1.05);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('8: should render a flowchart when useMaxWidth is false', () => {
|
it('8: should render a flowchart when useMaxWidth is false', () => {
|
||||||
@@ -118,7 +118,7 @@ describe('Flowchart v2', () => {
|
|||||||
const width = parseFloat(svg.attr('width'));
|
const width = parseFloat(svg.attr('width'));
|
||||||
// use within because the absolute value can be slightly different depending on the environment ±5%
|
// use within because the absolute value can be slightly different depending on the environment ±5%
|
||||||
// expect(height).to.be.within(446 * 0.95, 446 * 1.05);
|
// expect(height).to.be.within(446 * 0.95, 446 * 1.05);
|
||||||
expect(width).to.be.within(417 * 0.95, 417 * 1.05);
|
expect(width).to.be.within(440 * 0.95, 440 * 1.05);
|
||||||
expect(svg).to.not.have.attr('style');
|
expect(svg).to.not.have.attr('style');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -198,13 +198,13 @@ describe('Flowchart v2', () => {
|
|||||||
`flowchart TB
|
`flowchart TB
|
||||||
internet
|
internet
|
||||||
nat
|
nat
|
||||||
routeur
|
router
|
||||||
lb1
|
lb1
|
||||||
lb2
|
lb2
|
||||||
compute1
|
compute1
|
||||||
compute2
|
compute2
|
||||||
subgraph project
|
subgraph project
|
||||||
routeur
|
router
|
||||||
nat
|
nat
|
||||||
subgraph subnet1
|
subgraph subnet1
|
||||||
compute1
|
compute1
|
||||||
@@ -215,8 +215,8 @@ describe('Flowchart v2', () => {
|
|||||||
lb2
|
lb2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
internet --> routeur
|
internet --> router
|
||||||
routeur --> subnet1 & subnet2
|
router --> subnet1 & subnet2
|
||||||
subnet1 & subnet2 --> nat --> internet
|
subnet1 & subnet2 --> nat --> internet
|
||||||
`,
|
`,
|
||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
@@ -433,7 +433,7 @@ flowchart TD
|
|||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('63: title on subgraphs should be themable', () => {
|
it('63: title on subgraphs should be themeable', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
%%{init:{"theme":"base", "themeVariables": {"primaryColor":"#411d4e", "titleColor":"white", "darkMode":true}}}%%
|
%%{init:{"theme":"base", "themeVariables": {"primaryColor":"#411d4e", "titleColor":"white", "darkMode":true}}}%%
|
||||||
@@ -699,7 +699,7 @@ A --> B
|
|||||||
{ flowchart: { titleTopMargin: 10 } }
|
{ flowchart: { titleTopMargin: 10 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('3192: It should be possieble to render flowcharts with invisible edges', () => {
|
it('3192: It should be possible to render flowcharts with invisible edges', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`---
|
`---
|
||||||
title: Simple flowchart with invisible edges
|
title: Simple flowchart with invisible edges
|
||||||
@@ -1076,11 +1076,11 @@ end
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('New @ sytax for node metadata edge cases', () => {
|
describe('New @ syntax for node metadata edge cases', () => {
|
||||||
it('should be possible to use @ syntax to add labels on multi nodes', () => {
|
it('should be possible to use @ syntax to add labels on multi nodes', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`flowchart TB
|
`flowchart TB
|
||||||
n2["label for n2"] & n4@{ label: "labe for n4"} & n5@{ label: "labe for n5"}
|
n2["label for n2"] & n4@{ label: "label for n4"} & n5@{ label: "label for n5"}
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
@@ -1088,7 +1088,7 @@ end
|
|||||||
it('should be possible to use @ syntax to add labels with trail spaces and &', () => {
|
it('should be possible to use @ syntax to add labels with trail spaces and &', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`flowchart TB
|
`flowchart TB
|
||||||
n2["label for n2"] & n4@{ label: "labe for n4"} & n5@{ label: "labe for n5"}
|
n2["label for n2"] & n4@{ label: "label for n4"} & n5@{ label: "label for n5"}
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
@@ -1097,8 +1097,8 @@ end
|
|||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`flowchart TB
|
`flowchart TB
|
||||||
n2["label for n2"]
|
n2["label for n2"]
|
||||||
n4@{ label: "labe for n4"}
|
n4@{ label: "label for n4"}
|
||||||
n5@{ label: "labe for n5"}
|
n5@{ label: "label for n5"}
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
@@ -1113,4 +1113,77 @@ end
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe('Flowchart Node Shape Rendering', () => {
|
||||||
|
it('should render a stadium-shaped node', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`flowchart TB
|
||||||
|
A(["Start"]) --> n1["Untitled Node"]
|
||||||
|
A --> n2["Untitled Node"]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('should render a diamond-shaped node using shape config', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`flowchart BT
|
||||||
|
n2["Untitled Node"] --> n1["Diamond"]
|
||||||
|
n1@{ shape: diam}
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('should render a rounded rectangle and a normal rectangle', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`flowchart BT
|
||||||
|
n2["Untitled Node"] --> n1["Rounded Rectangle"]
|
||||||
|
n3["Untitled Node"] --> n1
|
||||||
|
n1@{ shape: rounded}
|
||||||
|
n3@{ shape: rect}
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('6617: Per Link Curve Styling using edge Ids', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`flowchart TD
|
||||||
|
A e1@-->B e5@--> E
|
||||||
|
E e7@--> D
|
||||||
|
B e3@-->D
|
||||||
|
A e2@-->C e4@-->D
|
||||||
|
C e6@--> F
|
||||||
|
F e8@--> D
|
||||||
|
e1@{ curve: natural }
|
||||||
|
e2@{ curve: stepAfter }
|
||||||
|
e3@{ curve: monotoneY }
|
||||||
|
e4@{ curve: bumpY }
|
||||||
|
e5@{ curve: linear }
|
||||||
|
e6@{ curve: catmullRom }
|
||||||
|
e7@{ curve: cardinal }
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when rendering unsuported markdown', () => {
|
||||||
|
const graph = `flowchart TB
|
||||||
|
mermaid{"What is\nyourmermaid version?"} --> v10["<11"] --"\`<**1**1\`"--> fine["No bug"]
|
||||||
|
mermaid --> v11[">= v11"] -- ">= v11" --> broken["Affected by https://github.com/mermaid-js/mermaid/issues/5824"]
|
||||||
|
subgraph subgraph1["\`How to fix **fix**\`"]
|
||||||
|
broken --> B["B"]
|
||||||
|
end
|
||||||
|
githost["Github, Gitlab, BitBucket, etc."]
|
||||||
|
githost2["\`Github, Gitlab, BitBucket, etc.\`"]
|
||||||
|
a["1."]
|
||||||
|
b["- x"]
|
||||||
|
`;
|
||||||
|
|
||||||
|
it('should render raw strings', () => {
|
||||||
|
imgSnapshotTest(graph);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render raw strings with htmlLabels: false', () => {
|
||||||
|
imgSnapshotTest(graph, { htmlLabels: false });
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -934,4 +934,43 @@ graph TD
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it('68: should honor subgraph direction when inheritDir is false', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
%%{init: {"flowchart": { "inheritDir": false }}}%%
|
||||||
|
flowchart TB
|
||||||
|
direction LR
|
||||||
|
subgraph A
|
||||||
|
direction TB
|
||||||
|
a --> b
|
||||||
|
end
|
||||||
|
subgraph B
|
||||||
|
c --> d
|
||||||
|
end
|
||||||
|
`,
|
||||||
|
{
|
||||||
|
fontFamily: 'courier',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('69: should inherit global direction when inheritDir is true', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
%%{init: {"flowchart": { "inheritDir": true }}}%%
|
||||||
|
flowchart TB
|
||||||
|
direction LR
|
||||||
|
subgraph A
|
||||||
|
direction TB
|
||||||
|
a --> b
|
||||||
|
end
|
||||||
|
subgraph B
|
||||||
|
c --> d
|
||||||
|
end
|
||||||
|
`,
|
||||||
|
{
|
||||||
|
fontFamily: 'courier',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -117,7 +117,7 @@ describe('Gantt diagram', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('should FAIL redering a gantt chart for issue #1060 with invalid date', () => {
|
it('should FAIL rendering a gantt chart for issue #1060 with invalid date', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
gantt
|
gantt
|
||||||
@@ -358,6 +358,23 @@ describe('Gantt diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render a gantt diagram with a vert tag', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
gantt
|
||||||
|
title A Gantt Diagram
|
||||||
|
dateFormat ss
|
||||||
|
axisFormat %Ss
|
||||||
|
|
||||||
|
section Section
|
||||||
|
A task : a1, 00, 6s
|
||||||
|
Milestone : vert, 01,
|
||||||
|
section Another
|
||||||
|
Task in sec : 06, 3s
|
||||||
|
another task : 3s
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
it('should render a gantt diagram with tick is 2 milliseconds', () => {
|
it('should render a gantt diagram with tick is 2 milliseconds', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
@@ -548,6 +565,18 @@ describe('Gantt diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render only the day when using dateFormat D', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
gantt
|
||||||
|
title Test
|
||||||
|
dateFormat D
|
||||||
|
A :a, 1, 1d
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
// TODO: fix it
|
// TODO: fix it
|
||||||
//
|
//
|
||||||
// This test is skipped deliberately
|
// This test is skipped deliberately
|
||||||
@@ -573,7 +602,7 @@ describe('Gantt diagram', () => {
|
|||||||
`
|
`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('should render a gantt diagram exculding friday and saturday', () => {
|
it('should render a gantt diagram excluding friday and saturday', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`gantt
|
`gantt
|
||||||
title A Gantt Diagram
|
title A Gantt Diagram
|
||||||
@@ -584,7 +613,7 @@ describe('Gantt diagram', () => {
|
|||||||
A task :a1, 2024-02-28, 10d`
|
A task :a1, 2024-02-28, 10d`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('should render a gantt diagram exculding saturday and sunday', () => {
|
it('should render a gantt diagram excluding saturday and sunday', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`gantt
|
`gantt
|
||||||
title A Gantt Diagram
|
title A Gantt Diagram
|
||||||
@@ -630,6 +659,49 @@ describe('Gantt diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render a gantt diagram excluding a specific date in YYYY-MM-DD HH:mm:ss format', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
gantt
|
||||||
|
dateFormat YYYY-MM-DD HH:mm:ss
|
||||||
|
excludes 2025-07-07
|
||||||
|
section Section
|
||||||
|
A task :a1, 2025-07-04 20:30:30, 2025-07-08 10:30:30
|
||||||
|
Another task:after a1, 20h
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render a gantt diagram excluding saturday and sunday in YYYY-MM-DD HH:mm:ss format', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
gantt
|
||||||
|
dateFormat YYYY-MM-DD HH:mm:ss
|
||||||
|
excludes weekends
|
||||||
|
weekend saturday
|
||||||
|
section Section
|
||||||
|
A task :a1, 2025-07-04 20:30:30, 2025-07-08 10:30:30
|
||||||
|
Another task:after a1, 20h
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('should render a gantt diagram excluding friday and saturday in YYYY-MM-DD HH:mm:ss format', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
gantt
|
||||||
|
dateFormat YYYY-MM-DD HH:mm:ss
|
||||||
|
excludes weekends
|
||||||
|
weekend friday
|
||||||
|
section Section
|
||||||
|
A task :a1, 2025-07-04 20:30:30, 2025-07-08 10:30:30
|
||||||
|
Another task:after a1, 20h
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it("should render when there's a semicolon in the title", () => {
|
it("should render when there's a semicolon in the title", () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
@@ -671,7 +743,7 @@ describe('Gantt diagram', () => {
|
|||||||
title Gantt Digram
|
title Gantt Digram
|
||||||
dateFormat YYYY-MM-DD
|
dateFormat YYYY-MM-DD
|
||||||
section Section
|
section Section
|
||||||
;A task with a semiclon :a1, 2014-01-01, 30d
|
;A task with a semicolon :a1, 2014-01-01, 30d
|
||||||
Another task :after a1 , 20d
|
Another task :after a1 , 20d
|
||||||
section Another
|
section Another
|
||||||
Task in sec :2014-01-12 , 12d
|
Task in sec :2014-01-12 , 12d
|
||||||
|
@@ -11,7 +11,7 @@ describe('Git Graph diagram', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('2: should render a simple gitgraph with commit on main branch with Id', () => {
|
it('2: should render a simple gitgraph with commit on main branch with id', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`gitGraph
|
`gitGraph
|
||||||
commit id: "One"
|
commit id: "One"
|
||||||
@@ -253,7 +253,7 @@ describe('Git Graph diagram', () => {
|
|||||||
`
|
`
|
||||||
gitGraph
|
gitGraph
|
||||||
checkout main
|
checkout main
|
||||||
%% Make sure to manually set the ID of all commits, for consistent visual tests
|
%% Make sure to manually set the id of all commits, for consistent visual tests
|
||||||
commit id: "1-abcdefg"
|
commit id: "1-abcdefg"
|
||||||
checkout main
|
checkout main
|
||||||
branch branch1
|
branch branch1
|
||||||
@@ -343,7 +343,7 @@ gitGraph
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('16: should render a simple gitgraph with commit on main branch with Id | Vertical Branch', () => {
|
it('16: should render a simple gitgraph with commit on main branch with id | Vertical Branch', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`gitGraph TB:
|
`gitGraph TB:
|
||||||
commit id: "One"
|
commit id: "One"
|
||||||
@@ -585,7 +585,7 @@ gitGraph
|
|||||||
`
|
`
|
||||||
gitGraph TB:
|
gitGraph TB:
|
||||||
checkout main
|
checkout main
|
||||||
%% Make sure to manually set the ID of all commits, for consistent visual tests
|
%% Make sure to manually set the id of all commits, for consistent visual tests
|
||||||
commit id: "1-abcdefg"
|
commit id: "1-abcdefg"
|
||||||
checkout main
|
checkout main
|
||||||
branch branch1
|
branch branch1
|
||||||
@@ -1024,7 +1024,7 @@ gitGraph TB:
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('51: should render a simple gitgraph with commit on main branch with Id | Vertical Branch - Bottom-to-top', () => {
|
it('51: should render a simple gitgraph with commit on main branch with id | Vertical Branch - Bottom-to-top', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`gitGraph BT:
|
`gitGraph BT:
|
||||||
commit id: "One"
|
commit id: "One"
|
||||||
@@ -1266,7 +1266,7 @@ gitGraph TB:
|
|||||||
`
|
`
|
||||||
gitGraph BT:
|
gitGraph BT:
|
||||||
checkout main
|
checkout main
|
||||||
%% Make sure to manually set the ID of all commits, for consistent visual tests
|
%% Make sure to manually set the id of all commits, for consistent visual tests
|
||||||
commit id: "1-abcdefg"
|
commit id: "1-abcdefg"
|
||||||
checkout main
|
checkout main
|
||||||
branch branch1
|
branch branch1
|
||||||
@@ -1491,7 +1491,7 @@ gitGraph TB:
|
|||||||
`
|
`
|
||||||
gitGraph
|
gitGraph
|
||||||
switch main
|
switch main
|
||||||
%% Make sure to manually set the ID of all commits, for consistent visual tests
|
%% Make sure to manually set the id of all commits, for consistent visual tests
|
||||||
commit id: "1-abcdefg"
|
commit id: "1-abcdefg"
|
||||||
switch main
|
switch main
|
||||||
branch branch1
|
branch branch1
|
||||||
|
@@ -63,4 +63,199 @@ section Checkout from website
|
|||||||
{ journey: { useMaxWidth: false } }
|
{ journey: { useMaxWidth: false } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should initialize with a left margin of 150px for user journeys', () => {
|
||||||
|
renderGraph(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
journey:
|
||||||
|
maxLabelWidth: 320
|
||||||
|
---
|
||||||
|
journey
|
||||||
|
title User Journey Example
|
||||||
|
section Onboarding
|
||||||
|
Sign Up: 5:
|
||||||
|
Browse Features: 3:
|
||||||
|
Use Core Functionality: 4:
|
||||||
|
section Engagement
|
||||||
|
Browse Features: 3
|
||||||
|
Use Core Functionality: 4
|
||||||
|
`,
|
||||||
|
{ journey: { useMaxWidth: true } }
|
||||||
|
);
|
||||||
|
|
||||||
|
let diagramStartX;
|
||||||
|
|
||||||
|
cy.contains('foreignobject', 'Sign Up').then(($diagram) => {
|
||||||
|
diagramStartX = parseFloat($diagram.attr('x'));
|
||||||
|
expect(diagramStartX).to.be.closeTo(150, 2);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should maintain sufficient space between legend and diagram when legend labels are longer', () => {
|
||||||
|
renderGraph(
|
||||||
|
`journey
|
||||||
|
title Web hook life cycle
|
||||||
|
section Darkoob
|
||||||
|
Make preBuilt:5: Darkoob user
|
||||||
|
register slug : 5: Darkoob userf deliberately increasing the size of this label to check if distance between legend and diagram is maintained
|
||||||
|
Map slug to a Prebuilt Job:5: Darkoob user
|
||||||
|
section External Service
|
||||||
|
set Darkoob slug as hook for an Event : 5 : admin Exjjjnjjjj qwerty
|
||||||
|
listen to the events : 5 : External Service
|
||||||
|
call darkoob endpoint : 5 : External Service
|
||||||
|
section Darkoob
|
||||||
|
check for inputs : 5 : DarkoobAPI
|
||||||
|
run the prebuilt job : 5 : DarkoobAPI
|
||||||
|
`,
|
||||||
|
{ journey: { useMaxWidth: true } }
|
||||||
|
);
|
||||||
|
|
||||||
|
let LabelEndX, diagramStartX;
|
||||||
|
|
||||||
|
// Get right edge of the legend
|
||||||
|
cy.contains('tspan', 'Darkoob userf').then((textBox) => {
|
||||||
|
const bbox = textBox[0].getBBox();
|
||||||
|
LabelEndX = bbox.x + bbox.width;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Get left edge of the diagram
|
||||||
|
cy.contains('foreignobject', 'Make preBuilt').then((rect) => {
|
||||||
|
diagramStartX = parseFloat(rect.attr('x'));
|
||||||
|
});
|
||||||
|
|
||||||
|
// Assert right edge of the diagram is greater than or equal to the right edge of the label
|
||||||
|
cy.then(() => {
|
||||||
|
expect(diagramStartX).to.be.gte(LabelEndX);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should wrap a single long word with hyphenation', () => {
|
||||||
|
renderGraph(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
journey:
|
||||||
|
maxLabelWidth: 100
|
||||||
|
---
|
||||||
|
journey
|
||||||
|
title Long Word Test
|
||||||
|
section Test
|
||||||
|
VeryLongWord: 5: Supercalifragilisticexpialidocious
|
||||||
|
`,
|
||||||
|
{ journey: { useMaxWidth: true } }
|
||||||
|
);
|
||||||
|
|
||||||
|
// Verify that the line ends with a hyphen, indicating proper hyphenation for words exceeding maxLabelWidth.
|
||||||
|
cy.get('tspan').then((tspans) => {
|
||||||
|
const hasHyphen = [...tspans].some((t) => t.textContent.trim().endsWith('-'));
|
||||||
|
return expect(hasHyphen).to.be.true;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should wrap text on whitespace without adding hyphens', () => {
|
||||||
|
renderGraph(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
journey:
|
||||||
|
maxLabelWidth: 200
|
||||||
|
---
|
||||||
|
journey
|
||||||
|
title Whitespace Test
|
||||||
|
section Test
|
||||||
|
TextWithSpaces: 5: Gustavo Fring is played by Giancarlo Esposito and is a character in Breaking Bad.
|
||||||
|
`,
|
||||||
|
{ journey: { useMaxWidth: true } }
|
||||||
|
);
|
||||||
|
|
||||||
|
// Verify that none of the text spans end with a hyphen.
|
||||||
|
cy.get('tspan').each(($el) => {
|
||||||
|
const text = $el.text();
|
||||||
|
expect(text.trim()).not.to.match(/-$/);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should wrap long labels into multiple lines, keep them under max width, and maintain margins', () => {
|
||||||
|
renderGraph(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
journey:
|
||||||
|
maxLabelWidth: 320
|
||||||
|
---
|
||||||
|
journey
|
||||||
|
title User Journey Example
|
||||||
|
section Onboarding
|
||||||
|
Sign Up: 5: This is a long label that will be split into multiple lines to test the wrapping functionality
|
||||||
|
Browse Features: 3: This is another long label that will be split into multiple lines to test the wrapping functionality
|
||||||
|
Use Core Functionality: 4: This is yet another long label that will be split into multiple lines to test the wrapping functionality
|
||||||
|
section Engagement
|
||||||
|
Browse Features: 3
|
||||||
|
Use Core Functionality: 4
|
||||||
|
`,
|
||||||
|
{ journey: { useMaxWidth: true } }
|
||||||
|
);
|
||||||
|
|
||||||
|
let diagramStartX, maxLineWidth;
|
||||||
|
|
||||||
|
// Get the diagram's left edge x-coordinate
|
||||||
|
cy.contains('foreignobject', 'Sign Up')
|
||||||
|
.then(($diagram) => {
|
||||||
|
diagramStartX = parseFloat($diagram.attr('x'));
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
cy.get('text.legend').then(($lines) => {
|
||||||
|
// Check that there are multiple lines
|
||||||
|
expect($lines.length).to.be.equal(9);
|
||||||
|
|
||||||
|
// Check that all lines are under the maxLabelWidth
|
||||||
|
$lines.each((index, el) => {
|
||||||
|
const bbox = el.getBBox();
|
||||||
|
expect(bbox.width).to.be.lte(320);
|
||||||
|
maxLineWidth = Math.max(maxLineWidth || 0, bbox.width);
|
||||||
|
});
|
||||||
|
|
||||||
|
/** The expected margin between the diagram and the legend is 150px, as defined by
|
||||||
|
* conf.leftMargin in user-journey-config.js
|
||||||
|
*/
|
||||||
|
expect(diagramStartX - maxLineWidth).to.be.closeTo(150, 2);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should correctly render the user journey diagram title with the specified styling', () => {
|
||||||
|
renderGraph(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
journey:
|
||||||
|
titleColor: "#2900A5"
|
||||||
|
titleFontFamily: "Times New Roman"
|
||||||
|
titleFontSize: "5rem"
|
||||||
|
---
|
||||||
|
|
||||||
|
journey
|
||||||
|
title User Journey Example
|
||||||
|
section Onboarding
|
||||||
|
Sign Up: 5: John, Shahir
|
||||||
|
Complete Profile: 4: John
|
||||||
|
section Engagement
|
||||||
|
Browse Features: 3: John
|
||||||
|
Use Core Functionality: 4: John
|
||||||
|
section Retention
|
||||||
|
Revisit Application: 5: John
|
||||||
|
Invite Friends: 3: John
|
||||||
|
|
||||||
|
size: 2rem
|
||||||
|
`
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get('text').contains('User Journey Example').as('title');
|
||||||
|
cy.get('@title').then(($title) => {
|
||||||
|
expect($title).to.have.attr('fill', '#2900A5');
|
||||||
|
expect($title).to.have.attr('font-family', 'Times New Roman');
|
||||||
|
expect($title).to.have.attr('font-size', '5rem');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -62,7 +62,7 @@ describe('Kanban diagram', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('6: should handle assigments', () => {
|
it('6: should handle assignments', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`kanban
|
`kanban
|
||||||
id1[Todo]
|
id1[Todo]
|
||||||
@@ -118,7 +118,7 @@ kanban
|
|||||||
docs[Create Documentation]
|
docs[Create Documentation]
|
||||||
docs[Create Blog about the new diagram]
|
docs[Create Blog about the new diagram]
|
||||||
id7[In progress]
|
id7[In progress]
|
||||||
id6[Create renderer so that it works in all cases. We also add som extra text here for testing purposes. And some more just for the extra flare.]
|
id6[Create renderer so that it works in all cases. We also add some extra text here for testing purposes. And some more just for the extra flare.]
|
||||||
id8[Design grammar]@{ assigned: 'knsv' }
|
id8[Design grammar]@{ assigned: 'knsv' }
|
||||||
id9[Ready for deploy]
|
id9[Ready for deploy]
|
||||||
id10[Ready for test]
|
id10[Ready for test]
|
||||||
|
@@ -146,7 +146,7 @@ root
|
|||||||
shouldHaveRoot
|
shouldHaveRoot
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('text shouhld wrap with icon', () => {
|
it('text should wrap with icon', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`mindmap
|
`mindmap
|
||||||
root
|
root
|
||||||
@@ -246,5 +246,22 @@ Word!\`]
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe('Include char sequence "graph" in text (#6795)', () => {
|
||||||
|
it('has a label with char sequence "graph"', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
mindmap
|
||||||
|
root
|
||||||
|
Photograph
|
||||||
|
Waterfall
|
||||||
|
Landscape
|
||||||
|
Geography
|
||||||
|
Mountains
|
||||||
|
Rocks
|
||||||
|
`,
|
||||||
|
{ flowchart: { defaultRenderer: 'elk' } }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
/* The end */
|
/* The end */
|
||||||
});
|
});
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util';
|
import { imgSnapshotTest } from '../../helpers/util';
|
||||||
|
|
||||||
describe('packet structure', () => {
|
describe('packet structure', () => {
|
||||||
it('should render a simple packet diagram', () => {
|
it('should render a simple packet-beta diagram', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`packet-beta
|
`packet-beta
|
||||||
title Hello world
|
title Hello world
|
||||||
@@ -10,9 +10,18 @@ describe('packet structure', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render a simple packet diagram', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`packet
|
||||||
|
title Hello world
|
||||||
|
0-10: "hello"
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it('should render a simple packet diagram without ranges', () => {
|
it('should render a simple packet diagram without ranges', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`packet-beta
|
`packet
|
||||||
0: "h"
|
0: "h"
|
||||||
1: "i"
|
1: "i"
|
||||||
`
|
`
|
||||||
@@ -21,7 +30,7 @@ describe('packet structure', () => {
|
|||||||
|
|
||||||
it('should render a complex packet diagram', () => {
|
it('should render a complex packet diagram', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`packet-beta
|
`packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
@@ -52,7 +61,7 @@ describe('packet structure', () => {
|
|||||||
packet:
|
packet:
|
||||||
showBits: false
|
showBits: false
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
|
@@ -64,7 +64,7 @@ describe('pie chart', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render a pie diagram when textPosition is setted', () => {
|
it('should render a pie diagram when textPosition is set', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`pie
|
`pie
|
||||||
"Dogs": 50
|
"Dogs": 50
|
||||||
@@ -82,4 +82,13 @@ describe('pie chart', () => {
|
|||||||
`
|
`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it('should render pie slices only for non-zero values but shows all legends', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
` pie title Pets adopted by volunteers
|
||||||
|
"Dogs" : 386
|
||||||
|
"Cats" : 85
|
||||||
|
"Rats" : 1
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -45,7 +45,7 @@ describe('Quadrant Chart', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('should able to render y-axix on right side', () => {
|
it('should able to render y-axis on right side', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
%%{init: {"quadrantChart": {"yAxisPosition": "right"}}}%%
|
%%{init: {"quadrantChart": {"yAxisPosition": "right"}}}%%
|
||||||
@@ -61,7 +61,7 @@ describe('Quadrant Chart', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('should able to render x-axix on bottom', () => {
|
it('should able to render x-axis on bottom', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
%%{init: {"quadrantChart": {"xAxisPosition": "bottom"}}}%%
|
%%{init: {"quadrantChart": {"xAxisPosition": "bottom"}}}%%
|
||||||
@@ -77,7 +77,7 @@ describe('Quadrant Chart', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('should able to render x-axix on bottom and y-axis on right', () => {
|
it('should able to render x-axis on bottom and y-axis on right', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
%%{init: {"quadrantChart": {"xAxisPosition": "bottom", "yAxisPosition": "right"}}}%%
|
%%{init: {"quadrantChart": {"xAxisPosition": "bottom", "yAxisPosition": "right"}}}%%
|
||||||
|
@@ -15,7 +15,7 @@ describe('Sankey Diagram', () => {
|
|||||||
describe('when given a linkColor', function () {
|
describe('when given a linkColor', function () {
|
||||||
this.beforeAll(() => {
|
this.beforeAll(() => {
|
||||||
cy.wrap(
|
cy.wrap(
|
||||||
`sankey-beta
|
`sankey
|
||||||
a,b,10
|
a,b,10
|
||||||
`
|
`
|
||||||
).as('graph');
|
).as('graph');
|
||||||
@@ -62,7 +62,7 @@ describe('Sankey Diagram', () => {
|
|||||||
this.beforeAll(() => {
|
this.beforeAll(() => {
|
||||||
cy.wrap(
|
cy.wrap(
|
||||||
`
|
`
|
||||||
sankey-beta
|
sankey
|
||||||
|
|
||||||
a,b,8
|
a,b,8
|
||||||
b,c,8
|
b,c,8
|
||||||
|
@@ -893,6 +893,17 @@ describe('Sequence diagram', () => {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should handle bidirectional arrows with autonumber', () => {
|
||||||
|
imgSnapshotTest(`
|
||||||
|
sequenceDiagram
|
||||||
|
autonumber
|
||||||
|
participant A
|
||||||
|
participant B
|
||||||
|
A<<->>B: This is a bidirectional message
|
||||||
|
A->B: This is a normal message`);
|
||||||
|
});
|
||||||
|
|
||||||
it('should support actor links and properties when not mirrored EXPERIMENTAL: USE WITH CAUTION', () => {
|
it('should support actor links and properties when not mirrored EXPERIMENTAL: USE WITH CAUTION', () => {
|
||||||
//Be aware that the syntax for "properties" is likely to be changed.
|
//Be aware that the syntax for "properties" is likely to be changed.
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
|
@@ -138,8 +138,8 @@ describe('State diagram', () => {
|
|||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
State1: This a a single line description
|
State1: This a single line description
|
||||||
State2: This a a multi line description
|
State2: This a multi line description
|
||||||
State2: here comes the multi part
|
State2: here comes the multi part
|
||||||
[*] --> State1
|
[*] --> State1
|
||||||
State1 --> State2
|
State1 --> State2
|
||||||
@@ -345,7 +345,7 @@ stateDiagram
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('v2 width of compond state should grow with title if title is wider', () => {
|
it('v2 width of compound state should grow with title if title is wider', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
@@ -402,8 +402,8 @@ stateDiagram-v2
|
|||||||
`
|
`
|
||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
MyState
|
MyState
|
||||||
note left of MyState : I am a leftie
|
note left of MyState : I am a lefty
|
||||||
note right of MyState : I am a rightie
|
note right of MyState : I am a righty
|
||||||
`,
|
`,
|
||||||
{
|
{
|
||||||
logLevel: 0,
|
logLevel: 0,
|
||||||
@@ -552,7 +552,7 @@ style AState fill:#636,border:1px solid red,color:white;
|
|||||||
{ logLevel: 0, fontFamily: 'courier' }
|
{ logLevel: 0, fontFamily: 'courier' }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it(' should let styles take preceedence over classes', () => {
|
it(' should let styles take precedence over classes', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
@@ -565,7 +565,7 @@ style AState fill:#636,border:1px solid red,color:white;
|
|||||||
{ logLevel: 0, fontFamily: 'courier' }
|
{ logLevel: 0, fontFamily: 'courier' }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it(' should allow styles to take effect in stubgraphs', () => {
|
it(' should allow styles to take effect in subgraphs', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
stateDiagram
|
stateDiagram
|
||||||
@@ -602,6 +602,231 @@ State1 --> [*]
|
|||||||
--
|
--
|
||||||
55
|
55
|
||||||
}
|
}
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('should render edge labels correctly', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
title: On The Way To Something Something DarkSide
|
||||||
|
config:
|
||||||
|
look: default
|
||||||
|
theme: default
|
||||||
|
---
|
||||||
|
|
||||||
|
stateDiagram-v2
|
||||||
|
|
||||||
|
state State1_____________
|
||||||
|
{
|
||||||
|
c0
|
||||||
|
}
|
||||||
|
|
||||||
|
state State2_____________
|
||||||
|
{
|
||||||
|
c1
|
||||||
|
}
|
||||||
|
|
||||||
|
state State3_____________
|
||||||
|
{
|
||||||
|
c7
|
||||||
|
}
|
||||||
|
|
||||||
|
state State4_____________
|
||||||
|
{
|
||||||
|
c2
|
||||||
|
}
|
||||||
|
|
||||||
|
state State5_____________
|
||||||
|
{
|
||||||
|
c3
|
||||||
|
}
|
||||||
|
|
||||||
|
state State6_____________
|
||||||
|
{
|
||||||
|
c4
|
||||||
|
}
|
||||||
|
|
||||||
|
state State7_____________
|
||||||
|
{
|
||||||
|
c5
|
||||||
|
}
|
||||||
|
|
||||||
|
state State8_____________
|
||||||
|
{
|
||||||
|
c6
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[*] --> State1_____________
|
||||||
|
State1_____________ --> State2_____________ : Transition1_____
|
||||||
|
State2_____________ --> State4_____________ : Transition2_____
|
||||||
|
State2_____________ --> State3_____________ : Transition3_____
|
||||||
|
State3_____________ --> State2_____________
|
||||||
|
State4_____________ --> State2_____________ : Transition5_____
|
||||||
|
State4_____________ --> State5_____________ : Transition6_____
|
||||||
|
State5_____________ --> State6_____________ : Transition7_____
|
||||||
|
State6_____________ --> State4_____________ : Transition8_____
|
||||||
|
State2_____________ --> State7_____________ : Transition4_____
|
||||||
|
State4_____________ --> State7_____________ : Transition4_____
|
||||||
|
State5_____________ --> State7_____________ : Transition4_____
|
||||||
|
State6_____________ --> State7_____________ : Transition4_____
|
||||||
|
State7_____________ --> State1_____________ : Transition9_____
|
||||||
|
State5_____________ --> State8_____________ : Transition10____
|
||||||
|
State8_____________ --> State5_____________ : Transition11____
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('should render edge labels correctly with multiple transitions', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
title: Multiple Transitions
|
||||||
|
config:
|
||||||
|
look: default
|
||||||
|
theme: default
|
||||||
|
---
|
||||||
|
|
||||||
|
stateDiagram-v2
|
||||||
|
|
||||||
|
state State1_____________
|
||||||
|
{
|
||||||
|
c0
|
||||||
|
}
|
||||||
|
|
||||||
|
state State2_____________
|
||||||
|
{
|
||||||
|
c1
|
||||||
|
}
|
||||||
|
|
||||||
|
state State3_____________
|
||||||
|
{
|
||||||
|
c7
|
||||||
|
}
|
||||||
|
|
||||||
|
state State4_____________
|
||||||
|
{
|
||||||
|
c2
|
||||||
|
}
|
||||||
|
|
||||||
|
state State5_____________
|
||||||
|
{
|
||||||
|
c3
|
||||||
|
}
|
||||||
|
|
||||||
|
state State6_____________
|
||||||
|
{
|
||||||
|
c4
|
||||||
|
}
|
||||||
|
|
||||||
|
state State7_____________
|
||||||
|
{
|
||||||
|
c5
|
||||||
|
}
|
||||||
|
|
||||||
|
state State8_____________
|
||||||
|
{
|
||||||
|
c6
|
||||||
|
}
|
||||||
|
|
||||||
|
state State9_____________
|
||||||
|
{
|
||||||
|
c9
|
||||||
|
}
|
||||||
|
|
||||||
|
[*] --> State1_____________
|
||||||
|
State1_____________ --> State2_____________ : Transition1_____
|
||||||
|
State2_____________ --> State4_____________ : Transition2_____
|
||||||
|
State2_____________ --> State3_____________ : Transition3_____
|
||||||
|
State3_____________ --> State2_____________
|
||||||
|
State4_____________ --> State2_____________ : Transition5_____
|
||||||
|
State4_____________ --> State5_____________ : Transition6_____
|
||||||
|
State5_____________ --> State6_____________ : Transition7_____
|
||||||
|
State6_____________ --> State4_____________ : Transition8_____
|
||||||
|
State2_____________ --> State7_____________ : Transition4_____
|
||||||
|
State4_____________ --> State7_____________ : Transition4_____
|
||||||
|
State5_____________ --> State7_____________ : Transition4_____
|
||||||
|
State6_____________ --> State7_____________ : Transition4_____
|
||||||
|
State7_____________ --> State1_____________ : Transition9_____
|
||||||
|
State5_____________ --> State8_____________ : Transition10____
|
||||||
|
State8_____________ --> State5_____________ : Transition11____
|
||||||
|
State9_____________ --> State8_____________ : Transition12____
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render edge labels correctly with multiple states', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
title: Multiple States
|
||||||
|
config:
|
||||||
|
look: default
|
||||||
|
theme: default
|
||||||
|
---
|
||||||
|
|
||||||
|
stateDiagram-v2
|
||||||
|
|
||||||
|
state State1_____________
|
||||||
|
{
|
||||||
|
c0
|
||||||
|
}
|
||||||
|
|
||||||
|
state State2_____________
|
||||||
|
{
|
||||||
|
c1
|
||||||
|
}
|
||||||
|
|
||||||
|
state State3_____________
|
||||||
|
{
|
||||||
|
c7
|
||||||
|
}
|
||||||
|
|
||||||
|
state State4_____________
|
||||||
|
{
|
||||||
|
c2
|
||||||
|
}
|
||||||
|
|
||||||
|
state State5_____________
|
||||||
|
{
|
||||||
|
c3
|
||||||
|
}
|
||||||
|
|
||||||
|
state State6_____________
|
||||||
|
{
|
||||||
|
c4
|
||||||
|
}
|
||||||
|
|
||||||
|
state State7_____________
|
||||||
|
{
|
||||||
|
c5
|
||||||
|
}
|
||||||
|
|
||||||
|
state State8_____________
|
||||||
|
{
|
||||||
|
c6
|
||||||
|
}
|
||||||
|
|
||||||
|
state State9_____________
|
||||||
|
{
|
||||||
|
c9
|
||||||
|
}
|
||||||
|
|
||||||
|
state State10_____________
|
||||||
|
{
|
||||||
|
c10
|
||||||
|
}
|
||||||
|
|
||||||
|
[*] --> State1_____________
|
||||||
|
State1_____________ --> State2_____________ : Transition1_____
|
||||||
|
State2_____________ --> State3_____________ : Transition2_____
|
||||||
|
State3_____________ --> State4_____________ : Transition3_____
|
||||||
|
State4_____________ --> State5_____________ : Transition4_____
|
||||||
|
State5_____________ --> State6_____________ : Transition5_____
|
||||||
|
State6_____________ --> State7_____________ : Transition6_____
|
||||||
|
State7_____________ --> State8_____________ : Transition7_____
|
||||||
|
State8_____________ --> State9_____________ : Transition8_____
|
||||||
|
State9_____________ --> State10_____________ : Transition9_____
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
|
@@ -129,8 +129,8 @@ describe('State diagram', () => {
|
|||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
stateDiagram
|
stateDiagram
|
||||||
State1: This a a single line description
|
State1: This a single line description
|
||||||
State2: This a a multi line description
|
State2: This a multi line description
|
||||||
State2: here comes the multi part
|
State2: here comes the multi part
|
||||||
[*] --> State1
|
[*] --> State1
|
||||||
State1 --> State2
|
State1 --> State2
|
||||||
|
@@ -7,7 +7,7 @@ describe('Timeline diagram', () => {
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google
|
2004 : Facebook : Google
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
@@ -35,7 +35,7 @@ describe('Timeline diagram', () => {
|
|||||||
section Stone Age
|
section Stone Age
|
||||||
7600 BC : Britain's oldest known house was built in Orkney, Scotland
|
7600 BC : Britain's oldest known house was built in Orkney, Scotland
|
||||||
6000 BC : Sea levels rise and Britain becomes an island.<br> The people who live here are hunter-gatherers.
|
6000 BC : Sea levels rise and Britain becomes an island.<br> The people who live here are hunter-gatherers.
|
||||||
section Broze Age
|
section Bronze Age
|
||||||
2300 BC : People arrive from Europe and settle in Britain. <br>They bring farming and metalworking.
|
2300 BC : People arrive from Europe and settle in Britain. <br>They bring farming and metalworking.
|
||||||
: New styles of pottery and ways of burying the dead appear.
|
: New styles of pottery and ways of burying the dead appear.
|
||||||
2200 BC : The last major building works are completed at Stonehenge.<br> People now bury their dead in stone circles.
|
2200 BC : The last major building works are completed at Stonehenge.<br> People now bury their dead in stone circles.
|
||||||
@@ -51,7 +51,7 @@ describe('Timeline diagram', () => {
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google
|
2004 : Facebook : Google
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
@@ -68,7 +68,7 @@ describe('Timeline diagram', () => {
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google
|
2004 : Facebook : Google
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
2007 : Tumblr
|
2007 : Tumblr
|
||||||
2008 : Instagram
|
2008 : Instagram
|
||||||
@@ -84,7 +84,7 @@ describe('Timeline diagram', () => {
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google
|
2004 : Facebook : Google
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
2007 : Tumblr
|
2007 : Tumblr
|
||||||
2008 : Instagram
|
2008 : Instagram
|
||||||
@@ -101,7 +101,7 @@ describe('Timeline diagram', () => {
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google
|
2004 : Facebook : Google
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
2007 : Tumblr
|
2007 : Tumblr
|
||||||
2008 : Instagram
|
2008 : Instagram
|
||||||
@@ -118,7 +118,7 @@ describe('Timeline diagram', () => {
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google
|
2004 : Facebook : Google
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
2007 : Tumblr
|
2007 : Tumblr
|
||||||
2008 : Instagram
|
2008 : Instagram
|
||||||
@@ -135,7 +135,7 @@ describe('Timeline diagram', () => {
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google
|
2004 : Facebook : Google
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
2007 : Tumblr
|
2007 : Tumblr
|
||||||
2008 : Instagram
|
2008 : Instagram
|
||||||
@@ -152,7 +152,7 @@ describe('Timeline diagram', () => {
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google
|
2004 : Facebook : Google
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
2007 : Tumblr
|
2007 : Tumblr
|
||||||
2008 : Instagram
|
2008 : Instagram
|
||||||
@@ -161,4 +161,68 @@ describe('Timeline diagram', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('11: should render timeline with many stacked events and proper timeline line length', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`timeline
|
||||||
|
title Medical Device Lifecycle
|
||||||
|
section Pre-Development
|
||||||
|
Quality Management System : Regulatory Compliance : Risk Management
|
||||||
|
section Development
|
||||||
|
Management Responsibility : Planning Activities : Human Resources
|
||||||
|
Resource Management : Management Reviews : Infrastructure
|
||||||
|
section Post-Development
|
||||||
|
Product Realization Activities : Planning Activities : Customer-related Processes
|
||||||
|
Post-Production Activities : Feedback : Complaints : Adverse Events
|
||||||
|
: Research and Development : Purchasing Activities
|
||||||
|
: Production Activities : Installation Activities
|
||||||
|
: Servicing Activities : Post-Market Surveillance
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('12: should render timeline with proper vertical line lengths for all columns', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
theme: base
|
||||||
|
themeVariables:
|
||||||
|
fontFamily: Fira Sans
|
||||||
|
fontSize: 17px
|
||||||
|
cScale0: '#b3cde0'
|
||||||
|
cScale1: '#f49090'
|
||||||
|
cScale2: '#85d5b8'
|
||||||
|
---
|
||||||
|
|
||||||
|
timeline
|
||||||
|
title Medical Device Lifecycle
|
||||||
|
section Planning
|
||||||
|
Quality Management System (4): Regulatory Compliance (4.1.1)
|
||||||
|
: Risk Management (4.1.2)
|
||||||
|
Management Resposibility (5): Planning Activities (5.4)
|
||||||
|
: Management Reviews (5.6)
|
||||||
|
Resource Management (6): Human Resources (6.2)
|
||||||
|
: Infrastructure (6.3)
|
||||||
|
section Realization
|
||||||
|
Research and Development (7.3): RnD Planning (7.3.2)
|
||||||
|
: Inputs (7.3.3)
|
||||||
|
: Outputs (7.3.4)
|
||||||
|
: Review (7.3.5)
|
||||||
|
: Verification (7.3.6)
|
||||||
|
: Validation (7.3.7)
|
||||||
|
Purchasing (7.4): Purchasing Process (7.4.1)
|
||||||
|
: Purchasing Information (7.4.2)
|
||||||
|
Production (7.5): Production Activities (7.5.1)
|
||||||
|
: Production Feedback (8.2.1)
|
||||||
|
Installation (7.5.3): Installation Activities (7.5.3)
|
||||||
|
Servicing (7.5.4): Servicing Activities (7.5.4)
|
||||||
|
section Post-Production
|
||||||
|
Post-Market Activities (8): Feedback (8.2.1)
|
||||||
|
: Complaints (8.2.2)
|
||||||
|
: Adverse Events (8.2.3)
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
382
cypress/integration/rendering/treemap.spec.ts
Normal file
382
cypress/integration/rendering/treemap.spec.ts
Normal file
@@ -0,0 +1,382 @@
|
|||||||
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
|
describe('Treemap Diagram', () => {
|
||||||
|
it('1: should render a basic treemap', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`treemap-beta
|
||||||
|
"Category A"
|
||||||
|
"Item A1": 10
|
||||||
|
"Item A2": 20
|
||||||
|
"Category B"
|
||||||
|
"Item B1": 15
|
||||||
|
"Item B2": 25
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('2: should render a hierarchical treemap', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`treemap-beta
|
||||||
|
"Products"
|
||||||
|
"Electronics"
|
||||||
|
"Phones": 50
|
||||||
|
"Computers": 30
|
||||||
|
"Accessories": 20
|
||||||
|
"Clothing"
|
||||||
|
"Men's"
|
||||||
|
"Shirts": 10
|
||||||
|
"Pants": 15
|
||||||
|
"Women's"
|
||||||
|
"Dresses": 20
|
||||||
|
"Skirts": 10
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('3: should render a treemap with styling using classDef', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`treemap-beta
|
||||||
|
"Section 1"
|
||||||
|
"Leaf 1.1": 12
|
||||||
|
"Section 1.2":::class1
|
||||||
|
"Leaf 1.2.1": 12
|
||||||
|
"Section 2"
|
||||||
|
"Leaf 2.1": 20:::class1
|
||||||
|
"Leaf 2.2": 25
|
||||||
|
"Leaf 2.3": 12
|
||||||
|
|
||||||
|
classDef class1 fill:red,color:blue,stroke:#FFD600;
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('4: should handle long text that wraps', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`treemap-beta
|
||||||
|
"Main Category"
|
||||||
|
"This is a very long item name that should wrap to the next line when rendered in the treemap diagram": 50
|
||||||
|
"Short item": 20
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('5: should render with a forest theme', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
theme: forest
|
||||||
|
---
|
||||||
|
treemap-beta
|
||||||
|
"Category A"
|
||||||
|
"Item A1": 10
|
||||||
|
"Item A2": 20
|
||||||
|
"Category B"
|
||||||
|
"Item B1": 15
|
||||||
|
"Item B2": 25
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('6: should handle multiple levels of nesting', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`treemap-beta
|
||||||
|
"Level 1"
|
||||||
|
"Level 2A"
|
||||||
|
"Level 3A": 10
|
||||||
|
"Level 3B": 15
|
||||||
|
"Level 2B"
|
||||||
|
"Level 3C": 20
|
||||||
|
"Level 3D"
|
||||||
|
"Level 4A": 5
|
||||||
|
"Level 4B": 5
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('7: should handle classDef with multiple styles', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`treemap-beta
|
||||||
|
"Main"
|
||||||
|
"A": 20
|
||||||
|
"B":::important
|
||||||
|
"B1": 10
|
||||||
|
"B2": 15
|
||||||
|
"C": 5:::secondary
|
||||||
|
|
||||||
|
classDef important fill:#f96,stroke:#333,stroke-width:2px;
|
||||||
|
classDef secondary fill:#6cf,stroke:#333,stroke-dasharray:5 5;
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('8: should handle dollar value formatting with thousands separator', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
treemap:
|
||||||
|
valueFormat: "$0,0"
|
||||||
|
---
|
||||||
|
treemap
|
||||||
|
"Budget"
|
||||||
|
"Operations"
|
||||||
|
"Salaries": 700000
|
||||||
|
"Equipment": 200000
|
||||||
|
"Supplies": 100000
|
||||||
|
"Marketing"
|
||||||
|
"Advertising": 400000
|
||||||
|
"Events": 100000
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('8a: should handle percentage formatting', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
treemap:
|
||||||
|
valueFormat: ".1%"
|
||||||
|
---
|
||||||
|
treemap-beta
|
||||||
|
"Market Share"
|
||||||
|
"Company A": 0.35
|
||||||
|
"Company B": 0.25
|
||||||
|
"Company C": 0.15
|
||||||
|
"Others": 0.25
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('8b: should handle decimal formatting', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
treemap:
|
||||||
|
valueFormat: ".2f"
|
||||||
|
---
|
||||||
|
treemap-beta
|
||||||
|
"Metrics"
|
||||||
|
"Conversion Rate": 0.0567
|
||||||
|
"Bounce Rate": 0.6723
|
||||||
|
"Click-through Rate": 0.1289
|
||||||
|
"Engagement": 0.4521
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('8c: should handle dollar sign with decimal places', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
treemap:
|
||||||
|
valueFormat: "$.2f"
|
||||||
|
---
|
||||||
|
treemap-beta
|
||||||
|
"Product Prices"
|
||||||
|
"Basic": 19.99
|
||||||
|
"Standard": 49.99
|
||||||
|
"Premium": 99.99
|
||||||
|
"Enterprise": 199.99
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('8d: should handle dollar sign with thousands separator and decimal places', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
treemap:
|
||||||
|
valueFormat: "$,.2f"
|
||||||
|
---
|
||||||
|
treemap-beta
|
||||||
|
"Revenue"
|
||||||
|
"Q1": 1250345.75
|
||||||
|
"Q2": 1645789.25
|
||||||
|
"Q3": 1845123.50
|
||||||
|
"Q4": 2145678.75
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('8e: should handle simple thousands separator', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
treemap:
|
||||||
|
valueFormat: ","
|
||||||
|
---
|
||||||
|
treemap-beta
|
||||||
|
"User Counts"
|
||||||
|
"Active Users": 1250345
|
||||||
|
"New Signups": 45789
|
||||||
|
"Churned": 12350
|
||||||
|
"Converted": 78975
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('8f: should handle valueFormat set via directive with dollar and thousands separator', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
treemap:
|
||||||
|
valueFormat: "$,.0f"
|
||||||
|
---
|
||||||
|
treemap-beta
|
||||||
|
"Sales by Region"
|
||||||
|
"North": 1234567
|
||||||
|
"South": 7654321
|
||||||
|
"East": 4567890
|
||||||
|
"West": 9876543
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('8g: should handle scientific notation format', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
treemap:
|
||||||
|
valueFormat: ".2e"
|
||||||
|
---
|
||||||
|
treemap-beta
|
||||||
|
"Scientific Values"
|
||||||
|
"Value 1": 1234567
|
||||||
|
"Value 2": 0.0000123
|
||||||
|
"Value 3": 1000000000
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('9: should handle a complex example with multiple features', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
theme: dark
|
||||||
|
treemap:
|
||||||
|
valueFormat: "$0,0"
|
||||||
|
---
|
||||||
|
treemap-beta
|
||||||
|
"Company Budget"
|
||||||
|
"Engineering":::engineering
|
||||||
|
"Frontend": 300000
|
||||||
|
"Backend": 400000
|
||||||
|
"DevOps": 200000
|
||||||
|
"Marketing":::marketing
|
||||||
|
"Digital": 250000
|
||||||
|
"Print": 100000
|
||||||
|
"Events": 150000
|
||||||
|
"Sales":::sales
|
||||||
|
"Direct": 500000
|
||||||
|
"Channel": 300000
|
||||||
|
|
||||||
|
classDef engineering fill:#6b9bc3,stroke:#333;
|
||||||
|
classDef marketing fill:#c36b9b,stroke:#333;
|
||||||
|
classDef sales fill:#c3a66b,stroke:#333;
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('10: should render the example from documentation', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
treemap-beta
|
||||||
|
"Section 1"
|
||||||
|
"Leaf 1.1": 12
|
||||||
|
"Section 1.2":::class1
|
||||||
|
"Leaf 1.2.1": 12
|
||||||
|
"Section 2"
|
||||||
|
"Leaf 2.1": 20:::class1
|
||||||
|
"Leaf 2.2": 25
|
||||||
|
"Leaf 2.3": 12
|
||||||
|
|
||||||
|
classDef class1 fill:red,color:blue,stroke:#FFD600;
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('11: should handle comments', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
treemap-beta
|
||||||
|
%% This is a comment
|
||||||
|
"Category A"
|
||||||
|
"Item A1": 10
|
||||||
|
"Item A2": 20
|
||||||
|
%% Another comment
|
||||||
|
"Category B"
|
||||||
|
"Item B1": 15
|
||||||
|
"Item B2": 25
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
/*
|
||||||
|
it.skip('12: should render a treemap with title', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
treemap-beta
|
||||||
|
title Treemap with Title
|
||||||
|
"Category A"
|
||||||
|
"Item A1": 10
|
||||||
|
"Item A2": 20
|
||||||
|
"Category B"
|
||||||
|
"Item B1": 15
|
||||||
|
"Item B2": 25
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.skip('13: should render a treemap with accessibility attributes', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
treemap-beta
|
||||||
|
accTitle: Accessible Treemap Title
|
||||||
|
accDescr: This is a description of the treemap for accessibility purposes
|
||||||
|
"Category A"
|
||||||
|
"Item A1": 10
|
||||||
|
"Item A2": 20
|
||||||
|
"Category B"
|
||||||
|
"Item B1": 15
|
||||||
|
"Item B2": 25
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.skip('14: should render a treemap with title and accessibility attributes', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
treemap
|
||||||
|
title Treemap with Title and Accessibility
|
||||||
|
accTitle: Accessible Treemap Title
|
||||||
|
accDescr: This is a description of the treemap for accessibility purposes
|
||||||
|
"Category A"
|
||||||
|
"Item A1": 10
|
||||||
|
"Item A2": 20
|
||||||
|
"Category B"
|
||||||
|
"Item B1": 15
|
||||||
|
"Item B2": 25
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
});
|
@@ -1,7 +1,7 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('XY Chart', () => {
|
describe('XY Chart', () => {
|
||||||
it('should render the simplest possible chart', () => {
|
it('should render the simplest possible xy-beta chart', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
xychart-beta
|
xychart-beta
|
||||||
@@ -10,10 +10,19 @@ describe('XY Chart', () => {
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it('should render the simplest possible xy chart', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
xychart
|
||||||
|
line [10, 30, 20]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
it('Should render a complete chart', () => {
|
it('Should render a complete chart', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
xychart-beta
|
xychart
|
||||||
title "Sales Revenue"
|
title "Sales Revenue"
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
@@ -26,7 +35,7 @@ describe('XY Chart', () => {
|
|||||||
it('Should render a chart without title', () => {
|
it('Should render a chart without title', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
xychart-beta
|
xychart
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
||||||
@@ -38,7 +47,7 @@ describe('XY Chart', () => {
|
|||||||
it('y-axis title not required', () => {
|
it('y-axis title not required', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
xychart-beta
|
xychart
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis 4000 --> 11000
|
y-axis 4000 --> 11000
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
||||||
@@ -50,7 +59,7 @@ describe('XY Chart', () => {
|
|||||||
it('Should render a chart without y-axis with different range', () => {
|
it('Should render a chart without y-axis with different range', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
xychart-beta
|
xychart
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 14000, 3200, 9200, 9900, 3400, 6000]
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 14000, 3200, 9200, 9900, 3400, 6000]
|
||||||
line [2000, 7000, 6500, 9200, 9500, 7500, 11000, 10200, 3200, 8500, 7000, 8800]
|
line [2000, 7000, 6500, 9200, 9500, 7500, 11000, 10200, 3200, 8500, 7000, 8800]
|
||||||
@@ -61,7 +70,7 @@ describe('XY Chart', () => {
|
|||||||
it('x axis title not required', () => {
|
it('x axis title not required', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
xychart-beta
|
xychart
|
||||||
x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
bar [5000, 6000, 7500, 8200, 9500, 10500, 14000, 3200, 9200, 9900, 3400, 6000]
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 14000, 3200, 9200, 9900, 3400, 6000]
|
||||||
line [2000, 7000, 6500, 9200, 9500, 7500, 11000, 10200, 3200, 8500, 7000, 8800]
|
line [2000, 7000, 6500, 9200, 9500, 7500, 11000, 10200, 3200, 8500, 7000, 8800]
|
||||||
@@ -72,7 +81,7 @@ describe('XY Chart', () => {
|
|||||||
it('Multiple plots can be rendered', () => {
|
it('Multiple plots can be rendered', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
xychart-beta
|
xychart
|
||||||
line [23, 46, 77, 34]
|
line [23, 46, 77, 34]
|
||||||
line [45, 32, 33, 12]
|
line [45, 32, 33, 12]
|
||||||
bar [87, 54, 99, 85]
|
bar [87, 54, 99, 85]
|
||||||
@@ -86,7 +95,7 @@ describe('XY Chart', () => {
|
|||||||
it('Decimals and negative numbers are supported', () => {
|
it('Decimals and negative numbers are supported', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
xychart-beta
|
xychart
|
||||||
y-axis -2.4 --> 3.5
|
y-axis -2.4 --> 3.5
|
||||||
line [+1.3, .6, 2.4, -.34]
|
line [+1.3, .6, 2.4, -.34]
|
||||||
`,
|
`,
|
||||||
@@ -104,7 +113,7 @@ describe('XY Chart', () => {
|
|||||||
height: 20
|
height: 20
|
||||||
plotReservedSpacePercent: 100
|
plotReservedSpacePercent: 100
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
line [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
line [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
@@ -130,7 +139,7 @@ describe('XY Chart', () => {
|
|||||||
showTick: false
|
showTick: false
|
||||||
showAxisLine: false
|
showAxisLine: false
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
bar [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
bar [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
@@ -140,7 +149,7 @@ describe('XY Chart', () => {
|
|||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
%%{init: {"xyChart": {"width": 1000, "height": 600, "titlePadding": 5, "titleFontSize": 10, "xAxis": {"labelFontSize": "20", "labelPadding": 10, "titleFontSize": 30, "titlePadding": 20, "tickLength": 10, "tickWidth": 5}, "yAxis": {"labelFontSize": "20", "labelPadding": 10, "titleFontSize": 30, "titlePadding": 20, "tickLength": 10, "tickWidth": 5}, "plotBorderWidth": 5, "chartOrientation": "horizontal", "plotReservedSpacePercent": 60 }}}%%
|
%%{init: {"xyChart": {"width": 1000, "height": 600, "titlePadding": 5, "titleFontSize": 10, "xAxis": {"labelFontSize": "20", "labelPadding": 10, "titleFontSize": 30, "titlePadding": 20, "tickLength": 10, "tickWidth": 5}, "yAxis": {"labelFontSize": "20", "labelPadding": 10, "titleFontSize": 30, "titlePadding": 20, "tickLength": 10, "tickWidth": 5}, "plotBorderWidth": 5, "chartOrientation": "horizontal", "plotReservedSpacePercent": 60 }}}%%
|
||||||
xychart-beta
|
xychart
|
||||||
title "Sales Revenue"
|
title "Sales Revenue"
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
@@ -179,8 +188,9 @@ describe('XY Chart', () => {
|
|||||||
axisLineWidth: 5
|
axisLineWidth: 5
|
||||||
chartOrientation: horizontal
|
chartOrientation: horizontal
|
||||||
plotReservedSpacePercent: 60
|
plotReservedSpacePercent: 60
|
||||||
|
showDataLabel: true
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
title "Sales Revenue"
|
title "Sales Revenue"
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
@@ -201,7 +211,7 @@ describe('XY Chart', () => {
|
|||||||
yAxis:
|
yAxis:
|
||||||
showTitle: false
|
showTitle: false
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
title "Sales Revenue"
|
title "Sales Revenue"
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
@@ -222,7 +232,7 @@ describe('XY Chart', () => {
|
|||||||
yAxis:
|
yAxis:
|
||||||
showLabel: false
|
showLabel: false
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
title "Sales Revenue"
|
title "Sales Revenue"
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
@@ -243,7 +253,7 @@ describe('XY Chart', () => {
|
|||||||
yAxis:
|
yAxis:
|
||||||
showTick: false
|
showTick: false
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
title "Sales Revenue"
|
title "Sales Revenue"
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
@@ -264,7 +274,7 @@ describe('XY Chart', () => {
|
|||||||
yAxis:
|
yAxis:
|
||||||
showAxisLine: false
|
showAxisLine: false
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
title "Sales Revenue"
|
title "Sales Revenue"
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
@@ -293,7 +303,7 @@ describe('XY Chart', () => {
|
|||||||
xAxisLineColor: "#87ceeb"
|
xAxisLineColor: "#87ceeb"
|
||||||
plotColorPalette: "#008000, #faba63"
|
plotColorPalette: "#008000, #faba63"
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
title "Sales Revenue"
|
title "Sales Revenue"
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
@@ -306,7 +316,7 @@ describe('XY Chart', () => {
|
|||||||
it('should use the correct distances between data points', () => {
|
it('should use the correct distances between data points', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
xychart-beta
|
xychart
|
||||||
x-axis 0 --> 2
|
x-axis 0 --> 2
|
||||||
line [0, 1, 0, 1]
|
line [0, 1, 0, 1]
|
||||||
bar [1, 0, 1, 0]
|
bar [1, 0, 1, 0]
|
||||||
@@ -315,4 +325,516 @@ describe('XY Chart', () => {
|
|||||||
);
|
);
|
||||||
cy.get('svg');
|
cy.get('svg');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render vertical bar chart with labels', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Sales Revenue"
|
||||||
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render horizontal bar chart with labels', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
chartOrientation: horizontal
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Sales Revenue"
|
||||||
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render vertical bar chart without labels by default', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
xychart
|
||||||
|
title "Sales Revenue"
|
||||||
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render horizontal bar chart without labels by default', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
chartOrientation: horizontal
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Sales Revenue"
|
||||||
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render multiple bar plots vertically with labels correctly', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Multiple Bar Plots"
|
||||||
|
x-axis Categories [A, B, C]
|
||||||
|
y-axis "Values" 0 --> 100
|
||||||
|
bar [10, 50, 90]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render multiple bar plots horizontally with labels correctly', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
chartOrientation: horizontal
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Multiple Bar Plots"
|
||||||
|
x-axis Categories [A, B, C]
|
||||||
|
y-axis "Values" 0 --> 100
|
||||||
|
bar [10, 50, 90]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render a single bar with label for a vertical xy-chart', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Single Bar Chart"
|
||||||
|
x-axis Categories [A]
|
||||||
|
y-axis "Value" 0 --> 100
|
||||||
|
bar [75]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render a single bar with label for a horizontal xy-chart', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
chartOrientation: horizontal
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Single Bar Chart"
|
||||||
|
x-axis Categories [A]
|
||||||
|
y-axis "Value" 0 --> 100
|
||||||
|
bar [75]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render negative and decimal values with correct labels for vertical xy-chart', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Decimal and Negative Values"
|
||||||
|
x-axis Categories [A, B, C]
|
||||||
|
y-axis -10 --> 10
|
||||||
|
bar [ -2.5, 0.75, 5.1 ]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render negative and decimal values with correct labels for horizontal xy-chart', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
chartOrientation: horizontal
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Decimal and Negative Values"
|
||||||
|
x-axis Categories [A, B, C]
|
||||||
|
y-axis -10 --> 10
|
||||||
|
bar [ -2.5, 0.75, 5.1 ]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render data labels within each bar in the vertical xy-chart', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Sales Revenue"
|
||||||
|
x-axis Months [jan,b,c]
|
||||||
|
y-axis "Revenue (in $)" 4000 --> 12000
|
||||||
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 3000, 2000, 500, 2000, 3000, 11000, 5000, 6000]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get('g.bar-plot-0').within(() => {
|
||||||
|
cy.get('rect').each(($rect, index) => {
|
||||||
|
// Extract bar properties
|
||||||
|
const barProps = {
|
||||||
|
x: parseFloat($rect.attr('x')),
|
||||||
|
y: parseFloat($rect.attr('y')),
|
||||||
|
width: parseFloat($rect.attr('width')),
|
||||||
|
height: parseFloat($rect.attr('height')),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Get the text element corresponding to this bar by index.
|
||||||
|
cy.get('text')
|
||||||
|
.eq(index)
|
||||||
|
.then(($text) => {
|
||||||
|
const bbox = $text[0].getBBox();
|
||||||
|
const textProps = {
|
||||||
|
x: bbox.x,
|
||||||
|
y: bbox.y,
|
||||||
|
width: bbox.width,
|
||||||
|
height: bbox.height,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Verify that the text label is positioned within the boundaries of the bar.
|
||||||
|
expect(textProps.x).to.be.greaterThan(barProps.x);
|
||||||
|
expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
|
||||||
|
|
||||||
|
// Check horizontal alignment (within tolerance)
|
||||||
|
expect(textProps.x + textProps.width / 2).to.be.closeTo(
|
||||||
|
barProps.x + barProps.width / 2,
|
||||||
|
5
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(textProps.y).to.be.greaterThan(barProps.y);
|
||||||
|
expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render data labels within each bar in the horizontal xy-chart', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
chartOrientation: horizontal
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Sales Revenue"
|
||||||
|
x-axis Months [jan,b,c]
|
||||||
|
y-axis "Revenue (in $)" 4000 --> 12000
|
||||||
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 3000, 2000, 500, 2000, 3000, 11000, 5000, 6000]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get('g.bar-plot-0').within(() => {
|
||||||
|
cy.get('rect').each(($rect, index) => {
|
||||||
|
// Extract bar properties
|
||||||
|
const barProps = {
|
||||||
|
x: parseFloat($rect.attr('x')),
|
||||||
|
y: parseFloat($rect.attr('y')),
|
||||||
|
width: parseFloat($rect.attr('width')),
|
||||||
|
height: parseFloat($rect.attr('height')),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Get the text element corresponding to this bar by index.
|
||||||
|
cy.get('text')
|
||||||
|
.eq(index)
|
||||||
|
.then(($text) => {
|
||||||
|
const bbox = $text[0].getBBox();
|
||||||
|
const textProps = {
|
||||||
|
x: bbox.x,
|
||||||
|
y: bbox.y,
|
||||||
|
width: bbox.width,
|
||||||
|
height: bbox.height,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Verify that the text label is positioned within the boundaries of the bar.
|
||||||
|
expect(textProps.x).to.be.greaterThan(barProps.x);
|
||||||
|
expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
|
||||||
|
|
||||||
|
expect(textProps.y).to.be.greaterThan(barProps.y);
|
||||||
|
expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
|
||||||
|
expect(textProps.y + textProps.height / 2).to.be.closeTo(
|
||||||
|
barProps.y + barProps.height / 2,
|
||||||
|
5
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render data labels within each bar in the vertical xy-chart with a lot of bars of different sizes', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Sales Revenue"
|
||||||
|
x-axis Months [jan,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s]
|
||||||
|
y-axis "Revenue (in $)" 4000 --> 12000
|
||||||
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 8000, 10000, 5000, 7600, 4999,11000 ,5000,6000]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get('g.bar-plot-0').within(() => {
|
||||||
|
cy.get('rect').each(($rect, index) => {
|
||||||
|
// Extract bar properties
|
||||||
|
const barProps = {
|
||||||
|
x: parseFloat($rect.attr('x')),
|
||||||
|
y: parseFloat($rect.attr('y')),
|
||||||
|
width: parseFloat($rect.attr('width')),
|
||||||
|
height: parseFloat($rect.attr('height')),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Get the text element corresponding to this bar by index.
|
||||||
|
cy.get('text')
|
||||||
|
.eq(index)
|
||||||
|
.then(($text) => {
|
||||||
|
const bbox = $text[0].getBBox();
|
||||||
|
const textProps = {
|
||||||
|
x: bbox.x,
|
||||||
|
y: bbox.y,
|
||||||
|
width: bbox.width,
|
||||||
|
height: bbox.height,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Verify that the text label is positioned within the boundaries of the bar.
|
||||||
|
expect(textProps.x).to.be.greaterThan(barProps.x);
|
||||||
|
expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
|
||||||
|
|
||||||
|
// Check horizontal alignment (within tolerance)
|
||||||
|
expect(textProps.x + textProps.width / 2).to.be.closeTo(
|
||||||
|
barProps.x + barProps.width / 2,
|
||||||
|
5
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(textProps.y).to.be.greaterThan(barProps.y);
|
||||||
|
expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render data labels within each bar in the horizontal xy-chart with a lot of bars of different sizes', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
chartOrientation: horizontal
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Sales Revenue"
|
||||||
|
x-axis Months [jan,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s]
|
||||||
|
y-axis "Revenue (in $)" 4000 --> 12000
|
||||||
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 8000, 10000, 5000, 7600, 4999,11000 ,5000,6000]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get('g.bar-plot-0').within(() => {
|
||||||
|
cy.get('rect').each(($rect, index) => {
|
||||||
|
// Extract bar properties
|
||||||
|
const barProps = {
|
||||||
|
x: parseFloat($rect.attr('x')),
|
||||||
|
y: parseFloat($rect.attr('y')),
|
||||||
|
width: parseFloat($rect.attr('width')),
|
||||||
|
height: parseFloat($rect.attr('height')),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Get the text element corresponding to this bar by index.
|
||||||
|
cy.get('text')
|
||||||
|
.eq(index)
|
||||||
|
.then(($text) => {
|
||||||
|
const bbox = $text[0].getBBox();
|
||||||
|
const textProps = {
|
||||||
|
x: bbox.x,
|
||||||
|
y: bbox.y,
|
||||||
|
width: bbox.width,
|
||||||
|
height: bbox.height,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Verify that the text label is positioned within the boundaries of the bar.
|
||||||
|
expect(textProps.x).to.be.greaterThan(barProps.x);
|
||||||
|
expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
|
||||||
|
|
||||||
|
expect(textProps.y).to.be.greaterThan(barProps.y);
|
||||||
|
expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
|
||||||
|
expect(textProps.y + textProps.height / 2).to.be.closeTo(
|
||||||
|
barProps.y + barProps.height / 2,
|
||||||
|
5
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render data labels correctly for a bar in the vertical xy-chart', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Sales Revenue"
|
||||||
|
x-axis Months [jan]
|
||||||
|
y-axis "Revenue (in $)" 3000 --> 12000
|
||||||
|
bar [4000]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get('g.bar-plot-0').within(() => {
|
||||||
|
cy.get('rect').each(($rect, index) => {
|
||||||
|
// Extract bar properties
|
||||||
|
const barProps = {
|
||||||
|
x: parseFloat($rect.attr('x')),
|
||||||
|
y: parseFloat($rect.attr('y')),
|
||||||
|
width: parseFloat($rect.attr('width')),
|
||||||
|
height: parseFloat($rect.attr('height')),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Get the text element corresponding to this bar by index.
|
||||||
|
cy.get('text')
|
||||||
|
.eq(index)
|
||||||
|
.then(($text) => {
|
||||||
|
const bbox = $text[0].getBBox();
|
||||||
|
const textProps = {
|
||||||
|
x: bbox.x,
|
||||||
|
y: bbox.y,
|
||||||
|
width: bbox.width,
|
||||||
|
height: bbox.height,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Verify that the text label is positioned within the boundaries of the bar.
|
||||||
|
expect(textProps.x).to.be.greaterThan(barProps.x);
|
||||||
|
expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
|
||||||
|
|
||||||
|
// Check horizontal alignment (within tolerance)
|
||||||
|
expect(textProps.x + textProps.width / 2).to.be.closeTo(
|
||||||
|
barProps.x + barProps.width / 2,
|
||||||
|
5
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(textProps.y).to.be.greaterThan(barProps.y);
|
||||||
|
expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render data labels correctly for a bar in the horizontal xy-chart', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
xyChart:
|
||||||
|
showDataLabel: true
|
||||||
|
chartOrientation: horizontal
|
||||||
|
---
|
||||||
|
xychart
|
||||||
|
title "Sales Revenue"
|
||||||
|
x-axis Months [jan]
|
||||||
|
y-axis "Revenue (in $)" 3000 --> 12000
|
||||||
|
bar [4000]
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get('g.bar-plot-0').within(() => {
|
||||||
|
cy.get('rect').each(($rect, index) => {
|
||||||
|
// Extract bar properties
|
||||||
|
const barProps = {
|
||||||
|
x: parseFloat($rect.attr('x')),
|
||||||
|
y: parseFloat($rect.attr('y')),
|
||||||
|
width: parseFloat($rect.attr('width')),
|
||||||
|
height: parseFloat($rect.attr('height')),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Get the text element corresponding to this bar by index.
|
||||||
|
cy.get('text')
|
||||||
|
.eq(index)
|
||||||
|
.then(($text) => {
|
||||||
|
const bbox = $text[0].getBBox();
|
||||||
|
const textProps = {
|
||||||
|
x: bbox.x,
|
||||||
|
y: bbox.y,
|
||||||
|
width: bbox.width,
|
||||||
|
height: bbox.height,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Verify that the text label is positioned within the boundaries of the bar.
|
||||||
|
expect(textProps.x).to.be.greaterThan(barProps.x);
|
||||||
|
expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
|
||||||
|
|
||||||
|
expect(textProps.y).to.be.greaterThan(barProps.y);
|
||||||
|
expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
|
||||||
|
expect(textProps.y + textProps.height / 2).to.be.closeTo(
|
||||||
|
barProps.y + barProps.height / 2,
|
||||||
|
5
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -60,7 +60,7 @@
|
|||||||
<pre id="diagram" class="mermaid2">
|
<pre id="diagram" class="mermaid2">
|
||||||
timeline
|
timeline
|
||||||
title My day
|
title My day
|
||||||
section section with no tasks
|
section Section with no tasks
|
||||||
section Go to work at the dog office
|
section Go to work at the dog office
|
||||||
1930 : first step : second step is a long step
|
1930 : first step : second step is a long step
|
||||||
: third step
|
: third step
|
||||||
@@ -70,18 +70,18 @@
|
|||||||
1960 : India fights poverty, looses war to China and gets nuclear weapons from USA and USSR
|
1960 : India fights poverty, looses war to China and gets nuclear weapons from USA and USSR
|
||||||
1970 : Green Revolution comes to india
|
1970 : Green Revolution comes to india
|
||||||
section Another section with no tasks
|
section Another section with no tasks
|
||||||
I am a big big big tasks
|
I am a very, very big task
|
||||||
I am not so big tasks
|
I am not so big task
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
timeline
|
timeline
|
||||||
title MermaidChart 2023 Timeline
|
title MermaidChart 2023 Timeline
|
||||||
section 2023 Q1 <br> Release Personal Tier
|
section 2023 Q1 <br> Release Personal Tier
|
||||||
Buttet 1 : sub-point 1a : sub-point 1b
|
Bullet 1 : sub-point 1a : sub-point 1b
|
||||||
: sub-point 1c
|
: sub-point 1c
|
||||||
Bullet 2 : sub-point 2a : sub-point 2b
|
Bullet 2 : sub-point 2a : sub-point 2b
|
||||||
section 2023 Q2 <br> Release XYZ Tier
|
section 2023 Q2 <br> Release XYZ Tier
|
||||||
Buttet 3 : sub-point <br> 3a : sub-point 3b
|
Bullet 3 : sub-point <br> 3a : sub-point 3b
|
||||||
: sub-point 3c
|
: sub-point 3c
|
||||||
Bullet 4 : sub-point 4a : sub-point 4b
|
Bullet 4 : sub-point 4a : sub-point 4b
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@
|
|||||||
section Stone Age
|
section Stone Age
|
||||||
7600 BC : Britain's oldest known house was built in Orkney, Scotland
|
7600 BC : Britain's oldest known house was built in Orkney, Scotland
|
||||||
6000 BC : Sea levels rise and Britain becomes an island. The people who live here are hunter-gatherers.
|
6000 BC : Sea levels rise and Britain becomes an island. The people who live here are hunter-gatherers.
|
||||||
section Broze Age
|
section Bronze Age
|
||||||
2300 BC : People arrive from Europe and settle in Britain. They bring farming and metalworking.
|
2300 BC : People arrive from Europe and settle in Britain. They bring farming and metalworking.
|
||||||
: New styles of pottery and ways of burying the dead appear.
|
: New styles of pottery and ways of burying the dead appear.
|
||||||
2200 BC : The last major building works are completed at Stonehenge. People now bury their dead in stone circles.
|
2200 BC : The last major building works are completed at Stonehenge. People now bury their dead in stone circles.
|
||||||
@@ -106,7 +106,7 @@
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google : Pixar
|
2004 : Facebook : Google : Pixar
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
2007 : Tumblr
|
2007 : Tumblr
|
||||||
2008s : Instagram
|
2008s : Instagram
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google : Pixar
|
2004 : Facebook : Google : Pixar
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
2007 : Tumblr
|
2007 : Tumblr
|
||||||
2008s : Instagram
|
2008s : Instagram
|
||||||
@@ -139,7 +139,7 @@
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google
|
2004 : Facebook : Google
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
2007 : Tumblr
|
2007 : Tumblr
|
||||||
2008 : Instagram
|
2008 : Instagram
|
||||||
@@ -152,7 +152,7 @@
|
|||||||
title History of Social Media Platform
|
title History of Social Media Platform
|
||||||
2002 : LinkedIn
|
2002 : LinkedIn
|
||||||
2004 : Facebook : Google
|
2004 : Facebook : Google
|
||||||
2005 : Youtube
|
2005 : YouTube
|
||||||
2006 : Twitter
|
2006 : Twitter
|
||||||
2007 : Tumblr
|
2007 : Tumblr
|
||||||
2008s : Instagram
|
2008s : Instagram
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
+String owner
|
+String owner
|
||||||
+BigDecimal balance
|
+BigDecimal balance
|
||||||
+deposit(amount) bool
|
+deposit(amount) bool
|
||||||
+withdrawl(amount) int
|
+withdrawal(amount) int
|
||||||
}
|
}
|
||||||
cssClass "BankAccount" customCss
|
cssClass "BankAccount" customCss
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ classE o-- classF : aggregation
|
|||||||
+String owner
|
+String owner
|
||||||
+BigDecimal balance
|
+BigDecimal balance
|
||||||
+deposit(amount) bool
|
+deposit(amount) bool
|
||||||
+withdrawl(amount) int
|
+withdrawal(amount) int
|
||||||
}
|
}
|
||||||
Class01~T~ <|-- AveryLongClass : Cool
|
Class01~T~ <|-- AveryLongClass : Cool
|
||||||
Class03~T~ *-- Class04~T~
|
Class03~T~ *-- Class04~T~
|
||||||
|
@@ -77,7 +77,7 @@
|
|||||||
|
|
||||||
document.getElementsByTagName('body')[0].appendChild(div);
|
document.getElementsByTagName('body')[0].appendChild(div);
|
||||||
}
|
}
|
||||||
mermaid.initialize({ startOnLoad: true, securityLevel: 'strct', logLevel: 1 });
|
mermaid.initialize({ startOnLoad: true, securityLevel: 'strict_', logLevel: 1 });
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@@ -31,7 +31,7 @@
|
|||||||
flowchart BT subgraph S1 sub1 -->sub2 end subgraph S2 sub4 end S1 --> S2 sub1 --> sub4
|
flowchart BT subgraph S1 sub1 -->sub2 end subgraph S2 sub4 end S1 --> S2 sub1 --> sub4
|
||||||
</div>
|
</div>
|
||||||
<div class="mermaid2" style="width: 50%; height: 200px">
|
<div class="mermaid2" style="width: 50%; height: 200px">
|
||||||
sequenceDiagram Alice->>Bob:Extremely utterly long line of longness which had preivously
|
sequenceDiagram Alice->>Bob:Extremely utterly long line of longness which had previously
|
||||||
overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short
|
overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short
|
||||||
though
|
though
|
||||||
</div>
|
</div>
|
||||||
@@ -61,9 +61,9 @@
|
|||||||
#quot;elit#quot;."}}
|
#quot;elit#quot;."}}
|
||||||
</div>
|
</div>
|
||||||
<div class="mermaid2" style="width: 50%; height: 50%">
|
<div class="mermaid2" style="width: 50%; height: 50%">
|
||||||
flowchart TB internet nat routeur lb1 lb2 compute1 compute2 subgraph project routeur nat
|
flowchart TB internet nat router lb1 lb2 compute1 compute2 subgraph project router nat
|
||||||
subgraph subnet1 compute1 lb1 end subgraph subnet2 compute2 lb2 end end internet --> routeur
|
subgraph subnet1 compute1 lb1 end subgraph subnet2 compute2 lb2 end end internet --> router
|
||||||
routeur --> subnet1 & subnet2 subnet1 & subnet2 --> nat --> internet
|
router --> subnet1 & subnet2 subnet1 & subnet2 --> nat --> internet
|
||||||
</div>
|
</div>
|
||||||
<div class="mermaid2" style="width: 50%; height: 50%">
|
<div class="mermaid2" style="width: 50%; height: 50%">
|
||||||
flowchart TD subgraph one[One] subgraph sub_one[Sub One] _sub_one end end subgraph two[Two]
|
flowchart TD subgraph one[One] subgraph sub_one[Sub One] _sub_one end end subgraph two[Two]
|
||||||
|
35
cypress/platform/darshan.html
Normal file
35
cypress/platform/darshan.html
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<title>Mermaid Quick Test Page</title>
|
||||||
|
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
|
||||||
|
<style>
|
||||||
|
div.mermaid {
|
||||||
|
font-family: 'Courier New', Courier, monospace !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1>Pie chart demos</h1>
|
||||||
|
<pre class="mermaid">
|
||||||
|
pie title Default text position: Animal adoption
|
||||||
|
accTitle: simple pie char demo
|
||||||
|
accDescr: pie chart with 3 sections: dogs, cats, rats. Most are dogs.
|
||||||
|
"dogs" : -60.67
|
||||||
|
"rats" : 40.12
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<script type="module">
|
||||||
|
import mermaid from '/mermaid.esm.mjs';
|
||||||
|
mermaid.initialize({
|
||||||
|
theme: 'forest',
|
||||||
|
logLevel: 3,
|
||||||
|
securityLevel: 'loose',
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -7,7 +7,7 @@
|
|||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
/>
|
/>
|
||||||
<style>
|
<style>
|
||||||
svg {
|
svg:not(svg svg) {
|
||||||
border: 2px solid darkred;
|
border: 2px solid darkred;
|
||||||
}
|
}
|
||||||
.exClass2 > rect,
|
.exClass2 > rect,
|
||||||
|
@@ -38,7 +38,7 @@
|
|||||||
+String owner
|
+String owner
|
||||||
+BigDecimal balance
|
+BigDecimal balance
|
||||||
+deposit(amount) bool
|
+deposit(amount) bool
|
||||||
+withdrawl(amount) int
|
+withdrawal(amount) int
|
||||||
}
|
}
|
||||||
cssClass "BankAccount" customCss
|
cssClass "BankAccount" customCss
|
||||||
</pre>
|
</pre>
|
||||||
|
@@ -32,8 +32,26 @@
|
|||||||
href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap"
|
href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap"
|
||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
/>
|
/>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Recursive:wght@300..1000&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
.recursive-mermaid {
|
||||||
|
font-family: 'Recursive', sans-serif;
|
||||||
|
font-optical-sizing: auto;
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: normal;
|
||||||
|
font-variation-settings:
|
||||||
|
'slnt' 0,
|
||||||
|
'CASL' 0,
|
||||||
|
'CRSV' 0.5,
|
||||||
|
'MONO' 0;
|
||||||
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
/* background: rgb(221, 208, 208); */
|
/* background: rgb(221, 208, 208); */
|
||||||
/* background: #333; */
|
/* background: #333; */
|
||||||
@@ -45,7 +63,9 @@
|
|||||||
h1 {
|
h1 {
|
||||||
color: grey;
|
color: grey;
|
||||||
}
|
}
|
||||||
|
.mermaid {
|
||||||
|
border: 1px solid red;
|
||||||
|
}
|
||||||
.mermaid2 {
|
.mermaid2 {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
@@ -83,6 +103,11 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.class2 {
|
||||||
|
fill: red;
|
||||||
|
fill-opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* tspan {
|
/* tspan {
|
||||||
font-size: 6px !important;
|
font-size: 6px !important;
|
||||||
} */
|
} */
|
||||||
@@ -106,19 +131,79 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
<pre id="diagram4" class="mermaid">
|
<pre id="diagram4" class="mermaid">
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
layout: elk
|
||||||
|
elk:
|
||||||
|
mergeEdges: false
|
||||||
|
forceNodeModelOrder: false
|
||||||
|
considerModelOrder: NONE
|
||||||
|
|
||||||
|
---
|
||||||
|
flowchart TB
|
||||||
|
a --> a1 & a2 & a3 & a4
|
||||||
|
b --> b1 & b2
|
||||||
|
b2 --> b3
|
||||||
|
b1 --> b4</pre
|
||||||
|
>
|
||||||
|
<pre id="diagram4" class="mermaid">
|
||||||
|
treemap
|
||||||
|
"Section 1"
|
||||||
|
"Leaf 1.1": 12
|
||||||
|
"Section 1.2":::class1
|
||||||
|
"Leaf 1.2.1": 12
|
||||||
|
"Section 2"
|
||||||
|
"Leaf 2.1": 20:::class1
|
||||||
|
"Leaf 2.2": 25
|
||||||
|
"Leaf 2.3": 12
|
||||||
|
|
||||||
|
classDef class1 fill:red,color:blue,stroke:#FFD600;
|
||||||
|
|
||||||
|
|
||||||
|
</pre
|
||||||
|
>
|
||||||
|
<pre id="diagram4" class="mermaid2">
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
treemap:
|
||||||
|
valueFormat: '$0,0'
|
||||||
|
---
|
||||||
|
treemap
|
||||||
|
"Budget"
|
||||||
|
"Operations"
|
||||||
|
"Salaries": 7000
|
||||||
|
"Equipment": 2000
|
||||||
|
"Supplies": 1000
|
||||||
|
"Marketing"
|
||||||
|
"Advertising": 4000
|
||||||
|
"Events": 1000
|
||||||
|
|
||||||
|
</pre
|
||||||
|
>
|
||||||
|
<pre id="diagram4" class="mermaid">
|
||||||
|
treemap
|
||||||
|
title Accessible Treemap Title
|
||||||
|
"Category A"
|
||||||
|
"Item A1": 10
|
||||||
|
"Item A2": 20
|
||||||
|
"Category B"
|
||||||
|
"Item B1": 15
|
||||||
|
"Item B2": 25
|
||||||
|
</pre>
|
||||||
|
<pre id="diagram4" class="mermaid2">
|
||||||
flowchart LR
|
flowchart LR
|
||||||
AB["apa@apa@"] --> B(("`apa@apa`"))
|
AB["apa@apa@"] --> B(("`apa@apa`"))
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram4" class="mermaid">
|
<pre id="diagram4" class="mermaid2">
|
||||||
flowchart
|
flowchart
|
||||||
D(("for D"))
|
D(("for D"))
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram4" class="mermaid">
|
<pre id="diagram4" class="mermaid2">
|
||||||
flowchart LR
|
flowchart LR
|
||||||
A e1@==> B
|
A e1@==> B
|
||||||
e1@{ animate: true}
|
e1@{ animate: true}
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram4" class="mermaid">
|
<pre id="diagram4" class="mermaid2">
|
||||||
flowchart LR
|
flowchart LR
|
||||||
A e1@--> B
|
A e1@--> B
|
||||||
classDef animate stroke-width:2,stroke-dasharray:10\,8,stroke-dashoffset:-180,animation: edge-animation-frame 6s linear infinite, stroke-linecap: round
|
classDef animate stroke-width:2,stroke-dasharray:10\,8,stroke-dashoffset:-180,animation: edge-animation-frame 6s linear infinite, stroke-linecap: round
|
||||||
@@ -386,7 +471,7 @@ kanban
|
|||||||
[Create Documentation]
|
[Create Documentation]
|
||||||
docs[Create Blog about the new diagram]
|
docs[Create Blog about the new diagram]
|
||||||
id7[In progress]
|
id7[In progress]
|
||||||
id6[Create renderer so that it works in all cases. We also add som extra text here for testing purposes. And some more just for the extra flare.]
|
id6[Create renderer so that it works in all cases. We also add some extra text here for testing purposes. And some more just for the extra flare.]
|
||||||
id9[Ready for deploy]
|
id9[Ready for deploy]
|
||||||
id8[Design grammar]@{ assigned: 'knsv' }
|
id8[Design grammar]@{ assigned: 'knsv' }
|
||||||
id10[Ready for test]
|
id10[Ready for test]
|
||||||
@@ -438,7 +523,7 @@ kanban
|
|||||||
alert('It worked');
|
alert('It worked');
|
||||||
}
|
}
|
||||||
await mermaid.initialize({
|
await mermaid.initialize({
|
||||||
// theme: 'base',
|
// theme: 'forest',
|
||||||
// theme: 'default',
|
// theme: 'default',
|
||||||
// theme: 'forest',
|
// theme: 'forest',
|
||||||
// handDrawnSeed: 12,
|
// handDrawnSeed: 12,
|
||||||
@@ -449,11 +534,7 @@ kanban
|
|||||||
// layout: 'fixed',
|
// layout: 'fixed',
|
||||||
// htmlLabels: false,
|
// htmlLabels: false,
|
||||||
flowchart: { titleTopMargin: 10 },
|
flowchart: { titleTopMargin: 10 },
|
||||||
|
fontFamily: "'Recursive', sans-serif",
|
||||||
// fontFamily: 'Caveat',
|
|
||||||
// fontFamily: 'Kalam',
|
|
||||||
// fontFamily: 'courier',
|
|
||||||
fontFamily: 'arial',
|
|
||||||
sequence: {
|
sequence: {
|
||||||
actorFontFamily: 'courier',
|
actorFontFamily: 'courier',
|
||||||
noteFontFamily: 'courier',
|
noteFontFamily: 'courier',
|
||||||
|
@@ -41,10 +41,6 @@ graph TB
|
|||||||
const { svg } = await mermaid.render('d22', value);
|
const { svg } = await mermaid.render('d22', value);
|
||||||
console.log(svg);
|
console.log(svg);
|
||||||
el.innerHTML = svg;
|
el.innerHTML = svg;
|
||||||
// mermaid.test1('first_slow', 1200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('second_fast', 200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('third_fast', 200).then((r) => console.info(r));
|
|
||||||
// mermaid.test1('forth_slow', 1200).then((r) => console.info(r));
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@@ -14,12 +14,28 @@ function markRendered() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function loadFontAwesomeCSS() {
|
||||||
|
const link = document.createElement('link');
|
||||||
|
link.rel = 'stylesheet';
|
||||||
|
link.href = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css';
|
||||||
|
|
||||||
|
document.head.appendChild(link);
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
link.onload = resolve;
|
||||||
|
link.onerror = () => reject(new Error('Failed to load FontAwesome'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ##contentLoaded Callback function that is called when page is loaded. This functions fetches
|
* ##contentLoaded Callback function that is called when page is loaded. This functions fetches
|
||||||
* configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the
|
* configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the
|
||||||
* page.
|
* page.
|
||||||
*/
|
*/
|
||||||
const contentLoaded = async function () {
|
const contentLoaded = async function () {
|
||||||
|
await loadFontAwesomeCSS();
|
||||||
|
await Promise.all(Array.from(document.fonts, (font) => font.load()));
|
||||||
|
|
||||||
let pos = document.location.href.indexOf('?graph=');
|
let pos = document.location.href.indexOf('?graph=');
|
||||||
if (pos > 0) {
|
if (pos > 0) {
|
||||||
pos = pos + 7;
|
pos = pos + 7;
|
||||||
@@ -50,8 +66,13 @@ const contentLoaded = async function () {
|
|||||||
|
|
||||||
mermaid.registerLayoutLoaders(layouts);
|
mermaid.registerLayoutLoaders(layouts);
|
||||||
mermaid.initialize(graphObj.mermaid);
|
mermaid.initialize(graphObj.mermaid);
|
||||||
|
/**
|
||||||
|
* CC-BY-4.0
|
||||||
|
* Copyright (c) Fonticons, Inc. - https://fontawesome.com/license/free
|
||||||
|
* https://fontawesome.com/icons/bell?f=classic&s=regular
|
||||||
|
*/
|
||||||
const staticBellIconPack = {
|
const staticBellIconPack = {
|
||||||
prefix: 'fa6-regular',
|
prefix: 'fa',
|
||||||
icons: {
|
icons: {
|
||||||
bell: {
|
bell: {
|
||||||
body: '<path fill="currentColor" d="M224 0c-17.7 0-32 14.3-32 32v19.2C119 66 64 130.6 64 208v25.4c0 45.4-15.5 89.5-43.8 124.9L5.3 377c-5.8 7.2-6.9 17.1-2.9 25.4S14.8 416 24 416h400c9.2 0 17.6-5.3 21.6-13.6s2.9-18.2-2.9-25.4l-14.9-18.6c-28.3-35.5-43.8-79.6-43.8-125V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32m0 96c61.9 0 112 50.1 112 112v25.4c0 47.9 13.9 94.6 39.7 134.6H72.3c25.8-40 39.7-86.7 39.7-134.6V208c0-61.9 50.1-112 112-112m64 352H160c0 17 6.7 33.3 18.7 45.3S207 512 224 512s33.3-6.7 45.3-18.7S288 465 288 448"/>',
|
body: '<path fill="currentColor" d="M224 0c-17.7 0-32 14.3-32 32v19.2C119 66 64 130.6 64 208v25.4c0 45.4-15.5 89.5-43.8 124.9L5.3 377c-5.8 7.2-6.9 17.1-2.9 25.4S14.8 416 24 416h400c9.2 0 17.6-5.3 21.6-13.6s2.9-18.2-2.9-25.4l-14.9-18.6c-28.3-35.5-43.8-79.6-43.8-125V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32m0 96c61.9 0 112 50.1 112 112v25.4c0 47.9 13.9 94.6 39.7 134.6H72.3c25.8-40 39.7-86.7 39.7-134.6V208c0-61.9 50.1-112 112-112m64 352H160c0 17 6.7 33.3 18.7 45.3S207 512 224 512s33.3-6.7 45.3-18.7S288 465 288 448"/>',
|
||||||
@@ -161,7 +182,7 @@ const contentLoadedApi = async function () {
|
|||||||
for (let i = 0; i < numCodes; i++) {
|
for (let i = 0; i < numCodes; i++) {
|
||||||
const { svg, bindFunctions } = await mermaid.render('newid' + i, graphObj.code[i], divs[i]);
|
const { svg, bindFunctions } = await mermaid.render('newid' + i, graphObj.code[i], divs[i]);
|
||||||
div.innerHTML = svg;
|
div.innerHTML = svg;
|
||||||
bindFunctions(div);
|
bindFunctions?.(div);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const div = document.createElement('div');
|
const div = document.createElement('div');
|
||||||
@@ -173,7 +194,7 @@ const contentLoadedApi = async function () {
|
|||||||
const { svg, bindFunctions } = await mermaid.render('newid', graphObj.code, div);
|
const { svg, bindFunctions } = await mermaid.render('newid', graphObj.code, div);
|
||||||
div.innerHTML = svg;
|
div.innerHTML = svg;
|
||||||
console.log(div.innerHTML);
|
console.log(div.innerHTML);
|
||||||
bindFunctions(div);
|
bindFunctions?.(div);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -105,7 +105,7 @@
|
|||||||
let diagram = 'graph LR\n';
|
let diagram = 'graph LR\n';
|
||||||
diagram += " B(<a href='<";
|
diagram += " B(<a href='<";
|
||||||
diagram += 'script></';
|
diagram += 'script></';
|
||||||
diagram += "script>Javascript:xssAttack`1`'>Click)";
|
diagram += "script>JavaScript:xssAttack`1`'>Click)";
|
||||||
// diagram += "script\u003aalert\u0028document.domain\u0029\` src=x>\"\);\n";
|
// diagram += "script\u003aalert\u0028document.domain\u0029\` src=x>\"\);\n";
|
||||||
console.log(diagram);
|
console.log(diagram);
|
||||||
// document.querySelector('#diagram').innerHTML = diagram;
|
// document.querySelector('#diagram').innerHTML = diagram;
|
||||||
|
@@ -50,7 +50,7 @@
|
|||||||
setPoints(List~int~ points)
|
setPoints(List~int~ points)
|
||||||
getPoints() List~int~
|
getPoints() List~int~
|
||||||
}
|
}
|
||||||
|
|
||||||
Square : -List~string~ messages
|
Square : -List~string~ messages
|
||||||
Square : +setMessages(List~string~ messages)
|
Square : +setMessages(List~string~ messages)
|
||||||
Square : +getMessages() List~string~
|
Square : +getMessages() List~string~
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
---
|
---
|
||||||
classDiagram
|
classDiagram
|
||||||
class Duck {
|
class Duck {
|
||||||
|
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
@@ -127,8 +127,8 @@
|
|||||||
-attribute:type
|
-attribute:type
|
||||||
- attribute : type
|
- attribute : type
|
||||||
test
|
test
|
||||||
|
|
||||||
+ GetAttribute() type
|
+ GetAttribute() type
|
||||||
+ GetAttribute() type
|
+ GetAttribute() type
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
@@ -449,7 +449,7 @@
|
|||||||
---
|
---
|
||||||
config:
|
config:
|
||||||
theme: forest
|
theme: forest
|
||||||
look: handDrawns
|
look: handDrawn
|
||||||
layout: elk
|
layout: elk
|
||||||
---
|
---
|
||||||
classDiagram
|
classDiagram
|
||||||
|
@@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
CAR:::someclass
|
CAR:::someclass
|
||||||
PERSON:::anotherclass,someclass
|
PERSON:::anotherclass,someclass
|
||||||
|
|
||||||
classDef someclass fill:#f96
|
classDef someclass fill:#f96
|
||||||
classDef anotherclass color:blue
|
classDef anotherclass color:blue
|
||||||
</pre>
|
</pre>
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
erDiagram
|
erDiagram
|
||||||
CAR ||--o{ NAMED-DRIVER : allows
|
CAR ||--o{ NAMED-DRIVER : allows
|
||||||
CAR {
|
CAR {
|
||||||
test test PK "comment"
|
text text PK "comment"
|
||||||
string make
|
string make
|
||||||
string model
|
string model
|
||||||
string[] parts
|
string[] parts
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
string carRegistrationNumber PK, FK
|
string carRegistrationNumber PK, FK
|
||||||
string driverLicence PK, FK
|
string driverLicence PK, FK
|
||||||
}
|
}
|
||||||
MANUFACTURER only one to zero or more CAR : makes
|
MANUFACTURER only one to zero or more CAR : makes
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="test">
|
<div class="test">
|
||||||
@@ -129,7 +129,7 @@
|
|||||||
string email
|
string email
|
||||||
}
|
}
|
||||||
p ||--o| a : has
|
p ||--o| a : has
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="test">
|
<div class="test">
|
||||||
|
@@ -2,151 +2,219 @@
|
|||||||
"durations": [
|
"durations": [
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/configuration.spec.js",
|
"spec": "cypress/integration/other/configuration.spec.js",
|
||||||
"duration": 4989
|
"duration": 6297
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/external-diagrams.spec.js",
|
"spec": "cypress/integration/other/external-diagrams.spec.js",
|
||||||
"duration": 1382
|
"duration": 2187
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/ghsa.spec.js",
|
"spec": "cypress/integration/other/ghsa.spec.js",
|
||||||
"duration": 3178
|
"duration": 3509
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/iife.spec.js",
|
"spec": "cypress/integration/other/iife.spec.js",
|
||||||
"duration": 1372
|
"duration": 2218
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/interaction.spec.js",
|
"spec": "cypress/integration/other/interaction.spec.js",
|
||||||
"duration": 8998
|
"duration": 12104
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/rerender.spec.js",
|
"spec": "cypress/integration/other/rerender.spec.js",
|
||||||
"duration": 1249
|
"duration": 2151
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/xss.spec.js",
|
"spec": "cypress/integration/other/xss.spec.js",
|
||||||
"duration": 25664
|
"duration": 33064
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/appli.spec.js",
|
"spec": "cypress/integration/rendering/appli.spec.js",
|
||||||
"duration": 1928
|
"duration": 3488
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/architecture.spec.ts",
|
"spec": "cypress/integration/rendering/architecture.spec.ts",
|
||||||
"duration": 2330
|
"duration": 106
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/block.spec.js",
|
"spec": "cypress/integration/rendering/block.spec.js",
|
||||||
"duration": 11156
|
"duration": 18317
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/c4.spec.js",
|
"spec": "cypress/integration/rendering/c4.spec.js",
|
||||||
"duration": 3418
|
"duration": 5592
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/classDiagram-elk-v3.spec.js",
|
||||||
|
"duration": 39358
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/classDiagram-handDrawn-v3.spec.js",
|
||||||
|
"duration": 37160
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/classDiagram-v2.spec.js",
|
"spec": "cypress/integration/rendering/classDiagram-v2.spec.js",
|
||||||
"duration": 14866
|
"duration": 23660
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/classDiagram-v3.spec.js",
|
||||||
|
"duration": 36866
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/classDiagram.spec.js",
|
"spec": "cypress/integration/rendering/classDiagram.spec.js",
|
||||||
"duration": 9894
|
"duration": 17334
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/conf-and-directives.spec.js",
|
"spec": "cypress/integration/rendering/conf-and-directives.spec.js",
|
||||||
"duration": 5778
|
"duration": 9871
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/current.spec.js",
|
"spec": "cypress/integration/rendering/current.spec.js",
|
||||||
"duration": 1690
|
"duration": 2833
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/erDiagram-unified.spec.js",
|
||||||
|
"duration": 85321
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/erDiagram.spec.js",
|
"spec": "cypress/integration/rendering/erDiagram.spec.js",
|
||||||
"duration": 9144
|
"duration": 15673
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/errorDiagram.spec.js",
|
"spec": "cypress/integration/rendering/errorDiagram.spec.js",
|
||||||
"duration": 1951
|
"duration": 3724
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/flowchart-elk.spec.js",
|
"spec": "cypress/integration/rendering/flowchart-elk.spec.js",
|
||||||
"duration": 2196
|
"duration": 41178
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/flowchart-handDrawn.spec.js",
|
"spec": "cypress/integration/rendering/flowchart-handDrawn.spec.js",
|
||||||
"duration": 21029
|
"duration": 29966
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/flowchart-icon.spec.js",
|
||||||
|
"duration": 7689
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/flowchart-shape-alias.spec.ts",
|
"spec": "cypress/integration/rendering/flowchart-shape-alias.spec.ts",
|
||||||
"duration": 16087
|
"duration": 24709
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/flowchart-v2.spec.js",
|
"spec": "cypress/integration/rendering/flowchart-v2.spec.js",
|
||||||
"duration": 27465
|
"duration": 45565
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/flowchart.spec.js",
|
"spec": "cypress/integration/rendering/flowchart.spec.js",
|
||||||
"duration": 20035
|
"duration": 31144
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/gantt.spec.js",
|
"spec": "cypress/integration/rendering/gantt.spec.js",
|
||||||
"duration": 11366
|
"duration": 20808
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/gitGraph.spec.js",
|
"spec": "cypress/integration/rendering/gitGraph.spec.js",
|
||||||
"duration": 34025
|
"duration": 49985
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/iconShape.spec.ts",
|
"spec": "cypress/integration/rendering/iconShape.spec.ts",
|
||||||
"duration": 185902
|
"duration": 273272
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/imageShape.spec.ts",
|
"spec": "cypress/integration/rendering/imageShape.spec.ts",
|
||||||
"duration": 41631
|
"duration": 55880
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/info.spec.ts",
|
"spec": "cypress/integration/rendering/info.spec.ts",
|
||||||
"duration": 1736
|
"duration": 3271
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/journey.spec.js",
|
"spec": "cypress/integration/rendering/journey.spec.js",
|
||||||
"duration": 2247
|
"duration": 7293
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/kanban.spec.ts",
|
||||||
|
"duration": 7861
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/katex.spec.js",
|
"spec": "cypress/integration/rendering/katex.spec.js",
|
||||||
"duration": 2144
|
"duration": 3922
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/marker_unique_id.spec.js",
|
"spec": "cypress/integration/rendering/marker_unique_id.spec.js",
|
||||||
"duration": 1646
|
"duration": 2726
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/mindmap.spec.ts",
|
"spec": "cypress/integration/rendering/mindmap.spec.ts",
|
||||||
"duration": 6406
|
"duration": 11670
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/newShapes.spec.ts",
|
"spec": "cypress/integration/rendering/newShapes.spec.ts",
|
||||||
"duration": 107219
|
"duration": 146020
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/oldShapes.spec.ts",
|
||||||
|
"duration": 114244
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/packet.spec.ts",
|
||||||
|
"duration": 5036
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/pie.spec.ts",
|
||||||
|
"duration": 6545
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/quadrantChart.spec.js",
|
||||||
|
"duration": 9097
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/radar.spec.js",
|
||||||
|
"duration": 5676
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/requirement.spec.js",
|
||||||
|
"duration": 2795
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/requirementDiagram-unified.spec.js",
|
||||||
|
"duration": 51660
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/sankey.spec.ts",
|
||||||
|
"duration": 6957
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/sequencediagram.spec.js",
|
||||||
|
"duration": 36026
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/stateDiagram-v2.spec.js",
|
||||||
|
"duration": 29551
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/stateDiagram.spec.js",
|
"spec": "cypress/integration/rendering/stateDiagram.spec.js",
|
||||||
"duration": 15834
|
"duration": 17364
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/theme.spec.js",
|
"spec": "cypress/integration/rendering/theme.spec.js",
|
||||||
"duration": 33240
|
"duration": 30209
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/timeline.spec.ts",
|
"spec": "cypress/integration/rendering/timeline.spec.ts",
|
||||||
"duration": 7122
|
"duration": 8699
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"spec": "cypress/integration/rendering/treemap.spec.ts",
|
||||||
|
"duration": 12168
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/xyChart.spec.js",
|
"spec": "cypress/integration/rendering/xyChart.spec.js",
|
||||||
"duration": 11127
|
"duration": 21453
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/zenuml.spec.js",
|
"spec": "cypress/integration/rendering/zenuml.spec.js",
|
||||||
"duration": 2391
|
"duration": 3577
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<h1>Block diagram demos</h1>
|
<h1>Block diagram demos</h1>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
block
|
||||||
columns 1
|
columns 1
|
||||||
db(("DB"))
|
db(("DB"))
|
||||||
blockArrowId6<[" "]>(down)
|
blockArrowId6<[" "]>(down)
|
||||||
@@ -26,7 +26,7 @@ columns 1
|
|||||||
style B fill:#f9F,stroke:#333,stroke-width:4px
|
style B fill:#f9F,stroke:#333,stroke-width:4px
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
block
|
||||||
A1["square"]
|
A1["square"]
|
||||||
B1("rounded")
|
B1("rounded")
|
||||||
C1(("circle"))
|
C1(("circle"))
|
||||||
@@ -36,7 +36,7 @@ block-beta
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
block
|
||||||
A1(["stadium"])
|
A1(["stadium"])
|
||||||
A2[["subroutine"]]
|
A2[["subroutine"]]
|
||||||
B1[("cylinder")]
|
B1[("cylinder")]
|
||||||
@@ -48,7 +48,7 @@ block-beta
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
block
|
||||||
block:e:4
|
block:e:4
|
||||||
columns 2
|
columns 2
|
||||||
f
|
f
|
||||||
@@ -57,7 +57,7 @@ block-beta
|
|||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
block
|
||||||
block:e:4
|
block:e:4
|
||||||
columns 2
|
columns 2
|
||||||
f
|
f
|
||||||
@@ -67,7 +67,7 @@ block-beta
|
|||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
block
|
||||||
columns 3
|
columns 3
|
||||||
a:3
|
a:3
|
||||||
block:e:3
|
block:e:3
|
||||||
@@ -80,7 +80,7 @@ block-beta
|
|||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
block
|
||||||
columns 4
|
columns 4
|
||||||
a b c d
|
a b c d
|
||||||
block:e:4
|
block:e:4
|
||||||
@@ -97,19 +97,19 @@ flowchart LR
|
|||||||
X-- "a label" -->z
|
X-- "a label" -->z
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
block
|
||||||
columns 5
|
columns 5
|
||||||
A space B
|
A space B
|
||||||
A --x B
|
A --x B
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
block
|
||||||
columns 3
|
columns 3
|
||||||
a["A wide one"] b:2 c:2 d
|
a["A wide one"] b:2 c:2 d
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
block
|
||||||
columns 3
|
columns 3
|
||||||
a b c
|
a b c
|
||||||
e:3
|
e:3
|
||||||
@@ -117,7 +117,7 @@ columns 3
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
block-beta
|
block
|
||||||
|
|
||||||
A1:3
|
A1:3
|
||||||
A2:1
|
A2:1
|
||||||
|
@@ -110,7 +110,7 @@
|
|||||||
title Component diagram for Internet Banking System - API Application
|
title Component diagram for Internet Banking System - API Application
|
||||||
|
|
||||||
Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.")
|
Container(spa, "Single Page Application", "javascript and angular", "Provides all the internet banking functionality to customers via their web browser.")
|
||||||
Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile mobile device.")
|
Container(ma, "Mobile App", "Xamarin", "Provides a limited subset ot the internet banking functionality to customers via their mobile device.")
|
||||||
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
ContainerDb(db, "Database", "Relational Database Schema", "Stores user registration information, hashed authentication credentials, access logs, etc.")
|
||||||
System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
|
System_Ext(mbs, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
|
||||||
|
|
||||||
|
@@ -148,7 +148,7 @@
|
|||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
classDiagram
|
classDiagram
|
||||||
class Person {
|
class Person {
|
||||||
+Id : Guid
|
+ID : Guid
|
||||||
+FirstName : string
|
+FirstName : string
|
||||||
+LastName : string
|
+LastName : string
|
||||||
-privateProperty : string
|
-privateProperty : string
|
||||||
@@ -218,10 +218,10 @@
|
|||||||
+double side
|
+double side
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Shape <|-- Circle
|
Shape <|-- Circle
|
||||||
Shape <|-- Square
|
Shape <|-- Square
|
||||||
|
|
||||||
namespace Vehicles {
|
namespace Vehicles {
|
||||||
class Vehicle {
|
class Vehicle {
|
||||||
+String brand
|
+String brand
|
||||||
@@ -233,12 +233,12 @@
|
|||||||
+boolean hasGears
|
+boolean hasGears
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vehicle <|-- Car
|
Vehicle <|-- Car
|
||||||
Vehicle <|-- Bike
|
Vehicle <|-- Bike
|
||||||
Car --> Circle : "Logo Shape"
|
Car --> Circle : "Logo Shape"
|
||||||
Bike --> Square : "Logo Shape"
|
Bike --> Square : "Logo Shape"
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import mermaid from './mermaid.esm.mjs';
|
import mermaid from './mermaid.esm.mjs';
|
||||||
|
222
demos/er-multiline.html
Normal file
222
demos/er-multiline.html
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
|
||||||
|
<link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/font-awesome.min.css"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Caveat:wght@400..700&family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Recursive:wght@300..1000&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.recursive-500 {
|
||||||
|
font-family: 'Recursive', serif;
|
||||||
|
font-optical-sizing: auto;
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: normal;
|
||||||
|
font-variation-settings:
|
||||||
|
'slnt' 0,
|
||||||
|
'CASL' 0,
|
||||||
|
'CRSV' 0.5,
|
||||||
|
'MONO' 0;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
/* background: rgb(221, 208, 208); */
|
||||||
|
/* background: #333; */
|
||||||
|
/* font-family: 'Arial'; */
|
||||||
|
font-family: 'Recursive', serif;
|
||||||
|
font-optical-sizing: auto;
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: normal;
|
||||||
|
font-variation-settings:
|
||||||
|
'slnt' 0,
|
||||||
|
'CASL' 0,
|
||||||
|
'CRSV' 0.5,
|
||||||
|
'MONO' 0;
|
||||||
|
/* color: white; */
|
||||||
|
/* font-size: 18px !important; */
|
||||||
|
}
|
||||||
|
.gridify.tiny {
|
||||||
|
background-image:
|
||||||
|
linear-gradient(transparent 11px, rgba(220, 220, 200, 0.8) 12px, transparent 12px),
|
||||||
|
linear-gradient(90deg, transparent 11px, rgba(220, 220, 200, 0.8) 12px, transparent 12px);
|
||||||
|
background-size:
|
||||||
|
100% 12px,
|
||||||
|
12px 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gridify.dots {
|
||||||
|
background-image: radial-gradient(
|
||||||
|
circle at center,
|
||||||
|
rgba(220, 220, 200, 0.8) 1px,
|
||||||
|
transparent 1px
|
||||||
|
);
|
||||||
|
background-size: 24px 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: grey;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mermaid2 {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mermaid svg {
|
||||||
|
font-size: 16px !important;
|
||||||
|
font-family: 'Recursive', serif;
|
||||||
|
font-optical-sizing: auto;
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: normal;
|
||||||
|
font-variation-settings:
|
||||||
|
'slnt' 0,
|
||||||
|
'CASL' 0,
|
||||||
|
'CRSV' 0.5,
|
||||||
|
'MONO' 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
width: 100%;
|
||||||
|
/*box-shadow: 4px 4px 0px 0px #0000000F;*/
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="gridify dots">
|
||||||
|
<div class="w-full h-64">
|
||||||
|
<pre id="diagram4" class="mermaid" style="background: rgb(255, 255, 255)">
|
||||||
|
erDiagram
|
||||||
|
CAR ||--o{ NAMED-DRIVER : allows
|
||||||
|
CAR ::: Pine {
|
||||||
|
string registrationNumber PK "Primary Key<br><strong>Unique registration number</strong>"
|
||||||
|
string make "Car make<br><strong>e.g., Toyota</strong>"
|
||||||
|
string model "Model of the car<br><strong>e.g., Corolla</strong>"
|
||||||
|
string[] parts "List of parts<br><strong>Stored as array</strong>"
|
||||||
|
}
|
||||||
|
PERSON ||--o{ NAMED-DRIVER : is
|
||||||
|
PERSON ::: someclass {
|
||||||
|
string driversLicense PK "The license #<br><strong>Primary Key</strong>"
|
||||||
|
string(99) firstName "Only 99 characters <br>are allowed <br> <strong>e.g., Smith</strong>"
|
||||||
|
string lastName "Last name of person<br><strong>e.g., Smith</strong>"
|
||||||
|
string phone UK "Unique phone number<br><strong>Used for contact</strong>"
|
||||||
|
int age "Age of the person<br><strong>Must be numeric</strong>"
|
||||||
|
}
|
||||||
|
NAMED-DRIVER {
|
||||||
|
string carRegistrationNumber PK, FK, UK, PK "Foreign key to CAR<br><strong>Also part of PK</strong>"
|
||||||
|
string driverLicence PK, FK "Foreign key to PERSON<br><strong>Also part of PK</strong>"
|
||||||
|
}
|
||||||
|
MANUFACTURER only one to zero or more CAR : makesx
|
||||||
|
</pre>
|
||||||
|
<hr />
|
||||||
|
<pre class="mermaid">
|
||||||
|
erDiagram
|
||||||
|
_**testẽζ➕Ø😀㌕ぼ**_ {
|
||||||
|
*__List~List~int~~sdfds__* **driversLicense** PK "***The l😀icense #***"
|
||||||
|
string last*Name*
|
||||||
|
string __phone__ UK
|
||||||
|
*string(99)~T~~~~~~* firstName "Only __99__ <br>characters are a<br>llowed dsfsdfsdfsdfs"
|
||||||
|
int _age_
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
import mermaid from './mermaid.esm.mjs';
|
||||||
|
import layouts from './mermaid-layout-elk.esm.mjs';
|
||||||
|
|
||||||
|
const staticBellIconPack = {
|
||||||
|
prefix: 'fa6-regular',
|
||||||
|
icons: {
|
||||||
|
bell: {
|
||||||
|
body: '<path fill="currentColor" d="M224 0c-17.7 0-32 14.3-32 32v19.2C119 66 64 130.6 64 208v25.4c0 45.4-15.5 89.5-43.8 124.9L5.3 377c-5.8 7.2-6.9 17.1-2.9 25.4S14.8 416 24 416h400c9.2 0 17.6-5.3 21.6-13.6s2.9-18.2-2.9-25.4l-14.9-18.6c-28.3-35.5-43.8-79.6-43.8-125V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32m0 96c61.9 0 112 50.1 112 112v25.4c0 47.9 13.9 94.6 39.7 134.6H72.3c25.8-40 39.7-86.7 39.7-134.6V208c0-61.9 50.1-112 112-112m64 352H160c0 17 6.7 33.3 18.7 45.3S207 512 224 512s33.3-6.7 45.3-18.7S288 465 288 448"/>',
|
||||||
|
width: 448,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
width: 512,
|
||||||
|
height: 512,
|
||||||
|
};
|
||||||
|
|
||||||
|
mermaid.registerIconPacks([
|
||||||
|
{
|
||||||
|
name: 'logos',
|
||||||
|
loader: () =>
|
||||||
|
fetch('https://unpkg.com/@iconify-json/logos@1/icons.json').then((res) => res.json()),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'fa',
|
||||||
|
loader: () => staticBellIconPack,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
mermaid.registerLayoutLoaders(layouts);
|
||||||
|
mermaid.parseError = function (err, hash) {
|
||||||
|
console.error('Mermaid error: ', err);
|
||||||
|
};
|
||||||
|
window.callback = function () {
|
||||||
|
alert('A callback was triggered');
|
||||||
|
};
|
||||||
|
function callback() {
|
||||||
|
alert('It worked');
|
||||||
|
}
|
||||||
|
await mermaid.initialize({
|
||||||
|
startOnLoad: false,
|
||||||
|
|
||||||
|
theme: 'forest',
|
||||||
|
look: 'classic',
|
||||||
|
layout: 'dagre',
|
||||||
|
|
||||||
|
// theme: 'default',
|
||||||
|
// look: 'classic',
|
||||||
|
flowchart: { titleTopMargin: 10 },
|
||||||
|
fontFamily: 'Recursive',
|
||||||
|
sequence: {
|
||||||
|
actorFontFamily: 'courier',
|
||||||
|
noteFontFamily: 'courier',
|
||||||
|
messageFontFamily: 'courier',
|
||||||
|
},
|
||||||
|
kanban: {
|
||||||
|
htmlLabels: false,
|
||||||
|
},
|
||||||
|
fontSize: 16,
|
||||||
|
logLevel: 0,
|
||||||
|
securityLevel: 'loose',
|
||||||
|
callback,
|
||||||
|
});
|
||||||
|
// setTimeout(() => {
|
||||||
|
mermaid.init(undefined, document.querySelectorAll('.mermaid'));
|
||||||
|
// }, 1000);
|
||||||
|
mermaid.parseError = function (err, hash) {
|
||||||
|
console.error('In parse error:');
|
||||||
|
console.error(err);
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<div class="diagrams">
|
<div class="diagrams">
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
packet-beta
|
packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
packet:
|
packet:
|
||||||
showBits: false
|
showBits: false
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
config:
|
config:
|
||||||
theme: forest
|
theme: forest
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
title Forest theme
|
title Forest theme
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
config:
|
config:
|
||||||
theme: dark
|
theme: dark
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
title Dark theme
|
title Dark theme
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
y-axis Not Important --> important
|
y-axis Not Important --> important
|
||||||
quadrant-1 Plan
|
quadrant-1 Plan
|
||||||
quadrant-2 Do
|
quadrant-2 Do
|
||||||
quadrant-3 Deligate
|
quadrant-3 Delegate
|
||||||
quadrant-4 Delete
|
quadrant-4 Delete
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
@@ -20,12 +20,14 @@
|
|||||||
width: 800
|
width: 800
|
||||||
nodeAlignment: left
|
nodeAlignment: left
|
||||||
---
|
---
|
||||||
sankey-beta
|
sankey
|
||||||
Revenue,Expenses,10
|
a,b,8
|
||||||
Revenue,Profit,10
|
b,c,8
|
||||||
Expenses,Manufacturing,5
|
c,d,8
|
||||||
Expenses,Tax,3
|
d,e,8
|
||||||
Expenses,Research,2
|
|
||||||
|
x,c,4
|
||||||
|
c,y,4
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<h2>Energy flow</h2>
|
<h2>Energy flow</h2>
|
||||||
@@ -40,7 +42,7 @@
|
|||||||
linkColor: gradient
|
linkColor: gradient
|
||||||
nodeAlignment: justify
|
nodeAlignment: justify
|
||||||
---
|
---
|
||||||
sankey-beta
|
sankey
|
||||||
|
|
||||||
Agricultural 'waste',Bio-conversion,124.729
|
Agricultural 'waste',Bio-conversion,124.729
|
||||||
Bio-conversion,Liquid,0.597
|
Bio-conversion,Liquid,0.597
|
||||||
|
@@ -23,6 +23,23 @@
|
|||||||
1940 : fourth step : fifth step
|
1940 : fourth step : fifth step
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
<h2>Medical Device Lifecycle Timeline</h2>
|
||||||
|
<pre class="mermaid">
|
||||||
|
timeline
|
||||||
|
title Medical Device Lifecycle
|
||||||
|
section Planning
|
||||||
|
Quality Management System (4) : Regulatory Compliance (4.1) : Risk Management (4.1.3) : Management Review (5.6) : Infrastructure (6.3)
|
||||||
|
Management Responsibility (5) : Planning Activities (5.2) : Human Resources (6.2) : RnD Planning (7.3.2) : Purchasing Process (7.4.1) : Production Activities (7.5.1) : Installation Activities (7.5.3) : Servicing Activities (7.5.4)
|
||||||
|
section Realization
|
||||||
|
Research and Development (7.3) : Inputs (7.3.3) : Outputs (7.3.4) : Review (7.3.5) : Verification (7.3.6) : Validation (7.3.7)
|
||||||
|
Purchasing (7.4) : Purchasing Information (7.4.2) : Production Feedback (8.2.1)
|
||||||
|
Production (7.5) : Production Feedback (8.2.1)
|
||||||
|
Installation (7.5.3) : Installation Activities (7.5.3)
|
||||||
|
Servicing (7.5.4) : Servicing Activities (7.5.4)
|
||||||
|
section Post-Production
|
||||||
|
Post-Market Activities (8) : Feedback (8.2.1) : Complaints (8.2.2) : Adverse Events (8.2.3)
|
||||||
|
</pre>
|
||||||
|
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import mermaid from './mermaid.esm.mjs';
|
import mermaid from './mermaid.esm.mjs';
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
|
75
demos/treemap.html
Normal file
75
demos/treemap.html
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<title>Mermaid Treemap Diagram Demo</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: 'Montserrat', sans-serif;
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: 900px;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
.mermaid {
|
||||||
|
margin: 30px 0;
|
||||||
|
}
|
||||||
|
h1,
|
||||||
|
h2 {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
pre {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
padding: 15px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Treemap Diagram Demo</h1>
|
||||||
|
<p>This is a demo of the new treemap diagram type in Mermaid.</p>
|
||||||
|
|
||||||
|
<h2>Basic Treemap Example</h2>
|
||||||
|
<pre class="mermaid">
|
||||||
|
treemap
|
||||||
|
"Root"
|
||||||
|
"Branch 1"
|
||||||
|
"Leaf 1.1": 10
|
||||||
|
"Leaf 1.2": 15
|
||||||
|
"Branch 2"
|
||||||
|
"Branch 2.1"
|
||||||
|
"Leaf 2.1.1": 20
|
||||||
|
"Leaf 2.1.2": 25
|
||||||
|
"Leaf 2.2": 25
|
||||||
|
"Leaf 2.3": 30
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<h2>Technology Stack Treemap Example</h2>
|
||||||
|
<pre class="mermaid">
|
||||||
|
treemap
|
||||||
|
"Technology Stack"
|
||||||
|
"Frontend"
|
||||||
|
"React": 35
|
||||||
|
"CSS": 15
|
||||||
|
"HTML": 10
|
||||||
|
"Backend"
|
||||||
|
"Node.js": 25
|
||||||
|
"Express": 10
|
||||||
|
"MongoDB": 15
|
||||||
|
"DevOps"
|
||||||
|
"Docker": 10
|
||||||
|
"Kubernetes": 15
|
||||||
|
"CI/CD": 5
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
import mermaid from './mermaid.esm.mjs';
|
||||||
|
mermaid.initialize({
|
||||||
|
theme: 'forest',
|
||||||
|
logLevel: 1,
|
||||||
|
securityLevel: 'loose',
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -16,7 +16,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<h1>XY Charts demos</h1>
|
<h1>XY Charts demos</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
xychart-beta
|
xychart
|
||||||
title "Sales Revenue (in $)"
|
title "Sales Revenue (in $)"
|
||||||
x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
<hr />
|
<hr />
|
||||||
<h1>XY Charts horizontal</h1>
|
<h1>XY Charts horizontal</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
xychart-beta horizontal
|
xychart horizontal
|
||||||
title "Basic xychart"
|
title "Basic xychart"
|
||||||
x-axis "this is x axis" [category1, "category 2", category3, category4]
|
x-axis "this is x axis" [category1, "category 2", category3, category4]
|
||||||
y-axis yaxisText 10 --> 150
|
y-axis yaxisText 10 --> 150
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
<hr />
|
<hr />
|
||||||
<h1>XY Charts only lines and bar</h1>
|
<h1>XY Charts only lines and bar</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
xychart-beta
|
xychart
|
||||||
line [23, 46, 77, 34]
|
line [23, 46, 77, 34]
|
||||||
line [45, 32, 33, 12]
|
line [45, 32, 33, 12]
|
||||||
line [87, 54, 99, 85]
|
line [87, 54, 99, 85]
|
||||||
@@ -48,13 +48,13 @@
|
|||||||
<hr />
|
<hr />
|
||||||
<h1>XY Charts with +ve and -ve numbers</h1>
|
<h1>XY Charts with +ve and -ve numbers</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
xychart-beta
|
xychart
|
||||||
line [+1.3, .6, 2.4, -.34]
|
line [+1.3, .6, 2.4, -.34]
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<h1>XY Charts Bar with multiple category</h1>
|
<h1>XY Charts Bar with multiple category</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
xychart-beta
|
xychart
|
||||||
title "Basic xychart with many categories"
|
title "Basic xychart with many categories"
|
||||||
x-axis "this is x axis" [category1, "category 2", category3, category4, category5, category6, category7]
|
x-axis "this is x axis" [category1, "category 2", category3, category4, category5, category6, category7]
|
||||||
y-axis yaxisText 10 --> 150
|
y-axis yaxisText 10 --> 150
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
|
|
||||||
<h1>XY Charts line with multiple category</h1>
|
<h1>XY Charts line with multiple category</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
xychart-beta
|
xychart
|
||||||
title "Line chart with many category"
|
title "Line chart with many category"
|
||||||
x-axis "this is x axis" [category1, "category 2", category3, category4, category5, category6, category7]
|
x-axis "this is x axis" [category1, "category 2", category3, category4, category5, category6, category7]
|
||||||
y-axis yaxisText 10 --> 150
|
y-axis yaxisText 10 --> 150
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
|
|
||||||
<h1>XY Charts category with large text</h1>
|
<h1>XY Charts category with large text</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
xychart-beta
|
xychart
|
||||||
title "Basic xychart with many categories with category overlap"
|
title "Basic xychart with many categories with category overlap"
|
||||||
x-axis "this is x axis" [category1, "Lorem ipsum dolor sit amet, qui minim labore adipisicing minim sint cillum sint consectetur cupidatat.", category3, category4, category5, category6, category7]
|
x-axis "this is x axis" [category1, "Lorem ipsum dolor sit amet, qui minim labore adipisicing minim sint cillum sint consectetur cupidatat.", category3, category4, category5, category6, category7]
|
||||||
y-axis yaxisText 10 --> 150
|
y-axis yaxisText 10 --> 150
|
||||||
@@ -89,7 +89,7 @@ config:
|
|||||||
height: 20
|
height: 20
|
||||||
plotReservedSpacePercent: 100
|
plotReservedSpacePercent: 100
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
line [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
line [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ config:
|
|||||||
height: 20
|
height: 20
|
||||||
plotReservedSpacePercent: 100
|
plotReservedSpacePercent: 100
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
bar [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
bar [5000, 9000, 7500, 6200, 9500, 5500, 11000, 8200, 9200, 9500, 7000, 8800]
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ config:
|
|||||||
chartOrientation: horizontal
|
chartOrientation: horizontal
|
||||||
plotReservedSpacePercent: 60
|
plotReservedSpacePercent: 60
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
title "Sales Revenue"
|
title "Sales Revenue"
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
@@ -162,7 +162,7 @@ config:
|
|||||||
xAxisLineColor: "#87ceeb"
|
xAxisLineColor: "#87ceeb"
|
||||||
plotColorPalette: "#008000, #faba63"
|
plotColorPalette: "#008000, #faba63"
|
||||||
---
|
---
|
||||||
xychart-beta
|
xychart
|
||||||
title "Sales Revenue"
|
title "Sales Revenue"
|
||||||
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
y-axis "Revenue (in $)" 4000 --> 11000
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
|
@@ -10,16 +10,20 @@
|
|||||||
<h1>Zenuml demos</h1>
|
<h1>Zenuml demos</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
zenuml
|
zenuml
|
||||||
title Sync Messages (Design Pattern: Adapter)
|
BookLibService.Borrow(id) {
|
||||||
@Starter(Client)
|
User = Session.GetUser()
|
||||||
Adapter.interfaceMethod() {
|
if(User.isActive) {
|
||||||
translateParameter(parameter)
|
try {
|
||||||
|
BookRepository.Update(id, onLoan, User)
|
||||||
result = Implementation.implementationMethod()
|
receipt = new Receipt(id, dueDate)
|
||||||
|
} catch (BookNotFoundException) {
|
||||||
translateResult()
|
ErrorService.onException(BookNotFoundException)
|
||||||
return translatedResult
|
} finally {
|
||||||
}
|
Connection.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return receipt
|
||||||
|
}
|
||||||
</pre>
|
</pre>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
zenuml
|
zenuml
|
||||||
|
@@ -29,7 +29,8 @@ In GitHub, you first [**fork a mermaid repository**](https://github.com/mermaid-
|
|||||||
|
|
||||||
Then you **clone** a copy to your local development machine (e.g. where you code) to make a copy with all the files to work with.
|
Then you **clone** a copy to your local development machine (e.g. where you code) to make a copy with all the files to work with.
|
||||||
|
|
||||||
> **💡 Tip** > [Here is a GitHub document that gives an overview of the process](https://docs.github.com/en/get-started/quickstart/fork-a-repo).
|
> **💡 Tip**
|
||||||
|
> [Here is a GitHub document that gives an overview of the process](https://docs.github.com/en/get-started/quickstart/fork-a-repo).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone git@github.com/your-fork/mermaid
|
git clone git@github.com/your-fork/mermaid
|
||||||
@@ -301,7 +302,7 @@ If you are adding a feature, you will definitely need to add tests. Depending on
|
|||||||
|
|
||||||
Unit tests are tests that test a single function or module. They are the easiest to write and the fastest to run.
|
Unit tests are tests that test a single function or module. They are the easiest to write and the fastest to run.
|
||||||
|
|
||||||
Unit tests are mandatory for all code except the renderers. (The renderers are tested with integration tests.)
|
Unit tests are mandatory for all code except the layout tests. (The layouts are tested with integration tests.)
|
||||||
|
|
||||||
We use [Vitest](https://vitest.dev) to run unit tests.
|
We use [Vitest](https://vitest.dev) to run unit tests.
|
||||||
|
|
||||||
@@ -327,6 +328,30 @@ When using Docker prepend your command with `./run`:
|
|||||||
./run pnpm test
|
./run pnpm test
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### Testing the DOM
|
||||||
|
|
||||||
|
One can use `jsdomIt` to test any part of Mermaid that interacts with the DOM, as long as it is not related to the layout.
|
||||||
|
|
||||||
|
The function `jsdomIt` ([developed in utils.ts](../../tests/util.ts)) overrides `it` from `vitest`, and creates a pseudo-browser environment that works almost like the real deal for the duration of the test. It uses JSDOM to create a DOM, and adds objects `window` and `document` to `global` to mock the browser environment.
|
||||||
|
|
||||||
|
> \[!NOTE]
|
||||||
|
> The layout cannot work in `jsdomIt` tests because JSDOM has no rendering engine, hence the pseudo-browser environment.
|
||||||
|
|
||||||
|
Example :
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
import { ensureNodeFromSelector, jsdomIt } from './tests/util.js';
|
||||||
|
|
||||||
|
jsdomIt('should add element "thing" in the SVG', ({ svg }) => {
|
||||||
|
// Code in this block runs in a pseudo-browser environment
|
||||||
|
addThing(svg); // The svg item is the D3 selection of the SVG node
|
||||||
|
const svgNode = ensureNodeFromSelector('svg'); // Retrieve the DOM node using the DOM API
|
||||||
|
expect(svgNode.querySelector('thing')).not.toBeNull(); // Test the structure of the SVG
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
They can be used to test any method that interacts with the DOM, including for testing renderers. For renderers, additional integration testing is necessary to test the layout though.
|
||||||
|
|
||||||
#### Integration / End-to-End (E2E) Tests
|
#### Integration / End-to-End (E2E) Tests
|
||||||
|
|
||||||
These test the rendering and visual appearance of the diagrams.
|
These test the rendering and visual appearance of the diagrams.
|
||||||
@@ -497,14 +522,14 @@ This is a danger alert
|
|||||||
|
|
||||||
### Navigation
|
### Navigation
|
||||||
|
|
||||||
If you want to propose changes to how the documentation is _organized_, such as adding a new section or re-arranging or renaming a section, you must update the **sidebar navigation**, which is defined in [the vitepress config](../.vitepress/config.ts). The same goes to **topbar**.
|
If you want to propose changes to how the documentation is _organized_, such as adding a new section or re-arranging or renaming a section, you must update the **sidebar navigation**, which is defined in [the vitepress config](../.vitepress/config.ts). The same goes for **topbar**.
|
||||||
|
|
||||||
### Build Docs
|
### Build Docs
|
||||||
|
|
||||||
The content of `/docs` folder is built with Github Actions.
|
The content of `/docs` folder is built with GitHub Actions.
|
||||||
|
|
||||||
> **Warning**
|
> **Warning**
|
||||||
> So as to allow automatic compilation of documentation pages you have to enable Github Actions on your fork first
|
> So as to allow automatic compilation of documentation pages you have to enable GitHub Actions on your fork first
|
||||||
|
|
||||||
## Submit your pull request
|
## Submit your pull request
|
||||||
|
|
||||||
|
@@ -33,7 +33,8 @@ mindmap
|
|||||||
|
|
||||||
## Join the Development
|
## Join the Development
|
||||||
|
|
||||||
> **💡 Tip** > **Check out our** [**detailed contribution guide**](./contributing.md).
|
> **💡 Tip**
|
||||||
|
> **Check out our** [**detailed contribution guide**](./contributing.md).
|
||||||
|
|
||||||
Where to start:
|
Where to start:
|
||||||
|
|
||||||
@@ -47,7 +48,8 @@ Where to start:
|
|||||||
|
|
||||||
## A Question Or a Suggestion?
|
## A Question Or a Suggestion?
|
||||||
|
|
||||||
> **💡 Tip** > **Have a look at** [**how to open an issue**](./questions-and-suggestions.md).
|
> **💡 Tip**
|
||||||
|
> **Have a look at** [**how to open an issue**](./questions-and-suggestions.md).
|
||||||
|
|
||||||
If you have faced a vulnerability [report it to us](./security.md).
|
If you have faced a vulnerability [report it to us](./security.md).
|
||||||
|
|
||||||
|
@@ -111,3 +111,13 @@ const themes = {
|
|||||||
```
|
```
|
||||||
|
|
||||||
The actual options and values for the colors are defined in **src/theme/theme-\[xyz].js**. If you provide the options your diagram needs in the existing theme files then the theming will work smoothly without hiccups.
|
The actual options and values for the colors are defined in **src/theme/theme-\[xyz].js**. If you provide the options your diagram needs in the existing theme files then the theming will work smoothly without hiccups.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
The `@mermaid-js/examples` package contains a collection of examples that are used by tools like mermaid.live to help users get started with the new diagram.
|
||||||
|
|
||||||
|
You can duplicate an existing diagram example file, eg: `packages/examples/src/examples/flowchart.ts`, and modify it with details specific to your diagram.
|
||||||
|
|
||||||
|
Then you can import the example in the `packages/examples/src/index.ts` file and add it to the `examples` array.
|
||||||
|
|
||||||
|
Each diagram should have at least one example, and that should be marked as default. It is good to add more examples to showcase different features of the diagram.
|
||||||
|
@@ -22,4 +22,4 @@ This helps the team know the relative interest in something and helps them set p
|
|||||||
|
|
||||||
You have not found anything that already addresses your request, or maybe you have come up with the new idea? Feel free to open a new issue or discussion.
|
You have not found anything that already addresses your request, or maybe you have come up with the new idea? Feel free to open a new issue or discussion.
|
||||||
|
|
||||||
Log in to [GitHub.com](https://www.github.com), and use [GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues). Press \[<https://github.com/mermaid-js/mermaid/issues/new/choose>] issue, select the appropriate template and describe your problem.
|
Log in to [GitHub.com](https://www.github.com), and use [GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues). Press [issue, select the appropriate template](https://github.com/mermaid-js/mermaid/issues/new/choose) and describe your problem.
|
||||||
|
@@ -251,12 +251,12 @@ Here is the HTML generated for the SVG element: _(Note that some of the SVG attr
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Gitgraph
|
##### GitGraph
|
||||||
|
|
||||||
```mermaid-example
|
```mermaid-example
|
||||||
gitGraph
|
gitGraph
|
||||||
accTitle: My Gitgraph Accessibility Title
|
accTitle: My GitGraph Accessibility Title
|
||||||
accDescr: My Gitgraph Accessibility Description
|
accDescr: My GitGraph Accessibility Description
|
||||||
|
|
||||||
commit
|
commit
|
||||||
commit
|
commit
|
||||||
@@ -273,8 +273,8 @@ Here is the HTML generated for the SVG element: _(Note that some of the SVG attr
|
|||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
gitGraph
|
gitGraph
|
||||||
accTitle: My Gitgraph Accessibility Title
|
accTitle: My GitGraph Accessibility Title
|
||||||
accDescr: My Gitgraph Accessibility Description
|
accDescr: My GitGraph Accessibility Description
|
||||||
|
|
||||||
commit
|
commit
|
||||||
commit
|
commit
|
||||||
|
@@ -22,7 +22,6 @@ While directives allow you to change most of the default configuration settings,
|
|||||||
Mermaid basically supports two types of configuration options to be overridden by directives.
|
Mermaid basically supports two types of configuration options to be overridden by directives.
|
||||||
|
|
||||||
1. _General/Top Level configurations_ : These are the configurations that are available and applied to all the diagram. **Some of the most important top-level** configurations are:
|
1. _General/Top Level configurations_ : These are the configurations that are available and applied to all the diagram. **Some of the most important top-level** configurations are:
|
||||||
|
|
||||||
- theme
|
- theme
|
||||||
- fontFamily
|
- fontFamily
|
||||||
- logLevel
|
- logLevel
|
||||||
|
@@ -12,4 +12,4 @@
|
|||||||
|
|
||||||
> `const` **configKeys**: `Set`<`string`>
|
> `const` **configKeys**: `Set`<`string`>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/defaultConfig.ts:274](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L274)
|
Defined in: [packages/mermaid/src/defaultConfig.ts:292](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L292)
|
||||||
|
@@ -88,13 +88,103 @@ Defined in: node_modules/.pnpm/typescript\@5.7.3/node_modules/typescript/lib/lib
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### prepareStackTrace()?
|
### stackTraceLimit
|
||||||
|
|
||||||
> `static` `optional` **prepareStackTrace**: (`err`, `stackTraces`) => `any`
|
> `static` **stackTraceLimit**: `number`
|
||||||
|
|
||||||
Defined in: node_modules/.pnpm/@types+node\@22.13.5/node_modules/@types/node/globals.d.ts:143
|
Defined in: node_modules/.pnpm/@types+node\@22.17.2/node_modules/@types/node/globals.d.ts:161
|
||||||
|
|
||||||
Optional override for formatting stack traces
|
The `Error.stackTraceLimit` property specifies the number of stack frames
|
||||||
|
collected by a stack trace (whether generated by `new Error().stack` or
|
||||||
|
`Error.captureStackTrace(obj)`).
|
||||||
|
|
||||||
|
The default value is `10` but may be set to any valid JavaScript number. Changes
|
||||||
|
will affect any stack trace captured _after_ the value has been changed.
|
||||||
|
|
||||||
|
If set to a non-number value, or set to a negative number, stack traces will
|
||||||
|
not capture any frames.
|
||||||
|
|
||||||
|
#### Inherited from
|
||||||
|
|
||||||
|
`Error.stackTraceLimit`
|
||||||
|
|
||||||
|
## Methods
|
||||||
|
|
||||||
|
### captureStackTrace()
|
||||||
|
|
||||||
|
> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void`
|
||||||
|
|
||||||
|
Defined in: node_modules/.pnpm/@types+node\@22.17.2/node_modules/@types/node/globals.d.ts:145
|
||||||
|
|
||||||
|
Creates a `.stack` property on `targetObject`, which when accessed returns
|
||||||
|
a string representing the location in the code at which
|
||||||
|
`Error.captureStackTrace()` was called.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const myObject = {};
|
||||||
|
Error.captureStackTrace(myObject);
|
||||||
|
myObject.stack; // Similar to `new Error().stack`
|
||||||
|
```
|
||||||
|
|
||||||
|
The first line of the trace will be prefixed with
|
||||||
|
`${myObject.name}: ${myObject.message}`.
|
||||||
|
|
||||||
|
The optional `constructorOpt` argument accepts a function. If given, all frames
|
||||||
|
above `constructorOpt`, including `constructorOpt`, will be omitted from the
|
||||||
|
generated stack trace.
|
||||||
|
|
||||||
|
The `constructorOpt` argument is useful for hiding implementation
|
||||||
|
details of error generation from the user. For instance:
|
||||||
|
|
||||||
|
```js
|
||||||
|
function a() {
|
||||||
|
b();
|
||||||
|
}
|
||||||
|
|
||||||
|
function b() {
|
||||||
|
c();
|
||||||
|
}
|
||||||
|
|
||||||
|
function c() {
|
||||||
|
// Create an error without stack trace to avoid calculating the stack trace twice.
|
||||||
|
const { stackTraceLimit } = Error;
|
||||||
|
Error.stackTraceLimit = 0;
|
||||||
|
const error = new Error();
|
||||||
|
Error.stackTraceLimit = stackTraceLimit;
|
||||||
|
|
||||||
|
// Capture the stack trace above function b
|
||||||
|
Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
a();
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
##### targetObject
|
||||||
|
|
||||||
|
`object`
|
||||||
|
|
||||||
|
##### constructorOpt?
|
||||||
|
|
||||||
|
`Function`
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`void`
|
||||||
|
|
||||||
|
#### Inherited from
|
||||||
|
|
||||||
|
`Error.captureStackTrace`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### prepareStackTrace()
|
||||||
|
|
||||||
|
> `static` **prepareStackTrace**(`err`, `stackTraces`): `any`
|
||||||
|
|
||||||
|
Defined in: node_modules/.pnpm/@types+node\@22.17.2/node_modules/@types/node/globals.d.ts:149
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@@ -117,43 +207,3 @@ Optional override for formatting stack traces
|
|||||||
#### Inherited from
|
#### Inherited from
|
||||||
|
|
||||||
`Error.prepareStackTrace`
|
`Error.prepareStackTrace`
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### stackTraceLimit
|
|
||||||
|
|
||||||
> `static` **stackTraceLimit**: `number`
|
|
||||||
|
|
||||||
Defined in: node_modules/.pnpm/@types+node\@22.13.5/node_modules/@types/node/globals.d.ts:145
|
|
||||||
|
|
||||||
#### Inherited from
|
|
||||||
|
|
||||||
`Error.stackTraceLimit`
|
|
||||||
|
|
||||||
## Methods
|
|
||||||
|
|
||||||
### captureStackTrace()
|
|
||||||
|
|
||||||
> `static` **captureStackTrace**(`targetObject`, `constructorOpt`?): `void`
|
|
||||||
|
|
||||||
Defined in: node_modules/.pnpm/@types+node\@22.13.5/node_modules/@types/node/globals.d.ts:136
|
|
||||||
|
|
||||||
Create .stack property on a target object
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
|
|
||||||
##### targetObject
|
|
||||||
|
|
||||||
`object`
|
|
||||||
|
|
||||||
##### constructorOpt?
|
|
||||||
|
|
||||||
`Function`
|
|
||||||
|
|
||||||
#### Returns
|
|
||||||
|
|
||||||
`void`
|
|
||||||
|
|
||||||
#### Inherited from
|
|
||||||
|
|
||||||
`Error.captureStackTrace`
|
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
# Interface: ExternalDiagramDefinition
|
# Interface: ExternalDiagramDefinition
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:99](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L99)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:94](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L94)
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ Defined in: [packages/mermaid/src/diagram-api/types.ts:99](https://github.com/me
|
|||||||
|
|
||||||
> **detector**: `DiagramDetector`
|
> **detector**: `DiagramDetector`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:101](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L101)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:96](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L96)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ Defined in: [packages/mermaid/src/diagram-api/types.ts:101](https://github.com/m
|
|||||||
|
|
||||||
> **id**: `string`
|
> **id**: `string`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:100](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L100)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:95](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L95)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -34,4 +34,4 @@ Defined in: [packages/mermaid/src/diagram-api/types.ts:100](https://github.com/m
|
|||||||
|
|
||||||
> **loader**: `DiagramLoader`
|
> **loader**: `DiagramLoader`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:102](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L102)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:97](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L97)
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
# Interface: Mermaid
|
# Interface: Mermaid
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:418](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L418)
|
Defined in: [packages/mermaid/src/mermaid.ts:429](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L429)
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:418](https://github.com/mermaid-js/
|
|||||||
|
|
||||||
> **contentLoaded**: () => `void`
|
> **contentLoaded**: () => `void`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:436](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L436)
|
Defined in: [packages/mermaid/src/mermaid.ts:447](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L447)
|
||||||
|
|
||||||
\##contentLoaded Callback function that is called when page is loaded. This functions fetches
|
\##contentLoaded Callback function that is called when page is loaded. This functions fetches
|
||||||
configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the
|
configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the
|
||||||
@@ -34,7 +34,7 @@ page.
|
|||||||
|
|
||||||
> **detectType**: (`text`, `config`?) => `string`
|
> **detectType**: (`text`, `config`?) => `string`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:438](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L438)
|
Defined in: [packages/mermaid/src/mermaid.ts:449](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L449)
|
||||||
|
|
||||||
Detects the type of the graph text.
|
Detects the type of the graph text.
|
||||||
|
|
||||||
@@ -86,11 +86,28 @@ A graph definition key
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### getRegisteredDiagramsMetadata()
|
||||||
|
|
||||||
|
> **getRegisteredDiagramsMetadata**: () => `Pick`<[`ExternalDiagramDefinition`](ExternalDiagramDefinition.md), `"id"`>\[]
|
||||||
|
|
||||||
|
Defined in: [packages/mermaid/src/mermaid.ts:451](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L451)
|
||||||
|
|
||||||
|
Gets the metadata for all registered diagrams.
|
||||||
|
Currently only the id is returned.
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`Pick`<[`ExternalDiagramDefinition`](ExternalDiagramDefinition.md), `"id"`>\[]
|
||||||
|
|
||||||
|
An array of objects with the id of the diagram.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### ~~init()~~
|
### ~~init()~~
|
||||||
|
|
||||||
> **init**: (`config`?, `nodes`?, `callback`?) => `Promise`<`void`>
|
> **init**: (`config`?, `nodes`?, `callback`?) => `Promise`<`void`>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:431](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L431)
|
Defined in: [packages/mermaid/src/mermaid.ts:442](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L442)
|
||||||
|
|
||||||
## init
|
## init
|
||||||
|
|
||||||
@@ -138,7 +155,7 @@ Use [initialize](Mermaid.md#initialize) and [run](Mermaid.md#run) instead.
|
|||||||
|
|
||||||
> **initialize**: (`config`) => `void`
|
> **initialize**: (`config`) => `void`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:435](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L435)
|
Defined in: [packages/mermaid/src/mermaid.ts:446](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L446)
|
||||||
|
|
||||||
Used to set configurations for mermaid.
|
Used to set configurations for mermaid.
|
||||||
This function should be called before the run function.
|
This function should be called before the run function.
|
||||||
@@ -161,7 +178,7 @@ Configuration object for mermaid.
|
|||||||
|
|
||||||
> **mermaidAPI**: `Readonly`<{ `defaultConfig`: [`MermaidConfig`](MermaidConfig.md); `getConfig`: () => [`MermaidConfig`](MermaidConfig.md); `getDiagramFromText`: (`text`, `metadata`) => `Promise`<`Diagram`>; `getSiteConfig`: () => [`MermaidConfig`](MermaidConfig.md); `globalReset`: () => `void`; `initialize`: (`userOptions`) => `void`; `parse`: (`text`, `parseOptions`) => `Promise`<`false` | [`ParseResult`](ParseResult.md)>(`text`, `parseOptions`?) => `Promise`<[`ParseResult`](ParseResult.md)>; `render`: (`id`, `text`, `svgContainingElement`?) => `Promise`<[`RenderResult`](RenderResult.md)>; `reset`: () => `void`; `setConfig`: (`conf`) => [`MermaidConfig`](MermaidConfig.md); `updateSiteConfig`: (`conf`) => [`MermaidConfig`](MermaidConfig.md); }>
|
> **mermaidAPI**: `Readonly`<{ `defaultConfig`: [`MermaidConfig`](MermaidConfig.md); `getConfig`: () => [`MermaidConfig`](MermaidConfig.md); `getDiagramFromText`: (`text`, `metadata`) => `Promise`<`Diagram`>; `getSiteConfig`: () => [`MermaidConfig`](MermaidConfig.md); `globalReset`: () => `void`; `initialize`: (`userOptions`) => `void`; `parse`: (`text`, `parseOptions`) => `Promise`<`false` | [`ParseResult`](ParseResult.md)>(`text`, `parseOptions`?) => `Promise`<[`ParseResult`](ParseResult.md)>; `render`: (`id`, `text`, `svgContainingElement`?) => `Promise`<[`RenderResult`](RenderResult.md)>; `reset`: () => `void`; `setConfig`: (`conf`) => [`MermaidConfig`](MermaidConfig.md); `updateSiteConfig`: (`conf`) => [`MermaidConfig`](MermaidConfig.md); }>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:425](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L425)
|
Defined in: [packages/mermaid/src/mermaid.ts:436](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L436)
|
||||||
|
|
||||||
**`Internal`**
|
**`Internal`**
|
||||||
|
|
||||||
@@ -175,7 +192,7 @@ Use [parse](Mermaid.md#parse) and [render](Mermaid.md#render) instead. Please [o
|
|||||||
|
|
||||||
> **parse**: (`text`, `parseOptions`) => `Promise`<`false` | [`ParseResult`](ParseResult.md)>(`text`, `parseOptions`?) => `Promise`<[`ParseResult`](ParseResult.md)>
|
> **parse**: (`text`, `parseOptions`) => `Promise`<`false` | [`ParseResult`](ParseResult.md)>(`text`, `parseOptions`?) => `Promise`<[`ParseResult`](ParseResult.md)>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:426](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L426)
|
Defined in: [packages/mermaid/src/mermaid.ts:437](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L437)
|
||||||
|
|
||||||
Parse the text and validate the syntax.
|
Parse the text and validate the syntax.
|
||||||
|
|
||||||
@@ -243,7 +260,7 @@ Error if the diagram is invalid and parseOptions.suppressErrors is false or not
|
|||||||
|
|
||||||
> `optional` **parseError**: [`ParseErrorFunction`](../type-aliases/ParseErrorFunction.md)
|
> `optional` **parseError**: [`ParseErrorFunction`](../type-aliases/ParseErrorFunction.md)
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:420](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L420)
|
Defined in: [packages/mermaid/src/mermaid.ts:431](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L431)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -251,7 +268,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:420](https://github.com/mermaid-js/
|
|||||||
|
|
||||||
> **registerExternalDiagrams**: (`diagrams`, `opts`) => `Promise`<`void`>
|
> **registerExternalDiagrams**: (`diagrams`, `opts`) => `Promise`<`void`>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:434](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L434)
|
Defined in: [packages/mermaid/src/mermaid.ts:445](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L445)
|
||||||
|
|
||||||
Used to register external diagram types.
|
Used to register external diagram types.
|
||||||
|
|
||||||
@@ -281,7 +298,7 @@ If opts.lazyLoad is false, the diagrams will be loaded immediately.
|
|||||||
|
|
||||||
> **registerIconPacks**: (`iconLoaders`) => `void`
|
> **registerIconPacks**: (`iconLoaders`) => `void`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:439](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L439)
|
Defined in: [packages/mermaid/src/mermaid.ts:450](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L450)
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@@ -299,7 +316,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:439](https://github.com/mermaid-js/
|
|||||||
|
|
||||||
> **registerLayoutLoaders**: (`loaders`) => `void`
|
> **registerLayoutLoaders**: (`loaders`) => `void`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:433](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L433)
|
Defined in: [packages/mermaid/src/mermaid.ts:444](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L444)
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@@ -317,7 +334,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:433](https://github.com/mermaid-js/
|
|||||||
|
|
||||||
> **render**: (`id`, `text`, `svgContainingElement`?) => `Promise`<[`RenderResult`](RenderResult.md)>
|
> **render**: (`id`, `text`, `svgContainingElement`?) => `Promise`<[`RenderResult`](RenderResult.md)>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:427](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L427)
|
Defined in: [packages/mermaid/src/mermaid.ts:438](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L438)
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@@ -349,7 +366,7 @@ Deprecated for external use.
|
|||||||
|
|
||||||
> **run**: (`options`) => `Promise`<`void`>
|
> **run**: (`options`) => `Promise`<`void`>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:432](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L432)
|
Defined in: [packages/mermaid/src/mermaid.ts:443](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L443)
|
||||||
|
|
||||||
## run
|
## run
|
||||||
|
|
||||||
@@ -393,7 +410,7 @@ Optional runtime configs
|
|||||||
|
|
||||||
> **setParseErrorHandler**: (`parseErrorHandler`) => `void`
|
> **setParseErrorHandler**: (`parseErrorHandler`) => `void`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:437](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L437)
|
Defined in: [packages/mermaid/src/mermaid.ts:448](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L448)
|
||||||
|
|
||||||
## setParseErrorHandler Alternative to directly setting parseError using:
|
## setParseErrorHandler Alternative to directly setting parseError using:
|
||||||
|
|
||||||
@@ -424,4 +441,4 @@ New parseError() callback.
|
|||||||
|
|
||||||
> **startOnLoad**: `boolean`
|
> **startOnLoad**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:419](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L419)
|
Defined in: [packages/mermaid/src/mermaid.ts:430](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L430)
|
||||||
|
@@ -18,7 +18,7 @@ Defined in: [packages/mermaid/src/config.type.ts:58](https://github.com/mermaid-
|
|||||||
|
|
||||||
> `optional` **altFontFamily**: `string`
|
> `optional` **altFontFamily**: `string`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:122](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L122)
|
Defined in: [packages/mermaid/src/config.type.ts:132](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L132)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ Defined in: [packages/mermaid/src/config.type.ts:122](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **architecture**: `ArchitectureDiagramConfig`
|
> `optional` **architecture**: `ArchitectureDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:194](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L194)
|
Defined in: [packages/mermaid/src/config.type.ts:204](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L204)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ Defined in: [packages/mermaid/src/config.type.ts:194](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **arrowMarkerAbsolute**: `boolean`
|
> `optional` **arrowMarkerAbsolute**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:141](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L141)
|
Defined in: [packages/mermaid/src/config.type.ts:151](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L151)
|
||||||
|
|
||||||
Controls whether or arrow markers in html code are absolute paths or anchors.
|
Controls whether or arrow markers in html code are absolute paths or anchors.
|
||||||
This matters if you are using base tag settings.
|
This matters if you are using base tag settings.
|
||||||
@@ -45,7 +45,7 @@ This matters if you are using base tag settings.
|
|||||||
|
|
||||||
> `optional` **block**: `BlockDiagramConfig`
|
> `optional` **block**: `BlockDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:201](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L201)
|
Defined in: [packages/mermaid/src/config.type.ts:211](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L211)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ Defined in: [packages/mermaid/src/config.type.ts:201](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **c4**: `C4DiagramConfig`
|
> `optional` **c4**: `C4DiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:198](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L198)
|
Defined in: [packages/mermaid/src/config.type.ts:208](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L208)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ Defined in: [packages/mermaid/src/config.type.ts:198](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **class**: `ClassDiagramConfig`
|
> `optional` **class**: `ClassDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:187](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L187)
|
Defined in: [packages/mermaid/src/config.type.ts:197](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L197)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ Defined in: [packages/mermaid/src/config.type.ts:187](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **darkMode**: `boolean`
|
> `optional` **darkMode**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:113](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L113)
|
Defined in: [packages/mermaid/src/config.type.ts:123](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L123)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@ Defined in: [packages/mermaid/src/config.type.ts:113](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **deterministicIds**: `boolean`
|
> `optional` **deterministicIds**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:174](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L174)
|
Defined in: [packages/mermaid/src/config.type.ts:184](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L184)
|
||||||
|
|
||||||
This option controls if the generated ids of nodes in the SVG are
|
This option controls if the generated ids of nodes in the SVG are
|
||||||
generated randomly or based on a seed.
|
generated randomly or based on a seed.
|
||||||
@@ -93,7 +93,7 @@ should not change unless content is changed.
|
|||||||
|
|
||||||
> `optional` **deterministicIDSeed**: `string`
|
> `optional` **deterministicIDSeed**: `string`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:181](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L181)
|
Defined in: [packages/mermaid/src/config.type.ts:191](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L191)
|
||||||
|
|
||||||
This option is the optional seed for deterministic ids.
|
This option is the optional seed for deterministic ids.
|
||||||
If set to `undefined` but deterministicIds is `true`, a simple number iterator is used.
|
If set to `undefined` but deterministicIds is `true`, a simple number iterator is used.
|
||||||
@@ -105,7 +105,7 @@ You can set this attribute to base the seed on a static string.
|
|||||||
|
|
||||||
> `optional` **dompurifyConfig**: `Config`
|
> `optional` **dompurifyConfig**: `Config`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:203](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L203)
|
Defined in: [packages/mermaid/src/config.type.ts:213](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L213)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -115,12 +115,24 @@ Defined in: [packages/mermaid/src/config.type.ts:203](https://github.com/mermaid
|
|||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:91](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L91)
|
Defined in: [packages/mermaid/src/config.type.ts:91](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L91)
|
||||||
|
|
||||||
|
#### considerModelOrder?
|
||||||
|
|
||||||
|
> `optional` **considerModelOrder**: `"NONE"` | `"NODES_AND_EDGES"` | `"PREFER_EDGES"` | `"PREFER_NODES"`
|
||||||
|
|
||||||
|
Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting.
|
||||||
|
|
||||||
#### cycleBreakingStrategy?
|
#### cycleBreakingStrategy?
|
||||||
|
|
||||||
> `optional` **cycleBreakingStrategy**: `"GREEDY"` | `"DEPTH_FIRST"` | `"INTERACTIVE"` | `"MODEL_ORDER"` | `"GREEDY_MODEL_ORDER"`
|
> `optional` **cycleBreakingStrategy**: `"GREEDY"` | `"DEPTH_FIRST"` | `"INTERACTIVE"` | `"MODEL_ORDER"` | `"GREEDY_MODEL_ORDER"`
|
||||||
|
|
||||||
This strategy decides how to find cycles in the graph and deciding which edges need adjustment to break loops.
|
This strategy decides how to find cycles in the graph and deciding which edges need adjustment to break loops.
|
||||||
|
|
||||||
|
#### forceNodeModelOrder?
|
||||||
|
|
||||||
|
> `optional` **forceNodeModelOrder**: `boolean`
|
||||||
|
|
||||||
|
The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES.
|
||||||
|
|
||||||
#### mergeEdges?
|
#### mergeEdges?
|
||||||
|
|
||||||
> `optional` **mergeEdges**: `boolean`
|
> `optional` **mergeEdges**: `boolean`
|
||||||
@@ -139,7 +151,7 @@ Elk specific option affecting how nodes are placed.
|
|||||||
|
|
||||||
> `optional` **er**: `ErDiagramConfig`
|
> `optional` **er**: `ErDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:189](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L189)
|
Defined in: [packages/mermaid/src/config.type.ts:199](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L199)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -147,7 +159,7 @@ Defined in: [packages/mermaid/src/config.type.ts:189](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **flowchart**: `FlowchartDiagramConfig`
|
> `optional` **flowchart**: `FlowchartDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:182](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L182)
|
Defined in: [packages/mermaid/src/config.type.ts:192](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L192)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -155,7 +167,7 @@ Defined in: [packages/mermaid/src/config.type.ts:182](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **fontFamily**: `string`
|
> `optional` **fontFamily**: `string`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:121](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L121)
|
Defined in: [packages/mermaid/src/config.type.ts:131](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L131)
|
||||||
|
|
||||||
Specifies the font to be used in the rendered diagrams.
|
Specifies the font to be used in the rendered diagrams.
|
||||||
Can be any possible CSS `font-family`.
|
Can be any possible CSS `font-family`.
|
||||||
@@ -167,7 +179,7 @@ See <https://developer.mozilla.org/en-US/docs/Web/CSS/font-family>
|
|||||||
|
|
||||||
> `optional` **fontSize**: `number`
|
> `optional` **fontSize**: `number`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:205](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L205)
|
Defined in: [packages/mermaid/src/config.type.ts:215](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L215)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -175,7 +187,7 @@ Defined in: [packages/mermaid/src/config.type.ts:205](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **forceLegacyMathML**: `boolean`
|
> `optional` **forceLegacyMathML**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:163](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L163)
|
Defined in: [packages/mermaid/src/config.type.ts:173](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L173)
|
||||||
|
|
||||||
This option forces Mermaid to rely on KaTeX's own stylesheet for rendering MathML. Due to differences between OS
|
This option forces Mermaid to rely on KaTeX's own stylesheet for rendering MathML. Due to differences between OS
|
||||||
fonts and browser's MathML implementation, this option is recommended if consistent rendering is important.
|
fonts and browser's MathML implementation, this option is recommended if consistent rendering is important.
|
||||||
@@ -187,7 +199,7 @@ If set to true, ignores legacyMathML.
|
|||||||
|
|
||||||
> `optional` **gantt**: `GanttDiagramConfig`
|
> `optional` **gantt**: `GanttDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:184](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L184)
|
Defined in: [packages/mermaid/src/config.type.ts:194](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L194)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -195,7 +207,7 @@ Defined in: [packages/mermaid/src/config.type.ts:184](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **gitGraph**: `GitGraphDiagramConfig`
|
> `optional` **gitGraph**: `GitGraphDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:197](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L197)
|
Defined in: [packages/mermaid/src/config.type.ts:207](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L207)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -213,7 +225,7 @@ Defines the seed to be used when using handDrawn look. This is important for the
|
|||||||
|
|
||||||
> `optional` **htmlLabels**: `boolean`
|
> `optional` **htmlLabels**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:114](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L114)
|
Defined in: [packages/mermaid/src/config.type.ts:124](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L124)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -221,7 +233,7 @@ Defined in: [packages/mermaid/src/config.type.ts:114](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **journey**: `JourneyDiagramConfig`
|
> `optional` **journey**: `JourneyDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:185](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L185)
|
Defined in: [packages/mermaid/src/config.type.ts:195](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L195)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -229,7 +241,7 @@ Defined in: [packages/mermaid/src/config.type.ts:185](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **kanban**: `KanbanDiagramConfig`
|
> `optional` **kanban**: `KanbanDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:196](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L196)
|
Defined in: [packages/mermaid/src/config.type.ts:206](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L206)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -247,7 +259,7 @@ Defines which layout algorithm to use for rendering the diagram.
|
|||||||
|
|
||||||
> `optional` **legacyMathML**: `boolean`
|
> `optional` **legacyMathML**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:156](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L156)
|
Defined in: [packages/mermaid/src/config.type.ts:166](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L166)
|
||||||
|
|
||||||
This option specifies if Mermaid can expect the dependent to include KaTeX stylesheets for browsers
|
This option specifies if Mermaid can expect the dependent to include KaTeX stylesheets for browsers
|
||||||
without their own MathML implementation. If this option is disabled and MathML is not supported, the math
|
without their own MathML implementation. If this option is disabled and MathML is not supported, the math
|
||||||
@@ -260,7 +272,7 @@ fall back to legacy rendering for KaTeX.
|
|||||||
|
|
||||||
> `optional` **logLevel**: `0` | `2` | `1` | `"trace"` | `"debug"` | `"info"` | `"warn"` | `"error"` | `"fatal"` | `3` | `4` | `5`
|
> `optional` **logLevel**: `0` | `2` | `1` | `"trace"` | `"debug"` | `"info"` | `"warn"` | `"error"` | `"fatal"` | `3` | `4` | `5`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:127](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L127)
|
Defined in: [packages/mermaid/src/config.type.ts:137](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L137)
|
||||||
|
|
||||||
This option decides the amount of logging to be used by mermaid.
|
This option decides the amount of logging to be used by mermaid.
|
||||||
|
|
||||||
@@ -280,7 +292,7 @@ Defines which main look to use for the diagram.
|
|||||||
|
|
||||||
> `optional` **markdownAutoWrap**: `boolean`
|
> `optional` **markdownAutoWrap**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:206](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L206)
|
Defined in: [packages/mermaid/src/config.type.ts:216](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L216)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -308,7 +320,7 @@ The maximum allowed size of the users text diagram
|
|||||||
|
|
||||||
> `optional` **mindmap**: `MindmapDiagramConfig`
|
> `optional` **mindmap**: `MindmapDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:195](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L195)
|
Defined in: [packages/mermaid/src/config.type.ts:205](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L205)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -316,7 +328,7 @@ Defined in: [packages/mermaid/src/config.type.ts:195](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **packet**: `PacketDiagramConfig`
|
> `optional` **packet**: `PacketDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:200](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L200)
|
Defined in: [packages/mermaid/src/config.type.ts:210](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L210)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -324,7 +336,7 @@ Defined in: [packages/mermaid/src/config.type.ts:200](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **pie**: `PieDiagramConfig`
|
> `optional` **pie**: `PieDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:190](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L190)
|
Defined in: [packages/mermaid/src/config.type.ts:200](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L200)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -332,7 +344,7 @@ Defined in: [packages/mermaid/src/config.type.ts:190](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **quadrantChart**: `QuadrantChartConfig`
|
> `optional` **quadrantChart**: `QuadrantChartConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:191](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L191)
|
Defined in: [packages/mermaid/src/config.type.ts:201](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L201)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -340,7 +352,7 @@ Defined in: [packages/mermaid/src/config.type.ts:191](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **radar**: `RadarDiagramConfig`
|
> `optional` **radar**: `RadarDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:202](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L202)
|
Defined in: [packages/mermaid/src/config.type.ts:212](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L212)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -348,7 +360,7 @@ Defined in: [packages/mermaid/src/config.type.ts:202](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **requirement**: `RequirementDiagramConfig`
|
> `optional` **requirement**: `RequirementDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:193](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L193)
|
Defined in: [packages/mermaid/src/config.type.ts:203](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L203)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -356,7 +368,7 @@ Defined in: [packages/mermaid/src/config.type.ts:193](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **sankey**: `SankeyDiagramConfig`
|
> `optional` **sankey**: `SankeyDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:199](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L199)
|
Defined in: [packages/mermaid/src/config.type.ts:209](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L209)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -364,7 +376,7 @@ Defined in: [packages/mermaid/src/config.type.ts:199](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **secure**: `string`\[]
|
> `optional` **secure**: `string`\[]
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:148](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L148)
|
Defined in: [packages/mermaid/src/config.type.ts:158](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L158)
|
||||||
|
|
||||||
This option controls which `currentConfig` keys are considered secure and
|
This option controls which `currentConfig` keys are considered secure and
|
||||||
can only be changed via call to `mermaid.initialize`.
|
can only be changed via call to `mermaid.initialize`.
|
||||||
@@ -376,7 +388,7 @@ This prevents malicious graph directives from overriding a site's default securi
|
|||||||
|
|
||||||
> `optional` **securityLevel**: `"strict"` | `"loose"` | `"antiscript"` | `"sandbox"`
|
> `optional` **securityLevel**: `"strict"` | `"loose"` | `"antiscript"` | `"sandbox"`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:131](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L131)
|
Defined in: [packages/mermaid/src/config.type.ts:141](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L141)
|
||||||
|
|
||||||
Level of trust for parsed diagram
|
Level of trust for parsed diagram
|
||||||
|
|
||||||
@@ -386,7 +398,7 @@ Level of trust for parsed diagram
|
|||||||
|
|
||||||
> `optional` **sequence**: `SequenceDiagramConfig`
|
> `optional` **sequence**: `SequenceDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:183](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L183)
|
Defined in: [packages/mermaid/src/config.type.ts:193](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L193)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -394,7 +406,7 @@ Defined in: [packages/mermaid/src/config.type.ts:183](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **startOnLoad**: `boolean`
|
> `optional` **startOnLoad**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:135](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L135)
|
Defined in: [packages/mermaid/src/config.type.ts:145](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L145)
|
||||||
|
|
||||||
Dictates whether mermaid starts on Page load
|
Dictates whether mermaid starts on Page load
|
||||||
|
|
||||||
@@ -404,7 +416,7 @@ Dictates whether mermaid starts on Page load
|
|||||||
|
|
||||||
> `optional` **state**: `StateDiagramConfig`
|
> `optional` **state**: `StateDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:188](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L188)
|
Defined in: [packages/mermaid/src/config.type.ts:198](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L198)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -412,7 +424,7 @@ Defined in: [packages/mermaid/src/config.type.ts:188](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **suppressErrorRendering**: `boolean`
|
> `optional` **suppressErrorRendering**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:212](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L212)
|
Defined in: [packages/mermaid/src/config.type.ts:222](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L222)
|
||||||
|
|
||||||
Suppresses inserting 'Syntax error' diagram in the DOM.
|
Suppresses inserting 'Syntax error' diagram in the DOM.
|
||||||
This is useful when you want to control how to handle syntax errors in your application.
|
This is useful when you want to control how to handle syntax errors in your application.
|
||||||
@@ -450,7 +462,7 @@ Defined in: [packages/mermaid/src/config.type.ts:65](https://github.com/mermaid-
|
|||||||
|
|
||||||
> `optional` **timeline**: `TimelineDiagramConfig`
|
> `optional` **timeline**: `TimelineDiagramConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:186](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L186)
|
Defined in: [packages/mermaid/src/config.type.ts:196](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L196)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -458,7 +470,7 @@ Defined in: [packages/mermaid/src/config.type.ts:186](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **wrap**: `boolean`
|
> `optional` **wrap**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:204](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L204)
|
Defined in: [packages/mermaid/src/config.type.ts:214](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L214)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -466,4 +478,4 @@ Defined in: [packages/mermaid/src/config.type.ts:204](https://github.com/mermaid
|
|||||||
|
|
||||||
> `optional` **xyChart**: `XYChartConfig`
|
> `optional` **xyChart**: `XYChartConfig`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/config.type.ts:192](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L192)
|
Defined in: [packages/mermaid/src/config.type.ts:202](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.type.ts#L202)
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
# Interface: ParseOptions
|
# Interface: ParseOptions
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/types.ts:59](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L59)
|
Defined in: [packages/mermaid/src/types.ts:72](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L72)
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ Defined in: [packages/mermaid/src/types.ts:59](https://github.com/mermaid-js/mer
|
|||||||
|
|
||||||
> `optional` **suppressErrors**: `boolean`
|
> `optional` **suppressErrors**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/types.ts:64](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L64)
|
Defined in: [packages/mermaid/src/types.ts:77](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L77)
|
||||||
|
|
||||||
If `true`, parse will return `false` instead of throwing error when the diagram is invalid.
|
If `true`, parse will return `false` instead of throwing error when the diagram is invalid.
|
||||||
The `parseError` function will not be called.
|
The `parseError` function will not be called.
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
# Interface: ParseResult
|
# Interface: ParseResult
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/types.ts:67](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L67)
|
Defined in: [packages/mermaid/src/types.ts:80](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L80)
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ Defined in: [packages/mermaid/src/types.ts:67](https://github.com/mermaid-js/mer
|
|||||||
|
|
||||||
> **config**: [`MermaidConfig`](MermaidConfig.md)
|
> **config**: [`MermaidConfig`](MermaidConfig.md)
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/types.ts:75](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L75)
|
Defined in: [packages/mermaid/src/types.ts:88](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L88)
|
||||||
|
|
||||||
The config passed as YAML frontmatter or directives
|
The config passed as YAML frontmatter or directives
|
||||||
|
|
||||||
@@ -28,6 +28,6 @@ The config passed as YAML frontmatter or directives
|
|||||||
|
|
||||||
> **diagramType**: `string`
|
> **diagramType**: `string`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/types.ts:71](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L71)
|
Defined in: [packages/mermaid/src/types.ts:84](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L84)
|
||||||
|
|
||||||
The diagram type, e.g. 'flowchart', 'sequence', etc.
|
The diagram type, e.g. 'flowchart', 'sequence', etc.
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
# Interface: RenderResult
|
# Interface: RenderResult
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/types.ts:85](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L85)
|
Defined in: [packages/mermaid/src/types.ts:98](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L98)
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ Defined in: [packages/mermaid/src/types.ts:85](https://github.com/mermaid-js/mer
|
|||||||
|
|
||||||
> `optional` **bindFunctions**: (`element`) => `void`
|
> `optional` **bindFunctions**: (`element`) => `void`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/types.ts:103](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L103)
|
Defined in: [packages/mermaid/src/types.ts:116](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L116)
|
||||||
|
|
||||||
Bind function to be called after the svg has been inserted into the DOM.
|
Bind function to be called after the svg has been inserted into the DOM.
|
||||||
This is necessary for adding event listeners to the elements in the svg.
|
This is necessary for adding event listeners to the elements in the svg.
|
||||||
@@ -45,7 +45,7 @@ bindFunctions?.(div); // To call bindFunctions only if it's present.
|
|||||||
|
|
||||||
> **diagramType**: `string`
|
> **diagramType**: `string`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/types.ts:93](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L93)
|
Defined in: [packages/mermaid/src/types.ts:106](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L106)
|
||||||
|
|
||||||
The diagram type, e.g. 'flowchart', 'sequence', etc.
|
The diagram type, e.g. 'flowchart', 'sequence', etc.
|
||||||
|
|
||||||
@@ -55,6 +55,6 @@ The diagram type, e.g. 'flowchart', 'sequence', etc.
|
|||||||
|
|
||||||
> **svg**: `string`
|
> **svg**: `string`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/types.ts:89](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L89)
|
Defined in: [packages/mermaid/src/types.ts:102](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L102)
|
||||||
|
|
||||||
The svg code for the rendered graph.
|
The svg code for the rendered graph.
|
||||||
|
@@ -12,4 +12,4 @@
|
|||||||
|
|
||||||
> **SVG**: `d3.Selection`<`SVGSVGElement`, `unknown`, `Element` | `null`, `unknown`>
|
> **SVG**: `d3.Selection`<`SVGSVGElement`, `unknown`, `Element` | `null`, `unknown`>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:130](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L130)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:126](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L126)
|
||||||
|
@@ -12,4 +12,4 @@
|
|||||||
|
|
||||||
> **SVGGroup**: `d3.Selection`<`SVGGElement`, `unknown`, `Element` | `null`, `unknown`>
|
> **SVGGroup**: `d3.Selection`<`SVGGElement`, `unknown`, `Element` | `null`, `unknown`>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:132](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L132)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:128](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L128)
|
||||||
|
@@ -12,4 +12,4 @@
|
|||||||
|
|
||||||
> `const` **default**: [`Mermaid`](../interfaces/Mermaid.md)
|
> `const` **default**: [`Mermaid`](../interfaces/Mermaid.md)
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:442](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L442)
|
Defined in: [packages/mermaid/src/mermaid.ts:454](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L454)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user