mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-15 06:19:24 +02:00
Compare commits
3239 Commits
v10.9.0
...
@mermaid-j
Author | SHA1 | Date | |
---|---|---|---|
![]() |
1aa2870224 | ||
![]() |
8fbcbb6dc9 | ||
![]() |
3e545d7925 | ||
![]() |
75d2a259ed | ||
![]() |
746280b3e2 | ||
![]() |
fa4e30bb15 | ||
![]() |
950b107dd4 | ||
![]() |
35b84761a9 | ||
![]() |
0da2922ee7 | ||
![]() |
85eba01663 | ||
![]() |
2b3cb6a362 | ||
![]() |
89ac2932c4 | ||
![]() |
e828609749 | ||
![]() |
91f141f772 | ||
![]() |
c77b968f1e | ||
![]() |
ba13981905 | ||
![]() |
a7a94b95e1 | ||
![]() |
31f141c61a | ||
![]() |
fb017bebfd | ||
![]() |
648698a43a | ||
![]() |
a5e4729c76 | ||
![]() |
c884def5fc | ||
![]() |
592c5bb880 | ||
![]() |
da0c6c6c32 | ||
![]() |
d9396eedd6 | ||
![]() |
5f9601b6a8 | ||
![]() |
378f8ece0c | ||
![]() |
148a42a31a | ||
![]() |
8980ca4526 | ||
![]() |
caa04aad8b | ||
![]() |
3dc06ea9bd | ||
![]() |
c311c1ba5d | ||
![]() |
11a86d9c06 | ||
![]() |
037bec189c | ||
![]() |
9b164dd185 | ||
![]() |
4ee124bf91 | ||
![]() |
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 | ||
![]() |
d628a971ef | ||
![]() |
8049b6aef8 | ||
![]() |
84802118be | ||
![]() |
e2ef425245 | ||
![]() |
da98732961 | ||
![]() |
efa11a7325 | ||
![]() |
e5f6ea0b13 | ||
![]() |
9562a769db | ||
![]() |
5cfda33d04 | ||
![]() |
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 | ||
![]() |
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 | ||
![]() |
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 | ||
![]() |
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 | ||
![]() |
56c6853e05 | ||
![]() |
01e2af0cfd | ||
![]() |
f55ff99f74 | ||
![]() |
d25770ee73 | ||
![]() |
2b05d7e1ed | ||
![]() |
30735266a4 | ||
![]() |
926862c196 | ||
![]() |
44e668e704 | ||
![]() |
404216273a | ||
![]() |
5a6831ae7e | ||
![]() |
03119fea2c | ||
![]() |
5351211256 | ||
![]() |
92c0aa4331 | ||
![]() |
7bd5c03d87 | ||
![]() |
de72e18a7f | ||
![]() |
3f493acc6a | ||
![]() |
d2239549e6 | ||
![]() |
f8d8f74f34 | ||
![]() |
74a9336d42 | ||
![]() |
ca2b16119d | ||
![]() |
2d9034c983 | ||
![]() |
aa6cb86899 | ||
![]() |
99797632ab | ||
![]() |
4fdb1d5906 | ||
![]() |
a2bf5103ce | ||
![]() |
8b7a4db2ef | ||
![]() |
a43965ac2c | ||
![]() |
8eb2000b98 | ||
![]() |
73f8dee643 | ||
![]() |
8bdd7ec719 | ||
![]() |
7e1cec95ef | ||
![]() |
ec2c76a703 | ||
![]() |
7facc8f50d | ||
![]() |
52cd9e8e55 | ||
![]() |
9208e7faaf | ||
![]() |
d0ee6079b3 | ||
![]() |
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 | ||
![]() |
7b2083926d | ||
![]() |
bb9210c55e | ||
![]() |
16d9b63457 | ||
![]() |
bf3370fa5b | ||
![]() |
9f9091e5e4 | ||
![]() |
d1b1a67d99 | ||
![]() |
ac625bdc7f | ||
![]() |
40b85c3bbf | ||
![]() |
f8e329f890 | ||
![]() |
9b9cec9809 | ||
![]() |
ad653138e1 | ||
![]() |
a401a4ab49 | ||
![]() |
2bc3a0f97c | ||
![]() |
f5f3b08f12 | ||
![]() |
ce68da3fee | ||
![]() |
f7e31a978b | ||
![]() |
2d583b186d | ||
![]() |
b322392f97 | ||
![]() |
573b6d9ba7 | ||
![]() |
ea39254556 | ||
![]() |
044a3d9686 | ||
![]() |
f28f7b713d | ||
![]() |
cfbd05515e | ||
![]() |
1125f5a283 | ||
![]() |
fa4d4806fa | ||
![]() |
20927a1c8e | ||
![]() |
b2ab34ca2b | ||
![]() |
55e1dd0ead | ||
![]() |
a403f78168 | ||
![]() |
6c45aa3602 | ||
![]() |
85ce310884 | ||
![]() |
fac570cb8c | ||
![]() |
a7bcd7dee5 | ||
![]() |
91bcd2da8c | ||
![]() |
ec2330875e | ||
![]() |
bb5a7a585e | ||
![]() |
5d1b27132a | ||
![]() |
288abd01e0 | ||
![]() |
95d73bc3f0 | ||
![]() |
0f5125b5e3 | ||
![]() |
12c120368d | ||
![]() |
a7f2c0bc34 | ||
![]() |
5e97b2f764 | ||
![]() |
d53c66dde5 | ||
![]() |
1fb91d14c9 | ||
![]() |
d80cc38bb2 | ||
![]() |
d6022408a9 | ||
![]() |
41a737f682 | ||
![]() |
0c2e1bc3fe | ||
![]() |
f399561565 | ||
![]() |
05bdf0e20e | ||
![]() |
292cd83439 | ||
![]() |
3848649bdd | ||
![]() |
1341e3d156 | ||
![]() |
1d6a55a311 | ||
![]() |
4d25caba8e | ||
![]() |
f6335571cc | ||
![]() |
bb895d8cf4 | ||
![]() |
c8f01b14a8 | ||
![]() |
cdaea58096 | ||
![]() |
b3d8fa917f | ||
![]() |
91931531a6 | ||
![]() |
50e4641666 | ||
![]() |
1bed6432ac | ||
![]() |
ee5dc5ae80 | ||
![]() |
b7940b64cd | ||
![]() |
1ddaf10b89 | ||
![]() |
02b833f251 | ||
![]() |
0ce0c3cd75 | ||
![]() |
00ca7ac94f | ||
![]() |
34cd280ae4 | ||
![]() |
d0986ace8c | ||
![]() |
11f7f426cb | ||
![]() |
a31adc63a9 | ||
![]() |
bc2bd3d769 | ||
![]() |
f047b81bb9 | ||
![]() |
7db1d672a9 | ||
![]() |
91e2c04e56 | ||
![]() |
a2f0d8e4d6 | ||
![]() |
00a8dc47f5 | ||
![]() |
5caaf36a3b | ||
![]() |
4128197468 | ||
![]() |
40494b16f5 | ||
![]() |
840a197044 | ||
![]() |
ae0fcbfb8b | ||
![]() |
f60ecfc2c4 | ||
![]() |
a38a0ab869 | ||
![]() |
06877dcc47 | ||
![]() |
050fbd9da2 | ||
![]() |
1b5672e73d | ||
![]() |
1be1e34e72 | ||
![]() |
b22103b769 | ||
![]() |
9e29fd0c4a | ||
![]() |
a2650adec2 | ||
![]() |
33f9d8bdc9 | ||
![]() |
446f6a7701 | ||
![]() |
2ace92858f | ||
![]() |
b0c1460940 | ||
![]() |
510fd0fe71 | ||
![]() |
9268cc2e07 | ||
![]() |
7c7fd4bc5e | ||
![]() |
baa261fdd1 | ||
![]() |
aaf15fccc1 | ||
![]() |
3724d11255 | ||
![]() |
5510f18d33 | ||
![]() |
edbf125c83 | ||
![]() |
ad6248147c | ||
![]() |
d47e4724cb | ||
![]() |
4f592115e0 | ||
![]() |
d2d78a5576 | ||
![]() |
5447a9f4f9 | ||
![]() |
dc698c0309 | ||
![]() |
31665fbad8 | ||
![]() |
a5561b9be0 | ||
![]() |
e045e0b42d | ||
![]() |
60db05b75c | ||
![]() |
3be59a7b4d | ||
![]() |
ff00141a0a | ||
![]() |
374ebbb087 | ||
![]() |
9d06d8f31e | ||
![]() |
97b12e9718 | ||
![]() |
50816a7f98 | ||
![]() |
a318ea3692 | ||
![]() |
1424127127 | ||
![]() |
9c27125f2d | ||
![]() |
6140be24da | ||
![]() |
de40d80ef9 | ||
![]() |
c9b8f034d5 | ||
![]() |
2fb7bc2806 | ||
![]() |
162e9e50ad | ||
![]() |
225e5dde60 | ||
![]() |
726b42ba00 | ||
![]() |
c22b5701db | ||
![]() |
c6b715f737 | ||
![]() |
bc69180958 | ||
![]() |
83a6e696c6 | ||
![]() |
a64b14dbfd | ||
![]() |
a89e001d01 | ||
![]() |
6a81a907d1 | ||
![]() |
1c8b996cbb | ||
![]() |
eb8e4da5f6 | ||
![]() |
16573d97f5 | ||
![]() |
2fdd24ab15 | ||
![]() |
c01aee842a | ||
![]() |
2c22e80dba | ||
![]() |
0518e9cfd7 | ||
![]() |
fe2e73ed94 | ||
![]() |
4f5c4b8349 | ||
![]() |
ce99d968f4 | ||
![]() |
877a7e288a | ||
![]() |
4eeea1076c | ||
![]() |
f43e35039f | ||
![]() |
dbf885b077 | ||
![]() |
78c1d97f0f | ||
![]() |
5abda14809 | ||
![]() |
ad2f17205a | ||
![]() |
bb4b92a663 | ||
![]() |
9bd599666b | ||
![]() |
36894fe14a | ||
![]() |
efe834e772 | ||
![]() |
98fe7a6e03 | ||
![]() |
8857e77495 | ||
![]() |
5857953d51 | ||
![]() |
5dab86a067 | ||
![]() |
9ef35549f4 | ||
![]() |
4beed963b8 | ||
![]() |
3122c3b75c | ||
![]() |
dffa689e2b | ||
![]() |
5ed2278887 | ||
![]() |
d6376ca1ff | ||
![]() |
99bd0c48fa | ||
![]() |
eb7289a65a | ||
![]() |
80c6b945fa | ||
![]() |
34a12103d0 | ||
![]() |
46b8a75199 | ||
![]() |
1dca45a76d | ||
![]() |
d1d5bd14f6 | ||
![]() |
974867a089 | ||
![]() |
52532a7801 | ||
![]() |
6eb56b9363 | ||
![]() |
f7c91a72cb | ||
![]() |
c53e044559 | ||
![]() |
d846a8c65a | ||
![]() |
c3ba23a4e9 | ||
![]() |
c688c387a0 | ||
![]() |
300fb85a73 | ||
![]() |
9c6e554153 | ||
![]() |
b5c78b7225 | ||
![]() |
26bd8cb53c | ||
![]() |
a81c3187ba | ||
![]() |
da6361f652 | ||
![]() |
167fef5cff | ||
![]() |
3233c63fc0 | ||
![]() |
1182aaaf4d | ||
![]() |
b78c061a8f | ||
![]() |
39a5abc714 | ||
![]() |
6650efc1a6 | ||
![]() |
a4754ad195 | ||
![]() |
91cbe5bc01 | ||
![]() |
d2996dd553 | ||
![]() |
7a7836ad90 | ||
![]() |
7ca9242b24 | ||
![]() |
ebfcf3ea07 | ||
![]() |
62edea6b33 | ||
![]() |
72eda9ce52 | ||
![]() |
cfd84e54d5 | ||
![]() |
cfe710f42b | ||
![]() |
438f388b5c | ||
![]() |
e89c77a5ca | ||
![]() |
87e76bbcf5 | ||
![]() |
0b4754ed60 | ||
![]() |
fe6f05eec9 | ||
![]() |
31984acfe0 | ||
![]() |
9badfe7489 | ||
![]() |
548256507d | ||
![]() |
d8ebf7a136 | ||
![]() |
27912bee8c | ||
![]() |
a758b24b75 | ||
![]() |
3004d4d93a | ||
![]() |
88abf46fc3 | ||
![]() |
2eeba0e999 | ||
![]() |
397684fe49 | ||
![]() |
bc1f769f13 | ||
![]() |
f6592235a2 | ||
![]() |
57805dafa4 | ||
![]() |
3b92f979e3 | ||
![]() |
7a7e4b4e6f | ||
![]() |
c5843bee23 | ||
![]() |
7aef182fbf | ||
![]() |
2fb6ea7b77 | ||
![]() |
add48da4c8 | ||
![]() |
ada42b892c | ||
![]() |
62f9261c4e | ||
![]() |
a19b42f3c2 | ||
![]() |
9f90f4f23a | ||
![]() |
451c886f50 | ||
![]() |
0a1a112605 | ||
![]() |
d63d3bf1e7 | ||
![]() |
33e5694a75 | ||
![]() |
302ba725ae | ||
![]() |
63cf7cbd94 | ||
![]() |
8ab60c3a7a | ||
![]() |
0342579b9c | ||
![]() |
348401c4f4 | ||
![]() |
8145199203 | ||
![]() |
f408e938d4 | ||
![]() |
6471ae4d49 | ||
![]() |
af6e2b4cb6 | ||
![]() |
7a4a52b50a | ||
![]() |
ee05d8588f | ||
![]() |
58175f647e | ||
![]() |
5f7c68def7 | ||
![]() |
82d019234a | ||
![]() |
d618b8398e | ||
![]() |
ec0e3e4cd6 | ||
![]() |
db4ea020ba | ||
![]() |
72cf84cb40 | ||
![]() |
5366e8b692 | ||
![]() |
6ca8f46d37 | ||
![]() |
b2dfbb6ffd | ||
![]() |
ffa7804af0 | ||
![]() |
f454865b97 | ||
![]() |
d83b1a5dbc | ||
![]() |
d07f85e6ac | ||
![]() |
a79c0f4c00 | ||
![]() |
4a19740aea | ||
![]() |
fbac4c61bb | ||
![]() |
4dbaa2b5d6 | ||
![]() |
9cad3c7aea | ||
![]() |
56d66cdabc | ||
![]() |
a0e5408850 | ||
![]() |
d155e414a0 | ||
![]() |
d81ddf246c | ||
![]() |
ffe1bb359f | ||
![]() |
88a39f8e16 | ||
![]() |
9fb46ae88f | ||
![]() |
798fb98b2a | ||
![]() |
7c0af381d1 | ||
![]() |
384f59eee2 | ||
![]() |
127390978a | ||
![]() |
baf3adf1c0 | ||
![]() |
d0768cbc37 | ||
![]() |
f00507449b | ||
![]() |
509793d5c2 | ||
![]() |
8dd0e7a794 | ||
![]() |
8a8d169e27 | ||
![]() |
b53cf0a1fb | ||
![]() |
58fa99787c | ||
![]() |
1a9a9f43e6 | ||
![]() |
aeec4b7f77 | ||
![]() |
40686f198c | ||
![]() |
295af02744 | ||
![]() |
a3f35f6367 | ||
![]() |
523286bbcb | ||
![]() |
c296f48ebe | ||
![]() |
9609aced14 | ||
![]() |
97788df7e3 | ||
![]() |
47d4d56fa6 | ||
![]() |
5e9c887385 | ||
![]() |
fdb8ae5b53 | ||
![]() |
65ff22d94b | ||
![]() |
5cf093ca9e | ||
![]() |
03ff28e927 | ||
![]() |
16a1a90705 | ||
![]() |
3221cbfa0a | ||
![]() |
f0a8ccb177 | ||
![]() |
a30705cdcc | ||
![]() |
e2de55202f | ||
![]() |
b4043840ca | ||
![]() |
8f3e17e386 | ||
![]() |
4e950e7256 | ||
![]() |
de3e381ccf | ||
![]() |
b2fde76753 | ||
![]() |
b5587d8b87 | ||
![]() |
9b75aeb224 | ||
![]() |
993858cdc8 | ||
![]() |
f4e1f07412 | ||
![]() |
09e0de6053 | ||
![]() |
9a50bf5237 | ||
![]() |
5747009c8f | ||
![]() |
dc513ec211 | ||
![]() |
5f58d4f7b0 | ||
![]() |
3536ceb5d3 | ||
![]() |
7ed33a91c0 | ||
![]() |
f8bf03d365 | ||
![]() |
4202ee521a | ||
![]() |
0e25fd42f9 | ||
![]() |
feee5d1c8c | ||
![]() |
ab6d92c544 | ||
![]() |
d27d4abab7 | ||
![]() |
3162cff7a9 | ||
![]() |
74edf7a027 | ||
![]() |
9681a27b31 | ||
![]() |
22091f6182 | ||
![]() |
ba534985ec | ||
![]() |
edc1ae1e0c | ||
![]() |
c00f3fb090 | ||
![]() |
23bc25ef94 | ||
![]() |
42dfa20fd4 | ||
![]() |
cc2373ea89 | ||
![]() |
22bc234ff3 | ||
![]() |
fa48f9580f | ||
![]() |
38ca14da43 | ||
![]() |
74a56fc58a | ||
![]() |
08ffbb61e9 | ||
![]() |
232e60c8cb | ||
![]() |
cd9ca76e39 | ||
![]() |
c13d988392 | ||
![]() |
15ffe2021a | ||
![]() |
4fbc19e0d7 | ||
![]() |
02f661a103 | ||
![]() |
130638f6e1 | ||
![]() |
9ab2761c1d | ||
![]() |
41d7a549b0 | ||
![]() |
2b8998fdd1 | ||
![]() |
202ef31071 | ||
![]() |
b09f2e836a | ||
![]() |
6a814a0d91 | ||
![]() |
b07bb9b3ff | ||
![]() |
5120ed09ab | ||
![]() |
081681f05b | ||
![]() |
f7648e85d9 | ||
![]() |
fe833e6d16 | ||
![]() |
809f4eb609 | ||
![]() |
61f3fc5ede | ||
![]() |
90bbf90a83 | ||
![]() |
92efc24283 | ||
![]() |
1c45df4567 | ||
![]() |
1575a93136 | ||
![]() |
bde653b1c2 | ||
![]() |
e9e663ffa3 | ||
![]() |
963efa64c7 | ||
![]() |
e2e5101005 | ||
![]() |
6ea13cded3 | ||
![]() |
c063b92cc9 | ||
![]() |
304f133227 | ||
![]() |
54a0dd0af6 | ||
![]() |
54ee6bd46d | ||
![]() |
f0e47f29fd | ||
![]() |
ab5b7694c6 | ||
![]() |
eb76dfb1ca | ||
![]() |
28d7ec092c | ||
![]() |
84b03f3a08 | ||
![]() |
f9ac9867c1 | ||
![]() |
ee6fb83265 | ||
![]() |
46c16c963b | ||
![]() |
32a68d489e | ||
![]() |
7bbebff583 | ||
![]() |
c432aec2f6 | ||
![]() |
64237fbaa7 | ||
![]() |
d90609b26c | ||
![]() |
adec6cd254 | ||
![]() |
5ce60cacbf | ||
![]() |
9ddedb0b49 | ||
![]() |
e977deaf11 | ||
![]() |
85a7771b70 | ||
![]() |
3778fef1a1 | ||
![]() |
0bff720e20 | ||
![]() |
7ba415dad1 | ||
![]() |
7f47678862 | ||
![]() |
127bac1147 | ||
![]() |
9a90d795ca | ||
![]() |
f7fe8f2f59 | ||
![]() |
1d9c2aab8d | ||
![]() |
8fba9c1236 | ||
![]() |
04800ff677 | ||
![]() |
5d3d1047a4 | ||
![]() |
0f08c3bc9c | ||
![]() |
7809b5a93f | ||
![]() |
ef9bb53e67 | ||
![]() |
3e32332814 | ||
![]() |
e1aab25144 | ||
![]() |
c8697301ee | ||
![]() |
fcb1de915b | ||
![]() |
e345294658 | ||
![]() |
9936099e25 | ||
![]() |
59352ad4d8 | ||
![]() |
ba70f15de5 | ||
![]() |
e70b069576 | ||
![]() |
28bab4a323 | ||
![]() |
6cc31b7453 | ||
![]() |
29ca1504dd | ||
![]() |
16d2251e43 | ||
![]() |
bc2cc61240 | ||
![]() |
6836e9c7a8 | ||
![]() |
8dc016e7f9 | ||
![]() |
3cad7984a3 | ||
![]() |
f5bae98098 | ||
![]() |
0695893e30 | ||
![]() |
9ef6090c8c | ||
![]() |
fa6f3e5fff | ||
![]() |
ec0d9c389a | ||
![]() |
323b07a2e4 | ||
![]() |
c153d0455f | ||
![]() |
9b00f1f2fb | ||
![]() |
a055ff7db3 | ||
![]() |
d032723a47 | ||
![]() |
daf83f596d | ||
![]() |
df636c6d0a | ||
![]() |
64554a6c60 | ||
![]() |
becadf0a7d | ||
![]() |
54d485f173 | ||
![]() |
b4f5b8ddaf | ||
![]() |
cb5c1ae367 | ||
![]() |
b29081d4e8 | ||
![]() |
654097c438 | ||
![]() |
1e672868c4 | ||
![]() |
bff32827b5 | ||
![]() |
65f9b29b86 | ||
![]() |
9868f3a4c3 | ||
![]() |
b4879d13b8 | ||
![]() |
95964b5487 | ||
![]() |
4e17da0a30 | ||
![]() |
d8bf155f0e | ||
![]() |
0b4f85230a | ||
![]() |
0dff4ca438 | ||
![]() |
cc29437ede | ||
![]() |
dfaaf361f3 | ||
![]() |
37538310d3 | ||
![]() |
c7ae08abc3 | ||
![]() |
69973eaa02 | ||
![]() |
d3b2c7ea18 | ||
![]() |
68f41f685d | ||
![]() |
255279eb22 | ||
![]() |
fe3cffbb67 | ||
![]() |
2a91849a38 | ||
![]() |
082de76eef | ||
![]() |
570ae78b15 | ||
![]() |
885ac6f947 | ||
![]() |
8328f74751 | ||
![]() |
01b5079562 | ||
![]() |
6b23647bec | ||
![]() |
193fdb225e | ||
![]() |
c8ce416aba | ||
![]() |
1388662132 | ||
![]() |
757627427b | ||
![]() |
7cbd80af33 | ||
![]() |
16c448b89b | ||
![]() |
c218e365bd | ||
![]() |
f507dbbe00 | ||
![]() |
9966beb99b | ||
![]() |
f4713332c0 | ||
![]() |
63ff5b1d98 | ||
![]() |
cb0a4703bd | ||
![]() |
7e71b85668 | ||
![]() |
1dd7bcb0a6 | ||
![]() |
bbf6ab1206 | ||
![]() |
56f522ec50 | ||
![]() |
d4e5acc530 | ||
![]() |
ef9cbb61e5 | ||
![]() |
8a0ecc1fe9 | ||
![]() |
c6e1271ef7 | ||
![]() |
b02294376a | ||
![]() |
97c61d818c | ||
![]() |
1c66237fa8 | ||
![]() |
8ef5d324fd | ||
![]() |
c1ca3511c4 | ||
![]() |
953d288957 | ||
![]() |
143806b360 | ||
![]() |
a381ab6c41 | ||
![]() |
93e20fdaa3 | ||
![]() |
ece3b254db | ||
![]() |
dd42305e8c | ||
![]() |
c34fd152d5 | ||
![]() |
8f0e0b9c39 | ||
![]() |
fe8932e906 | ||
![]() |
5a2a8f9bd4 | ||
![]() |
9854748fc3 | ||
![]() |
73bbde8476 | ||
![]() |
01a41ef530 | ||
![]() |
124d2f72dd | ||
![]() |
34e8946c58 | ||
![]() |
0197c08916 | ||
![]() |
ef30283fe9 | ||
![]() |
dffaf9fa8f | ||
![]() |
9168d5d1f4 | ||
![]() |
f33ebfaf7a | ||
![]() |
054f929150 | ||
![]() |
8cb1c68166 | ||
![]() |
d752240efc | ||
![]() |
8d0902de4c | ||
![]() |
f6c32b6da4 | ||
![]() |
bdf145ffe3 | ||
![]() |
75ca802b62 | ||
![]() |
3f85b6179d | ||
![]() |
5ae5a0cea3 | ||
![]() |
b315d70af5 | ||
![]() |
848be3d129 | ||
![]() |
5fabd414fb | ||
![]() |
17e2f9e0d4 | ||
![]() |
7fa8b35bdc | ||
![]() |
e6ea4eae50 | ||
![]() |
7401cb8f6a | ||
![]() |
e765007b21 | ||
![]() |
b5cd101d86 | ||
![]() |
da12ace593 | ||
![]() |
2c676b6222 | ||
![]() |
0af08276d2 | ||
![]() |
d790e353b0 | ||
![]() |
e07e9b9daf | ||
![]() |
948ec4d1ce | ||
![]() |
e62d268c89 | ||
![]() |
742ad7c130 | ||
![]() |
56cc3728c5 | ||
![]() |
fb86e5c689 | ||
![]() |
01e5346004 | ||
![]() |
1b34077f55 | ||
![]() |
87fa698c79 | ||
![]() |
b49afeefc2 | ||
![]() |
8ace44b428 | ||
![]() |
39a6c308fb | ||
![]() |
2771b14f65 | ||
![]() |
9ff09f28e7 | ||
![]() |
eddd8313c9 | ||
![]() |
f8746bee04 | ||
![]() |
bb97fdbd1e | ||
![]() |
e3ec6ed993 | ||
![]() |
6df1fa1a03 | ||
![]() |
fd6b875f87 | ||
![]() |
be3da0b39d | ||
![]() |
64bc7f4bd9 | ||
![]() |
75e796f183 | ||
![]() |
6cc0132e0a | ||
![]() |
4bc70b7325 | ||
![]() |
c828867852 | ||
![]() |
bfdd0f244d | ||
![]() |
5fca47c5ec | ||
![]() |
4cd3f0a8bb | ||
![]() |
73653c348d | ||
![]() |
0bc07f356d | ||
![]() |
6d33d93b15 | ||
![]() |
d54eed9d62 | ||
![]() |
0fdfd91069 | ||
![]() |
93577619b2 | ||
![]() |
b602f67abe | ||
![]() |
0e819ae050 | ||
![]() |
10f11e016f | ||
![]() |
b7d66bb975 | ||
![]() |
74695d2e88 | ||
![]() |
38eed7c988 | ||
![]() |
d16e46a386 | ||
![]() |
97820a50c2 | ||
![]() |
df948bcf2c | ||
![]() |
cfd097b029 | ||
![]() |
ffc1fef599 | ||
![]() |
1e8e4e4b73 | ||
![]() |
b67cdb171d | ||
![]() |
c789172b89 | ||
![]() |
1d68c4f075 | ||
![]() |
606ecf8990 | ||
![]() |
16a5fc05d6 | ||
![]() |
62fd359c0e | ||
![]() |
b0f4ace3a1 | ||
![]() |
6f506c30eb | ||
![]() |
cf2c7f7f8c | ||
![]() |
6041729ae2 | ||
![]() |
b7ef8b2b5a | ||
![]() |
bfea287b44 | ||
![]() |
9afb181d06 | ||
![]() |
cfe7cce41d | ||
![]() |
33029c8bd2 | ||
![]() |
e54d10c706 | ||
![]() |
df22fb5e00 | ||
![]() |
5d2b0f74af | ||
![]() |
86c7532f46 | ||
![]() |
723b8f1d32 | ||
![]() |
5be5aa3dfa | ||
![]() |
69e12fd67d | ||
![]() |
8aa87c7091 | ||
![]() |
e1024838e8 | ||
![]() |
4cce43f0a1 | ||
![]() |
49e23c74bc | ||
![]() |
8b169f3796 | ||
![]() |
b5da91b29a | ||
![]() |
1d4ea56740 | ||
![]() |
0d664b1fd2 | ||
![]() |
29c3293265 | ||
![]() |
c69ab34eac | ||
![]() |
7353be3b16 | ||
![]() |
02be63ed72 | ||
![]() |
742531a2c2 | ||
![]() |
991d403d7f | ||
![]() |
290c678dc7 | ||
![]() |
2c31a599af | ||
![]() |
2655be0bad | ||
![]() |
4f97c8c70e | ||
![]() |
f85977246c | ||
![]() |
a4fd42214b | ||
![]() |
ca885027d4 | ||
![]() |
9f6f1e96e5 | ||
![]() |
351ce30d8a | ||
![]() |
2933eb5c28 | ||
![]() |
09ecf76034 | ||
![]() |
2b86750cb3 | ||
![]() |
b45224755e | ||
![]() |
14524e1b0e | ||
![]() |
efa47e3176 | ||
![]() |
1bc45405e0 | ||
![]() |
3720e1a894 | ||
![]() |
76138cf3b9 | ||
![]() |
2506c29f6b | ||
![]() |
463ba6ed6d | ||
![]() |
17b783135f | ||
![]() |
8df2729bd4 | ||
![]() |
a001619464 | ||
![]() |
3c5a19d297 | ||
![]() |
a98290a6e2 | ||
![]() |
9bac464442 | ||
![]() |
df110e5e11 | ||
![]() |
6247bd5f89 | ||
![]() |
cba4752433 | ||
![]() |
d0dd4e6e5e | ||
![]() |
d2892ea249 | ||
![]() |
983c28686f | ||
![]() |
f2f1ad4605 | ||
![]() |
10562e72f4 | ||
![]() |
11fb806992 | ||
![]() |
d424a4473a | ||
![]() |
4062813d44 | ||
![]() |
29b9d3069b | ||
![]() |
c38d9a6620 | ||
![]() |
2f65429aa4 | ||
![]() |
c24028f2a4 | ||
![]() |
a20c292653 | ||
![]() |
1c6304b3fb | ||
![]() |
3ac93af80c | ||
![]() |
ce586e1b31 | ||
![]() |
926f97124b | ||
![]() |
0f2301f2d6 | ||
![]() |
58e8f65135 | ||
![]() |
1b51fbfcca | ||
![]() |
1296840696 | ||
![]() |
f99e2c9366 | ||
![]() |
c71b56ebe3 | ||
![]() |
9904afce64 | ||
![]() |
a827fb1202 | ||
![]() |
51be99c9de | ||
![]() |
b83b778f2a | ||
![]() |
86a91597f9 | ||
![]() |
1b12ac133e | ||
![]() |
e55880a9c4 | ||
![]() |
9cc309b69c | ||
![]() |
d3308232e8 | ||
![]() |
0b8f27e1d2 | ||
![]() |
93f2c241b8 | ||
![]() |
fb44e769f2 | ||
![]() |
fabdfd9ae8 | ||
![]() |
72d60d2633 | ||
![]() |
2d7686eb65 | ||
![]() |
d9a26ff193 | ||
![]() |
2401eea725 | ||
![]() |
ddf18dd233 | ||
![]() |
4b98dabc3f | ||
![]() |
5a3e0ccc3d | ||
![]() |
38a3ad3370 | ||
![]() |
b777c12094 | ||
![]() |
8fc36d2684 | ||
![]() |
e2474049d8 | ||
![]() |
6e0fe03552 | ||
![]() |
cda48a7143 | ||
![]() |
e5a28de26e | ||
![]() |
0ae4f97036 | ||
![]() |
218bfe1603 | ||
![]() |
339c670839 | ||
![]() |
c5a19f6e85 | ||
![]() |
be57484573 | ||
![]() |
0cb88c21dc | ||
![]() |
0bc1f5296f | ||
![]() |
4776f97f82 | ||
![]() |
460db0aea7 | ||
![]() |
02cf111995 | ||
![]() |
14d9d92112 | ||
![]() |
fce77a19b0 | ||
![]() |
719685b930 | ||
![]() |
0cbc000bfa | ||
![]() |
ef8c0025fd | ||
![]() |
16847ea06c | ||
![]() |
be0bbe9950 | ||
![]() |
b503c2c758 | ||
![]() |
1d14f4658d | ||
![]() |
c7382af161 | ||
![]() |
f6adca902f | ||
![]() |
d50a6cf75c | ||
![]() |
2cebf09cf2 | ||
![]() |
46419f7bfe | ||
![]() |
43e8f831c0 | ||
![]() |
760ea1e020 | ||
![]() |
07d7704ef4 | ||
![]() |
a4878d05f0 | ||
![]() |
c5bcd2f22c | ||
![]() |
df1fba7fc5 | ||
![]() |
bb521f7af8 | ||
![]() |
f9818b8bd7 | ||
![]() |
dfcb4af18b | ||
![]() |
5c67e42a55 | ||
![]() |
7441be09b5 | ||
![]() |
a75665c7bf | ||
![]() |
4cb0f87b72 | ||
![]() |
1e8cd63645 | ||
![]() |
3860a99951 | ||
![]() |
226b3bfa74 | ||
![]() |
a5559c6588 | ||
![]() |
de2c05cd54 | ||
![]() |
6d916fb66f | ||
![]() |
90b6df24a1 | ||
![]() |
3e807e0131 | ||
![]() |
e2e2caa0e9 | ||
![]() |
b3dee343d1 | ||
![]() |
608f7afa70 | ||
![]() |
58ef0ee174 | ||
![]() |
2a76dc6409 | ||
![]() |
91e3da1293 | ||
![]() |
fa46267c14 | ||
![]() |
dc7e32eb10 | ||
![]() |
10679297f9 | ||
![]() |
3e697e2ea4 | ||
![]() |
6a649d347d | ||
![]() |
fd372941c7 | ||
![]() |
1c8c95367d | ||
![]() |
f031abcec2 | ||
![]() |
dd62322ae5 | ||
![]() |
48e5dee963 | ||
![]() |
b3dfc60fff | ||
![]() |
bb3b95f0bd | ||
![]() |
4fc9028dc1 | ||
![]() |
02cadd87ff | ||
![]() |
1c105154a6 | ||
![]() |
daaeded0b5 | ||
![]() |
ed7d41a3cb | ||
![]() |
f052a3f686 | ||
![]() |
11da07b735 | ||
![]() |
d01e180caf | ||
![]() |
4c400966b4 | ||
![]() |
bd0a00d373 | ||
![]() |
3b8bd6b979 | ||
![]() |
f849c36942 | ||
![]() |
c83fc753a1 | ||
![]() |
eeeb5fcdd9 | ||
![]() |
41f22864b4 | ||
![]() |
6a99a1a40a | ||
![]() |
1fcebab9ed | ||
![]() |
bed301a485 | ||
![]() |
31546b08ff | ||
![]() |
25337dc453 | ||
![]() |
cb85d50f61 | ||
![]() |
a52949318a | ||
![]() |
745495c2d5 | ||
![]() |
dd261a54df | ||
![]() |
94d2a0ee89 | ||
![]() |
f035db2feb | ||
![]() |
b105c7b35e | ||
![]() |
149f991c1d | ||
![]() |
a43ee60942 | ||
![]() |
5f11cd417f | ||
![]() |
3782b69744 | ||
![]() |
ca93280b17 | ||
![]() |
2ec9f0af2e | ||
![]() |
3eb338df04 | ||
![]() |
b7790ba6b5 | ||
![]() |
b67c931f18 | ||
![]() |
97186504b5 | ||
![]() |
bd4ca9af1b | ||
![]() |
9ac20a5cb8 | ||
![]() |
20a58d6dbb | ||
![]() |
191e4217fc | ||
![]() |
8745daa701 | ||
![]() |
27f7b615cc | ||
![]() |
e3c426de86 | ||
![]() |
c6410472c8 | ||
![]() |
d807466780 | ||
![]() |
c8b9c4cebc | ||
![]() |
741072a126 | ||
![]() |
be9123ee2b | ||
![]() |
3f5afe8daf | ||
![]() |
522de3abd8 | ||
![]() |
d37d77cc1a | ||
![]() |
4740be6562 | ||
![]() |
a07f1f3337 | ||
![]() |
02851fd672 | ||
![]() |
233e36c988 | ||
![]() |
2b12a658f6 | ||
![]() |
b74842ceb3 | ||
![]() |
ca84f7d4a9 | ||
![]() |
1892277273 | ||
![]() |
f12df395f8 | ||
![]() |
89e82e4d97 | ||
![]() |
af2340d889 | ||
![]() |
775a6381b4 | ||
![]() |
38c6ad5ad6 | ||
![]() |
d63dc319c7 | ||
![]() |
c5539e0aa0 | ||
![]() |
14601b7871 | ||
![]() |
7a86fd7b44 | ||
![]() |
0b3522894a | ||
![]() |
aa0836aecc | ||
![]() |
78f9238865 | ||
![]() |
5ca4fccbb0 | ||
![]() |
7f2044024b | ||
![]() |
d2de9702c5 | ||
![]() |
92a8783d95 | ||
![]() |
4bd1e5c524 | ||
![]() |
10826055f3 | ||
![]() |
6cf050e6e5 | ||
![]() |
52e1a36ffe | ||
![]() |
e83a95d3ed | ||
![]() |
44561f57d3 | ||
![]() |
4c26fe224b | ||
![]() |
61af74609a | ||
![]() |
9f2f3bd780 | ||
![]() |
38bcbcdd0a | ||
![]() |
d8c340d9c5 | ||
![]() |
8456d7b100 | ||
![]() |
2fa044d484 | ||
![]() |
4162a25425 | ||
![]() |
e26a38b619 | ||
![]() |
92aa2859a0 | ||
![]() |
1d8f524913 | ||
![]() |
59991b70a1 | ||
![]() |
a6b877676e | ||
![]() |
3c49c00f2b | ||
![]() |
c97716e780 | ||
![]() |
355e218837 | ||
![]() |
a3145a32e7 | ||
![]() |
8b6fb94835 | ||
![]() |
83ea81d975 | ||
![]() |
aae9db92ee | ||
![]() |
6c5b7ce9f4 | ||
![]() |
8bb70ea493 | ||
![]() |
bff9f65c88 | ||
![]() |
88607e8aa0 | ||
![]() |
17c6ed6303 | ||
![]() |
bfd8c63daa | ||
![]() |
6de7f1b088 | ||
![]() |
3359d87115 | ||
![]() |
e8fdc965a2 | ||
![]() |
67bcd3e0d6 | ||
![]() |
9421f63775 | ||
![]() |
01bf7af360 | ||
![]() |
4754ed01ab | ||
![]() |
a2c262f940 | ||
![]() |
7963ad9b20 | ||
![]() |
5e34810335 | ||
![]() |
e44eb5258b | ||
![]() |
e564c395ba | ||
![]() |
3d1af09090 | ||
![]() |
1cc2f323de | ||
![]() |
194684e27b | ||
![]() |
ee17e020cf | ||
![]() |
2b8ef765e7 | ||
![]() |
dbe965303b | ||
![]() |
3d9e919545 | ||
![]() |
30eb02510b | ||
![]() |
06aa72ec16 | ||
![]() |
cf45a35971 | ||
![]() |
a601d3bccf | ||
![]() |
f46a135458 | ||
![]() |
82cc473801 | ||
![]() |
9c41708d9e | ||
![]() |
a51d3aa2ad | ||
![]() |
797d72b716 | ||
![]() |
dd0304387e | ||
![]() |
80903ec281 | ||
![]() |
1f373c8430 | ||
![]() |
02d3bec856 | ||
![]() |
e111965411 | ||
![]() |
41cf1262b2 | ||
![]() |
ddb51cdcbc | ||
![]() |
d053284536 | ||
![]() |
acc1e500d3 | ||
![]() |
c0187101e9 | ||
![]() |
303f1f4545 | ||
![]() |
750f58d7db | ||
![]() |
e5532c3418 | ||
![]() |
a881d46178 | ||
![]() |
edb99c2842 | ||
![]() |
4d04d1a8c3 | ||
![]() |
1d1766b5c3 | ||
![]() |
0ade03c4de | ||
![]() |
2aa5089930 | ||
![]() |
2259a59ac6 | ||
![]() |
d8d56df272 | ||
![]() |
ec29f749af | ||
![]() |
1951a0cdc8 | ||
![]() |
cc61629a8c | ||
![]() |
5e75320d49 | ||
![]() |
b830e6151b | ||
![]() |
fd3c3fc022 | ||
![]() |
94deacb1b5 | ||
![]() |
571dfda629 | ||
![]() |
6a3f1d194a | ||
![]() |
e5aebf3df6 | ||
![]() |
c95a0c7de4 | ||
![]() |
bf9842000f | ||
![]() |
35c08985ee | ||
![]() |
ba95f394a3 | ||
![]() |
2879f3775b | ||
![]() |
f7be983199 | ||
![]() |
58524aceaa | ||
![]() |
ab25e9ea7d | ||
![]() |
57d2d905ef | ||
![]() |
64abf29ea8 | ||
![]() |
73147196b1 | ||
![]() |
c895109497 | ||
![]() |
145acd0ee4 | ||
![]() |
4c43d21196 | ||
![]() |
b4941aa4ce | ||
![]() |
aa259e03f2 | ||
![]() |
0d7aaae0ff | ||
![]() |
9467735fab | ||
![]() |
9e3aa705ae | ||
![]() |
0f8cc48d03 | ||
![]() |
95bd5dfdab | ||
![]() |
e6ce370cdd | ||
![]() |
78346cbe84 | ||
![]() |
9a953f7f80 | ||
![]() |
14bb09a3db | ||
![]() |
89fb65913d | ||
![]() |
41a75005c8 | ||
![]() |
54ecd7d423 | ||
![]() |
352194c942 | ||
![]() |
30e4ab99d9 | ||
![]() |
5f0160c036 | ||
![]() |
443c886050 | ||
![]() |
b7fd21e17a | ||
![]() |
2f24f6271a | ||
![]() |
6507624232 | ||
![]() |
e337331122 | ||
![]() |
1d5f7ce08f | ||
![]() |
adedb5f803 | ||
![]() |
9774c08336 | ||
![]() |
525dcd4760 | ||
![]() |
d75661e49d | ||
![]() |
52d6035c23 | ||
![]() |
5a9221680f | ||
![]() |
3a5fef3e50 | ||
![]() |
8883008ca1 | ||
![]() |
0eec89255f | ||
![]() |
3d4c5d1a41 | ||
![]() |
826faad37b | ||
![]() |
c078840c63 | ||
![]() |
105b11fca2 | ||
![]() |
a259aeba27 | ||
![]() |
8462f21c01 | ||
![]() |
5d3a175ed6 | ||
![]() |
69bec16080 | ||
![]() |
bfc4abeae2 | ||
![]() |
cd67fdf89d | ||
![]() |
958fb6da2b | ||
![]() |
a6dbf0a9ee | ||
![]() |
31b4ec3e10 | ||
![]() |
f7e4ee61c7 | ||
![]() |
8e0bb994bb | ||
![]() |
b56fe796d6 | ||
![]() |
7156cf4c71 | ||
![]() |
426d311faa | ||
![]() |
55aff88e9f | ||
![]() |
32710c1d99 | ||
![]() |
9bcf614a9a | ||
![]() |
0520329fe0 | ||
![]() |
10795b1d89 | ||
![]() |
6bdeb7ac01 | ||
![]() |
3f699ede9e | ||
![]() |
517c47b780 | ||
![]() |
e1c40bcf05 | ||
![]() |
20c321076a | ||
![]() |
87fa9e5289 | ||
![]() |
9fa9bd9e93 | ||
![]() |
e44cdbd79d | ||
![]() |
0edfab1048 | ||
![]() |
c68ae309e5 | ||
![]() |
815e4b5748 | ||
![]() |
6acbd9789a | ||
![]() |
f4decdee49 | ||
![]() |
0b127eecd9 | ||
![]() |
69c9a564f2 | ||
![]() |
8ef24e5a18 | ||
![]() |
f5cc0dcaea | ||
![]() |
007da4588b | ||
![]() |
7056c20cca | ||
![]() |
7cda494bf4 | ||
![]() |
2d8342261b | ||
![]() |
336c3127ed | ||
![]() |
ef26fc921c | ||
![]() |
0b672e2636 | ||
![]() |
6209165b32 | ||
![]() |
f3bb5c0c26 | ||
![]() |
9cb09f1fb4 | ||
![]() |
cfeb794b34 | ||
![]() |
1b7433b637 | ||
![]() |
73f8d70b86 | ||
![]() |
6a97f80cc3 | ||
![]() |
3e922c83f0 | ||
![]() |
a45588ce7c | ||
![]() |
a176d64389 | ||
![]() |
e519686f01 | ||
![]() |
59d6f04e4b | ||
![]() |
f4d4c784e4 | ||
![]() |
eb341bdfb6 | ||
![]() |
ee84ed4236 | ||
![]() |
f27feb268a | ||
![]() |
249e18314a | ||
![]() |
115cb071b0 | ||
![]() |
49323aa05b | ||
![]() |
d279f4e905 | ||
![]() |
eaae85c6f8 | ||
![]() |
62feced97a | ||
![]() |
d51ea942e1 | ||
![]() |
4ac7c5edbb | ||
![]() |
7d8143b917 | ||
![]() |
790f71bb1a | ||
![]() |
a4b7e494db | ||
![]() |
6ecdf7be68 | ||
![]() |
e0f7ea56e1 | ||
![]() |
0ea88df662 | ||
![]() |
56e9095619 | ||
![]() |
1b69e121dc | ||
![]() |
45e2366b5b | ||
![]() |
5309d21588 | ||
![]() |
c17f9be10e | ||
![]() |
a568f51024 | ||
![]() |
8af76c2608 | ||
![]() |
dccd6121b1 | ||
![]() |
0ecdbf4374 | ||
![]() |
10bdc8dde6 | ||
![]() |
16faef4613 | ||
![]() |
bed6c5dd0c | ||
![]() |
b3495219ae | ||
![]() |
08d59d3d2b | ||
![]() |
71753671e0 | ||
![]() |
9746497673 | ||
![]() |
882a2cc63e | ||
![]() |
30d4632a0b | ||
![]() |
f29f5eb207 | ||
![]() |
600247df79 | ||
![]() |
904410f7f7 | ||
![]() |
fda092bbe9 | ||
![]() |
75e8119c6a | ||
![]() |
80c4b24803 | ||
![]() |
dd00575d57 | ||
![]() |
33a809f09a | ||
![]() |
28bd07fdeb | ||
![]() |
8fa1fed8b5 | ||
![]() |
5293b63f30 | ||
![]() |
256a148bbf | ||
![]() |
eee1be474a | ||
![]() |
0bd00764c4 | ||
![]() |
63e9194c5d | ||
![]() |
06310faa32 | ||
![]() |
011c036350 | ||
![]() |
c9c821da5c | ||
![]() |
8c8ed571d5 | ||
![]() |
b0f7abb3a9 | ||
![]() |
c2c65b4df2 | ||
![]() |
9b7f5ed963 | ||
![]() |
75f755b823 | ||
![]() |
1cfe987fa1 | ||
![]() |
4cf7c97b8f | ||
![]() |
3715254a78 | ||
![]() |
ab44053ba4 | ||
![]() |
5c6f3e66a6 | ||
![]() |
5e5265c8b0 | ||
![]() |
2d481c4b73 | ||
![]() |
13719aa694 | ||
![]() |
9d9109a68c | ||
![]() |
5744c8614a | ||
![]() |
9cf562476a | ||
![]() |
cb91c3f8a8 | ||
![]() |
c08fad6487 | ||
![]() |
3b3b599c38 | ||
![]() |
23329f1ee9 | ||
![]() |
10e05f352e | ||
![]() |
e842b72aaa | ||
![]() |
43b0e808d0 | ||
![]() |
286a3474d9 | ||
![]() |
5aa8490e9e | ||
![]() |
49a77dda3a | ||
![]() |
0049372b2e | ||
![]() |
293411b005 | ||
![]() |
efc1a0adc4 | ||
![]() |
e3b2a6949c | ||
![]() |
dbd4658028 | ||
![]() |
940146fadd | ||
![]() |
efcafd99db | ||
![]() |
6585380a4c | ||
![]() |
f653510d1b | ||
![]() |
541cf251b2 | ||
![]() |
755394ac9a | ||
![]() |
2f1cfe0a31 | ||
![]() |
e0253b7768 | ||
![]() |
5d1b50cb65 | ||
![]() |
ed352debd5 | ||
![]() |
221aedc5f5 | ||
![]() |
4b195d17ed | ||
![]() |
8e640da543 | ||
![]() |
559be33ff7 | ||
![]() |
0bfb42c68f | ||
![]() |
c95e997f8f | ||
![]() |
baafaf09df | ||
![]() |
db1b055c7f | ||
![]() |
5ba5e30a47 | ||
![]() |
7e9946eea8 | ||
![]() |
cac60db775 | ||
![]() |
83ee06e9e7 | ||
![]() |
534d3dd038 | ||
![]() |
f6333b4a5e | ||
![]() |
ac58785f50 | ||
![]() |
d08ef70e0f | ||
![]() |
ab4ba4cf2f | ||
![]() |
1a1f668745 | ||
![]() |
5c59505589 | ||
![]() |
95274278f3 | ||
![]() |
1532721f09 | ||
![]() |
5db856cfb0 | ||
![]() |
b34dfe8f45 | ||
![]() |
158f9925ce | ||
![]() |
dab8f08a9e | ||
![]() |
313fefe704 | ||
![]() |
17c0af1cf6 | ||
![]() |
1bb09cc9a8 | ||
![]() |
1e35341136 | ||
![]() |
501a55d8f2 | ||
![]() |
ca57235e05 | ||
![]() |
a4e1479759 | ||
![]() |
e499f700ce | ||
![]() |
d559fcc90b | ||
![]() |
35b98f2b89 | ||
![]() |
e391966de8 | ||
![]() |
4d10e3f258 | ||
![]() |
bf05d8781e | ||
![]() |
2efe741924 | ||
![]() |
f04fa4d565 | ||
![]() |
5bbf3678c5 | ||
![]() |
83926c9707 | ||
![]() |
7c26148252 | ||
![]() |
49cb8d8388 | ||
![]() |
eb3ed2a5e4 | ||
![]() |
7d6a97e264 | ||
![]() |
28f9181dd4 | ||
![]() |
5013484924 | ||
![]() |
a10f46932f | ||
![]() |
5deaef456e | ||
![]() |
99f7d65f47 | ||
![]() |
a87f77339e | ||
![]() |
078038b080 | ||
![]() |
ea9a06160c | ||
![]() |
6c89763ef9 | ||
![]() |
2cfdd1620a | ||
![]() |
b9f4faa916 | ||
![]() |
db1db1ab0e | ||
![]() |
cec28464ec | ||
![]() |
21c636c4c6 | ||
![]() |
a2fba0284e | ||
![]() |
dd57030732 | ||
![]() |
efba4c18d1 | ||
![]() |
48fd76e076 | ||
![]() |
f424a51133 | ||
![]() |
46b8faddae | ||
![]() |
fdf376f9c8 | ||
![]() |
46b7ee87dd | ||
![]() |
14a94c0c51 | ||
![]() |
24490f7789 | ||
![]() |
09afb077f0 | ||
![]() |
99ee235e75 | ||
![]() |
029a444d32 | ||
![]() |
8c4c92a861 | ||
![]() |
19d46fc823 | ||
![]() |
ae2dc70385 | ||
![]() |
0ad44c12fe | ||
![]() |
ad12fa7fff | ||
![]() |
19cce07ab5 | ||
![]() |
439dcb10b2 | ||
![]() |
98cb8b998e | ||
![]() |
1654a4b01c | ||
![]() |
8e72611922 | ||
![]() |
a857d3807f | ||
![]() |
3dc0af3159 | ||
![]() |
53bff117aa | ||
![]() |
2fe5e678bf | ||
![]() |
4665b6bf15 | ||
![]() |
a9d317f997 | ||
![]() |
abf7ecd2ca | ||
![]() |
9c032648c1 | ||
![]() |
0e68788de4 | ||
![]() |
44037c0c9d | ||
![]() |
95e47d283e | ||
![]() |
9dcda25355 | ||
![]() |
225115ad07 | ||
![]() |
0c316d9dc2 | ||
![]() |
5ed5274256 | ||
![]() |
283ec73ed9 | ||
![]() |
eac8459041 | ||
![]() |
598de7019a | ||
![]() |
cc545f4433 | ||
![]() |
61632f2d7f | ||
![]() |
3d9a24dd28 | ||
![]() |
c4b92069ba | ||
![]() |
8d8b6c1c33 | ||
![]() |
c892a89536 | ||
![]() |
262790b22d | ||
![]() |
89c782c094 | ||
![]() |
7debe2fc59 | ||
![]() |
fc44d1fcdd | ||
![]() |
6e7a24e200 | ||
![]() |
8815e447ad | ||
![]() |
c3ca401888 | ||
![]() |
4da479388d | ||
![]() |
0a0546e241 | ||
![]() |
c61159b63f | ||
![]() |
7a1c25bb3b | ||
![]() |
d0ea3dd82b | ||
![]() |
36444ab242 | ||
![]() |
0cf639cb1b | ||
![]() |
90364a020b | ||
![]() |
6e4b349c3a | ||
![]() |
03d6531a7d | ||
![]() |
dd5866a4cb | ||
![]() |
47ac57be69 | ||
![]() |
52f5d95c81 | ||
![]() |
792a62438f | ||
![]() |
73e16d0857 | ||
![]() |
4e8a7e0b4c | ||
![]() |
f1c066b68e | ||
![]() |
121e27e850 | ||
![]() |
3eaf8b7177 | ||
![]() |
0b9554c675 | ||
![]() |
0152ed7027 | ||
![]() |
9134e1c837 | ||
![]() |
f233bfd75e | ||
![]() |
4298a57297 | ||
![]() |
6e8ea148bc | ||
![]() |
777522e8d5 | ||
![]() |
a4007ffb80 | ||
![]() |
10c25348f3 | ||
![]() |
8ffd198d8b | ||
![]() |
7c81096bbc | ||
![]() |
3593fa63db | ||
![]() |
037ba2fa9c | ||
![]() |
4d7b1e8eaf | ||
![]() |
f6e1515f66 | ||
![]() |
c5be9fd882 | ||
![]() |
01b5935a4e | ||
![]() |
c1cd39bd65 | ||
![]() |
b2db7eb6bf | ||
![]() |
f4097dfd82 | ||
![]() |
797877bcbf | ||
![]() |
db8a0028a6 | ||
![]() |
50a535125e | ||
![]() |
ed07a9e896 | ||
![]() |
43ffb00996 | ||
![]() |
04e205bcb4 | ||
![]() |
58aa4c467f | ||
![]() |
0cc7eb7638 | ||
![]() |
4e126e174b | ||
![]() |
de875c9e27 | ||
![]() |
44875691db | ||
![]() |
c140e1a658 | ||
![]() |
77118ad40c | ||
![]() |
bc3fe33428 | ||
![]() |
754fa24104 | ||
![]() |
69b3a9d3a2 | ||
![]() |
3cfcb2da41 | ||
![]() |
24ba5b73da | ||
![]() |
8ef30a2642 | ||
![]() |
8fdeb6d9d3 | ||
![]() |
21efbbdbe8 | ||
![]() |
4c3db653f5 | ||
![]() |
1956d3d63c | ||
![]() |
25efa4e63f | ||
![]() |
6df6f5ab2c | ||
![]() |
c5dfa4213d | ||
![]() |
a48d970410 | ||
![]() |
1168db6830 | ||
![]() |
f76cab1ba3 | ||
![]() |
78fbf36c6e | ||
![]() |
3ee19337ca | ||
![]() |
90b7a3be63 | ||
![]() |
3ac242978d | ||
![]() |
94ee076aad | ||
![]() |
7a7b41557d | ||
![]() |
d9d9cc9ddc | ||
![]() |
0fbe5f2f10 | ||
![]() |
4ec0dcfe1f | ||
![]() |
d82958d73d | ||
![]() |
6b5286eff8 | ||
![]() |
04c29e2a96 | ||
![]() |
4e7d65062a | ||
![]() |
d5432ce811 | ||
![]() |
262bf4e2b0 | ||
![]() |
f63eb45e7d | ||
![]() |
22168ed760 | ||
![]() |
210f8c2306 | ||
![]() |
6205ddd430 | ||
![]() |
36f2989249 | ||
![]() |
4e40f29f33 | ||
![]() |
0faeeb6411 | ||
![]() |
99956b4283 | ||
![]() |
b93691be0e | ||
![]() |
66e53df04b | ||
![]() |
95c483934d | ||
![]() |
9c5a8f7ef1 | ||
![]() |
e2f3041aa2 | ||
![]() |
9926ae4e74 | ||
![]() |
58463b5e80 | ||
![]() |
7b51327b24 | ||
![]() |
06dd350aab | ||
![]() |
4f2085765d | ||
![]() |
eceae9b64c | ||
![]() |
bd0237369b | ||
![]() |
79d50ebc76 | ||
![]() |
98754b9fc6 | ||
![]() |
f813870e7d | ||
![]() |
763a0c0d83 | ||
![]() |
d30444dae7 | ||
![]() |
c983c0605e | ||
![]() |
2fa03ea369 | ||
![]() |
53798beb96 | ||
![]() |
d36522648f | ||
![]() |
1df90b4a05 | ||
![]() |
6c1ae90972 | ||
![]() |
8f970cddf9 | ||
![]() |
299e559aa5 | ||
![]() |
a17e7d92d9 | ||
![]() |
b3a4e3f40e | ||
![]() |
b7acf94b41 | ||
![]() |
9e5c3ec1b5 | ||
![]() |
3539a35578 | ||
![]() |
d50150cbfa | ||
![]() |
5550753193 | ||
![]() |
394c6aea74 | ||
![]() |
3febd7dfdf | ||
![]() |
ef895a3d8c | ||
![]() |
8f5f7fc2a8 | ||
![]() |
c5eb07c83f | ||
![]() |
c673cf22bd | ||
![]() |
4d401c127d | ||
![]() |
3c119e4a52 | ||
![]() |
303a160359 | ||
![]() |
731b330e40 | ||
![]() |
261aea3089 | ||
![]() |
3cd5244949 | ||
![]() |
31b8707819 | ||
![]() |
a0893b8e6c | ||
![]() |
73aae9e86e | ||
![]() |
e1c8eb8a72 | ||
![]() |
87b2084d97 | ||
![]() |
9b42ffd070 | ||
![]() |
d2bbe83e08 | ||
![]() |
61cfb156cc | ||
![]() |
bc546ef562 | ||
![]() |
251b94647b | ||
![]() |
d24239530c | ||
![]() |
2352137f6b | ||
![]() |
3b2bb5a6ec | ||
![]() |
4aeb2ae9a2 | ||
![]() |
7f9d4cd079 | ||
![]() |
d73a090875 | ||
![]() |
aba306b685 | ||
![]() |
c49a1bf60c | ||
![]() |
d684e0d924 | ||
![]() |
269284c6d7 | ||
![]() |
62950c31a4 | ||
![]() |
e0d0cdcf1f | ||
![]() |
a93b8324ad | ||
![]() |
39fdaef0a4 | ||
![]() |
db725c1de5 | ||
![]() |
734f1add8e | ||
![]() |
0f635ed344 | ||
![]() |
efe6affe64 | ||
![]() |
9b9f4ea704 | ||
![]() |
f140d1ab45 | ||
![]() |
02eb8dacb6 | ||
![]() |
afb69a3bb0 | ||
![]() |
095e8ca9e7 | ||
![]() |
95fb824cc7 | ||
![]() |
d4d7ca7d65 | ||
![]() |
89e4de1dd0 | ||
![]() |
537512fb27 | ||
![]() |
ba0d21682a | ||
![]() |
729080f4b1 | ||
![]() |
ac48f01e25 | ||
![]() |
c2a479ab44 | ||
![]() |
59aaa310dd | ||
![]() |
f4ce428d66 | ||
![]() |
5aecd127bd | ||
![]() |
2218929416 | ||
![]() |
00603e7bac | ||
![]() |
4c48b8cc54 | ||
![]() |
b807e330c8 | ||
![]() |
04b15e7ece | ||
![]() |
575c39e8a5 | ||
![]() |
47601ac311 | ||
![]() |
1990786c2c | ||
![]() |
980c97a44c | ||
![]() |
42177a3098 | ||
![]() |
657e38f6e0 | ||
![]() |
8fe0ed1d03 | ||
![]() |
6cd0585339 | ||
![]() |
e32151cc40 | ||
![]() |
38e048b94e | ||
![]() |
2a38d46fd9 | ||
![]() |
9ed38ccf3a | ||
![]() |
61cc2fc215 | ||
![]() |
53e5f3a0c8 | ||
![]() |
3f4c346e0c | ||
![]() |
e8ddae4882 | ||
![]() |
09c966b271 | ||
![]() |
933f3f391c | ||
![]() |
cfb5b88ee6 | ||
![]() |
f7ed91b5bd | ||
![]() |
9cd44eb92c | ||
![]() |
aa24229786 | ||
![]() |
d0942d4897 | ||
![]() |
3d789a0675 | ||
![]() |
1d3f214109 | ||
![]() |
c4ce8543d3 | ||
![]() |
e51077c765 | ||
![]() |
c0d6d89330 | ||
![]() |
1cdc73d270 | ||
![]() |
1f44d11e15 | ||
![]() |
2fdcb0bfe6 | ||
![]() |
6b336cbe77 | ||
![]() |
cdca63dcfe | ||
![]() |
b79191e39c | ||
![]() |
f30085c47e | ||
![]() |
ef25160b8e | ||
![]() |
6c1e5aae92 | ||
![]() |
a0207f9195 | ||
![]() |
346efdd384 | ||
![]() |
6e5e5f9c61 | ||
![]() |
871f0478c6 | ||
![]() |
5dfc94e6f5 | ||
![]() |
ec2d9c9a08 | ||
![]() |
281064f714 | ||
![]() |
62757c529f | ||
![]() |
e57fee1f37 | ||
![]() |
0d4c3e5f72 | ||
![]() |
275dbe9b2e | ||
![]() |
9f6a7b79ac | ||
![]() |
3168084cf5 | ||
![]() |
887e5803d8 | ||
![]() |
a386bd0b74 | ||
![]() |
809fc1ce30 | ||
![]() |
f176b71c7c | ||
![]() |
1af90946bc | ||
![]() |
d0eadebb99 | ||
![]() |
1a95d48852 | ||
![]() |
0b67cffdfa | ||
![]() |
d2e2017907 | ||
![]() |
5460bc0a0c | ||
![]() |
ebd4da95cd | ||
![]() |
4694ec08d3 | ||
![]() |
e26dbfe11a | ||
![]() |
0d6552e63d | ||
![]() |
e683b8886a | ||
![]() |
765e0cd35c | ||
![]() |
880c4d4ed6 | ||
![]() |
c0bf6d8bbc | ||
![]() |
2ae2686e34 | ||
![]() |
25609d69c4 | ||
![]() |
d809d8ba28 | ||
![]() |
c91dc7d0bc | ||
![]() |
7bc75851cf | ||
![]() |
1c0cb8b2d7 | ||
![]() |
4d8e519298 | ||
![]() |
ee8893291c | ||
![]() |
fca35a3363 | ||
![]() |
6f7c291512 | ||
![]() |
0ad2282395 | ||
![]() |
1d0e98dd62 | ||
![]() |
f20d89ee51 | ||
![]() |
958204e831 | ||
![]() |
82c247bb11 | ||
![]() |
2800f555c7 | ||
![]() |
86e4642046 | ||
![]() |
2a56b640c0 | ||
![]() |
2718cdae51 | ||
![]() |
7175f5776f | ||
![]() |
d96dcd2529 | ||
![]() |
eae67a9696 | ||
![]() |
5b47950f9f | ||
![]() |
3c3d28d8ee | ||
![]() |
61f55feca1 | ||
![]() |
138ee49943 | ||
![]() |
09c5c62e07 | ||
![]() |
63850fde66 | ||
![]() |
f30d370e3b | ||
![]() |
9b77c8a1aa | ||
![]() |
33da2b4057 | ||
![]() |
932260f26b | ||
![]() |
8fe2d7c2e6 | ||
![]() |
5b86fe38ae | ||
![]() |
e099e7d220 | ||
![]() |
4bf52cc0c0 | ||
![]() |
bae2741e0e | ||
![]() |
aba109afa4 | ||
![]() |
7dda1f5724 | ||
![]() |
7389b9476b | ||
![]() |
bcc998cdae | ||
![]() |
7db2de3bbd | ||
![]() |
c5cf5550c6 | ||
![]() |
dd18cd187f | ||
![]() |
c269f6fcee | ||
![]() |
fd8f3c3039 | ||
![]() |
eb714eb71a | ||
![]() |
15c85efd88 | ||
![]() |
5a6edf2fc4 | ||
![]() |
b3dfb5a21f | ||
![]() |
99644bad17 | ||
![]() |
ab1a2ec411 | ||
![]() |
38a7a47d11 | ||
![]() |
acb799cca0 | ||
![]() |
bfeab9ec0b | ||
![]() |
b6a03fca8b | ||
![]() |
5868a96494 | ||
![]() |
05a3806075 | ||
![]() |
74c6fc35a8 | ||
![]() |
594f2180a0 | ||
![]() |
b1b480a13b | ||
![]() |
3681a7a4c1 | ||
![]() |
d2a73bcef4 | ||
![]() |
f9a20ab94e | ||
![]() |
dd7b071a94 | ||
![]() |
2fb50a2d69 | ||
![]() |
061aaf6f28 | ||
![]() |
6ead2e16ea | ||
![]() |
8950fb1795 | ||
![]() |
cdb87c193c | ||
![]() |
587c3c8884 | ||
![]() |
9343c6fd37 | ||
![]() |
7c1cb236a6 | ||
![]() |
8b5b1d4701 | ||
![]() |
70dcfc83e6 | ||
![]() |
3698c2b1e4 | ||
![]() |
df872427af | ||
![]() |
720aef6ff0 | ||
![]() |
d71fe28a35 | ||
![]() |
644199d0d0 | ||
![]() |
207bc7c090 | ||
![]() |
4bb75e5e37 | ||
![]() |
84b51792d6 | ||
![]() |
7a45ed8733 | ||
![]() |
cc6eae22b3 | ||
![]() |
9cb959ba87 | ||
![]() |
aa279f6410 | ||
![]() |
7afff877e5 | ||
![]() |
4eba114c8b | ||
![]() |
4434cf39a7 | ||
![]() |
8bdd37ca44 | ||
![]() |
0d110350f4 | ||
![]() |
d686cee2af | ||
![]() |
d9b16953f0 | ||
![]() |
78dfffa1a7 | ||
![]() |
192946337a | ||
![]() |
6b7f33e1e5 | ||
![]() |
728334b3ba | ||
![]() |
515d880f0a | ||
![]() |
60a30a3beb | ||
![]() |
e95e915d2b | ||
![]() |
aa1432af5a | ||
![]() |
d44c65eb59 | ||
![]() |
c7e1b45377 | ||
![]() |
fe22a5f7b3 | ||
![]() |
e63b5a7de2 | ||
![]() |
01fa7e6dad | ||
![]() |
5dbe3ee444 | ||
![]() |
b263164c83 | ||
![]() |
a80dd711a7 | ||
![]() |
ce2f834683 | ||
![]() |
4d6b92e5bf | ||
![]() |
1b128cae77 | ||
![]() |
a94fe811dd | ||
![]() |
bde35b23f7 | ||
![]() |
7f185d06df | ||
![]() |
8ea7d5b80e | ||
![]() |
adf4351afd | ||
![]() |
f014061292 | ||
![]() |
7f815693a0 | ||
![]() |
03a634607a | ||
![]() |
fde668a3a6 | ||
![]() |
6b7d78ebcf | ||
![]() |
8db678a039 | ||
![]() |
81419d1ef9 | ||
![]() |
91670385f5 | ||
![]() |
017a86bc0e | ||
![]() |
d12cdf4fbe | ||
![]() |
9930d2927b | ||
![]() |
8aa85d72de | ||
![]() |
345e3cdaa7 | ||
![]() |
d0b712f0fb | ||
![]() |
caf8341445 | ||
![]() |
f3474fa778 | ||
![]() |
772a7fcfbb | ||
![]() |
9a638ece80 | ||
![]() |
161506baf2 | ||
![]() |
364511b133 | ||
![]() |
b5b2bc4aa5 | ||
![]() |
934a761c37 | ||
![]() |
2c2bd62e25 | ||
![]() |
6e35c32cb2 | ||
![]() |
f78f3e79f7 | ||
![]() |
49c6c4d873 | ||
![]() |
95d629e615 | ||
![]() |
efd5cf1c67 | ||
![]() |
6337470b1b | ||
![]() |
254ec07da9 | ||
![]() |
ec27270748 | ||
![]() |
00467c646c | ||
![]() |
771d3fcbbe | ||
![]() |
775d8bb353 | ||
![]() |
06377b8231 | ||
![]() |
4e55f4cf3d | ||
![]() |
d5a03a9054 | ||
![]() |
f3a65f3178 | ||
![]() |
b27d83e0e7 | ||
![]() |
55bd9e6efa | ||
![]() |
8b8c0dd57c | ||
![]() |
d8d608fd99 | ||
![]() |
2efb2565ad | ||
![]() |
c8a3290163 | ||
![]() |
14a231767a | ||
![]() |
803e9eb2bd | ||
![]() |
29a3967c0e | ||
![]() |
cf72d33335 | ||
![]() |
7534462966 | ||
![]() |
d4525331cb | ||
![]() |
501cdbfcf7 | ||
![]() |
13bba48e92 | ||
![]() |
f1bd8fa91b | ||
![]() |
d9a12997ce | ||
![]() |
1fad9e6eef | ||
![]() |
d9b2934a50 | ||
![]() |
6b87fb3418 | ||
![]() |
444de0f133 | ||
![]() |
51fc56b95d | ||
![]() |
195e314c42 | ||
![]() |
4c6e2783b0 | ||
![]() |
4a50feb5d9 | ||
![]() |
3f2e823330 | ||
![]() |
16a15c4179 | ||
![]() |
49cb10457e | ||
![]() |
67c1eb34eb | ||
![]() |
9cc59f0206 | ||
![]() |
7167710800 | ||
![]() |
de115e2071 | ||
![]() |
e32e7f3256 | ||
![]() |
8132f0a5b0 | ||
![]() |
3c6ae36611 | ||
![]() |
b1b5ad3c9b | ||
![]() |
3b2c751cd2 | ||
![]() |
5e8ac1a66e | ||
![]() |
02ef40223c | ||
![]() |
69538aad09 | ||
![]() |
ce8256b8f6 | ||
![]() |
ced5cef2a3 | ||
![]() |
93b41eddb9 | ||
![]() |
39c6533881 | ||
![]() |
0ba712f53c | ||
![]() |
14622b0386 | ||
![]() |
35797f867f | ||
![]() |
3f0ababca6 | ||
![]() |
6231682867 | ||
![]() |
9400e46827 | ||
![]() |
b92eae5b34 | ||
![]() |
5e6215d4f2 | ||
![]() |
871a13aff8 | ||
![]() |
7f2902594c | ||
![]() |
ceb487f2d4 | ||
![]() |
6095aaae61 | ||
![]() |
c1052bd3c5 | ||
![]() |
a2cc86a414 | ||
![]() |
2057649581 | ||
![]() |
ba0d91da32 | ||
![]() |
63f81f36a9 | ||
![]() |
8e46e10429 | ||
![]() |
3411a6e46d | ||
![]() |
115a4976ff | ||
![]() |
a796940de3 | ||
![]() |
4b5e73102c | ||
![]() |
c5805383c7 | ||
![]() |
eb7d18dfca | ||
![]() |
eb0cb42f36 | ||
![]() |
18e2879867 | ||
![]() |
99552b3389 | ||
![]() |
7391b05c43 | ||
![]() |
0691c722c3 | ||
![]() |
534a10edea | ||
![]() |
a46f993e3e | ||
![]() |
fc78ee0fc5 | ||
![]() |
ee6ae6a47a | ||
![]() |
6d7b2b1e14 | ||
![]() |
2117e71b51 | ||
![]() |
c3423beeda | ||
![]() |
de51bc40c7 | ||
![]() |
aa9f4a7760 | ||
![]() |
9979ea1d74 | ||
![]() |
fc31b22eb0 | ||
![]() |
c221350d59 | ||
![]() |
881a68241c | ||
![]() |
469acbe810 | ||
![]() |
ab726f008c | ||
![]() |
9b56cb3feb | ||
![]() |
cfacd3b2e1 | ||
![]() |
f45ae227a0 | ||
![]() |
97be6cbd73 | ||
![]() |
ce3b0af03a | ||
![]() |
c7c1218e02 | ||
![]() |
f5bdbf22e7 | ||
![]() |
1ab23d137f | ||
![]() |
b608083c2f | ||
![]() |
cba968ccc0 | ||
![]() |
0f3778aea8 | ||
![]() |
ac5c61dbd4 | ||
![]() |
6c785c9316 | ||
![]() |
58483fb231 | ||
![]() |
0d8c3fcf8c | ||
![]() |
9f375139d5 | ||
![]() |
5ba3696f95 | ||
![]() |
0c49d2b84e | ||
![]() |
42414e85d1 | ||
![]() |
77a02fefe4 | ||
![]() |
1e43ad1ee3 | ||
![]() |
cda41a1cdf | ||
![]() |
1a199d630f | ||
![]() |
51c07163aa | ||
![]() |
9bbd3cab3c | ||
![]() |
6f61a71dda | ||
![]() |
3af4020cdc | ||
![]() |
d65e78f9e2 | ||
![]() |
82b120e567 | ||
![]() |
d95c159b1f | ||
![]() |
c468319869 | ||
![]() |
4de0182978 | ||
![]() |
4b21e1e745 | ||
![]() |
1601140511 | ||
![]() |
fb1942c2cf | ||
![]() |
81d8b9d02e | ||
![]() |
6db070197a | ||
![]() |
a331125187 | ||
![]() |
66bc461fa1 | ||
![]() |
b69c9821bc | ||
![]() |
df72febc00 | ||
![]() |
6d91ae4a09 | ||
![]() |
5aced51f9e | ||
![]() |
f791ea00ef | ||
![]() |
e07fdfedb6 | ||
![]() |
1096b185ee | ||
![]() |
fef433e844 | ||
![]() |
fe9fbd8618 | ||
![]() |
b031c6f182 | ||
![]() |
5a93afa7ca | ||
![]() |
2f792e33d6 | ||
![]() |
d408efdd1d | ||
![]() |
dc51a8f182 | ||
![]() |
e8d18189ac | ||
![]() |
a6276a94c3 | ||
![]() |
85628f2148 | ||
![]() |
1f70717a53 | ||
![]() |
493bb8a80e | ||
![]() |
788e7c96ff | ||
![]() |
caa0ff340d | ||
![]() |
44688a20b6 | ||
![]() |
3f1bba407e | ||
![]() |
91e8bcaba9 | ||
![]() |
a35e62db14 | ||
![]() |
66cd0b9621 | ||
![]() |
6382dcf7c8 | ||
![]() |
5587011f75 | ||
![]() |
0044aa3029 | ||
![]() |
9c3bcec7f0 | ||
![]() |
63f9e95795 | ||
![]() |
8f00555bf5 | ||
![]() |
029b3c1101 | ||
![]() |
2340a3b836 | ||
![]() |
d84b4403ab | ||
![]() |
323f72ce33 | ||
![]() |
6ae5fe7f17 | ||
![]() |
460e027b6e | ||
![]() |
406c0d869b | ||
![]() |
b6b2b3697d | ||
![]() |
83f2663f68 | ||
![]() |
a6f3316ddb | ||
![]() |
4a8c24a633 | ||
![]() |
6ca6403878 | ||
![]() |
5bd3a28667 | ||
![]() |
d52f4724fe | ||
![]() |
618f7977ef | ||
![]() |
ecee23d8ba | ||
![]() |
7ee22de5e2 | ||
![]() |
c904c7d21a | ||
![]() |
0d1ef9de07 | ||
![]() |
481f8186e4 | ||
![]() |
5731b72795 | ||
![]() |
92c05b9138 | ||
![]() |
dd7f8ac81b | ||
![]() |
1afd0a199e | ||
![]() |
e2e652ae0f | ||
![]() |
a5d24e5da5 | ||
![]() |
94512c0780 | ||
![]() |
ef83adb36e | ||
![]() |
926762a800 | ||
![]() |
ec0e9b8680 | ||
![]() |
fc17733770 | ||
![]() |
a5281e0464 | ||
![]() |
a6dc1eaa40 | ||
![]() |
9643e8f19c | ||
![]() |
bdca0a583e | ||
![]() |
a35152843f | ||
![]() |
f19a9d021f | ||
![]() |
1b5bd999e2 | ||
![]() |
36e4fcfdfe | ||
![]() |
913dbee2e7 | ||
![]() |
d895a62565 | ||
![]() |
50394e7af1 | ||
![]() |
9981d3fc8b | ||
![]() |
7763d9ceb8 | ||
![]() |
8cbceb611a | ||
![]() |
5f110e4cde | ||
![]() |
aaa4e8a794 | ||
![]() |
ea69d26a60 | ||
![]() |
ce3d0a23de | ||
![]() |
7fbe1661ec | ||
![]() |
1c4dd9b923 | ||
![]() |
1b29135cc1 | ||
![]() |
b285466130 | ||
![]() |
3754ac0872 | ||
![]() |
83ca6897bd | ||
![]() |
d2d7f2bcb0 | ||
![]() |
20f9abcc38 | ||
![]() |
0417a8ddff | ||
![]() |
a85f36c3be | ||
![]() |
d9d4a677ab | ||
![]() |
01297fa042 | ||
![]() |
46fe731379 | ||
![]() |
cca1c41749 | ||
![]() |
2c9c3b4571 | ||
![]() |
4266b2e4ca | ||
![]() |
0e63233845 | ||
![]() |
9855bdbaaa | ||
![]() |
51bdda0c34 | ||
![]() |
8fb9b21f59 | ||
![]() |
b8dd4b9048 | ||
![]() |
4f6586873f | ||
![]() |
37d799dd8e | ||
![]() |
c32116a21a | ||
![]() |
a56aa56cbc | ||
![]() |
48e313bf18 | ||
![]() |
fa6bcd8b30 | ||
![]() |
eed5ba6c1e | ||
![]() |
8e40f31ed3 | ||
![]() |
af05df937e | ||
![]() |
f01a9d50fb | ||
![]() |
f14b65cf43 | ||
![]() |
e5069083c9 | ||
![]() |
8a079299a6 | ||
![]() |
dfe223c3b8 | ||
![]() |
e09410448c | ||
![]() |
269ddf4a34 | ||
![]() |
e41bccad64 | ||
![]() |
d6ccd93cf2 | ||
![]() |
7da85b9005 | ||
![]() |
8d23b684f5 | ||
![]() |
47776e3ca1 | ||
![]() |
52e0dc6464 | ||
![]() |
af5e69327b | ||
![]() |
20b03189df | ||
![]() |
3d44eb0f42 | ||
![]() |
3f039562b9 | ||
![]() |
a4cf503071 | ||
![]() |
2315d3c90a | ||
![]() |
5413668c1a | ||
![]() |
3e60270193 | ||
![]() |
ddaa7afbb5 | ||
![]() |
2377a0d753 | ||
![]() |
a4de1b4944 | ||
![]() |
5b66810646 | ||
![]() |
aa63f320f8 | ||
![]() |
cf20ccb126 | ||
![]() |
ca2c112c9a | ||
![]() |
75b0ee3daf | ||
![]() |
60c79dfb2f | ||
![]() |
c10ab23387 | ||
![]() |
ec7adb7e00 | ||
![]() |
e9ca618780 | ||
![]() |
7c9e0e51da | ||
![]() |
0d2c7c3b2c | ||
![]() |
c8f2abad18 | ||
![]() |
b6ef7367c2 | ||
![]() |
4463e9d7a3 | ||
![]() |
44f42b2a63 | ||
![]() |
991721e955 | ||
![]() |
47d4929bc6 | ||
![]() |
769d5660f5 | ||
![]() |
ff36301cc5 | ||
![]() |
7fb079ef3c | ||
![]() |
7bcba29493 | ||
![]() |
8744008630 | ||
![]() |
418d34cbee | ||
![]() |
fcd5c2c21d | ||
![]() |
e3c6281b26 | ||
![]() |
ae5b886148 | ||
![]() |
c5badf8341 | ||
![]() |
da882de0d4 | ||
![]() |
633febaeab | ||
![]() |
bf9485c231 | ||
![]() |
a722bdcd37 | ||
![]() |
8a5fe53706 | ||
![]() |
362e49aa2c | ||
![]() |
6d2939c9b9 | ||
![]() |
9a11cb7bb3 | ||
![]() |
45cd2c005b | ||
![]() |
2d241808e9 | ||
![]() |
9fc17f67c6 | ||
![]() |
287e903385 | ||
![]() |
b1b27f7a2b | ||
![]() |
745ec0daae | ||
![]() |
64f1d2f005 | ||
![]() |
55afd8cdb8 | ||
![]() |
42a12a62ac | ||
![]() |
e8018ed779 | ||
![]() |
00eaebeac8 | ||
![]() |
dd92aecdca | ||
![]() |
20f9e503cb | ||
![]() |
e26dea6416 | ||
![]() |
3b2b8dacd8 | ||
![]() |
df94d3994d | ||
![]() |
6f56d94c64 | ||
![]() |
56c4f10607 | ||
![]() |
dfa71317ad | ||
![]() |
2df26ca323 | ||
![]() |
b7cb9673b0 | ||
![]() |
8d815f878c | ||
![]() |
dab26df9c4 | ||
![]() |
c7fe9a6465 | ||
![]() |
4f26f3ae2e | ||
![]() |
730fa89e4c | ||
![]() |
0326d899c4 | ||
![]() |
c993adfcdb | ||
![]() |
4885b311f8 | ||
![]() |
3274f673ab | ||
![]() |
b09dc5db67 | ||
![]() |
f5fefc0499 | ||
![]() |
ab077992f5 | ||
![]() |
2f80c3a2c4 | ||
![]() |
4c0b8f6f40 | ||
![]() |
ce6f2739b5 | ||
![]() |
7ecb772c6c | ||
![]() |
0049127bb7 | ||
![]() |
5b6c95cea3 | ||
![]() |
f480fb7c85 | ||
![]() |
94bb43907d | ||
![]() |
32a62bede8 | ||
![]() |
7372d9055a | ||
![]() |
3ff4a6910d | ||
![]() |
683695bec2 | ||
![]() |
fbe13f4e9e | ||
![]() |
4f642428de | ||
![]() |
954f5d7d42 | ||
![]() |
4a12c46350 | ||
![]() |
9eb64cd6db | ||
![]() |
7b8e76c26f | ||
![]() |
665be1ecfe | ||
![]() |
edda73c7fc | ||
![]() |
6413529a6e | ||
![]() |
f5e1df08a0 | ||
![]() |
bb2bbfdf92 | ||
![]() |
7529db8254 | ||
![]() |
b9a73c88b5 | ||
![]() |
48e6901936 | ||
![]() |
734bde3877 | ||
![]() |
22bd26272d | ||
![]() |
d497a5c4ac | ||
![]() |
323737f3a6 | ||
![]() |
39bffcb3a0 | ||
![]() |
16cd7bf649 | ||
![]() |
da150e8767 | ||
![]() |
1f64452716 | ||
![]() |
10871af93b | ||
![]() |
50c9ede69d | ||
![]() |
ca4fa11859 | ||
![]() |
853948a93d | ||
![]() |
9986b023d7 | ||
![]() |
58af76384a | ||
![]() |
e2ca8e820e | ||
![]() |
1cbd730b8d | ||
![]() |
6f1a553234 | ||
![]() |
b2c286ff1d | ||
![]() |
024bffd683 | ||
![]() |
5e53d6cfee | ||
![]() |
913b29dbcb | ||
![]() |
e68ba3f1df | ||
![]() |
92f1941fb0 | ||
![]() |
e68125eb6a | ||
![]() |
4f1c3547bf | ||
![]() |
e102ac2b58 | ||
![]() |
a536484408 | ||
![]() |
63dca5bb86 | ||
![]() |
bc7ecf330b | ||
![]() |
703c25a6e2 | ||
![]() |
d4e00de1fd | ||
![]() |
0c36248073 | ||
![]() |
08e4489ede | ||
![]() |
76801ff564 | ||
![]() |
cabb7b65e9 | ||
![]() |
c4ccfec316 | ||
![]() |
1ac9244e68 | ||
![]() |
7e837dfee2 | ||
![]() |
21185227ad | ||
![]() |
b3e29dc11b | ||
![]() |
9f6fc5a074 | ||
![]() |
f2d3ac1e7b | ||
![]() |
edad740e15 | ||
![]() |
8265e53128 | ||
![]() |
d316b05fa1 | ||
![]() |
3000f0208f | ||
![]() |
e49c95c220 | ||
![]() |
47c5abb8a5 | ||
![]() |
be9b349e51 | ||
![]() |
b22ae106b2 | ||
![]() |
7fe4a2ce6c | ||
![]() |
8102ba4d52 | ||
![]() |
dd5bfb3b24 | ||
![]() |
18defaae6d | ||
![]() |
a2702e4058 | ||
![]() |
e6e463092c | ||
![]() |
128c69aa76 | ||
![]() |
17fd681bdb | ||
![]() |
3e4193e3d5 | ||
![]() |
da40dbf1dd | ||
![]() |
01350467bd | ||
![]() |
6b1d568172 | ||
![]() |
d220720dde | ||
![]() |
e852156b9f | ||
![]() |
b7f864cdb0 | ||
![]() |
1f8accd6e0 | ||
![]() |
8205e3619a | ||
![]() |
7f33ae0f40 | ||
![]() |
13aa3265e3 | ||
![]() |
3b0687e557 | ||
![]() |
b21fc9fe22 | ||
![]() |
634b00b379 | ||
![]() |
b28f9f8136 | ||
![]() |
273941a9fe | ||
![]() |
ac7891c14b | ||
![]() |
718811be9c | ||
![]() |
8d9cb09261 | ||
![]() |
196d88559c | ||
![]() |
2dfadca14c | ||
![]() |
84f1d82aac | ||
![]() |
1d27fac4d9 | ||
![]() |
a5d3164ea4 | ||
![]() |
357da0ca28 | ||
![]() |
9b411fa8d4 | ||
![]() |
087a5748c8 | ||
![]() |
6105185d05 | ||
![]() |
c993a817d1 | ||
![]() |
002aa29f19 | ||
![]() |
07de090723 | ||
![]() |
70038e90ce | ||
![]() |
3809732e48 | ||
![]() |
eb4a6fd2ed | ||
![]() |
3357844a1f | ||
![]() |
cb302a08b8 | ||
![]() |
0d8fe3b626 | ||
![]() |
5df988d2ac | ||
![]() |
e9ef277929 | ||
![]() |
2dcdcba227 | ||
![]() |
5b6c5dff0a | ||
![]() |
7fa887b644 | ||
![]() |
5c6b2cf490 | ||
![]() |
e0930b5cbb | ||
![]() |
2a3d03254d | ||
![]() |
e570863801 | ||
![]() |
866d9416b4 | ||
![]() |
e048085b5a | ||
![]() |
9ed2f4b2d3 | ||
![]() |
c2eb2184fc | ||
![]() |
a2e3b4ca06 | ||
![]() |
909ad02a18 | ||
![]() |
4a930d2b5b | ||
![]() |
4a19103891 | ||
![]() |
497712a3fa | ||
![]() |
073175e5f7 | ||
![]() |
bb0c45b090 | ||
![]() |
d0583f9947 | ||
![]() |
6bd1da219a | ||
![]() |
0a14f2cffc | ||
![]() |
dcb1b4871f | ||
![]() |
baa6c9e4b9 | ||
![]() |
251e808a29 | ||
![]() |
22c0090979 | ||
![]() |
aef991bc49 | ||
![]() |
a4bbaf071e | ||
![]() |
12bd301401 | ||
![]() |
a14637b416 | ||
![]() |
5d1ac22fd1 | ||
![]() |
6d5791a63a | ||
![]() |
2709c2d2e1 | ||
![]() |
92d819ede5 | ||
![]() |
36f52be3bf | ||
![]() |
3ccfea84b8 | ||
![]() |
38beca11fd | ||
![]() |
3555577581 | ||
![]() |
e852596862 | ||
![]() |
f15fde26f9 | ||
![]() |
73c426f8be | ||
![]() |
8f40c1a77f | ||
![]() |
0d00e88580 | ||
![]() |
8792e0a978 | ||
![]() |
e27e56f7bf | ||
![]() |
6b7e1225dd | ||
![]() |
0051620840 | ||
![]() |
f47bbee24a | ||
![]() |
361e25ba34 | ||
![]() |
46a37a6eea | ||
![]() |
b911bd3e42 | ||
![]() |
c239b6e311 | ||
![]() |
d1a3a84b6f | ||
![]() |
63f9d3e0b4 | ||
![]() |
90b1111382 | ||
![]() |
0aa526d707 | ||
![]() |
4daef2591d | ||
![]() |
2d91aa0b06 | ||
![]() |
2fd6de0af5 | ||
![]() |
799af4e550 | ||
![]() |
b8e0bcee5b | ||
![]() |
3567308a22 | ||
![]() |
aca0bebaf4 | ||
![]() |
10682ef31f | ||
![]() |
0ab7a3d8ec | ||
![]() |
4ee4555cbd | ||
![]() |
253adcb0eb | ||
![]() |
585609b907 | ||
![]() |
1d8332d61e | ||
![]() |
3f95c78428 | ||
![]() |
8e95c4db55 | ||
![]() |
a493e2fbb3 | ||
![]() |
f476a7566c | ||
![]() |
4304fba0f5 | ||
![]() |
07bd9825a1 | ||
![]() |
69c7cb9f6f | ||
![]() |
fd473af5b0 | ||
![]() |
d1f02f6bed | ||
![]() |
c5cc9dbffa | ||
![]() |
43e183b658 | ||
![]() |
153f319666 | ||
![]() |
3b8e6ecc42 | ||
![]() |
29ec8cbd0a | ||
![]() |
3072604070 | ||
![]() |
562d10809c | ||
![]() |
49f2de9547 | ||
![]() |
c7d41cd963 | ||
![]() |
e13e5f836e | ||
![]() |
c00bf26c77 | ||
![]() |
a2f54f7da4 | ||
![]() |
12bf139708 | ||
![]() |
dbb69ad7cd | ||
![]() |
b78f16ef19 | ||
![]() |
223f339682 | ||
![]() |
3f556fa3fc | ||
![]() |
16db0c039f | ||
![]() |
94874ddbbe | ||
![]() |
ea86697973 | ||
![]() |
fa1605e7e7 | ||
![]() |
46346d2a51 | ||
![]() |
830a58cebd | ||
![]() |
0edef7b3cb | ||
![]() |
64757670fc | ||
![]() |
edac77de74 | ||
![]() |
63e3b1af52 | ||
![]() |
f6fa88e5ff | ||
![]() |
78587e11c7 | ||
![]() |
784d06f0ae | ||
![]() |
6846c8f2ed | ||
![]() |
cfa4501793 | ||
![]() |
16f1dccd22 | ||
![]() |
3278899787 | ||
![]() |
cdbee64086 | ||
![]() |
90e134cb26 | ||
![]() |
725b618111 | ||
![]() |
f135a3a5e7 | ||
![]() |
8f8e4806a9 | ||
![]() |
100123b43e | ||
![]() |
45a5424ebf | ||
![]() |
be37f2c576 | ||
![]() |
26ed819664 | ||
![]() |
f907ac30c6 | ||
![]() |
60be7012aa | ||
![]() |
002d493035 | ||
![]() |
a41d6cfef1 | ||
![]() |
ecfa149efc | ||
![]() |
be1270d070 | ||
![]() |
75ee4b7709 | ||
![]() |
d5b1028732 | ||
![]() |
6c0be03e62 | ||
![]() |
7ddea1270f | ||
![]() |
97578c2d3d | ||
![]() |
64806ed169 | ||
![]() |
a14c3bcc89 | ||
![]() |
1699a23ff0 | ||
![]() |
268c3fdbd8 | ||
![]() |
7689e03739 | ||
![]() |
d875540b3a | ||
![]() |
16aa9a310c | ||
![]() |
d0a008566e | ||
![]() |
d6c1a59bd4 | ||
![]() |
07117b4c8a | ||
![]() |
46d20c9968 | ||
![]() |
de1b2c31a1 | ||
![]() |
1f9cbe218f | ||
![]() |
6d69c26c8d | ||
![]() |
b914f48a91 | ||
![]() |
de89355a49 | ||
![]() |
5e214877a4 | ||
![]() |
cf88f0609d | ||
![]() |
6502036be9 | ||
![]() |
f86da19362 | ||
![]() |
b04e150dc1 | ||
![]() |
1c0c374c29 | ||
![]() |
fcda3dc8c6 | ||
![]() |
e433b953f6 | ||
![]() |
d370dd43b1 | ||
![]() |
84bd20b04b | ||
![]() |
c90d7b8395 | ||
![]() |
6c6ce28f7d | ||
![]() |
e01acec12b | ||
![]() |
4feb2e639b | ||
![]() |
37ba7af6f6 | ||
![]() |
cc22e13e71 | ||
![]() |
346ae22108 | ||
![]() |
5a4d4972e2 | ||
![]() |
03bbfa0b94 | ||
![]() |
10fb85663f | ||
![]() |
33287a63ad | ||
![]() |
3134a87e72 | ||
![]() |
d68b59a390 | ||
![]() |
447263ecc2 | ||
![]() |
08a7f662ea | ||
![]() |
007fb5deb9 | ||
![]() |
6422175ef2 | ||
![]() |
32ca0b97fc | ||
![]() |
244b161032 | ||
![]() |
75a6fb1d91 | ||
![]() |
32c2aecc62 | ||
![]() |
b0ef0de032 | ||
![]() |
92692653a7 | ||
![]() |
77ba19cd04 | ||
![]() |
5b43460ea4 | ||
![]() |
579f1f9dc1 | ||
![]() |
de4ad764ce | ||
![]() |
33444466f3 | ||
![]() |
73888eafe1 | ||
![]() |
cd3d560e8d | ||
![]() |
c0497d3413 | ||
![]() |
648f779e2c | ||
![]() |
80eaafa001 | ||
![]() |
b1915132d5 | ||
![]() |
cedc1d4e28 | ||
![]() |
e6d80c60fb | ||
![]() |
05f59f6ed2 | ||
![]() |
8f457815e9 | ||
![]() |
233944bf24 | ||
![]() |
424d988f93 | ||
![]() |
3926594c6a | ||
![]() |
5f84344c3c | ||
![]() |
01082f86b7 | ||
![]() |
9fa681f5a8 | ||
![]() |
36b6733c4f | ||
![]() |
2c195c73a9 | ||
![]() |
1dd05ffbb1 | ||
![]() |
4884b01b8a | ||
![]() |
46136b5632 | ||
![]() |
ae29dd124c | ||
![]() |
703460ea95 | ||
![]() |
b7c889bb70 | ||
![]() |
12bbbcaff0 | ||
![]() |
b156c1ab25 | ||
![]() |
358d855c88 | ||
![]() |
1059dd389f | ||
![]() |
f1bcf89723 | ||
![]() |
099a239207 | ||
![]() |
821076ba9c | ||
![]() |
60dd27671b | ||
![]() |
0b0d901b7f | ||
![]() |
7fec51f322 | ||
![]() |
1659ace65d | ||
![]() |
3340608689 | ||
![]() |
5ccdb6f213 | ||
![]() |
0981b66a5f | ||
![]() |
3ddcc2d4ea | ||
![]() |
6005479918 | ||
![]() |
19e049642b | ||
![]() |
b8e6672e60 | ||
![]() |
dbeb0a4720 | ||
![]() |
a43cd55c53 | ||
![]() |
b67dee1eed | ||
![]() |
d5c48e4be3 | ||
![]() |
be6b3176f4 | ||
![]() |
aef29affa3 | ||
![]() |
70d236244f | ||
![]() |
882e4971eb | ||
![]() |
3a12a63c32 | ||
![]() |
171a2019ec | ||
![]() |
70df6bbbca | ||
![]() |
5807d521b7 | ||
![]() |
67e482ff97 | ||
![]() |
2b2bbe35d0 | ||
![]() |
8862d63377 | ||
![]() |
fc7427536c | ||
![]() |
0cb365cf31 | ||
![]() |
49a0d0d9bf | ||
![]() |
3602191f69 | ||
![]() |
5935e277e6 | ||
![]() |
0ce33cb160 | ||
![]() |
d945030803 | ||
![]() |
fab6987601 | ||
![]() |
9e3ebf1648 | ||
![]() |
60a484f1e4 | ||
![]() |
f13beabdd0 | ||
![]() |
1169cb9e85 | ||
![]() |
c8fc989237 | ||
![]() |
392ebd0af4 | ||
![]() |
a2efa0d289 | ||
![]() |
cabcf1e270 | ||
![]() |
af7364bdf9 | ||
![]() |
14e1e6368a | ||
![]() |
f1aa6fff9c | ||
![]() |
d11bfaa6c4 | ||
![]() |
25cd86feec | ||
![]() |
062176d8d0 | ||
![]() |
a344d88020 | ||
![]() |
30b180d77b | ||
![]() |
00423ed152 | ||
![]() |
48ff3b2c11 | ||
![]() |
eee0d4bf31 | ||
![]() |
e047755a21 | ||
![]() |
b30d609d19 | ||
![]() |
8ad056b8a2 | ||
![]() |
c1cb171071 | ||
![]() |
17959f648a | ||
![]() |
c3d9aa791a | ||
![]() |
f846e7719e | ||
![]() |
f25c215f6a | ||
![]() |
2640120be8 | ||
![]() |
b55014617e | ||
![]() |
42589a0034 | ||
![]() |
8691874dbb | ||
![]() |
82c405289d | ||
![]() |
191ea24e29 | ||
![]() |
72a6fad1db | ||
![]() |
a2a99485f9 | ||
![]() |
969e2c1ff1 | ||
![]() |
7d0faa3fed | ||
![]() |
4256177531 | ||
![]() |
327530fb9d | ||
![]() |
db92b5a219 | ||
![]() |
55be75c974 | ||
![]() |
47a6ce4342 | ||
![]() |
3ecb841c1a | ||
![]() |
1d2450245e | ||
![]() |
f6c4c9260f | ||
![]() |
f354d68350 | ||
![]() |
bea76aa682 | ||
![]() |
6d4b27aacb | ||
![]() |
e008b7dae7 | ||
![]() |
96a3991c56 | ||
![]() |
8d1d691bc3 | ||
![]() |
e07608209b | ||
![]() |
50cdb74d54 | ||
![]() |
edc091f4d4 | ||
![]() |
e0448a7b7b | ||
![]() |
0f02f5ff34 | ||
![]() |
b2111adef5 | ||
![]() |
442da6c4a2 | ||
![]() |
f715863540 | ||
![]() |
ed7dbb100d | ||
![]() |
52fdea0419 | ||
![]() |
c1d31476cd | ||
![]() |
b23b97f612 | ||
![]() |
bd1789c54b | ||
![]() |
b7c72cb38a | ||
![]() |
5cc20b5e44 | ||
![]() |
ce9a9db33a | ||
![]() |
31e19a0434 | ||
![]() |
16968eb38c | ||
![]() |
5c46b98eee | ||
![]() |
ba46747cb0 | ||
![]() |
140645b760 | ||
![]() |
0dcca35ec2 | ||
![]() |
c7eaee037e | ||
![]() |
fa201ad9ad | ||
![]() |
832e3f5d49 | ||
![]() |
6a1a38b395 | ||
![]() |
6261fce91f | ||
![]() |
e8f655439d | ||
![]() |
c11093fa71 | ||
![]() |
af7282511a | ||
![]() |
58b6cf0174 | ||
![]() |
7abcb61afb | ||
![]() |
ff5240c0bc | ||
![]() |
4e3d935acf | ||
![]() |
3fad11e104 | ||
![]() |
aab7631a9f | ||
![]() |
38ee1724a8 | ||
![]() |
0c7e2e2364 | ||
![]() |
f693084065 | ||
![]() |
a5ecc7a06d | ||
![]() |
565f1543c6 | ||
![]() |
0d8016d926 | ||
![]() |
a599e33ec2 | ||
![]() |
36c84b3fec | ||
![]() |
9cca389031 | ||
![]() |
e965507470 | ||
![]() |
65fd3a3193 | ||
![]() |
3bbd8fe4c9 | ||
![]() |
beb308c5b3 | ||
![]() |
526d2a61f8 | ||
![]() |
8ab00442ea | ||
![]() |
cba803abaf | ||
![]() |
54a09ead95 | ||
![]() |
c2ea23f01f | ||
![]() |
ff6188bd80 | ||
![]() |
dc1b2a6873 | ||
![]() |
d732a146c2 | ||
![]() |
b9bc518a0a | ||
![]() |
edf32911be | ||
![]() |
b8470a471b | ||
![]() |
45880395ea | ||
![]() |
6f3c9205cd | ||
![]() |
96c90b24d1 | ||
![]() |
aa4bfa0727 | ||
![]() |
8873ffca12 | ||
![]() |
0bda748ad9 | ||
![]() |
867686fe34 | ||
![]() |
60f92dcdbc | ||
![]() |
4fe2f31301 | ||
![]() |
6871ad09e6 | ||
![]() |
479188bc40 | ||
![]() |
c3c7ccd78a | ||
![]() |
000b432bb2 | ||
![]() |
dacd2cbc30 | ||
![]() |
65a08efa00 | ||
![]() |
60266289e0 | ||
![]() |
3145758411 | ||
![]() |
d7948a845d | ||
![]() |
aff69e583e | ||
![]() |
e7f7b6ad68 | ||
![]() |
b5e58f4076 | ||
![]() |
fd0f51926e | ||
![]() |
733d6fe6eb | ||
![]() |
b2509c82b8 | ||
![]() |
bffbf87cb3 | ||
![]() |
63890cc2fd | ||
![]() |
9ade49b39c | ||
![]() |
6d49cd6859 | ||
![]() |
5eb116059b | ||
![]() |
bcdd1c56bf | ||
![]() |
cbcd2cce9b | ||
![]() |
94c3d7fb60 | ||
![]() |
a2db4a464a | ||
![]() |
fe7da97c5c | ||
![]() |
c294a0a9ac | ||
![]() |
30fe363b57 | ||
![]() |
4ec57836d8 | ||
![]() |
5b7ba838f1 | ||
![]() |
ac99eb59d2 | ||
![]() |
1be09df9d4 | ||
![]() |
38b3a2080b | ||
![]() |
0fec0ef624 | ||
![]() |
f0d6789722 | ||
![]() |
7ef61d58fd | ||
![]() |
96ae4a5967 | ||
![]() |
bca645f63d | ||
![]() |
a8105f084e | ||
![]() |
e86f09aaed | ||
![]() |
692a7471c1 | ||
![]() |
480645d22f | ||
![]() |
784a853ec7 | ||
![]() |
088fc392ab | ||
![]() |
0d7644c782 | ||
![]() |
f15d24b4e8 | ||
![]() |
510549f365 | ||
![]() |
99313fe162 | ||
![]() |
f9df193b7b | ||
![]() |
113a400952 | ||
![]() |
b6983e4b21 | ||
![]() |
fc400ea57b | ||
![]() |
068a74adeb | ||
![]() |
1a8743ec11 | ||
![]() |
9925b9b455 | ||
![]() |
4c43bae92d | ||
![]() |
659db9f04b | ||
![]() |
b88d1dfaa9 | ||
![]() |
7c79bbd6b0 | ||
![]() |
ce6bfcb7f5 | ||
![]() |
6ce543e118 | ||
![]() |
cd9bf03fb7 | ||
![]() |
1d88ac43cf | ||
![]() |
6102285577 | ||
![]() |
b83603488c | ||
![]() |
cf22e30237 | ||
![]() |
f01971b67c | ||
![]() |
c62be1bb45 | ||
![]() |
cf1880343b | ||
![]() |
0c57433567 | ||
![]() |
5ef0527ebc | ||
![]() |
53ef5c51cc | ||
![]() |
58c7934dd8 | ||
![]() |
0a626917f8 | ||
![]() |
922bb1452f | ||
![]() |
1cda37659e | ||
![]() |
fe2e46fe60 | ||
![]() |
7765afa7da | ||
![]() |
55d7e9ec61 | ||
![]() |
6a4ad8af06 | ||
![]() |
018440354f | ||
![]() |
6d2904cff1 | ||
![]() |
55fac29b3e | ||
![]() |
5e966d60b0 | ||
![]() |
c08f927d60 | ||
![]() |
49a197eaa8 | ||
![]() |
3abe7cfc45 | ||
![]() |
8c31db6352 | ||
![]() |
91eb824c21 | ||
![]() |
00e66c48b8 | ||
![]() |
589f90762a | ||
![]() |
f256a57f27 | ||
![]() |
1102bf271d | ||
![]() |
b561d5ad9a | ||
![]() |
a5cb58ca96 | ||
![]() |
0af77a3c2c | ||
![]() |
a75d14f5d0 | ||
![]() |
bca39e8081 | ||
![]() |
3e3519e8ec | ||
![]() |
566150977a | ||
![]() |
0ff3ba30b7 | ||
![]() |
43885e6d0b | ||
![]() |
577f0ca562 | ||
![]() |
56d339b8f0 | ||
![]() |
bd1e7a7c13 | ||
![]() |
5f41b65af1 | ||
![]() |
3c90894e38 | ||
![]() |
0dbebe953b | ||
![]() |
16c12a42c7 | ||
![]() |
136f1c50e7 | ||
![]() |
043729f557 | ||
![]() |
75f1f9228d | ||
![]() |
38d9c6d26b | ||
![]() |
afd7cf51cf | ||
![]() |
c41594d220 | ||
![]() |
fedbd48c0f | ||
![]() |
271b779995 | ||
![]() |
52b33f6f47 | ||
![]() |
5aee43d05b | ||
![]() |
5feececff6 | ||
![]() |
7b29a380fc | ||
![]() |
997c23befa | ||
![]() |
87b0025691 | ||
![]() |
fcd983d915 | ||
![]() |
24d43849a0 | ||
![]() |
4ce26296d6 | ||
![]() |
4342759da7 | ||
![]() |
25f2d224f1 | ||
![]() |
8b8b828cd1 | ||
![]() |
65dabeaf15 | ||
![]() |
0480339272 | ||
![]() |
b09cdc0a18 | ||
![]() |
c3b86b687c | ||
![]() |
0abb4f8c6f | ||
![]() |
697ac18872 | ||
![]() |
fc229cf274 | ||
![]() |
b48136d994 | ||
![]() |
77ba7c987a | ||
![]() |
84f3baf013 | ||
![]() |
795baedbb1 | ||
![]() |
5469a7eb71 | ||
![]() |
23fc7c2c96 | ||
![]() |
dff404a8c9 | ||
![]() |
146364aa67 | ||
![]() |
258dbf30e0 | ||
![]() |
44b93c039a | ||
![]() |
4d5313699e | ||
![]() |
cd198290d7 | ||
![]() |
60ed7d3273 | ||
![]() |
9bcfba6620 | ||
![]() |
7ea3c64268 | ||
![]() |
2b6a34e9e0 | ||
![]() |
458b90c78d | ||
![]() |
dd284c0986 | ||
![]() |
21539dfb6a | ||
![]() |
91785b8284 | ||
![]() |
f202770b70 | ||
![]() |
8186a54962 | ||
![]() |
866909b803 | ||
![]() |
408910e6e8 | ||
![]() |
24c8e575f4 | ||
![]() |
8d0ca2c876 | ||
![]() |
fc96ebefd4 | ||
![]() |
394330175f | ||
![]() |
f946c3da06 | ||
![]() |
156fbd1958 | ||
![]() |
7dd0d126e2 | ||
![]() |
205360c109 | ||
![]() |
984a0e6d06 | ||
![]() |
eb63568ceb | ||
![]() |
cc6f896b69 | ||
![]() |
83e47a7216 | ||
![]() |
1d64549cce | ||
![]() |
d0c36c0de3 | ||
![]() |
341db13279 | ||
![]() |
1c8e13b9c1 | ||
![]() |
49c5f3bb9c | ||
![]() |
4ae361bd1f | ||
![]() |
6502496a2c | ||
![]() |
8678ceeb3c | ||
![]() |
9cb62f4d2e | ||
![]() |
6c0ef54e18 | ||
![]() |
fd731c5ccd | ||
![]() |
cbe9490dc0 | ||
![]() |
82054bfabc | ||
![]() |
963dd75c39 | ||
![]() |
1c24617f98 | ||
![]() |
1559c2ca21 | ||
![]() |
6141722b1f | ||
![]() |
e32747dc6f | ||
![]() |
222d8eed4e | ||
![]() |
6936f6cd02 | ||
![]() |
718d52a72c | ||
![]() |
fe1a06271a | ||
![]() |
841619a7d2 | ||
![]() |
bd2370555b | ||
![]() |
86c9ee4e90 | ||
![]() |
b26bcf1343 | ||
![]() |
5d5c6275f9 | ||
![]() |
9c1a47d1fc | ||
![]() |
905cc365e7 | ||
![]() |
55266c4085 | ||
![]() |
5f95a26218 | ||
![]() |
91b7d4234e | ||
![]() |
0280316b03 | ||
![]() |
7afe87bb52 | ||
![]() |
13852b7f4e | ||
![]() |
9632049bf2 | ||
![]() |
13a6f04945 | ||
![]() |
58a744782a | ||
![]() |
4fd7a88a15 | ||
![]() |
63d5808848 | ||
![]() |
5c2a6b5eb1 | ||
![]() |
9cbebbb8a0 | ||
![]() |
e26d987c4e | ||
![]() |
53669efaf8 | ||
![]() |
b68f45ef59 | ||
![]() |
a1541aa6f5 | ||
![]() |
5f3c4fccaf | ||
![]() |
8f44de651b | ||
![]() |
2ede244da0 | ||
![]() |
77a181978e | ||
![]() |
170bbce0d3 | ||
![]() |
fc99d9be41 | ||
![]() |
9fb9bed806 | ||
![]() |
01b2f80a95 | ||
![]() |
da7ff777d1 | ||
![]() |
8d48f8d8b0 | ||
![]() |
b4618f9ba1 | ||
![]() |
2c5d83fab3 |
36
.build/common.ts
Normal file
36
.build/common.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
export interface PackageOptions {
|
||||
name: string;
|
||||
packageName: string;
|
||||
file: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shared common options for both ESBuild and Vite
|
||||
*/
|
||||
export const packageOptions = {
|
||||
parser: {
|
||||
name: 'mermaid-parser',
|
||||
packageName: 'parser',
|
||||
file: 'index.ts',
|
||||
},
|
||||
mermaid: {
|
||||
name: 'mermaid',
|
||||
packageName: 'mermaid',
|
||||
file: 'mermaid.ts',
|
||||
},
|
||||
'mermaid-example-diagram': {
|
||||
name: 'mermaid-example-diagram',
|
||||
packageName: 'mermaid-example-diagram',
|
||||
file: 'detector.ts',
|
||||
},
|
||||
'mermaid-zenuml': {
|
||||
name: 'mermaid-zenuml',
|
||||
packageName: 'mermaid-zenuml',
|
||||
file: 'detector.ts',
|
||||
},
|
||||
'mermaid-layout-elk': {
|
||||
name: 'mermaid-layout-elk',
|
||||
packageName: 'mermaid-layout-elk',
|
||||
file: 'layouts.ts',
|
||||
},
|
||||
} as const satisfies Record<string, PackageOptions>;
|
5
.build/generateLangium.ts
Normal file
5
.build/generateLangium.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import { generate } from 'langium-cli';
|
||||
|
||||
export async function generateLangium() {
|
||||
await generate({ file: `./packages/parser/langium-config.json` });
|
||||
}
|
@@ -1,6 +1,7 @@
|
||||
import jison from 'jison';
|
||||
|
||||
export const transformJison = (src: string): string => {
|
||||
// @ts-ignore - Jison is not typed properly
|
||||
const parser = new jison.Generator(src, {
|
||||
moduleType: 'js',
|
||||
'token-stack': true,
|
127
.build/jsonSchema.ts
Normal file
127
.build/jsonSchema.ts
Normal file
@@ -0,0 +1,127 @@
|
||||
import { load, JSON_SCHEMA } from 'js-yaml';
|
||||
import assert from 'node:assert';
|
||||
import Ajv2019, { type JSONSchemaType } from 'ajv/dist/2019.js';
|
||||
import type { MermaidConfig, BaseDiagramConfig } from '../packages/mermaid/src/config.type.js';
|
||||
|
||||
/**
|
||||
* All of the keys in the mermaid config that have a mermaid diagram config.
|
||||
*/
|
||||
const MERMAID_CONFIG_DIAGRAM_KEYS = [
|
||||
'flowchart',
|
||||
'sequence',
|
||||
'gantt',
|
||||
'journey',
|
||||
'class',
|
||||
'state',
|
||||
'er',
|
||||
'pie',
|
||||
'quadrantChart',
|
||||
'xyChart',
|
||||
'requirement',
|
||||
'mindmap',
|
||||
'kanban',
|
||||
'timeline',
|
||||
'gitGraph',
|
||||
'c4',
|
||||
'sankey',
|
||||
'block',
|
||||
'packet',
|
||||
'architecture',
|
||||
'radar',
|
||||
] as const;
|
||||
|
||||
/**
|
||||
* Generate default values from the JSON Schema.
|
||||
*
|
||||
* AJV does not support nested default values yet (or default values with $ref),
|
||||
* so we need to manually find them (this may be fixed in ajv v9).
|
||||
*
|
||||
* @param mermaidConfigSchema - The Mermaid JSON Schema to use.
|
||||
* @returns The default mermaid config object.
|
||||
*/
|
||||
function generateDefaults(mermaidConfigSchema: JSONSchemaType<MermaidConfig>) {
|
||||
const ajv = new Ajv2019({
|
||||
useDefaults: true,
|
||||
allowUnionTypes: true,
|
||||
strict: true,
|
||||
});
|
||||
|
||||
ajv.addKeyword({
|
||||
keyword: 'meta:enum', // used by jsonschema2md
|
||||
errors: false,
|
||||
});
|
||||
ajv.addKeyword({
|
||||
keyword: 'tsType', // used by json-schema-to-typescript
|
||||
errors: false,
|
||||
});
|
||||
|
||||
// ajv currently doesn't support nested default values, see https://github.com/ajv-validator/ajv/issues/1718
|
||||
// (may be fixed in v9) so we need to manually use sub-schemas
|
||||
const mermaidDefaultConfig = {};
|
||||
|
||||
assert.ok(mermaidConfigSchema.$defs);
|
||||
const baseDiagramConfig = mermaidConfigSchema.$defs.BaseDiagramConfig;
|
||||
|
||||
for (const key of MERMAID_CONFIG_DIAGRAM_KEYS) {
|
||||
const subSchemaRef = mermaidConfigSchema.properties[key].$ref;
|
||||
const [root, defs, defName] = subSchemaRef.split('/');
|
||||
assert.strictEqual(root, '#');
|
||||
assert.strictEqual(defs, '$defs');
|
||||
const subSchema = {
|
||||
$schema: mermaidConfigSchema.$schema,
|
||||
$defs: mermaidConfigSchema.$defs,
|
||||
...mermaidConfigSchema.$defs[defName],
|
||||
} as JSONSchemaType<BaseDiagramConfig>;
|
||||
|
||||
const validate = ajv.compile(subSchema);
|
||||
|
||||
mermaidDefaultConfig[key] = {};
|
||||
|
||||
for (const required of subSchema.required ?? []) {
|
||||
if (subSchema.properties[required] === undefined && baseDiagramConfig.properties[required]) {
|
||||
mermaidDefaultConfig[key][required] = baseDiagramConfig.properties[required].default;
|
||||
}
|
||||
}
|
||||
if (!validate(mermaidDefaultConfig[key])) {
|
||||
throw new Error(
|
||||
`schema for subconfig ${key} does not have valid defaults! Errors were ${JSON.stringify(
|
||||
validate.errors,
|
||||
undefined,
|
||||
2
|
||||
)}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const validate = ajv.compile(mermaidConfigSchema);
|
||||
|
||||
if (!validate(mermaidDefaultConfig)) {
|
||||
throw new Error(
|
||||
`Mermaid config JSON Schema does not have valid defaults! Errors were ${JSON.stringify(
|
||||
validate.errors,
|
||||
undefined,
|
||||
2
|
||||
)}`
|
||||
);
|
||||
}
|
||||
|
||||
return mermaidDefaultConfig;
|
||||
}
|
||||
|
||||
export const loadSchema = (src: string, filename: string): JSONSchemaType<MermaidConfig> => {
|
||||
const jsonSchema = load(src, {
|
||||
filename,
|
||||
// only allow JSON types in our YAML doc (will probably be default in YAML 1.3)
|
||||
// e.g. `true` will be parsed a boolean `true`, `True` will be parsed as string `"True"`.
|
||||
schema: JSON_SCHEMA,
|
||||
}) as JSONSchemaType<MermaidConfig>;
|
||||
return jsonSchema;
|
||||
};
|
||||
|
||||
export const getDefaults = (schema: JSONSchemaType<MermaidConfig>) => {
|
||||
return `export default ${JSON.stringify(generateDefaults(schema), undefined, 2)};`;
|
||||
};
|
||||
|
||||
export const getSchema = (schema: JSONSchemaType<MermaidConfig>) => {
|
||||
return `export default ${JSON.stringify(schema, undefined, 2)};`;
|
||||
};
|
28
.build/types.ts
Normal file
28
.build/types.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
/* eslint-disable no-console */
|
||||
import { packageOptions } from './common.js';
|
||||
import { execSync } from 'child_process';
|
||||
|
||||
const buildType = (packageName: string) => {
|
||||
console.log(`Building types for ${packageName}`);
|
||||
try {
|
||||
const out = execSync(`tsc -p ./packages/${packageName}/tsconfig.json --emitDeclarationOnly`);
|
||||
if (out.length > 0) {
|
||||
console.log(out.toString());
|
||||
}
|
||||
} catch (e) {
|
||||
if (e.stdout.length > 0) {
|
||||
console.error(e.stdout.toString());
|
||||
}
|
||||
if (e.stderr.length > 0) {
|
||||
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}`);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (const { packageName } of Object.values(packageOptions)) {
|
||||
buildType(packageName);
|
||||
}
|
8
.changeset/README.md
Normal file
8
.changeset/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# Changesets
|
||||
|
||||
Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
|
||||
with multi-package repos, or single-package repos to help you version and publish your code. You can
|
||||
find the full documentation for it [in our repository](https://github.com/changesets/changesets)
|
||||
|
||||
We have a quick list of common questions to get you started engaging with this project in
|
||||
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
|
12
.changeset/config.json
Normal file
12
.changeset/config.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
|
||||
"changelog": ["@changesets/changelog-github", { "repo": "mermaid-js/mermaid" }],
|
||||
"commit": false,
|
||||
"fixed": [],
|
||||
"linked": [],
|
||||
"access": "public",
|
||||
"baseBranch": "master",
|
||||
"updateInternalDependencies": "patch",
|
||||
"bumpVersionsWithWorkspaceProtocolOnly": true,
|
||||
"ignore": ["@mermaid-js/docs", "@mermaid-js/webpack-test", "@mermaid-js/mermaid-example-diagram"]
|
||||
}
|
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"extends": ["@commitlint/config-conventional"]
|
||||
}
|
@@ -13,6 +13,7 @@ bqstring
|
||||
BQUOTE
|
||||
bramp
|
||||
BRKT
|
||||
brotli
|
||||
callbackargs
|
||||
callbackname
|
||||
classdef
|
||||
@@ -25,8 +26,10 @@ concat
|
||||
controlx
|
||||
controly
|
||||
CSSCLASS
|
||||
curv
|
||||
CYLINDEREND
|
||||
CYLINDERSTART
|
||||
DAGA
|
||||
datakey
|
||||
DEND
|
||||
descr
|
||||
@@ -44,15 +47,17 @@ edgesep
|
||||
EMPTYSTR
|
||||
enddate
|
||||
ERDIAGRAM
|
||||
eslint
|
||||
flatmap
|
||||
forwardable
|
||||
frontmatter
|
||||
funs
|
||||
gantt
|
||||
GENERICTYPE
|
||||
getBoundarys
|
||||
grammr
|
||||
graphtype
|
||||
halign
|
||||
iife
|
||||
interp
|
||||
introdcued
|
||||
INVTRAPEND
|
||||
@@ -63,6 +68,7 @@ Kaufmann
|
||||
keyify
|
||||
LABELPOS
|
||||
LABELTYPE
|
||||
layoutstop
|
||||
lcov
|
||||
LEFTOF
|
||||
Lexa
|
||||
@@ -74,18 +80,22 @@ loglevel
|
||||
LOGMSG
|
||||
lookaheads
|
||||
mdast
|
||||
metafile
|
||||
minlen
|
||||
Mstartx
|
||||
MULT
|
||||
NODIR
|
||||
NSTR
|
||||
outdir
|
||||
Qcontrolx
|
||||
QSTR
|
||||
reinit
|
||||
rels
|
||||
reqs
|
||||
rewritelinks
|
||||
rgba
|
||||
RIGHTOF
|
||||
roughjs
|
||||
sankey
|
||||
sequencenumber
|
||||
shrc
|
||||
@@ -105,13 +115,17 @@ strikethrough
|
||||
stringifying
|
||||
struct
|
||||
STYLECLASS
|
||||
STYLEDEF
|
||||
STYLEOPTS
|
||||
subcomponent
|
||||
subcomponents
|
||||
subconfig
|
||||
SUBROUTINEEND
|
||||
SUBROUTINESTART
|
||||
Subschemas
|
||||
substr
|
||||
SVGG
|
||||
SVGSVG
|
||||
TAGEND
|
||||
TAGSTART
|
||||
techn
|
||||
@@ -122,11 +136,13 @@ titlevalue
|
||||
topbar
|
||||
TRAPEND
|
||||
TRAPSTART
|
||||
treemap
|
||||
ts-nocheck
|
||||
tsdoc
|
||||
typeof
|
||||
typestr
|
||||
unshift
|
||||
urlsafe
|
||||
verifymethod
|
||||
VERIFYMTHD
|
||||
WARN_DOCSDIR_DOESNT_MATCH
|
||||
|
@@ -2,7 +2,10 @@
|
||||
Ashish Jain
|
||||
cpettitt
|
||||
Dong Cai
|
||||
knsv
|
||||
Knut Sveidqvist
|
||||
Nikolay Rozhkov
|
||||
Peng Xiao
|
||||
Per Brolin
|
||||
Sidharth Vinod
|
||||
subhash-halder
|
||||
Vinod Sidharth
|
||||
|
@@ -28,6 +28,9 @@ dictionaryDefinitions:
|
||||
- name: suggestions
|
||||
words:
|
||||
- none
|
||||
- disp
|
||||
- subproc
|
||||
- tria
|
||||
suggestWords:
|
||||
- seperator:separator
|
||||
- vertice:vertex
|
||||
|
@@ -20,14 +20,19 @@ dagre-d3
|
||||
Deepdwn
|
||||
Docsify
|
||||
Docsy
|
||||
Doctave
|
||||
DokuWiki
|
||||
dompurify
|
||||
elkjs
|
||||
fcose
|
||||
fontawesome
|
||||
Fonticons
|
||||
Forgejo
|
||||
Foswiki
|
||||
Gitea
|
||||
graphlib
|
||||
Grav
|
||||
icones
|
||||
iconify
|
||||
Inkdrop
|
||||
jiti
|
||||
@@ -36,6 +41,7 @@ jsfiddle
|
||||
jsonschema
|
||||
katex
|
||||
khroma
|
||||
langium
|
||||
mathml
|
||||
matplotlib
|
||||
mdbook
|
||||
@@ -53,13 +59,17 @@ presetAttributify
|
||||
pyplot
|
||||
redmine
|
||||
rehype
|
||||
roughjs
|
||||
rscratch
|
||||
shiki
|
||||
Slidev
|
||||
sparkline
|
||||
sphinxcontrib
|
||||
ssim
|
||||
stylis
|
||||
Swimm
|
||||
tsbuildinfo
|
||||
tseslint
|
||||
Tuleap
|
||||
Typora
|
||||
unocss
|
||||
|
@@ -1,26 +1,31 @@
|
||||
Adamiecki
|
||||
arrowend
|
||||
Bendpoints
|
||||
bmatrix
|
||||
braintree
|
||||
catmull
|
||||
compositTitleSize
|
||||
curv
|
||||
doublecircle
|
||||
elems
|
||||
gantt
|
||||
gitgraph
|
||||
gzipped
|
||||
knsv
|
||||
Knut
|
||||
handDrawn
|
||||
kanban
|
||||
marginx
|
||||
marginy
|
||||
Markdownish
|
||||
mermaidchart
|
||||
mermaidjs
|
||||
mindmap
|
||||
mindmaps
|
||||
mrtree
|
||||
multigraph
|
||||
nodesep
|
||||
NOTEGROUP
|
||||
Pinterest
|
||||
procs
|
||||
rankdir
|
||||
ranksep
|
||||
rect
|
||||
@@ -29,7 +34,6 @@ sandboxed
|
||||
siebling
|
||||
statediagram
|
||||
substate
|
||||
Sveidqvist
|
||||
unfixable
|
||||
Viewbox
|
||||
viewports
|
||||
|
@@ -1 +1,7 @@
|
||||
BRANDES
|
||||
circo
|
||||
handDrawn
|
||||
KOEPF
|
||||
neato
|
||||
newbranch
|
||||
validify
|
||||
|
107
.esbuild/build.ts
Normal file
107
.esbuild/build.ts
Normal file
@@ -0,0 +1,107 @@
|
||||
import { build } from 'esbuild';
|
||||
import { cp, mkdir, readFile, rename, writeFile } from 'node:fs/promises';
|
||||
import { packageOptions } from '../.build/common.js';
|
||||
import { generateLangium } from '../.build/generateLangium.js';
|
||||
import type { MermaidBuildOptions } from './util.js';
|
||||
import { defaultOptions, getBuildConfig } from './util.js';
|
||||
|
||||
const shouldVisualize = process.argv.includes('--visualize');
|
||||
|
||||
const buildPackage = async (entryName: keyof typeof packageOptions) => {
|
||||
const commonOptions: MermaidBuildOptions = {
|
||||
...defaultOptions,
|
||||
options: packageOptions[entryName],
|
||||
} as const;
|
||||
const buildConfigs: MermaidBuildOptions[] = [
|
||||
// package.mjs
|
||||
{ ...commonOptions },
|
||||
// package.min.mjs
|
||||
{
|
||||
...commonOptions,
|
||||
minify: true,
|
||||
metafile: shouldVisualize,
|
||||
},
|
||||
// package.core.mjs
|
||||
{ ...commonOptions, core: true },
|
||||
];
|
||||
|
||||
if (entryName === 'mermaid') {
|
||||
const iifeOptions: MermaidBuildOptions = { ...commonOptions, format: 'iife' };
|
||||
buildConfigs.push(
|
||||
// mermaid.js
|
||||
{ ...iifeOptions },
|
||||
// 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 }
|
||||
);
|
||||
}
|
||||
|
||||
const results = await Promise.all(buildConfigs.map((option) => build(getBuildConfig(option))));
|
||||
|
||||
if (shouldVisualize) {
|
||||
for (const { metafile } of results) {
|
||||
if (!metafile?.outputs) {
|
||||
continue;
|
||||
}
|
||||
const fileName = Object.keys(metafile.outputs)
|
||||
.find((file) => !file.includes('chunks') && file.endsWith('js'))!
|
||||
.replace('dist/', '');
|
||||
// Upload metafile into https://esbuild.github.io/analyze/
|
||||
await writeFile(`stats/${fileName}.meta.json`, JSON.stringify(metafile));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const handler = (e) => {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(e);
|
||||
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 () => {
|
||||
await generateLangium();
|
||||
await mkdir('stats', { recursive: true });
|
||||
const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
|
||||
// it should build `parser` before `mermaid` because it's a dependency
|
||||
for (const pkg of packageNames) {
|
||||
await buildPackage(pkg).catch(handler);
|
||||
}
|
||||
await buildTinyMermaid();
|
||||
};
|
||||
|
||||
void main();
|
15
.esbuild/jisonPlugin.ts
Normal file
15
.esbuild/jisonPlugin.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { readFile } from 'node:fs/promises';
|
||||
import { transformJison } from '../.build/jisonTransformer.js';
|
||||
import type { Plugin } from 'esbuild';
|
||||
|
||||
export const jisonPlugin: Plugin = {
|
||||
name: 'jison',
|
||||
setup(build) {
|
||||
build.onLoad({ filter: /\.jison$/ }, async (args) => {
|
||||
// Load the file from the file system
|
||||
const source = await readFile(args.path, 'utf8');
|
||||
const contents = transformJison(source);
|
||||
return { contents, warnings: [] };
|
||||
});
|
||||
},
|
||||
};
|
35
.esbuild/jsonSchemaPlugin.ts
Normal file
35
.esbuild/jsonSchemaPlugin.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import type { JSONSchemaType } from 'ajv/dist/2019.js';
|
||||
import type { MermaidConfig } from '../packages/mermaid/src/config.type.js';
|
||||
import { readFile } from 'node:fs/promises';
|
||||
import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js';
|
||||
|
||||
/**
|
||||
* ESBuild plugin that handles JSON Schemas saved as a `.schema.yaml` file.
|
||||
*
|
||||
* Use `my-example.schema.yaml?only-defaults=true` to only load the default values.
|
||||
*/
|
||||
|
||||
export const jsonSchemaPlugin = {
|
||||
name: 'json-schema-plugin',
|
||||
setup(build) {
|
||||
let schema: JSONSchemaType<MermaidConfig> | undefined = undefined;
|
||||
let content = '';
|
||||
|
||||
build.onLoad({ filter: /config\.schema\.yaml$/ }, async (args) => {
|
||||
// Load the file from the file system
|
||||
const source = await readFile(args.path, 'utf8');
|
||||
const resolvedSchema: JSONSchemaType<MermaidConfig> =
|
||||
content === source && schema ? schema : loadSchema(source, args.path);
|
||||
if (content !== source) {
|
||||
content = source;
|
||||
schema = resolvedSchema;
|
||||
}
|
||||
const contents = args.suffix.includes('only-defaults')
|
||||
? getDefaults(resolvedSchema)
|
||||
: getSchema(resolvedSchema);
|
||||
return { contents, warnings: [] };
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
export default jsonSchemaPlugin;
|
122
.esbuild/server.ts
Normal file
122
.esbuild/server.ts
Normal file
@@ -0,0 +1,122 @@
|
||||
/* eslint-disable no-console */
|
||||
import chokidar from 'chokidar';
|
||||
import cors from 'cors';
|
||||
import { context } from 'esbuild';
|
||||
import type { Request, Response } from 'express';
|
||||
import express from 'express';
|
||||
import { packageOptions } from '../.build/common.js';
|
||||
import { generateLangium } from '../.build/generateLangium.js';
|
||||
import { defaultOptions, getBuildConfig } from './util.js';
|
||||
|
||||
const configs = Object.values(packageOptions).map(({ packageName }) =>
|
||||
getBuildConfig({
|
||||
...defaultOptions,
|
||||
minify: false,
|
||||
core: false,
|
||||
options: packageOptions[packageName],
|
||||
})
|
||||
);
|
||||
const mermaidIIFEConfig = getBuildConfig({
|
||||
...defaultOptions,
|
||||
minify: false,
|
||||
core: false,
|
||||
options: packageOptions.mermaid,
|
||||
format: 'iife',
|
||||
});
|
||||
configs.push(mermaidIIFEConfig);
|
||||
|
||||
const contexts = await Promise.all(
|
||||
configs.map(async (config) => ({ config, context: await context(config) }))
|
||||
);
|
||||
|
||||
let rebuildCounter = 1;
|
||||
const rebuildAll = async () => {
|
||||
const buildNumber = rebuildCounter++;
|
||||
const timeLabel = `Rebuild ${buildNumber} Time (total)`;
|
||||
console.time(timeLabel);
|
||||
await Promise.all(
|
||||
contexts.map(async ({ config, context }) => {
|
||||
const buildVariant = `Rebuild ${buildNumber} Time (${Object.keys(config.entryPoints!)[0]} ${config.format})`;
|
||||
console.time(buildVariant);
|
||||
await context.rebuild();
|
||||
console.timeEnd(buildVariant);
|
||||
})
|
||||
).catch((e) => console.error(e));
|
||||
console.timeEnd(timeLabel);
|
||||
};
|
||||
|
||||
let clients: { id: number; response: Response }[] = [];
|
||||
function eventsHandler(request: Request, response: Response) {
|
||||
const headers = {
|
||||
'Content-Type': 'text/event-stream',
|
||||
Connection: 'keep-alive',
|
||||
'Cache-Control': 'no-cache',
|
||||
};
|
||||
response.writeHead(200, headers);
|
||||
const clientId = Date.now();
|
||||
clients.push({
|
||||
id: clientId,
|
||||
response,
|
||||
});
|
||||
request.on('close', () => {
|
||||
clients = clients.filter((client) => client.id !== clientId);
|
||||
});
|
||||
}
|
||||
|
||||
let timeoutID: NodeJS.Timeout | undefined = undefined;
|
||||
|
||||
/**
|
||||
* Debounce file change events to avoid rebuilding multiple times.
|
||||
*/
|
||||
function handleFileChange() {
|
||||
if (timeoutID !== undefined) {
|
||||
clearTimeout(timeoutID);
|
||||
}
|
||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
timeoutID = setTimeout(async () => {
|
||||
await rebuildAll();
|
||||
sendEventsToAll();
|
||||
timeoutID = undefined;
|
||||
}, 100);
|
||||
}
|
||||
|
||||
function sendEventsToAll() {
|
||||
clients.forEach(({ response }) => response.write(`data: ${Date.now()}\n\n`));
|
||||
}
|
||||
|
||||
async function createServer() {
|
||||
await generateLangium();
|
||||
handleFileChange();
|
||||
const app = express();
|
||||
chokidar
|
||||
.watch('**/src/**/*.{js,ts,langium,yaml,json}', {
|
||||
ignoreInitial: true,
|
||||
ignored: [/node_modules/, /dist/, /docs/, /coverage/],
|
||||
})
|
||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
.on('all', async (event, path) => {
|
||||
// Ignore other events.
|
||||
if (!['add', 'change'].includes(event)) {
|
||||
return;
|
||||
}
|
||||
console.log(`${path} changed. Rebuilding...`);
|
||||
if (path.endsWith('.langium')) {
|
||||
await generateLangium();
|
||||
}
|
||||
handleFileChange();
|
||||
});
|
||||
|
||||
app.use(cors());
|
||||
app.get('/events', eventsHandler);
|
||||
for (const { packageName } of Object.values(packageOptions)) {
|
||||
app.use(express.static(`./packages/${packageName}/dist`));
|
||||
}
|
||||
app.use(express.static('demos'));
|
||||
app.use(express.static('cypress/platform'));
|
||||
|
||||
app.listen(9000, () => {
|
||||
console.log(`Listening on http://localhost:9000`);
|
||||
});
|
||||
}
|
||||
|
||||
void createServer();
|
119
.esbuild/util.ts
Normal file
119
.esbuild/util.ts
Normal file
@@ -0,0 +1,119 @@
|
||||
import { resolve } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import type { BuildOptions } from 'esbuild';
|
||||
import { readFileSync } from 'fs';
|
||||
import jsonSchemaPlugin from './jsonSchemaPlugin.js';
|
||||
import type { PackageOptions } from '../.build/common.js';
|
||||
import { jisonPlugin } from './jisonPlugin.js';
|
||||
|
||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
||||
|
||||
export interface MermaidBuildOptions extends BuildOptions {
|
||||
minify: boolean;
|
||||
core: boolean;
|
||||
metafile: boolean;
|
||||
format: 'esm' | 'iife';
|
||||
options: PackageOptions;
|
||||
includeLargeFeatures: boolean;
|
||||
}
|
||||
|
||||
export const defaultOptions: Omit<MermaidBuildOptions, 'entryName' | 'options'> = {
|
||||
minify: false,
|
||||
metafile: false,
|
||||
core: false,
|
||||
format: 'esm',
|
||||
includeLargeFeatures: true,
|
||||
} as const;
|
||||
|
||||
const buildOptions = (override: BuildOptions): BuildOptions => {
|
||||
return {
|
||||
bundle: true,
|
||||
minify: true,
|
||||
keepNames: true,
|
||||
platform: 'browser',
|
||||
tsconfig: 'tsconfig.json',
|
||||
resolveExtensions: ['.ts', '.js', '.json', '.jison', '.yaml'],
|
||||
external: ['require', 'fs', 'path'],
|
||||
outdir: 'dist',
|
||||
plugins: [jisonPlugin, jsonSchemaPlugin],
|
||||
sourcemap: 'external',
|
||||
...override,
|
||||
};
|
||||
};
|
||||
|
||||
const getFileName = (
|
||||
fileName: string,
|
||||
{ core, format, minify, includeLargeFeatures }: MermaidBuildOptions
|
||||
) => {
|
||||
if (core) {
|
||||
fileName += '.core';
|
||||
} else if (format === 'esm') {
|
||||
fileName += '.esm';
|
||||
}
|
||||
if (!includeLargeFeatures) {
|
||||
fileName += '.tiny';
|
||||
}
|
||||
if (minify) {
|
||||
fileName += '.min';
|
||||
}
|
||||
return fileName;
|
||||
};
|
||||
|
||||
export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
|
||||
const {
|
||||
core,
|
||||
format,
|
||||
options: { name, file, packageName },
|
||||
globalName = 'mermaid',
|
||||
includeLargeFeatures,
|
||||
...rest
|
||||
} = options;
|
||||
|
||||
const external: string[] = ['require', 'fs', 'path'];
|
||||
const outFileName = getFileName(name, options);
|
||||
const output: BuildOptions = buildOptions({
|
||||
...rest,
|
||||
absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
|
||||
entryPoints: {
|
||||
[outFileName]: `src/${file}`,
|
||||
},
|
||||
globalName,
|
||||
logLevel: 'info',
|
||||
chunkNames: `chunks/${outFileName}/[name]-[hash]`,
|
||||
define: {
|
||||
// This needs to be stringified for esbuild
|
||||
includeLargeFeatures: `${includeLargeFeatures}`,
|
||||
'import.meta.vitest': 'undefined',
|
||||
},
|
||||
});
|
||||
|
||||
if (core) {
|
||||
const { dependencies } = JSON.parse(
|
||||
readFileSync(resolve(__dirname, `../packages/${packageName}/package.json`), 'utf-8')
|
||||
);
|
||||
// Core build is used to generate file without bundled dependencies.
|
||||
// This is used by downstream projects to bundle dependencies themselves.
|
||||
// Ignore dependencies and any dependencies of dependencies
|
||||
external.push(...Object.keys(dependencies));
|
||||
output.external = external;
|
||||
}
|
||||
|
||||
if (format === 'iife') {
|
||||
output.format = 'iife';
|
||||
output.splitting = false;
|
||||
const originalGlobalName = output.globalName ?? 'mermaid';
|
||||
output.globalName = `__esbuild_esm_mermaid_nm[${JSON.stringify(originalGlobalName)}]`;
|
||||
// Workaround for removing the .default access in esbuild IIFE.
|
||||
// https://github.com/mermaid-js/mermaid/pull/4109#discussion_r1292317396
|
||||
output.footer = {
|
||||
js: `globalThis[${JSON.stringify(originalGlobalName)}] = globalThis.${output.globalName}.default;`,
|
||||
};
|
||||
output.outExtension = { '.js': '.js' };
|
||||
} else {
|
||||
output.format = 'esm';
|
||||
output.splitting = true;
|
||||
output.outExtension = { '.js': '.mjs' };
|
||||
}
|
||||
|
||||
return output;
|
||||
};
|
@@ -1,8 +0,0 @@
|
||||
dist/**
|
||||
.github/**
|
||||
docs/Setup.md
|
||||
cypress.config.js
|
||||
cypress/plugins/index.js
|
||||
coverage
|
||||
*.json
|
||||
node_modules
|
189
.eslintrc.cjs
189
.eslintrc.cjs
@@ -1,189 +0,0 @@
|
||||
module.exports = {
|
||||
env: {
|
||||
browser: true,
|
||||
es6: true,
|
||||
'jest/globals': true,
|
||||
node: true,
|
||||
},
|
||||
root: true,
|
||||
parser: '@typescript-eslint/parser',
|
||||
parserOptions: {
|
||||
ecmaFeatures: {
|
||||
experimentalObjectRestSpread: true,
|
||||
jsx: true,
|
||||
},
|
||||
tsconfigRootDir: __dirname,
|
||||
sourceType: 'module',
|
||||
ecmaVersion: 2020,
|
||||
allowAutomaticSingleRunInference: true,
|
||||
project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'],
|
||||
parser: '@typescript-eslint/parser',
|
||||
},
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:json/recommended',
|
||||
'plugin:markdown/recommended',
|
||||
'plugin:@cspell/recommended',
|
||||
'prettier',
|
||||
],
|
||||
plugins: [
|
||||
'@typescript-eslint',
|
||||
'no-only-tests',
|
||||
'html',
|
||||
'jest',
|
||||
'jsdoc',
|
||||
'json',
|
||||
'@cspell',
|
||||
'lodash',
|
||||
'unicorn',
|
||||
],
|
||||
ignorePatterns: [
|
||||
// this file is automatically generated by `pnpm run --filter mermaid types:build-config`
|
||||
'packages/mermaid/src/config.type.ts',
|
||||
],
|
||||
rules: {
|
||||
curly: 'error',
|
||||
'no-console': 'error',
|
||||
'no-prototype-builtins': 'off',
|
||||
'no-unused-vars': 'off',
|
||||
'cypress/no-async-tests': 'off',
|
||||
'@typescript-eslint/consistent-type-imports': 'error',
|
||||
'@typescript-eslint/no-explicit-any': 'warn',
|
||||
'@typescript-eslint/no-floating-promises': 'error',
|
||||
'@typescript-eslint/no-misused-promises': 'error',
|
||||
'@typescript-eslint/no-unused-vars': 'warn',
|
||||
'@typescript-eslint/ban-ts-comment': [
|
||||
'error',
|
||||
{
|
||||
'ts-expect-error': 'allow-with-description',
|
||||
'ts-ignore': 'allow-with-description',
|
||||
'ts-nocheck': 'allow-with-description',
|
||||
'ts-check': 'allow-with-description',
|
||||
minimumDescriptionLength: 10,
|
||||
},
|
||||
],
|
||||
'@typescript-eslint/naming-convention': [
|
||||
'error',
|
||||
{
|
||||
selector: 'typeLike',
|
||||
format: ['PascalCase'],
|
||||
custom: {
|
||||
regex: '^I[A-Z]',
|
||||
match: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
'json/*': ['error', 'allowComments'],
|
||||
'@cspell/spellchecker': [
|
||||
'error',
|
||||
{
|
||||
checkIdentifiers: true,
|
||||
checkStrings: true,
|
||||
checkStringTemplates: true,
|
||||
},
|
||||
],
|
||||
'no-empty': [
|
||||
'error',
|
||||
{
|
||||
allowEmptyCatch: true,
|
||||
},
|
||||
],
|
||||
'no-only-tests/no-only-tests': 'error',
|
||||
'lodash/import-scope': ['error', 'method'],
|
||||
'unicorn/better-regex': 'error',
|
||||
'unicorn/no-abusive-eslint-disable': 'error',
|
||||
'unicorn/no-array-push-push': 'error',
|
||||
'unicorn/no-for-loop': 'error',
|
||||
'unicorn/no-instanceof-array': 'error',
|
||||
'unicorn/no-typeof-undefined': 'error',
|
||||
'unicorn/no-unnecessary-await': 'error',
|
||||
'unicorn/no-unsafe-regex': 'warn',
|
||||
'unicorn/no-useless-promise-resolve-reject': 'error',
|
||||
'unicorn/prefer-array-find': 'error',
|
||||
'unicorn/prefer-array-flat-map': 'error',
|
||||
'unicorn/prefer-array-index-of': 'error',
|
||||
'unicorn/prefer-array-some': 'error',
|
||||
'unicorn/prefer-default-parameters': 'error',
|
||||
'unicorn/prefer-includes': 'error',
|
||||
'unicorn/prefer-negative-index': 'error',
|
||||
'unicorn/prefer-object-from-entries': 'error',
|
||||
'unicorn/prefer-string-starts-ends-with': 'error',
|
||||
'unicorn/prefer-string-trim-start-end': 'error',
|
||||
'unicorn/string-content': 'error',
|
||||
'unicorn/prefer-spread': 'error',
|
||||
'unicorn/no-lonely-if': 'error',
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: ['cypress/**', 'demos/**'],
|
||||
rules: {
|
||||
'no-console': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['*.{js,jsx,mjs,cjs}'],
|
||||
extends: ['plugin:jsdoc/recommended'],
|
||||
rules: {
|
||||
'jsdoc/check-indentation': 'off',
|
||||
'jsdoc/check-alignment': 'off',
|
||||
'jsdoc/check-line-alignment': 'off',
|
||||
'jsdoc/multiline-blocks': 'off',
|
||||
'jsdoc/newline-after-description': 'off',
|
||||
'jsdoc/tag-lines': 'off',
|
||||
'jsdoc/require-param-description': 'off',
|
||||
'jsdoc/require-param-type': 'off',
|
||||
'jsdoc/require-returns': 'off',
|
||||
'jsdoc/require-returns-description': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['*.{ts,tsx}'],
|
||||
plugins: ['tsdoc'],
|
||||
rules: {
|
||||
'no-restricted-syntax': [
|
||||
'error',
|
||||
{
|
||||
selector: 'TSEnumDeclaration',
|
||||
message:
|
||||
'Prefer using TypeScript union types over TypeScript enum, since TypeScript enums have a bunch of issues, see https://dev.to/dvddpl/whats-the-problem-with-typescript-enums-2okj',
|
||||
},
|
||||
],
|
||||
'tsdoc/syntax': 'error',
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['*.spec.{ts,js}', 'cypress/**', 'demos/**', '**/docs/**'],
|
||||
rules: {
|
||||
'jsdoc/require-jsdoc': 'off',
|
||||
'@typescript-eslint/no-unused-vars': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['*.spec.{ts,js}', 'tests/**', 'cypress/**/*.js'],
|
||||
rules: {
|
||||
'@cspell/spellchecker': [
|
||||
'error',
|
||||
{
|
||||
checkIdentifiers: false,
|
||||
checkStrings: false,
|
||||
checkStringTemplates: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['*.html', '*.md', '**/*.md/*'],
|
||||
rules: {
|
||||
'no-var': 'error',
|
||||
'no-undef': 'off',
|
||||
'@typescript-eslint/no-unused-vars': 'off',
|
||||
'@typescript-eslint/no-floating-promises': 'off',
|
||||
'@typescript-eslint/no-misused-promises': 'off',
|
||||
},
|
||||
parserOptions: {
|
||||
project: null,
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -4,7 +4,7 @@ contact_links:
|
||||
url: https://github.com/mermaid-js/mermaid/discussions
|
||||
about: Ask the Community questions or share your own graphs in our discussions.
|
||||
- name: Discord
|
||||
url: https://discord.gg/AgrbSrBer3
|
||||
url: https://discord.gg/sKeNQX4Wtj
|
||||
about: Join our Community on Discord for Help and a casual chat.
|
||||
- name: Documentation
|
||||
url: https://mermaid.js.org
|
||||
|
2
.github/ISSUE_TEMPLATE/theme_proposal.yml
vendored
2
.github/ISSUE_TEMPLATE/theme_proposal.yml
vendored
@@ -29,7 +29,7 @@ body:
|
||||
label: Colors
|
||||
description: |-
|
||||
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: |-
|
||||
- background: #f4f4f4
|
||||
- primaryColor: #fff4dd
|
||||
|
1
.github/codecov.yaml
vendored
1
.github/codecov.yaml
vendored
@@ -15,3 +15,4 @@ coverage:
|
||||
# Turing off for now as code coverage isn't stable and causes unnecessary build failures.
|
||||
# default:
|
||||
# threshold: 2%
|
||||
patch: off
|
||||
|
17
.github/lychee.toml
vendored
17
.github/lychee.toml
vendored
@@ -41,7 +41,22 @@ exclude = [
|
||||
"https://bundlephobia.com",
|
||||
|
||||
# Chrome webstore migration issue. Temporary
|
||||
"https://chromewebstore.google.com"
|
||||
"https://chromewebstore.google.com",
|
||||
|
||||
# Drupal 403
|
||||
"https://(www.)?drupal.org",
|
||||
|
||||
# Phbpp 403
|
||||
"https://(www.)?phpbb.com",
|
||||
|
||||
# Swimm returns 404, even though the link is valid
|
||||
"https://docs.swimm.io",
|
||||
|
||||
# Timeout
|
||||
"https://huehive.co",
|
||||
"https://foswiki.org",
|
||||
"https://www.gnu.org",
|
||||
"https://mermaid-preview.com"
|
||||
]
|
||||
|
||||
# Exclude all private IPs from checking.
|
||||
|
2
.github/pull_request_template.md
vendored
2
.github/pull_request_template.md
vendored
@@ -15,4 +15,4 @@ Make sure you
|
||||
- [ ] :book: have read the [contribution guidelines](https://mermaid.js.org/community/contributing.html)
|
||||
- [ ] :computer: have added necessary unit/e2e tests.
|
||||
- [ ] :notebook: have added documentation. Make sure [`MERMAID_RELEASE_VERSION`](https://mermaid.js.org/community/contributing.html#update-documentation) is used for all new features.
|
||||
- [ ] :bookmark: targeted `develop` branch
|
||||
- [ ] :butterfly: If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`.
|
||||
|
36
.github/release-drafter.yml
vendored
36
.github/release-drafter.yml
vendored
@@ -1,36 +0,0 @@
|
||||
name-template: '$NEXT_PATCH_VERSION'
|
||||
tag-template: '$NEXT_PATCH_VERSION'
|
||||
categories:
|
||||
- title: '🚨 **Breaking Changes**'
|
||||
labels:
|
||||
- 'Breaking Change'
|
||||
- title: '🚀 Features'
|
||||
labels:
|
||||
- 'Type: Enhancement'
|
||||
- 'feature' # deprecated, new PRs shouldn't have this
|
||||
- title: '🐛 Bug Fixes'
|
||||
labels:
|
||||
- 'Type: Bug / Error'
|
||||
- 'fix' # deprecated, new PRs shouldn't have this
|
||||
- title: '🧰 Maintenance'
|
||||
labels:
|
||||
- 'Type: Other'
|
||||
- 'chore' # deprecated, new PRs shouldn't have this
|
||||
- title: '⚡️ Performance'
|
||||
labels:
|
||||
- 'Type: Performance'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- 'Area: Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER) @$AUTHOR'
|
||||
sort-by: title
|
||||
sort-direction: ascending
|
||||
exclude-labels:
|
||||
- 'Skip changelog'
|
||||
no-changes-template: 'This release contains minor changes and bugfixes.'
|
||||
template: |
|
||||
# Release Notes
|
||||
|
||||
$CHANGES
|
||||
|
||||
🎉 **Thanks to all contributors helping with this release!** 🎉
|
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.
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
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.
|
||||
|
45
.github/workflows/autofix.yml
vendored
Normal file
45
.github/workflows/autofix.yml
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
name: autofix.ci # needed to securely identify the workflow
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches-ignore:
|
||||
- 'renovate/**'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
||||
jobs:
|
||||
autofix:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
# uses version from "packageManager" field in package.json
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
cache: pnpm
|
||||
node-version-file: '.node-version'
|
||||
|
||||
- name: Install Packages
|
||||
run: |
|
||||
pnpm install --frozen-lockfile
|
||||
env:
|
||||
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
||||
|
||||
- name: Fix Linting
|
||||
shell: bash
|
||||
run: pnpm -w run lint:fix
|
||||
|
||||
- name: Sync `./src/config.type.ts` with `./src/schemas/config.schema.yaml`
|
||||
shell: bash
|
||||
run: pnpm run --filter mermaid types:build-config
|
||||
|
||||
- name: Build Docs
|
||||
working-directory: ./packages/mermaid
|
||||
run: pnpm run docs:build
|
||||
|
||||
- uses: autofix-ci/action@551dded8c6cc8a1054039c8bc0b8b48c51dfc6ef # main
|
8
.github/workflows/build-docs.yml
vendored
8
.github/workflows/build-docs.yml
vendored
@@ -8,6 +8,8 @@ on:
|
||||
pull_request:
|
||||
merge_group:
|
||||
|
||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
@@ -16,12 +18,12 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
cache: pnpm
|
||||
node-version-file: '.node-version'
|
||||
|
49
.github/workflows/build.yml
vendored
49
.github/workflows/build.yml
vendored
@@ -1,49 +0,0 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push: {}
|
||||
merge_group:
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- synchronize
|
||||
- ready_for_review
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build-mermaid:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
# uses version from "packageManager" field in package.json
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
cache: pnpm
|
||||
node-version-file: '.node-version'
|
||||
|
||||
- name: Install Packages
|
||||
run: |
|
||||
pnpm install --frozen-lockfile
|
||||
env:
|
||||
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
||||
|
||||
- name: Run Build
|
||||
run: pnpm run build
|
||||
|
||||
- name: Upload Mermaid Build as Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: mermaid-build
|
||||
path: packages/mermaid/dist
|
||||
|
||||
- name: Upload Mermaid Mindmap Build as Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: mermaid-mindmap-build
|
||||
path: packages/mermaid-mindmap/dist
|
2
.github/workflows/check-readme-in-sync.yml
vendored
2
.github/workflows/check-readme-in-sync.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Check for difference in README.md and docs/README.md
|
||||
run: |
|
||||
|
26
.github/workflows/checks.yml
vendored
26
.github/workflows/checks.yml
vendored
@@ -1,26 +0,0 @@
|
||||
on:
|
||||
push:
|
||||
merge_group:
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- synchronize
|
||||
- ready_for_review
|
||||
|
||||
name: Static analysis on Test files
|
||||
|
||||
jobs:
|
||||
check-tests:
|
||||
runs-on: ubuntu-latest
|
||||
name: check tests
|
||||
if: github.repository_owner == 'mermaid-js'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: testomatio/check-tests@stable
|
||||
with:
|
||||
framework: cypress
|
||||
tests: './cypress/e2e/**/**.spec.js'
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
has-tests-label: true
|
11
.github/workflows/codeql.yml
vendored
11
.github/workflows/codeql.yml
vendored
@@ -11,6 +11,9 @@ on:
|
||||
- synchronize
|
||||
- ready_for_review
|
||||
|
||||
permissions: # added using https://github.com/step-security/secure-repo
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
@@ -29,11 +32,11 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
uses: github/codeql-action/init@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
||||
with:
|
||||
config-file: ./.github/codeql/codeql-config.yml
|
||||
languages: ${{ matrix.language }}
|
||||
@@ -45,7 +48,7 @@ jobs:
|
||||
# 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)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
uses: github/codeql-action/autobuild@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
||||
|
||||
# ℹ️ 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
|
||||
@@ -59,4 +62,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
uses: github/codeql-action/analyze@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
||||
|
4
.github/workflows/dependency-review.yml
vendored
4
.github/workflows/dependency-review.yml
vendored
@@ -15,6 +15,6 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 'Checkout Repository'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- name: 'Dependency Review'
|
||||
uses: actions/dependency-review-action@v3
|
||||
uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0
|
||||
|
14
.github/workflows/e2e-applitools.yml
vendored
14
.github/workflows/e2e-applitools.yml
vendored
@@ -11,6 +11,8 @@ on:
|
||||
default: master
|
||||
description: 'Parent branch to use for PRs'
|
||||
|
||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
@@ -30,29 +32,31 @@ jobs:
|
||||
run: |
|
||||
echo "::error,title=Not using Applitools::APPLITOOLS_API_KEY is empty, disabling Applitools for this run."
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
# uses version from "packageManager" field in package.json
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
|
||||
- if: ${{ env.USE_APPLI }}
|
||||
name: Notify applitools of new batch
|
||||
# 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:
|
||||
# e.g. mermaid-js/mermaid/my-branch
|
||||
APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }}
|
||||
APPLITOOLS_PARENT_BRANCH: ${{ github.event.inputs.parent_branch }}
|
||||
APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }}
|
||||
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
|
||||
uses: cypress-io/github-action@v4
|
||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
||||
id: cypress
|
||||
with:
|
||||
start: pnpm run dev
|
||||
|
70
.github/workflows/e2e-timings.yml
vendored
Normal file
70
.github/workflows/e2e-timings.yml
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
name: E2E - Generate Timings
|
||||
|
||||
on:
|
||||
# run this workflow every night at 3am
|
||||
schedule:
|
||||
- cron: '28 3 * * *'
|
||||
# or when the user triggers it from GitHub Actions page
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
timings:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
|
||||
options: --user 1001
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
- name: Install dependencies
|
||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
||||
with:
|
||||
runTests: false
|
||||
|
||||
- name: Cypress run
|
||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
||||
id: cypress
|
||||
with:
|
||||
install: false
|
||||
start: pnpm run dev:coverage
|
||||
wait-on: 'http://localhost:9000'
|
||||
browser: chrome
|
||||
publish-summary: false
|
||||
env:
|
||||
VITEST_COVERAGE: true
|
||||
CYPRESS_COMMIT: ${{ github.sha }}
|
||||
SPLIT: 1
|
||||
SPLIT_INDEX: 0
|
||||
SPLIT_FILE: 'cypress/timings.json'
|
||||
|
||||
- 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@889dce9eaba7900ce30494f5e1ac7220b27e5c81
|
||||
with:
|
||||
add-paths: |
|
||||
cypress/timings.json
|
||||
commit-message: 'chore: update E2E timings'
|
||||
branch: update-timings
|
||||
title: Update E2E Timings
|
||||
body: ${{ steps.compare.outputs.output }}
|
||||
delete-branch: true
|
||||
sign-commits: true
|
157
.github/workflows/e2e.yml
vendored
157
.github/workflows/e2e.yml
vendored
@@ -1,25 +1,35 @@
|
||||
# We use github cache to save snapshots between runs.
|
||||
# For PRs and MergeQueues, the target commit is used, and for push events, github.event.previous is used.
|
||||
# If a snapshot for a given Hash is not found, we checkout that commit, run the tests and cache the snapshots.
|
||||
# These are then downloaded before running the E2E, providing the reference snapshots.
|
||||
# If there are any errors, the diff image is uploaded to artifacts, and the user is notified.
|
||||
|
||||
name: E2E
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- 'gh-readonly-queue/**'
|
||||
branches:
|
||||
- develop
|
||||
- master
|
||||
- release/**
|
||||
pull_request:
|
||||
merge_group:
|
||||
|
||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
# For PRs and MergeQueues, the target commit is used, and for push events, github.event.previous is used.
|
||||
targetHash: ${{ github.event.pull_request.base.sha || github.event.merge_group.base_sha || (github.event.before == '0000000000000000000000000000000000000000' && 'develop' || github.event.before) }}
|
||||
|
||||
# For PRs and MergeQueues, the target commit is used, and for push events to non-develop branches, github.event.previous is used if available. Otherwise, 'develop' is used.
|
||||
targetHash: >-
|
||||
${{
|
||||
github.event.pull_request.base.sha ||
|
||||
github.event.merge_group.base_sha ||
|
||||
(
|
||||
(
|
||||
(github.event_name == 'push' && github.ref == 'refs/heads/develop') ||
|
||||
github.event.before == '0000000000000000000000000000000000000000'
|
||||
) && 'develop'
|
||||
) ||
|
||||
github.event.before
|
||||
}}
|
||||
RUN_VISUAL_TEST: >-
|
||||
${{ github.repository == 'mermaid-js/mermaid' && (github.event_name != 'pull_request' || !startsWith(github.head_ref, 'renovate/')) }}
|
||||
jobs:
|
||||
cache:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -27,35 +37,39 @@ jobs:
|
||||
image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
|
||||
options: --user 1001
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: pnpm/action-setup@v2
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
- name: Cache snapshots
|
||||
id: cache-snapshot
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
|
||||
with:
|
||||
save-always: true
|
||||
path: ./cypress/snapshots
|
||||
key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
|
||||
|
||||
# If a snapshot for a given Hash is not found, we checkout that commit, run the tests and cache the snapshots.
|
||||
- name: Switch to base branch
|
||||
if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
ref: ${{ env.targetHash }}
|
||||
|
||||
- name: Cypress run
|
||||
uses: cypress-io/github-action@v4
|
||||
id: cypress-snapshot-gen
|
||||
- name: Install dependencies
|
||||
if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
|
||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
||||
with:
|
||||
start: pnpm run dev
|
||||
wait-on: 'http://localhost:9000'
|
||||
browser: chrome
|
||||
# just perform install
|
||||
runTests: false
|
||||
|
||||
- name: Calculate bundle size
|
||||
if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true'}}
|
||||
run: |
|
||||
pnpm run build:viz
|
||||
mkdir -p cypress/snapshots/stats/base
|
||||
mv stats cypress/snapshots/stats/base
|
||||
|
||||
e2e:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -66,49 +80,66 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
containers: [1, 2, 3, 4]
|
||||
containers: [1, 2, 3, 4, 5]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
# uses version from "packageManager" field in package.json
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version-file: '.node-version'
|
||||
|
||||
# These cached snapshots are downloaded, providing the reference snapshots.
|
||||
- name: Cache snapshots
|
||||
id: cache-snapshot
|
||||
uses: actions/cache/restore@v3
|
||||
uses: actions/cache/restore@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
|
||||
with:
|
||||
path: ./cypress/snapshots
|
||||
key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
|
||||
|
||||
- name: Install dependencies
|
||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
||||
with:
|
||||
runTests: false
|
||||
|
||||
- name: Output size diff
|
||||
if: ${{ matrix.containers == 1 }}
|
||||
run: |
|
||||
pnpm run build:viz
|
||||
mv stats cypress/snapshots/stats/head
|
||||
echo '## Bundle size difference' >> "$GITHUB_STEP_SUMMARY"
|
||||
echo '' >> "$GITHUB_STEP_SUMMARY"
|
||||
npx tsx scripts/size.ts >> "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
# Install NPM dependencies, cache them correctly
|
||||
# and run all Cypress tests
|
||||
- name: Cypress run
|
||||
uses: cypress-io/github-action@v4
|
||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
||||
id: cypress
|
||||
# If CYPRESS_RECORD_KEY is set, run in parallel on all containers
|
||||
# Otherwise (e.g. if running from fork), we run on a single container only
|
||||
if: ${{ ( env.CYPRESS_RECORD_KEY != '' ) || ( matrix.containers == 1 ) }}
|
||||
with:
|
||||
install: false
|
||||
start: pnpm run dev:coverage
|
||||
wait-on: 'http://localhost:9000'
|
||||
browser: chrome
|
||||
# Disable recording if we don't have an API key
|
||||
# e.g. if this action was run from a fork
|
||||
record: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
|
||||
parallel: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
|
||||
record: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY != '' }}
|
||||
env:
|
||||
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
||||
VITEST_COVERAGE: true
|
||||
ARGOS_PARALLEL: ${{ env.RUN_VISUAL_TEST == 'true' }}
|
||||
ARGOS_PARALLEL_TOTAL: ${{ env.RUN_VISUAL_TEST == 'true' && strategy.job-total || 1 }}
|
||||
ARGOS_PARALLEL_INDEX: ${{ env.RUN_VISUAL_TEST == 'true' && matrix.containers || 1 }}
|
||||
CYPRESS_COMMIT: ${{ github.sha }}
|
||||
CYPRESS_RECORD_KEY: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY || ''}}
|
||||
SPLIT: ${{ strategy.job-total }}
|
||||
SPLIT_INDEX: ${{ strategy.job-index }}
|
||||
SPLIT_FILE: 'cypress/timings.json'
|
||||
VITEST_COVERAGE: true
|
||||
|
||||
- name: Upload Coverage to Codecov
|
||||
uses: codecov/codecov-action@v3
|
||||
uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1
|
||||
# Run step only pushes to develop and pull_requests
|
||||
if: ${{ steps.cypress.conclusion == 'success' && (github.event_name == 'pull_request' || github.ref == 'refs/heads/develop')}}
|
||||
with:
|
||||
@@ -118,55 +149,3 @@ jobs:
|
||||
fail_ci_if_error: false
|
||||
verbose: true
|
||||
token: 6845cc80-77ee-4e17-85a1-026cd95e0766
|
||||
|
||||
# We upload the artifacts into numbered archives to prevent overwriting
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ always() }}
|
||||
with:
|
||||
name: snapshots-${{ matrix.containers }}
|
||||
retention-days: 1
|
||||
path: ./cypress/snapshots
|
||||
|
||||
combineArtifacts:
|
||||
needs: e2e
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ always() }}
|
||||
steps:
|
||||
# Download all snapshot artifacts and merge them into a single folder
|
||||
- name: Download All Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: snapshots
|
||||
pattern: snapshots-*
|
||||
merge-multiple: true
|
||||
|
||||
# For successful push events, we save the snapshots cache
|
||||
- name: Save snapshots cache
|
||||
id: cache-upload
|
||||
if: ${{ github.event_name == 'push' && needs.e2e.result != 'failure' }}
|
||||
uses: actions/cache/save@v3
|
||||
with:
|
||||
path: ./snapshots
|
||||
key: ${{ runner.os }}-snapshots-${{ github.event.after }}
|
||||
|
||||
- name: Flatten images to a folder
|
||||
if: ${{ needs.e2e.result == 'failure' }}
|
||||
run: |
|
||||
mkdir errors
|
||||
cd snapshots
|
||||
find . -mindepth 2 -type d -name "*__diff_output__*" -exec sh -c 'mv "$0"/*.png ../errors/' {} \;
|
||||
|
||||
- name: Upload Error snapshots
|
||||
if: ${{ needs.e2e.result == 'failure' }}
|
||||
uses: actions/upload-artifact@v4
|
||||
id: upload-artifacts
|
||||
with:
|
||||
name: error-snapshots
|
||||
retention-days: 10
|
||||
path: errors/
|
||||
|
||||
- name: Notify Users
|
||||
if: ${{ needs.e2e.result == 'failure' }}
|
||||
run: |
|
||||
echo "::error title=Visual tests failed::You can view images that failed by downloading the error-snapshots artifact: ${{ steps.upload-artifacts.outputs.artifact-url }}"
|
||||
|
8
.github/workflows/issue-triage.yml
vendored
8
.github/workflows/issue-triage.yml
vendored
@@ -4,11 +4,17 @@ on:
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
permissions: # added using https://github.com/step-security/secure-repo
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
permissions:
|
||||
issues: write # for andymckay/labeler to label issues
|
||||
pull-requests: write # for andymckay/labeler to label PRs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: andymckay/labeler@1.0.4
|
||||
- uses: andymckay/labeler@e6c4322d0397f3240f0e7e30a33b5c5df2d39e90 # 1.0.4
|
||||
with:
|
||||
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
add-labels: 'Status: Triage'
|
||||
|
9
.github/workflows/link-checker.yml
vendored
9
.github/workflows/link-checker.yml
vendored
@@ -19,6 +19,9 @@ on:
|
||||
# * is a special character in YAML so you have to quote this string
|
||||
- cron: '30 8 * * *'
|
||||
|
||||
permissions: # added using https://github.com/step-security/secure-repo
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
link-checker:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -26,17 +29,17 @@ jobs:
|
||||
# lychee only uses the GITHUB_TOKEN to avoid rate-limiting
|
||||
contents: read
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Restore lychee cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
|
||||
with:
|
||||
path: .lycheecache
|
||||
key: cache-lychee-${{ github.sha }}
|
||||
restore-keys: cache-lychee-
|
||||
|
||||
- name: Link Checker
|
||||
uses: lycheeverse/lychee-action@v1.9.3
|
||||
uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 # v2.3.0
|
||||
with:
|
||||
args: >-
|
||||
--config .github/lychee.toml
|
||||
|
35
.github/workflows/lint.yml
vendored
35
.github/workflows/lint.yml
vendored
@@ -4,26 +4,32 @@ on:
|
||||
push:
|
||||
merge_group:
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- synchronize
|
||||
- ready_for_review
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
docker-lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- uses: hadolint/hadolint-action@54c9adbab1582c2ef04b2016b760714a4bfde3cf # v3.1.0
|
||||
with:
|
||||
verbose: true
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
# uses version from "packageManager" field in package.json
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
cache: pnpm
|
||||
node-version-file: '.node-version'
|
||||
@@ -83,14 +89,9 @@ jobs:
|
||||
continue-on-error: ${{ github.event_name == 'push' }}
|
||||
run: pnpm run docs:verify
|
||||
|
||||
- name: Rebuild Docs
|
||||
if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }}
|
||||
working-directory: ./packages/mermaid
|
||||
run: pnpm run docs:build
|
||||
|
||||
- name: Commit changes
|
||||
uses: EndBug/add-and-commit@v9
|
||||
if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }}
|
||||
- uses: testomatio/check-tests@0ea638fcec1820cf2e7b9854fdbdd04128a55bd4 # stable
|
||||
with:
|
||||
message: 'Update docs'
|
||||
add: 'docs/*'
|
||||
framework: cypress
|
||||
tests: './cypress/e2e/**/**.spec.js'
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
has-tests-label: true
|
||||
|
2
.github/workflows/pr-labeler.yml
vendored
2
.github/workflows/pr-labeler.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
||||
pull-requests: write # write permission is required to label PRs
|
||||
steps:
|
||||
- name: Label PR
|
||||
uses: release-drafter/release-drafter@v5
|
||||
uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
|
||||
with:
|
||||
config-name: pr-labeler.yml
|
||||
disable-autolabeler: false
|
||||
|
12
.github/workflows/publish-docs.yml
vendored
12
.github/workflows/publish-docs.yml
vendored
@@ -23,12 +23,12 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
cache: pnpm
|
||||
node-version-file: '.node-version'
|
||||
@@ -37,13 +37,13 @@ jobs:
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v3
|
||||
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0
|
||||
|
||||
- name: Run Build
|
||||
run: pnpm --filter mermaid run docs:build:vitepress
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v1
|
||||
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1
|
||||
with:
|
||||
path: packages/mermaid/src/vitepress/.vitepress/dist
|
||||
|
||||
@@ -56,4 +56,4 @@ jobs:
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v2
|
||||
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5
|
||||
|
23
.github/workflows/release-draft.yml
vendored
23
.github/workflows/release-draft.yml
vendored
@@ -1,23 +0,0 @@
|
||||
name: Draft Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
draft-release:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write # write permission is required to create a GitHub release
|
||||
pull-requests: read # required to read PR titles/labels
|
||||
steps:
|
||||
- name: Draft Release
|
||||
uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
disable-autolabeler: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
@@ -9,14 +9,14 @@ jobs:
|
||||
publish-preview:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
cache: pnpm
|
||||
node-version-file: '.node-version'
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
||||
|
||||
- name: Install Json
|
||||
run: npm i json --global
|
||||
run: npm i json@11.0.0 --global
|
||||
|
||||
- name: Publish
|
||||
working-directory: ./packages/mermaid
|
||||
|
43
.github/workflows/release-preview.yml
vendored
Normal file
43
.github/workflows/release-preview.yml
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
name: Preview release
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [develop]
|
||||
types: [opened, synchronize, labeled, ready_for_review]
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.number }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
actions: write
|
||||
|
||||
jobs:
|
||||
preview:
|
||||
if: ${{ github.repository_owner == 'mermaid-js' }}
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
issues: write
|
||||
pull-requests: write
|
||||
name: Publish preview release
|
||||
timeout-minutes: 5
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
cache: pnpm
|
||||
node-version-file: '.node-version'
|
||||
|
||||
- name: Install Packages
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- name: Publish packages
|
||||
run: pnpx pkg-pr-new publish --pnpm './packages/*'
|
47
.github/workflows/release-publish.yml
vendored
47
.github/workflows/release-publish.yml
vendored
@@ -1,47 +0,0 @@
|
||||
name: Publish release
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: fregante/setup-git-user@v2
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
# uses version from "packageManager" field in package.json
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
cache: pnpm
|
||||
node-version-file: '.node-version'
|
||||
|
||||
- name: Install Packages
|
||||
run: |
|
||||
pnpm install --frozen-lockfile
|
||||
npm i json --global
|
||||
env:
|
||||
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
||||
|
||||
- name: Prepare release
|
||||
run: |
|
||||
VERSION=${GITHUB_REF:10}
|
||||
echo "Preparing release $VERSION"
|
||||
git checkout -t origin/release/$VERSION
|
||||
npm version --no-git-tag-version --allow-same-version $VERSION
|
||||
git add package.json
|
||||
git commit -nm "Bump version $VERSION"
|
||||
git checkout -t origin/master
|
||||
git merge -m "Release $VERSION" --no-ff release/$VERSION
|
||||
git push --no-verify
|
||||
|
||||
- name: Publish
|
||||
run: |
|
||||
npm set //registry.npmjs.org/:_authToken $NPM_TOKEN
|
||||
npm publish
|
||||
env:
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
46
.github/workflows/release.yml
vendored
Normal file
46
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
||||
|
||||
permissions: # added using https://github.com/step-security/secure-repo
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
release:
|
||||
if: github.repository == 'mermaid-js/mermaid'
|
||||
permissions:
|
||||
contents: write # to create release (changesets/action)
|
||||
id-token: write # OpenID Connect token needed for provenance
|
||||
pull-requests: write # to create pull request (changesets/action)
|
||||
name: Release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
cache: pnpm
|
||||
node-version-file: '.node-version'
|
||||
|
||||
- name: Install Packages
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- name: Create Release Pull Request or Publish to npm
|
||||
id: changesets
|
||||
uses: changesets/action@c8bada60c408975afd1a20b3db81d6eee6789308 # v1.4.9
|
||||
with:
|
||||
version: pnpm changeset:version
|
||||
publish: pnpm changeset:publish
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
NPM_CONFIG_PROVENANCE: true
|
37
.github/workflows/scorecard.yml
vendored
Normal file
37
.github/workflows/scorecard.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
name: Scorecard supply-chain security
|
||||
on:
|
||||
branch_protection_rule:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
schedule:
|
||||
- cron: 29 15 * * 0
|
||||
permissions: read-all
|
||||
jobs:
|
||||
analysis:
|
||||
name: Scorecard analysis
|
||||
permissions:
|
||||
id-token: write
|
||||
security-events: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Run analysis
|
||||
uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1
|
||||
with:
|
||||
results_file: results.sarif
|
||||
results_format: sarif
|
||||
publish_results: true
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
|
||||
with:
|
||||
name: SARIF file
|
||||
path: results.sarif
|
||||
retention-days: 5
|
||||
- name: Upload to code-scanning
|
||||
uses: github/codeql-action/upload-sarif@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
||||
with:
|
||||
sarif_file: results.sarif
|
12
.github/workflows/test.yml
vendored
12
.github/workflows/test.yml
vendored
@@ -9,13 +9,13 @@ jobs:
|
||||
unit-test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
# uses version from "packageManager" field in package.json
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
cache: pnpm
|
||||
node-version-file: '.node-version'
|
||||
@@ -38,8 +38,12 @@ jobs:
|
||||
run: |
|
||||
pnpm exec vitest run ./packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts --coverage
|
||||
|
||||
- name: Verify out-of-tree build with TypeScript
|
||||
run: |
|
||||
pnpm test:check:tsc
|
||||
|
||||
- name: Upload Coverage to Codecov
|
||||
uses: codecov/codecov-action@v3
|
||||
uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1
|
||||
# Run step only pushes to develop and pull_requests
|
||||
if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/develop' }}
|
||||
with:
|
||||
|
2
.github/workflows/unlock-reopened-issues.yml
vendored
2
.github/workflows/unlock-reopened-issues.yml
vendored
@@ -8,6 +8,6 @@ jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: Dunning-Kruger/unlock-issues@v1
|
||||
- uses: Dunning-Kruger/unlock-issues@b06b7f7e5c3f2eaa1c6d5d89f40930e4d6d9699e # v1
|
||||
with:
|
||||
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
|
8
.github/workflows/update-browserlist.yml
vendored
8
.github/workflows/update-browserlist.yml
vendored
@@ -8,18 +8,18 @@ jobs:
|
||||
update-browser-list:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: pnpm/action-setup@v2
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
- run: npx update-browserslist-db@latest
|
||||
- name: Commit changes
|
||||
uses: EndBug/add-and-commit@v9
|
||||
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
|
||||
with:
|
||||
author_name: ${{ github.actor }}
|
||||
author_email: ${{ github.actor }}@users.noreply.github.com
|
||||
message: 'chore: update browsers list'
|
||||
push: false
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6
|
||||
with:
|
||||
branch: 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_
|
7
.gitignore
vendored
7
.gitignore
vendored
@@ -35,7 +35,7 @@ cypress/snapshots/
|
||||
.tsbuildinfo
|
||||
tsconfig.tsbuildinfo
|
||||
|
||||
knsv*.html
|
||||
#knsv*.html
|
||||
local*.html
|
||||
stats/
|
||||
|
||||
@@ -46,4 +46,9 @@ stats/
|
||||
|
||||
demos/dev/**
|
||||
!/demos/dev/example.html
|
||||
!/demos/dev/reload.js
|
||||
tsx-0/**
|
||||
vite.config.ts.timestamp-*
|
||||
|
||||
# autogenereated by langium-cli
|
||||
generated/
|
||||
|
2
.hadolint.yaml
Normal file
2
.hadolint.yaml
Normal file
@@ -0,0 +1,2 @@
|
||||
ignored:
|
||||
- DL3002 # TODO: Last USER should not be root
|
@@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
# . "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
# npx --no-install commitlint --edit $1
|
@@ -1,4 +1,2 @@
|
||||
#!/bin/sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
pnpm run pre-commit
|
||||
#!/usr/bin/env sh
|
||||
NODE_OPTIONS="--max_old_space_size=8192" pnpm run pre-commit
|
||||
|
@@ -1 +1 @@
|
||||
v20.11.1
|
||||
22.14.0
|
||||
|
@@ -11,6 +11,10 @@ stats
|
||||
.nyc_output
|
||||
# Autogenerated by `pnpm run --filter mermaid types:build-config`
|
||||
packages/mermaid/src/config.type.ts
|
||||
# autogenereated by langium-cli
|
||||
generated/
|
||||
# Ignore the files creates in /demos/dev except for example.html
|
||||
demos/dev/**
|
||||
!/demos/dev/example.html
|
||||
# TODO: Lots of errors to fix
|
||||
cypress/platform/state-refactor.html
|
||||
|
@@ -3,5 +3,6 @@
|
||||
"printWidth": 100,
|
||||
"singleQuote": true,
|
||||
"useTabs": false,
|
||||
"tabWidth": 2
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "es5"
|
||||
}
|
||||
|
@@ -1,13 +1,15 @@
|
||||
import { build, InlineConfig, type PluginOption } from 'vite';
|
||||
import type { InlineConfig } from 'vite';
|
||||
import { build, type PluginOption } from 'vite';
|
||||
import { resolve } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import jisonPlugin from './jisonPlugin.js';
|
||||
import jsonSchemaPlugin from './jsonSchemaPlugin.js';
|
||||
import { readFileSync } from 'fs';
|
||||
import typescript from '@rollup/plugin-typescript';
|
||||
import { visualizer } from 'rollup-plugin-visualizer';
|
||||
import type { TemplateType } from 'rollup-plugin-visualizer/dist/plugin/template-types.js';
|
||||
import istanbul from 'vite-plugin-istanbul';
|
||||
import { packageOptions } from '../.build/common.js';
|
||||
import { generateLangium } from '../.build/generateLangium.js';
|
||||
|
||||
const visualize = process.argv.includes('--visualize');
|
||||
const watch = process.argv.includes('--watch');
|
||||
@@ -36,24 +38,6 @@ const visualizerOptions = (packageName: string, core = false): PluginOption[] =>
|
||||
);
|
||||
};
|
||||
|
||||
const packageOptions = {
|
||||
mermaid: {
|
||||
name: 'mermaid',
|
||||
packageName: 'mermaid',
|
||||
file: 'mermaid.ts',
|
||||
},
|
||||
'mermaid-example-diagram': {
|
||||
name: 'mermaid-example-diagram',
|
||||
packageName: 'mermaid-example-diagram',
|
||||
file: 'detector.ts',
|
||||
},
|
||||
'mermaid-zenuml': {
|
||||
name: 'mermaid-zenuml',
|
||||
packageName: 'mermaid-zenuml',
|
||||
file: 'detector.ts',
|
||||
},
|
||||
};
|
||||
|
||||
interface BuildOptions {
|
||||
minify: boolean | 'esbuild';
|
||||
core?: boolean;
|
||||
@@ -63,43 +47,18 @@ interface BuildOptions {
|
||||
|
||||
export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions): InlineConfig => {
|
||||
const external: (string | RegExp)[] = ['require', 'fs', 'path'];
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(entryName, packageOptions[entryName]);
|
||||
const { name, file, packageName } = packageOptions[entryName];
|
||||
let output: OutputOptions = [
|
||||
const output: OutputOptions = [
|
||||
{
|
||||
name,
|
||||
format: 'esm',
|
||||
sourcemap,
|
||||
entryFileNames: `${name}.esm${minify ? '.min' : ''}.mjs`,
|
||||
},
|
||||
{
|
||||
name,
|
||||
format: 'umd',
|
||||
sourcemap,
|
||||
entryFileNames: `${name}${minify ? '.min' : ''}.js`,
|
||||
},
|
||||
];
|
||||
|
||||
if (core) {
|
||||
const { dependencies } = JSON.parse(
|
||||
readFileSync(resolve(__dirname, `../packages/${packageName}/package.json`), 'utf-8')
|
||||
);
|
||||
// Core build is used to generate file without bundled dependencies.
|
||||
// This is used by downstream projects to bundle dependencies themselves.
|
||||
// Ignore dependencies and any dependencies of dependencies
|
||||
// Adapted from the RegEx used by `rollup-plugin-node`
|
||||
external.push(new RegExp('^(?:' + Object.keys(dependencies).join('|') + ')(?:/.+)?$'));
|
||||
// This needs to be an array. Otherwise vite will build esm & umd with same name and overwrite esm with umd.
|
||||
output = [
|
||||
{
|
||||
name,
|
||||
format: 'esm',
|
||||
sourcemap,
|
||||
entryFileNames: `${name}.core.mjs`,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
const config: InlineConfig = {
|
||||
configFile: false,
|
||||
build: {
|
||||
@@ -126,16 +85,19 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
|
||||
plugins: [
|
||||
jisonPlugin(),
|
||||
jsonSchemaPlugin(), // handles `.schema.yaml` files
|
||||
// @ts-expect-error According to the type definitions, rollup plugins are incompatible with vite
|
||||
typescript({ compilerOptions: { declaration: false } }),
|
||||
istanbul({
|
||||
exclude: ['node_modules', 'test/', '__mocks__'],
|
||||
exclude: ['node_modules', 'test/', '__mocks__', 'generated'],
|
||||
extension: ['.js', '.ts'],
|
||||
requireEnv: true,
|
||||
forceBuildInstrument: coverage,
|
||||
}),
|
||||
...visualizerOptions(packageName, core),
|
||||
],
|
||||
define: {
|
||||
// Needs to be string
|
||||
includeLargeFeatures: 'true',
|
||||
},
|
||||
};
|
||||
|
||||
if (watch && config.build) {
|
||||
@@ -149,24 +111,28 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
|
||||
|
||||
const buildPackage = async (entryName: keyof typeof packageOptions) => {
|
||||
await build(getBuildConfig({ minify: false, entryName }));
|
||||
await build(getBuildConfig({ minify: 'esbuild', entryName }));
|
||||
await build(getBuildConfig({ minify: false, core: true, entryName }));
|
||||
};
|
||||
|
||||
const main = async () => {
|
||||
const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
|
||||
for (const pkg of packageNames.filter((pkg) => !mermaidOnly || pkg === 'mermaid')) {
|
||||
for (const pkg of packageNames.filter(
|
||||
(pkg) => !mermaidOnly || pkg === 'mermaid' || pkg === 'parser'
|
||||
)) {
|
||||
await buildPackage(pkg);
|
||||
}
|
||||
};
|
||||
|
||||
await generateLangium();
|
||||
|
||||
if (watch) {
|
||||
build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' }));
|
||||
await build(getBuildConfig({ minify: false, watch, core: false, entryName: 'parser' }));
|
||||
void build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' }));
|
||||
if (!mermaidOnly) {
|
||||
build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' }));
|
||||
build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-zenuml' }));
|
||||
void build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' }));
|
||||
void build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-zenuml' }));
|
||||
}
|
||||
} else if (visualize) {
|
||||
await build(getBuildConfig({ minify: false, watch, core: false, entryName: 'parser' }));
|
||||
await build(getBuildConfig({ minify: false, core: true, entryName: 'mermaid' }));
|
||||
await build(getBuildConfig({ minify: false, core: false, entryName: 'mermaid' }));
|
||||
} else {
|
||||
|
@@ -1,10 +1,10 @@
|
||||
import { transformJison } from './jisonTransformer.js';
|
||||
import { transformJison } from '../.build/jisonTransformer.js';
|
||||
|
||||
const fileRegex = /\.(jison)$/;
|
||||
|
||||
export default function jison() {
|
||||
return {
|
||||
name: 'jison',
|
||||
|
||||
transform(src: string, id: string) {
|
||||
if (fileRegex.test(id)) {
|
||||
return {
|
||||
|
@@ -1,110 +1,5 @@
|
||||
import { load, JSON_SCHEMA } from 'js-yaml';
|
||||
import assert from 'node:assert';
|
||||
import Ajv2019, { type JSONSchemaType } from 'ajv/dist/2019.js';
|
||||
import { PluginOption } from 'vite';
|
||||
|
||||
import type { MermaidConfig, BaseDiagramConfig } from '../packages/mermaid/src/config.type.js';
|
||||
|
||||
/**
|
||||
* All of the keys in the mermaid config that have a mermaid diagram config.
|
||||
*/
|
||||
const MERMAID_CONFIG_DIAGRAM_KEYS = [
|
||||
'flowchart',
|
||||
'sequence',
|
||||
'gantt',
|
||||
'journey',
|
||||
'class',
|
||||
'state',
|
||||
'er',
|
||||
'pie',
|
||||
'quadrantChart',
|
||||
'xyChart',
|
||||
'requirement',
|
||||
'mindmap',
|
||||
'timeline',
|
||||
'gitGraph',
|
||||
'c4',
|
||||
'sankey',
|
||||
'block',
|
||||
] as const;
|
||||
|
||||
/**
|
||||
* Generate default values from the JSON Schema.
|
||||
*
|
||||
* AJV does not support nested default values yet (or default values with $ref),
|
||||
* so we need to manually find them (this may be fixed in ajv v9).
|
||||
*
|
||||
* @param mermaidConfigSchema - The Mermaid JSON Schema to use.
|
||||
* @returns The default mermaid config object.
|
||||
*/
|
||||
function generateDefaults(mermaidConfigSchema: JSONSchemaType<MermaidConfig>) {
|
||||
const ajv = new Ajv2019({
|
||||
useDefaults: true,
|
||||
allowUnionTypes: true,
|
||||
strict: true,
|
||||
});
|
||||
|
||||
ajv.addKeyword({
|
||||
keyword: 'meta:enum', // used by jsonschema2md
|
||||
errors: false,
|
||||
});
|
||||
ajv.addKeyword({
|
||||
keyword: 'tsType', // used by json-schema-to-typescript
|
||||
errors: false,
|
||||
});
|
||||
|
||||
// ajv currently doesn't support nested default values, see https://github.com/ajv-validator/ajv/issues/1718
|
||||
// (may be fixed in v9) so we need to manually use sub-schemas
|
||||
const mermaidDefaultConfig = {};
|
||||
|
||||
assert.ok(mermaidConfigSchema.$defs);
|
||||
const baseDiagramConfig = mermaidConfigSchema.$defs.BaseDiagramConfig;
|
||||
|
||||
for (const key of MERMAID_CONFIG_DIAGRAM_KEYS) {
|
||||
const subSchemaRef = mermaidConfigSchema.properties[key].$ref;
|
||||
const [root, defs, defName] = subSchemaRef.split('/');
|
||||
assert.strictEqual(root, '#');
|
||||
assert.strictEqual(defs, '$defs');
|
||||
const subSchema = {
|
||||
$schema: mermaidConfigSchema.$schema,
|
||||
$defs: mermaidConfigSchema.$defs,
|
||||
...mermaidConfigSchema.$defs[defName],
|
||||
} as JSONSchemaType<BaseDiagramConfig>;
|
||||
|
||||
const validate = ajv.compile(subSchema);
|
||||
|
||||
mermaidDefaultConfig[key] = {};
|
||||
|
||||
for (const required of subSchema.required ?? []) {
|
||||
if (subSchema.properties[required] === undefined && baseDiagramConfig.properties[required]) {
|
||||
mermaidDefaultConfig[key][required] = baseDiagramConfig.properties[required].default;
|
||||
}
|
||||
}
|
||||
if (!validate(mermaidDefaultConfig[key])) {
|
||||
throw new Error(
|
||||
`schema for subconfig ${key} does not have valid defaults! Errors were ${JSON.stringify(
|
||||
validate.errors,
|
||||
undefined,
|
||||
2
|
||||
)}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const validate = ajv.compile(mermaidConfigSchema);
|
||||
|
||||
if (!validate(mermaidDefaultConfig)) {
|
||||
throw new Error(
|
||||
`Mermaid config JSON Schema does not have valid defaults! Errors were ${JSON.stringify(
|
||||
validate.errors,
|
||||
undefined,
|
||||
2
|
||||
)}`
|
||||
);
|
||||
}
|
||||
|
||||
return mermaidDefaultConfig;
|
||||
}
|
||||
import type { PluginOption } from 'vite';
|
||||
import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js';
|
||||
|
||||
/**
|
||||
* Vite plugin that handles JSON Schemas saved as a `.schema.yaml` file.
|
||||
@@ -121,32 +16,13 @@ export default function jsonSchemaPlugin(): PluginOption {
|
||||
return;
|
||||
}
|
||||
|
||||
if (idAsUrl.searchParams.get('only-defaults')) {
|
||||
const jsonSchema = load(src, {
|
||||
filename: idAsUrl.pathname,
|
||||
// only allow JSON types in our YAML doc (will probably be default in YAML 1.3)
|
||||
// e.g. `true` will be parsed a boolean `true`, `True` will be parsed as string `"True"`.
|
||||
schema: JSON_SCHEMA,
|
||||
}) as JSONSchemaType<MermaidConfig>;
|
||||
return {
|
||||
code: `export default ${JSON.stringify(generateDefaults(jsonSchema), undefined, 2)};`,
|
||||
map: null, // no source map
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
code: `export default ${JSON.stringify(
|
||||
load(src, {
|
||||
filename: idAsUrl.pathname,
|
||||
// only allow JSON types in our YAML doc (will probably be default in YAML 1.3)
|
||||
// e.g. `true` will be parsed a boolean `true`, `True` will be parsed as string `"True"`.
|
||||
schema: JSON_SCHEMA,
|
||||
}),
|
||||
undefined,
|
||||
2
|
||||
)};`,
|
||||
map: null, // provide source map if available
|
||||
};
|
||||
}
|
||||
const jsonSchema = loadSchema(src, idAsUrl.pathname);
|
||||
return {
|
||||
code: idAsUrl.searchParams.get('only-defaults')
|
||||
? getDefaults(jsonSchema)
|
||||
: getSchema(jsonSchema),
|
||||
map: null, // no source map
|
||||
};
|
||||
},
|
||||
};
|
||||
}
|
||||
|
@@ -1,6 +1,7 @@
|
||||
import express from 'express';
|
||||
import cors from 'cors';
|
||||
import { createServer as createViteServer } from 'vite';
|
||||
import { packageOptions } from '../.build/common.js';
|
||||
|
||||
async function createServer() {
|
||||
const app = express();
|
||||
@@ -14,16 +15,17 @@ async function createServer() {
|
||||
});
|
||||
|
||||
app.use(cors());
|
||||
app.use(express.static('./packages/mermaid/dist'));
|
||||
app.use(express.static('./packages/mermaid-zenuml/dist'));
|
||||
app.use(express.static('./packages/mermaid-example-diagram/dist'));
|
||||
for (const { packageName } of Object.values(packageOptions)) {
|
||||
app.use(express.static(`./packages/${packageName}/dist`));
|
||||
}
|
||||
app.use(vite.middlewares);
|
||||
app.use(express.static('demos'));
|
||||
app.use(express.static('cypress/platform'));
|
||||
|
||||
app.listen(9000, () => {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(`Listening on http://localhost:9000`);
|
||||
});
|
||||
}
|
||||
|
||||
createServer();
|
||||
void createServer();
|
||||
|
@@ -256,7 +256,7 @@ mermaid.run({
|
||||
- Problem showing graph with php on localhost [\#502](https://github.com/knsv/mermaid/issues/502)
|
||||
- logLevel's option doesnt work at 7.0.0 [\#501](https://github.com/knsv/mermaid/issues/501)
|
||||
- How do I get the log for a render or parse attempt? [\#500](https://github.com/knsv/mermaid/issues/500)
|
||||
- Mermaid neutral style style to built in latest release [\#499](https://github.com/knsv/mermaid/issues/499)
|
||||
- Mermaid neutral style to built in latest release [\#499](https://github.com/knsv/mermaid/issues/499)
|
||||
- Any plans for adding a typescript definition file? [\#495](https://github.com/knsv/mermaid/issues/495)
|
||||
- Gantt diagrams too narrow [\#493](https://github.com/knsv/mermaid/issues/493)
|
||||
- Flowchart edge labels placement [\#490](https://github.com/knsv/mermaid/issues/490)
|
||||
@@ -833,7 +833,7 @@ mermaid.run({
|
||||
- Merge pull request \#1 from knsv/master [\#96](https://github.com/knsv/mermaid/pull/96) ([gkchic](https://github.com/gkchic))
|
||||
- Removed duplicated section in flowchart docs [\#94](https://github.com/knsv/mermaid/pull/94) ([kaime](https://github.com/kaime))
|
||||
- Grammar changes to sequence page [\#93](https://github.com/knsv/mermaid/pull/93) ([gkchic](https://github.com/gkchic))
|
||||
- Github buttons [\#89](https://github.com/knsv/mermaid/pull/89) ([gkchic](https://github.com/gkchic))
|
||||
- GitHub buttons [\#89](https://github.com/knsv/mermaid/pull/89) ([gkchic](https://github.com/gkchic))
|
||||
- Template change [\#88](https://github.com/knsv/mermaid/pull/88) ([gkchic](https://github.com/gkchic))
|
||||
|
||||
## [0.3.1](https://github.com/knsv/mermaid/tree/0.3.1) (2015-01-05)
|
||||
@@ -1002,4 +1002,4 @@ mermaid.run({
|
||||
|
||||
## [0.1.0](https://github.com/knsv/mermaid/tree/0.1.0) (2014-11-16)
|
||||
|
||||
\* _This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)_
|
||||
\* _This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/GitHub-Changelog-Generator)_
|
||||
|
15
Dockerfile
15
Dockerfile
@@ -1,2 +1,13 @@
|
||||
FROM node:20.11.1-alpine3.19 AS base
|
||||
RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" sh -
|
||||
FROM node:22.12.0-alpine3.19@sha256:40dc4b415c17b85bea9be05314b4a753f45a4e1716bb31c01182e6c53d51a654
|
||||
|
||||
USER 0:0
|
||||
|
||||
RUN corepack enable \
|
||||
&& corepack enable pnpm
|
||||
|
||||
RUN apk add --no-cache git~=2.43.4 \
|
||||
&& git config --add --system safe.directory /mermaid
|
||||
|
||||
ENV NODE_OPTIONS="--max_old_space_size=8192"
|
||||
|
||||
EXPOSE 9000 3333
|
||||
|
7
FUNDING.json
Normal file
7
FUNDING.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"drips": {
|
||||
"ethereum": {
|
||||
"ownedBy": "0x0831DDFe60d009d9448CC976157b539089aB821E"
|
||||
}
|
||||
}
|
||||
}
|
44
README.md
44
README.md
@@ -15,7 +15,7 @@ Generate diagrams from markdown-like text.
|
||||
<a href="https://mermaid.live/"><b>Live Editor!</b></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://mermaid.js.org">📖 Documentation</a> | <a href="https://mermaid.js.org/intro/">🚀 Getting Started</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/AgrbSrBer3" title="Discord invite">🙌 Join Us</a>
|
||||
<a href="https://mermaid.js.org">📖 Documentation</a> | <a href="https://mermaid.js.org/intro/">🚀 Getting Started</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/sKeNQX4Wtj" title="Discord invite">🙌 Join Us</a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="./README.zh-CN.md">简体中文</a>
|
||||
@@ -33,8 +33,10 @@ Try Live Editor previews of future releases: <a href="https://develop.git.mermai
|
||||
[](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop)
|
||||
[](https://www.jsdelivr.com/package/npm/mermaid)
|
||||
[](https://www.npmjs.com/package/mermaid)
|
||||
[](https://discord.gg/AgrbSrBer3)
|
||||
[](https://discord.gg/sKeNQX4Wtj)
|
||||
[](https://twitter.com/mermaidjs_)
|
||||
[](https://argos-ci.com?utm_source=mermaid&utm_campaign=oss)
|
||||
[](https://securityscorecards.dev/viewer/?uri=github.com/mermaid-js/mermaid)
|
||||
|
||||
<img src="./img/header.png" alt="" />
|
||||
|
||||
@@ -42,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! 🙏**
|
||||
|
||||
<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
|
||||
|
||||
@@ -81,6 +83,10 @@ You can also use Mermaid within [GitHub](https://github.blog/2022-02-14-include-
|
||||
|
||||
For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](https://mermaid.js.org/intro/getting-started.html), [Usage](https://mermaid.js.org/config/usage.html) and [Tutorials](https://mermaid.js.org/ecosystem/tutorials.html).
|
||||
|
||||
Our PR Visual Regression Testing is powered by [Argos](https://argos-ci.com/?utm_source=mermaid&utm_campaign=oss) with their generous Open Source plan. It makes the process of reviewing PRs with visual changes a breeze.
|
||||
|
||||
[](https://argos-ci.com?utm_source=mermaid&utm_campaign=oss)
|
||||
|
||||
In our release process we rely heavily on visual regression tests using [applitools](https://applitools.com/). Applitools is a great service which has been easy to use and integrate with our tests.
|
||||
|
||||
<a href="https://applitools.com/">
|
||||
@@ -247,6 +253,34 @@ pie
|
||||
|
||||
### Git graph [experimental - <a href="https://mermaid.live/edit#pako:eNqNkMFugzAMhl8F-VyVAR1tOW_aA-zKxSSGRCMJCk6lCvHuNZPKZdM0n-zf3_8r8QIqaIIGMqnB8kfEybQ--y4VnLP8-9RF9Mpkmm40hmlnDKmvkPiH_kfS7nFo_VN0FAf6XwocQGgxa_nGsm1bYEOOWmik1dRjGrmF1q-Cpkkj07u2HCI0PY4zHQATh8-7V9BwTPSE3iwOEd1OjQE1iWkBvk_bzQY7s0Sq4Hs7bHqKo8iGeZqbPN_WR7mpSd1RHpvPVhuMbG7XOq_L-oJlRfW5wteq0qorrpe-PBW9Pr8UJcK6rg-BLYPQ">live editor</a>]
|
||||
|
||||
```
|
||||
gitGraph
|
||||
commit
|
||||
commit
|
||||
branch develop
|
||||
checkout develop
|
||||
commit
|
||||
commit
|
||||
checkout main
|
||||
merge develop
|
||||
commit
|
||||
commit
|
||||
```
|
||||
|
||||
```mermaid
|
||||
gitGraph
|
||||
commit
|
||||
commit
|
||||
branch develop
|
||||
checkout develop
|
||||
commit
|
||||
commit
|
||||
checkout main
|
||||
merge develop
|
||||
commit
|
||||
commit
|
||||
```
|
||||
|
||||
### Bar chart (using gantt chart) [<a href="https://mermaid.js.org/syntax/gantt.html">docs</a> - <a href="https://mermaid.live/edit#pako:eNptkU1vhCAQhv8KIenNugiI4rkf6bmXpvEyFVxJFDYyNt1u9r8X63Z7WQ9m5pknLzieaBeMpQ3dg0dsPUkPOhwteXZIXmJcbCT3xMAxkuh8Z8kIEclyMIB209fqKcwTICFvG4IvFy_oLrZ-g9F26ILfQgvNFN94VaRXQ1iWqpumZBcu1J8p1E1TXDx59eQNr5LyEqjJn6hv5QnGNlxevZJmdLLpy5xJSzut45biYCfb0iaVxvawjNjS1p-TCguG16PvaIPzYjO67e3BwX6GiTY9jPFKH43DMF_hGMDY1J4oHg-_f8hFTJFd8L3br3yZx4QHxENsdrt1nO8dDstH3oVpF50ZYMbhU6ud4qoGLqyqBJRCmO6j0HXPZdGbihUc6Pmc0QP49xD-b5X69ZQv2gjO81IwzWqhC1lKrjJ6pA3nVS7SMiVjrKirWlYp5fs3osgrWeo00lorLWvOzz8JVbXm">live editor</a>]
|
||||
|
||||
```
|
||||
@@ -413,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.
|
||||
|
||||
_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
|
||||
|
||||
@@ -429,7 +463,7 @@ A quick note from Knut Sveidqvist:
|
||||
>
|
||||
> _Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._
|
||||
>
|
||||
> _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_
|
||||
> _Thank you to the ever-growing list of [contributors](https://github.com/mermaid-js/mermaid/graphs/contributors) that brought the project this far!_
|
||||
|
||||
---
|
||||
|
||||
|
@@ -15,7 +15,7 @@ Mermaid
|
||||
<a href="https://mermaid.live/"><b>实时编辑器!</b></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://mermaid.js.org">📖 文档</a> | <a href="https://mermaid.js.org/intro/">🚀 入门</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/AgrbSrBer3" title="Discord invite">🙌 加入我们</a>
|
||||
<a href="https://mermaid.js.org">📖 文档</a> | <a href="https://mermaid.js.org/intro/">🚀 入门</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/sKeNQX4Wtj" title="Discord invite">🙌 加入我们</a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="./README.md">English</a>
|
||||
@@ -34,7 +34,7 @@ Mermaid
|
||||
[](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop)
|
||||
[](https://www.jsdelivr.com/package/npm/mermaid)
|
||||
[](https://www.npmjs.com/package/mermaid)
|
||||
[](https://discord.gg/AgrbSrBer3)
|
||||
[](https://discord.gg/sKeNQX4Wtj)
|
||||
[](https://twitter.com/mermaidjs_)
|
||||
|
||||
<img src="./img/header.png" alt="" />
|
||||
@@ -43,13 +43,13 @@ Mermaid
|
||||
|
||||
**感谢所有参与进来提交 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
|
||||
|
||||
<!-- <Main description> -->
|
||||
|
||||
Mermaid 是一个基于 Javascript 的图表绘制工具,通过解析类 Markdown 的文本语法来实现图表的创建和动态修改。Mermaid 诞生的主要目的是让文档的更新能够及时跟上开发进度。
|
||||
Mermaid 是一个基于 JavaScript 的图表绘制工具,通过解析类 Markdown 的文本语法来实现图表的创建和动态修改。Mermaid 诞生的主要目的是让文档的更新能够及时跟上开发进度。
|
||||
|
||||
> Doc-Rot 是 Mermaid 致力于解决的一个难题。
|
||||
|
||||
@@ -358,7 +358,7 @@ _很不幸的是,鱼与熊掌不可兼得,在这个场景下它意味着在
|
||||
|
||||
> _特别感谢 [d3](https://d3js.org/) 和 [dagre-d3](https://github.com/cpettitt/dagre-d3) 这两个优秀的项目,它们提供了图形布局和绘图工具库!_ > _同样感谢 [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) 提供了时序图语法的使用。 感谢 Jessica Peter 提供了甘特图渲染的灵感。_ > _感谢 [Tyler Long](https://github.com/tylerlong) 从 2017 年四月开始成为了项目的合作者。_
|
||||
>
|
||||
> _感谢越来越多的 [贡献者们](https://github.com/knsv/mermaid/graphs/contributors),没有你们,就没有这个项目的今天!_
|
||||
> _感谢越来越多的 [贡献者们](https://github.com/mermaid-js/mermaid/graphs/contributors),没有你们,就没有这个项目的今天!_
|
||||
|
||||
---
|
||||
|
||||
|
@@ -1,21 +0,0 @@
|
||||
/**
|
||||
* Mocked C4Context diagram renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
|
||||
export const drawPersonOrSystemArray = vi.fn();
|
||||
export const drawBoundary = vi.fn();
|
||||
|
||||
export const setConf = vi.fn();
|
||||
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
drawPersonOrSystemArray,
|
||||
drawBoundary,
|
||||
setConf,
|
||||
draw,
|
||||
};
|
@@ -1,16 +0,0 @@
|
||||
/**
|
||||
* Mocked class diagram v2 renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
|
||||
export const setConf = vi.fn();
|
||||
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
setConf,
|
||||
draw,
|
||||
};
|
@@ -1,13 +0,0 @@
|
||||
/**
|
||||
* Mocked class diagram renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
draw,
|
||||
};
|
@@ -1 +0,0 @@
|
||||
// DO NOT delete this file. It is used by vitest to mock the dagre-d3 module.
|
@@ -1,3 +0,0 @@
|
||||
module.exports = function (txt: string) {
|
||||
return txt;
|
||||
};
|
@@ -1,16 +0,0 @@
|
||||
/**
|
||||
* Mocked er diagram renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
|
||||
export const setConf = vi.fn();
|
||||
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
setConf,
|
||||
draw,
|
||||
};
|
@@ -1,24 +0,0 @@
|
||||
/**
|
||||
* Mocked flow (flowchart) diagram v2 renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
|
||||
export const setConf = vi.fn();
|
||||
export const addVertices = vi.fn();
|
||||
export const addEdges = vi.fn();
|
||||
export const getClasses = vi.fn().mockImplementation(() => {
|
||||
return {};
|
||||
});
|
||||
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
setConf,
|
||||
addVertices,
|
||||
addEdges,
|
||||
getClasses,
|
||||
draw,
|
||||
};
|
@@ -1,16 +0,0 @@
|
||||
/**
|
||||
* Mocked gantt diagram renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
|
||||
export const setConf = vi.fn();
|
||||
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
setConf,
|
||||
draw,
|
||||
};
|
@@ -1,13 +0,0 @@
|
||||
/**
|
||||
* Mocked git (graph) diagram renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
draw,
|
||||
};
|
@@ -1,15 +0,0 @@
|
||||
/**
|
||||
* Mocked pie (picChart) diagram renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
export const setConf = vi.fn();
|
||||
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
setConf,
|
||||
draw,
|
||||
};
|
@@ -1,8 +0,0 @@
|
||||
/**
|
||||
* Mocked pie (picChart) diagram renderer
|
||||
*/
|
||||
import { vi } from 'vitest';
|
||||
|
||||
const draw = vi.fn().mockImplementation(() => '');
|
||||
|
||||
export const renderer = { draw };
|
@@ -1,13 +0,0 @@
|
||||
/**
|
||||
* Mocked requirement diagram renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
draw,
|
||||
};
|
@@ -1,13 +0,0 @@
|
||||
/**
|
||||
* Mocked Sankey diagram renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
draw,
|
||||
};
|
@@ -1,23 +0,0 @@
|
||||
/**
|
||||
* Mocked sequence diagram renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
|
||||
export const bounds = vi.fn();
|
||||
export const drawActors = vi.fn();
|
||||
export const drawActorsPopup = vi.fn();
|
||||
|
||||
export const setConf = vi.fn();
|
||||
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
bounds,
|
||||
drawActors,
|
||||
drawActorsPopup,
|
||||
setConf,
|
||||
draw,
|
||||
};
|
@@ -1,22 +0,0 @@
|
||||
/**
|
||||
* Mocked state diagram v2 renderer
|
||||
*/
|
||||
|
||||
import { vi } from 'vitest';
|
||||
|
||||
export const setConf = vi.fn();
|
||||
export const getClasses = vi.fn().mockImplementation(() => {
|
||||
return {};
|
||||
});
|
||||
export const stateDomId = vi.fn().mockImplementation(() => {
|
||||
return 'mocked-stateDiagram-stateDomId';
|
||||
});
|
||||
export const draw = vi.fn().mockImplementation(() => {
|
||||
return '';
|
||||
});
|
||||
|
||||
export default {
|
||||
setConf,
|
||||
getClasses,
|
||||
draw,
|
||||
};
|
@@ -1,7 +1,10 @@
|
||||
import { defineConfig } from 'cypress';
|
||||
import { addMatchImageSnapshotPlugin } from 'cypress-image-snapshot/plugin';
|
||||
import coverage from '@cypress/code-coverage/task';
|
||||
import eyesPlugin from '@applitools/eyes-cypress';
|
||||
import { registerArgosTask } from '@argos-ci/cypress/task';
|
||||
import coverage from '@cypress/code-coverage/task.js';
|
||||
import { defineConfig } from 'cypress';
|
||||
import { addMatchImageSnapshotPlugin } from 'cypress-image-snapshot/plugin.js';
|
||||
import cypressSplit from 'cypress-split';
|
||||
|
||||
export default eyesPlugin(
|
||||
defineConfig({
|
||||
projectId: 'n2sma2',
|
||||
@@ -11,16 +14,22 @@ export default eyesPlugin(
|
||||
specPattern: 'cypress/integration/**/*.{js,ts}',
|
||||
setupNodeEvents(on, config) {
|
||||
coverage(on, config);
|
||||
cypressSplit(on, config);
|
||||
on('before:browser:launch', (browser, launchOptions) => {
|
||||
if (browser.name === 'chrome' && browser.isHeadless) {
|
||||
launchOptions.args.push('--window-size=1440,1024', '--force-device-scale-factor=1');
|
||||
}
|
||||
return launchOptions;
|
||||
});
|
||||
addMatchImageSnapshotPlugin(on, config);
|
||||
// copy any needed variables from process.env to config.env
|
||||
config.env.useAppli = process.env.USE_APPLI ? true : false;
|
||||
config.env.useArgos = process.env.RUN_VISUAL_TEST === 'true';
|
||||
|
||||
if (config.env.useArgos) {
|
||||
registerArgosTask(on, config);
|
||||
} else {
|
||||
addMatchImageSnapshotPlugin(on, config);
|
||||
}
|
||||
// do not forget to return the changed config object!
|
||||
return config;
|
||||
},
|
||||
|
@@ -29,13 +29,14 @@ export const mermaidUrl = (
|
||||
options: CypressMermaidConfig,
|
||||
api: boolean
|
||||
): string => {
|
||||
options.handDrawnSeed = 1;
|
||||
const codeObject: CodeObject = {
|
||||
code: graphStr,
|
||||
mermaid: options,
|
||||
};
|
||||
const objStr: string = JSON.stringify(codeObject);
|
||||
let url = `http://localhost:9000/e2e.html?graph=${utf8ToB64(objStr)}`;
|
||||
if (api) {
|
||||
if (api && typeof graphStr === 'string') {
|
||||
url = `http://localhost:9000/xss.html?graph=${graphStr}`;
|
||||
}
|
||||
|
||||
@@ -54,16 +55,15 @@ export const imgSnapshotTest = (
|
||||
): void => {
|
||||
const options: CypressMermaidConfig = {
|
||||
..._options,
|
||||
fontFamily: _options.fontFamily || 'courier',
|
||||
fontFamily: _options.fontFamily ?? 'courier',
|
||||
// @ts-ignore TODO: Fix type of fontSize
|
||||
fontSize: _options.fontSize || '16px',
|
||||
fontSize: _options.fontSize ?? '16px',
|
||||
sequence: {
|
||||
...(_options.sequence || {}),
|
||||
...(_options.sequence ?? {}),
|
||||
actorFontFamily: 'courier',
|
||||
noteFontFamily:
|
||||
_options.sequence && _options.sequence.noteFontFamily
|
||||
? _options.sequence.noteFontFamily
|
||||
: 'courier',
|
||||
noteFontFamily: _options.sequence?.noteFontFamily
|
||||
? _options.sequence.noteFontFamily
|
||||
: 'courier',
|
||||
messageFontFamily: 'courier',
|
||||
},
|
||||
};
|
||||
@@ -74,7 +74,7 @@ export const imgSnapshotTest = (
|
||||
|
||||
export const urlSnapshotTest = (
|
||||
url: string,
|
||||
options: CypressMermaidConfig,
|
||||
options: CypressMermaidConfig = {},
|
||||
_api = false,
|
||||
validation?: any
|
||||
): void => {
|
||||
@@ -95,18 +95,7 @@ export const openURLAndVerifyRendering = (
|
||||
options: CypressMermaidConfig,
|
||||
validation?: any
|
||||
): void => {
|
||||
const useAppli: boolean = Cypress.env('useAppli');
|
||||
const name: string = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-');
|
||||
|
||||
if (useAppli) {
|
||||
cy.log(`Opening eyes ${Cypress.spec.name} --- ${name}`);
|
||||
cy.eyesOpen({
|
||||
appName: 'Mermaid',
|
||||
testName: name,
|
||||
batchName: Cypress.spec.name,
|
||||
batchId: batchId + Cypress.spec.name,
|
||||
});
|
||||
}
|
||||
const name: string = (options.name ?? cy.state('runnable').fullTitle()).replace(/\s+/g, '-');
|
||||
|
||||
cy.visit(url);
|
||||
cy.window().should('have.property', 'rendered', true);
|
||||
@@ -116,12 +105,37 @@ export const openURLAndVerifyRendering = (
|
||||
cy.get('svg').should(validation);
|
||||
}
|
||||
|
||||
verifyScreenshot(name);
|
||||
};
|
||||
|
||||
export const verifyScreenshot = (name: string): void => {
|
||||
const useAppli: boolean = Cypress.env('useAppli');
|
||||
const useArgos: boolean = Cypress.env('useArgos');
|
||||
|
||||
if (useAppli) {
|
||||
cy.log(`Opening eyes ${Cypress.spec.name} --- ${name}`);
|
||||
cy.eyesOpen({
|
||||
appName: 'Mermaid',
|
||||
testName: name,
|
||||
batchName: Cypress.spec.name,
|
||||
batchId: batchId + Cypress.spec.name,
|
||||
});
|
||||
cy.log(`Check eyes ${Cypress.spec.name}`);
|
||||
cy.eyesCheckWindow('Click!');
|
||||
cy.log(`Closing eyes ${Cypress.spec.name}`);
|
||||
cy.eyesClose();
|
||||
} else if (useArgos) {
|
||||
cy.argosScreenshot(name, {
|
||||
threshold: 0.01,
|
||||
});
|
||||
} else {
|
||||
cy.matchImageSnapshot(name);
|
||||
}
|
||||
};
|
||||
|
||||
export const verifyNumber = (value: number, expected: number, deltaPercent = 10): void => {
|
||||
expect(value).to.be.within(
|
||||
expected * (1 - deltaPercent / 100),
|
||||
expected * (1 + deltaPercent / 100)
|
||||
);
|
||||
};
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import { renderGraph } from '../../helpers/util.ts';
|
||||
import { renderGraph, verifyScreenshot } from '../../helpers/util.ts';
|
||||
describe('Configuration', () => {
|
||||
describe('arrowMarkerAbsolute', () => {
|
||||
it('should handle default value false of arrowMarkerAbsolute', () => {
|
||||
@@ -69,7 +69,9 @@ describe('Configuration', () => {
|
||||
.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(
|
||||
`graph TD
|
||||
A[Christmas] -->|Get money| B(Go shopping)
|
||||
@@ -112,17 +114,58 @@ describe('Configuration', () => {
|
||||
.first()
|
||||
.should('have.attr', 'marker-end')
|
||||
.should('exist')
|
||||
.and('include', 'url(http://localhost');
|
||||
.and('include', 'url(http\\:\\/\\/localhost');
|
||||
});
|
||||
});
|
||||
it('should not taint the initial configuration when using multiple directives', () => {
|
||||
const url = 'http://localhost:9000/regression/issue-1874.html';
|
||||
cy.visit(url);
|
||||
|
||||
cy.get('svg');
|
||||
cy.matchImageSnapshot(
|
||||
cy.window().should('have.property', 'rendered', true);
|
||||
verifyScreenshot(
|
||||
'configuration.spec-should-not-taint-initial-configuration-when-using-multiple-directives'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('suppressErrorRendering', () => {
|
||||
beforeEach(() => {
|
||||
cy.on('uncaught:exception', (err, runnable) => {
|
||||
return !err.message.includes('Parse error on line');
|
||||
});
|
||||
});
|
||||
|
||||
it('should not render error diagram if suppressErrorRendering is set', () => {
|
||||
const url = 'http://localhost:9000/suppressError.html?suppressErrorRendering=true';
|
||||
cy.visit(url);
|
||||
cy.window().should('have.property', 'rendered', true);
|
||||
cy.get('#test')
|
||||
.find('svg')
|
||||
.should(($svg) => {
|
||||
// all failing diagrams should not appear!
|
||||
expect($svg).to.have.length(2);
|
||||
// none of the diagrams should be error diagrams
|
||||
expect($svg).to.not.contain('Syntax error');
|
||||
});
|
||||
verifyScreenshot(
|
||||
'configuration.spec-should-not-render-error-diagram-if-suppressErrorRendering-is-set'
|
||||
);
|
||||
});
|
||||
|
||||
it('should render error diagram if suppressErrorRendering is not set', () => {
|
||||
const url = 'http://localhost:9000/suppressError.html';
|
||||
cy.visit(url);
|
||||
cy.window().should('have.property', 'rendered', true);
|
||||
cy.get('#test')
|
||||
.find('svg')
|
||||
.should(($svg) => {
|
||||
// all five diagrams should be rendered
|
||||
expect($svg).to.have.length(5);
|
||||
// some of the diagrams should be error diagrams
|
||||
expect($svg).to.contain('Syntax error');
|
||||
});
|
||||
verifyScreenshot(
|
||||
'configuration.spec-should-render-error-diagram-if-suppressErrorRendering-is-not-set'
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
11
cypress/integration/other/iife.spec.js
Normal file
11
cypress/integration/other/iife.spec.js
Normal file
@@ -0,0 +1,11 @@
|
||||
describe('IIFE', () => {
|
||||
beforeEach(() => {
|
||||
cy.visit('http://localhost:9000/iife.html');
|
||||
});
|
||||
|
||||
it('should render when using mermaid.min.js', () => {
|
||||
cy.window().should('have.property', 'rendered', true);
|
||||
cy.get('svg').should('be.visible');
|
||||
cy.get('#d2').should('contain', 'Hello');
|
||||
});
|
||||
});
|
@@ -20,7 +20,7 @@ describe('Interaction', () => {
|
||||
});
|
||||
|
||||
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.location().should(({ href }) => {
|
||||
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(() => {
|
||||
cy.visit('http://localhost:9000/click_security_other.html');
|
||||
});
|
||||
|
@@ -1,16 +0,0 @@
|
||||
describe('Sequencediagram', () => {
|
||||
it('should render a simple sequence diagrams', () => {
|
||||
const url = 'http://localhost:9000/webpackUsage.html';
|
||||
|
||||
cy.visit(url);
|
||||
cy.get('body').find('svg').should('have.length', 1);
|
||||
});
|
||||
it('should handle html escapings properly', () => {
|
||||
const url = 'http://localhost:9000/webpackUsage.html?test-html-escaping=true';
|
||||
|
||||
cy.visit(url);
|
||||
cy.get('body').find('svg').should('have.length', 1);
|
||||
|
||||
cy.get('g.label > foreignobject > div').should('not.contain.text', '<b>');
|
||||
});
|
||||
});
|
@@ -10,7 +10,6 @@ describe('XSS', () => {
|
||||
cy.wait(1000).then(() => {
|
||||
cy.get('.mermaid').should('exist');
|
||||
});
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('should not allow tags in the css', () => {
|
||||
@@ -137,4 +136,9 @@ describe('XSS', () => {
|
||||
cy.wait(1000);
|
||||
cy.get('#the-malware').should('not.exist');
|
||||
});
|
||||
it('should sanitize backticks block diagram labels properly', () => {
|
||||
cy.visit('http://localhost:9000/xss25.html');
|
||||
cy.wait(1000);
|
||||
cy.get('#the-malware').should('not.exist');
|
||||
});
|
||||
});
|
||||
|
@@ -11,6 +11,27 @@ describe('Git Graph diagram', () => {
|
||||
{}
|
||||
);
|
||||
});
|
||||
it('Should render subgraphs with title margins and edge labels', () => {
|
||||
imgSnapshotTest(
|
||||
`flowchart LR
|
||||
|
||||
subgraph TOP
|
||||
direction TB
|
||||
subgraph B1
|
||||
direction RL
|
||||
i1 --lb1-->f1
|
||||
end
|
||||
subgraph B2
|
||||
direction BT
|
||||
i2 --lb2-->f2
|
||||
end
|
||||
end
|
||||
A --lb3--> TOP --lb4--> B
|
||||
B1 --lb5--> B2
|
||||
`,
|
||||
{ flowchart: { subGraphTitleMargin: { top: 10, bottom: 5 } } }
|
||||
);
|
||||
});
|
||||
// it(`ultraFastTest`, function () {
|
||||
// // Navigate to the url we want to test
|
||||
// // ⭐️ Note to see visual bugs, run the test using the above URL for the 1st run.
|
||||
|
252
cypress/integration/rendering/architecture.spec.ts
Normal file
252
cypress/integration/rendering/architecture.spec.ts
Normal file
@@ -0,0 +1,252 @@
|
||||
import { imgSnapshotTest, urlSnapshotTest } from '../../helpers/util.ts';
|
||||
|
||||
describe.skip('architecture diagram', () => {
|
||||
it('should render a simple architecture diagram with groups', () => {
|
||||
imgSnapshotTest(
|
||||
`architecture-beta
|
||||
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
|
||||
service gateway(internet)[Gateway]
|
||||
|
||||
db L--R server
|
||||
disk1 T--B server
|
||||
disk2 T--B db
|
||||
server T--B gateway
|
||||
`
|
||||
);
|
||||
});
|
||||
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', () => {
|
||||
imgSnapshotTest(
|
||||
`architecture-beta
|
||||
group api[API]
|
||||
group public[Public API] in api
|
||||
group private[Private API] in api
|
||||
|
||||
service serv1(server)[Server] in public
|
||||
|
||||
service serv2(server)[Server] in private
|
||||
service db(database)[Database] in private
|
||||
|
||||
service gateway(internet)[Gateway] in api
|
||||
|
||||
serv1 B--T serv2
|
||||
serv2 L--R db
|
||||
serv1 L--R gateway
|
||||
`
|
||||
);
|
||||
});
|
||||
it('should render an architecture diagram with the fallback icon', () => {
|
||||
imgSnapshotTest(
|
||||
`architecture-beta
|
||||
service unknown(iconnamedoesntexist)[Unknown Icon]
|
||||
`
|
||||
);
|
||||
});
|
||||
it('should render an architecture diagram with split directioning', () => {
|
||||
imgSnapshotTest(
|
||||
`architecture-beta
|
||||
service db(database)[Database]
|
||||
service s3(disk)[Storage]
|
||||
service serv1(server)[Server 1]
|
||||
service serv2(server)[Server 2]
|
||||
service disk(disk)[Disk]
|
||||
|
||||
db L--R s3
|
||||
serv1 L--T s3
|
||||
serv2 L--B s3
|
||||
serv1 T--B disk
|
||||
`
|
||||
);
|
||||
});
|
||||
it('should render an architecture diagram with directional arrows', () => {
|
||||
imgSnapshotTest(
|
||||
`architecture-beta
|
||||
service servC(server)[Server 1]
|
||||
service servL(server)[Server 2]
|
||||
service servR(server)[Server 3]
|
||||
service servT(server)[Server 4]
|
||||
service servB(server)[Server 5]
|
||||
|
||||
servC (L--R) servL
|
||||
servC (R--L) servR
|
||||
servC (T--B) servT
|
||||
servC (B--T) servB
|
||||
|
||||
servL (T--L) servT
|
||||
servL (B--L) servB
|
||||
servR (T--R) servT
|
||||
servR (B--R) servB
|
||||
`
|
||||
);
|
||||
});
|
||||
it('should render an architecture diagram with group edges', () => {
|
||||
imgSnapshotTest(
|
||||
`architecture-beta
|
||||
group left_group(cloud)[Left]
|
||||
group right_group(cloud)[Right]
|
||||
group top_group(cloud)[Top]
|
||||
group bottom_group(cloud)[Bottom]
|
||||
group center_group(cloud)[Center]
|
||||
|
||||
service left_disk(disk)[Disk] in left_group
|
||||
service right_disk(disk)[Disk] in right_group
|
||||
service top_disk(disk)[Disk] in top_group
|
||||
service bottom_disk(disk)[Disk] in bottom_group
|
||||
service center_disk(disk)[Disk] in center_group
|
||||
|
||||
left_disk{group} (R--L) center_disk{group}
|
||||
right_disk{group} (L--R) center_disk{group}
|
||||
top_disk{group} (B--T) center_disk{group}
|
||||
bottom_disk{group} (T--B) center_disk{group}
|
||||
`
|
||||
);
|
||||
});
|
||||
it('should render an architecture diagram with edge labels', () => {
|
||||
imgSnapshotTest(
|
||||
`architecture-beta
|
||||
service servC(server)[Server 1]
|
||||
service servL(server)[Server 2]
|
||||
service servR(server)[Server 3]
|
||||
service servT(server)[Server 4]
|
||||
service servB(server)[Server 5]
|
||||
|
||||
servC L-[Label]-R servL
|
||||
servC R-[Label]-L servR
|
||||
servC T-[Label]-B servT
|
||||
servC B-[Label]-T servB
|
||||
|
||||
servL T-[Label]-L servT
|
||||
servL B-[Label]-L servB
|
||||
servR T-[Label]-R servT
|
||||
servR B-[Label]-R servB
|
||||
`
|
||||
);
|
||||
});
|
||||
it('should render an architecture diagram with simple junction edges', () => {
|
||||
imgSnapshotTest(
|
||||
`architecture-beta
|
||||
service left_disk(disk)[Disk]
|
||||
service top_disk(disk)[Disk]
|
||||
service bottom_disk(disk)[Disk]
|
||||
service top_gateway(internet)[Gateway]
|
||||
service bottom_gateway(internet)[Gateway]
|
||||
junction juncC
|
||||
junction juncR
|
||||
|
||||
left_disk R--L juncC
|
||||
top_disk B--T juncC
|
||||
bottom_disk T--B juncC
|
||||
juncC R--L juncR
|
||||
top_gateway B--T juncR
|
||||
bottom_gateway T--B juncR
|
||||
`
|
||||
);
|
||||
});
|
||||
it('should render an architecture diagram with complex junction edges', () => {
|
||||
imgSnapshotTest(
|
||||
`architecture-beta
|
||||
group left
|
||||
group right
|
||||
service left_disk(disk)[Disk] in left
|
||||
service top_disk(disk)[Disk] in left
|
||||
service bottom_disk(disk)[Disk] in left
|
||||
service top_gateway(internet)[Gateway] in right
|
||||
service bottom_gateway(internet)[Gateway] in right
|
||||
junction juncC in left
|
||||
junction juncR in right
|
||||
|
||||
left_disk R--L juncC
|
||||
top_disk B--T juncC
|
||||
bottom_disk T--B juncC
|
||||
|
||||
|
||||
top_gateway (B--T juncR
|
||||
bottom_gateway (T--B juncR
|
||||
|
||||
juncC{group} R--L) juncR{group}
|
||||
`
|
||||
);
|
||||
});
|
||||
|
||||
it('should render an architecture diagram with a reasonable height', () => {
|
||||
imgSnapshotTest(
|
||||
`architecture-beta
|
||||
group federated(cloud)[Federated Environment]
|
||||
service server1(server)[System] in federated
|
||||
service edge(server)[Edge Device] in federated
|
||||
server1:R -- L:edge
|
||||
|
||||
group on_prem(cloud)[Hub]
|
||||
service firewall(server)[Firewall Device] in on_prem
|
||||
service server(server)[Server] in on_prem
|
||||
firewall:R -- L:server
|
||||
|
||||
service db1(database)[db1] in on_prem
|
||||
service db2(database)[db2] in on_prem
|
||||
service db3(database)[db3] in on_prem
|
||||
service db4(database)[db4] in on_prem
|
||||
service db5(database)[db5] in on_prem
|
||||
service db6(database)[db6] in on_prem
|
||||
|
||||
junction mid in on_prem
|
||||
server:B -- T:mid
|
||||
|
||||
junction 1Leftofmid in on_prem
|
||||
1Leftofmid:R -- L:mid
|
||||
1Leftofmid:B -- T:db1
|
||||
|
||||
junction 2Leftofmid in on_prem
|
||||
2Leftofmid:R -- L:1Leftofmid
|
||||
2Leftofmid:B -- T:db2
|
||||
|
||||
junction 3Leftofmid in on_prem
|
||||
3Leftofmid:R -- L:2Leftofmid
|
||||
3Leftofmid:B -- T:db3
|
||||
|
||||
junction 1RightOfMid in on_prem
|
||||
mid:R -- L:1RightOfMid
|
||||
1RightOfMid:B -- T:db4
|
||||
|
||||
junction 2RightOfMid in on_prem
|
||||
1RightOfMid:R -- L:2RightOfMid
|
||||
2RightOfMid:B -- T:db5
|
||||
|
||||
junction 3RightOfMid in on_prem
|
||||
2RightOfMid:R -- L:3RightOfMid
|
||||
3RightOfMid:B -- T:db6
|
||||
|
||||
edge:R -- L:firewall
|
||||
`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// Skipped as the layout is not deterministic, and causes issues in E2E tests.
|
||||
describe.skip('architecture - external', () => {
|
||||
it('should allow adding external icons', () => {
|
||||
urlSnapshotTest('http://localhost:9000/architecture-external.html');
|
||||
});
|
||||
});
|
@@ -14,7 +14,7 @@ describe('Block diagram', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('BL2: should handle colums statement in sub-blocks', () => {
|
||||
it('BL2: should handle columns statement in sub-blocks', () => {
|
||||
imgSnapshotTest(
|
||||
`block-beta
|
||||
id1["Hello"]
|
||||
@@ -30,7 +30,7 @@ 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(
|
||||
`block-beta
|
||||
block
|
||||
@@ -46,7 +46,7 @@ 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(
|
||||
`block-beta
|
||||
columns 1
|
||||
@@ -66,7 +66,7 @@ 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(
|
||||
`block-beta
|
||||
columns 1
|
||||
@@ -236,7 +236,7 @@ describe('Block diagram', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('BL16: width alignment - blocks shold be equal in width', () => {
|
||||
it('BL17: width alignment - blocks should be equal in width', () => {
|
||||
imgSnapshotTest(
|
||||
`block-beta
|
||||
A("This is the text")
|
||||
@@ -247,7 +247,7 @@ describe('Block diagram', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('BL17: block types 1 - square, rounded and circle', () => {
|
||||
it('BL18: block types 1 - square, rounded and circle', () => {
|
||||
imgSnapshotTest(
|
||||
`block-beta
|
||||
A["square"]
|
||||
@@ -258,7 +258,7 @@ describe('Block diagram', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('BL18: block types 2 - odd, diamond and hexagon', () => {
|
||||
it('BL19: block types 2 - odd, diamond and hexagon', () => {
|
||||
imgSnapshotTest(
|
||||
`block-beta
|
||||
A>"rect_left_inv_arrow"]
|
||||
@@ -269,7 +269,7 @@ describe('Block diagram', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('BL19: block types 3 - stadium', () => {
|
||||
it('BL20: block types 3 - stadium', () => {
|
||||
imgSnapshotTest(
|
||||
`block-beta
|
||||
A(["stadium"])
|
||||
@@ -278,7 +278,7 @@ describe('Block diagram', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('BL20: 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(
|
||||
`block-beta
|
||||
A[/"lean right"/]
|
||||
@@ -290,7 +290,7 @@ describe('Block diagram', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('BL21: block types 1 - square, rounded and circle', () => {
|
||||
it('BL22: block types 1 - square, rounded and circle', () => {
|
||||
imgSnapshotTest(
|
||||
`block-beta
|
||||
A["square"]
|
||||
@@ -301,7 +301,7 @@ describe('Block diagram', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('BL22: sizing - it should be possible to make a block wider', () => {
|
||||
it('BL23: sizing - it should be possible to make a block wider', () => {
|
||||
imgSnapshotTest(
|
||||
`block-beta
|
||||
A("rounded"):2
|
||||
@@ -312,7 +312,7 @@ describe('Block diagram', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('BL23: 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(
|
||||
`block-beta
|
||||
block:2
|
||||
@@ -324,7 +324,7 @@ describe('Block diagram', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('BL24: block in the middle with space on each side', () => {
|
||||
it('BL25: block in the middle with space on each side', () => {
|
||||
imgSnapshotTest(
|
||||
`block-beta
|
||||
columns 3
|
||||
@@ -335,7 +335,7 @@ describe('Block diagram', () => {
|
||||
{}
|
||||
);
|
||||
});
|
||||
it('BL25: space and an edge', () => {
|
||||
it('BL26: space and an edge', () => {
|
||||
imgSnapshotTest(
|
||||
`block-beta
|
||||
columns 5
|
||||
@@ -345,7 +345,7 @@ describe('Block diagram', () => {
|
||||
{}
|
||||
);
|
||||
});
|
||||
it('BL26: block sizes for regular blocks', () => {
|
||||
it('BL27: block sizes for regular blocks', () => {
|
||||
imgSnapshotTest(
|
||||
`block-beta
|
||||
columns 3
|
||||
@@ -354,7 +354,7 @@ describe('Block diagram', () => {
|
||||
{}
|
||||
);
|
||||
});
|
||||
it('BL27: 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(
|
||||
`block-beta
|
||||
columns 3
|
||||
@@ -363,11 +363,12 @@ describe('Block diagram', () => {
|
||||
f
|
||||
end
|
||||
g
|
||||
`,
|
||||
`,
|
||||
{}
|
||||
);
|
||||
});
|
||||
it('BL23: 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(
|
||||
`block-beta
|
||||
columns 3
|
||||
@@ -379,7 +380,7 @@ describe('Block diagram', () => {
|
||||
h
|
||||
i
|
||||
j
|
||||
`,
|
||||
`,
|
||||
{}
|
||||
);
|
||||
});
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||
|
||||
describe('C4 diagram', () => {
|
||||
it('should render a simple C4Context diagram', () => {
|
||||
it('C4.1 should render a simple C4Context diagram', () => {
|
||||
imgSnapshotTest(
|
||||
`
|
||||
C4Context
|
||||
@@ -30,9 +30,8 @@ describe('C4 diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
it('should render a simple C4Container diagram', () => {
|
||||
it('C4.2 should render a simple C4Container diagram', () => {
|
||||
imgSnapshotTest(
|
||||
`
|
||||
C4Container
|
||||
@@ -50,9 +49,8 @@ describe('C4 diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
it('should render a simple C4Component diagram', () => {
|
||||
it('C4.3 should render a simple C4Component diagram', () => {
|
||||
imgSnapshotTest(
|
||||
`
|
||||
C4Component
|
||||
@@ -69,9 +67,8 @@ describe('C4 diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
it('should render a simple C4Dynamic diagram', () => {
|
||||
it('C4.4 should render a simple C4Dynamic diagram', () => {
|
||||
imgSnapshotTest(
|
||||
`
|
||||
C4Dynamic
|
||||
@@ -93,9 +90,8 @@ describe('C4 diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
it('should render a simple C4Deployment diagram', () => {
|
||||
it('C4.5 should render a simple C4Deployment diagram', () => {
|
||||
imgSnapshotTest(
|
||||
`
|
||||
C4Deployment
|
||||
@@ -117,6 +113,5 @@ describe('C4 diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
});
|
||||
|
1037
cypress/integration/rendering/classDiagram-elk-v3.spec.js
Normal file
1037
cypress/integration/rendering/classDiagram-elk-v3.spec.js
Normal file
File diff suppressed because it is too large
Load Diff
1041
cypress/integration/rendering/classDiagram-handDrawn-v3.spec.js
Normal file
1041
cypress/integration/rendering/classDiagram-handDrawn-v3.spec.js
Normal file
File diff suppressed because it is too large
Load Diff
@@ -76,7 +76,7 @@ describe('Class diagram V2', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('should render a simple class diagram with different visibilities', () => {
|
||||
it('2.1 should render a simple class diagram with different visibilities', () => {
|
||||
imgSnapshotTest(
|
||||
`
|
||||
classDiagram-v2
|
||||
@@ -93,7 +93,7 @@ describe('Class diagram V2', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('should render multiple class diagrams', () => {
|
||||
it('3: should render multiple class diagrams', () => {
|
||||
imgSnapshotTest(
|
||||
[
|
||||
`
|
||||
@@ -581,4 +581,63 @@ class C13["With Città foreign language"]
|
||||
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
||||
);
|
||||
});
|
||||
|
||||
it('renders a class diagram with a generic class in a namespace', () => {
|
||||
const diagramDefinition = `
|
||||
classDiagram-v2
|
||||
namespace Company.Project.Module {
|
||||
class GenericClass~T~ {
|
||||
+addItem(item: T)
|
||||
+getItem() T
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
imgSnapshotTest(diagramDefinition);
|
||||
});
|
||||
|
||||
it('renders a class diagram with nested namespaces and relationships', () => {
|
||||
const diagramDefinition = `
|
||||
classDiagram-v2
|
||||
namespace Company.Project.Module.SubModule {
|
||||
class Report {
|
||||
+generatePDF(data: List)
|
||||
+generateCSV(data: List)
|
||||
}
|
||||
}
|
||||
namespace Company.Project.Module {
|
||||
class Admin {
|
||||
+generateReport()
|
||||
}
|
||||
}
|
||||
Admin --> Report : generates
|
||||
`;
|
||||
|
||||
imgSnapshotTest(diagramDefinition);
|
||||
});
|
||||
|
||||
it('renders a class diagram with multiple classes and relationships in a namespace', () => {
|
||||
const diagramDefinition = `
|
||||
classDiagram-v2
|
||||
namespace Company.Project.Module {
|
||||
class User {
|
||||
+login(username: String, password: String)
|
||||
+logout()
|
||||
}
|
||||
class Admin {
|
||||
+addUser(user: User)
|
||||
+removeUser(user: User)
|
||||
+generateReport()
|
||||
}
|
||||
class Report {
|
||||
+generatePDF(reportData: List)
|
||||
+generateCSV(reportData: List)
|
||||
}
|
||||
}
|
||||
Admin --> User : manages
|
||||
Admin --> Report : generates
|
||||
`;
|
||||
|
||||
imgSnapshotTest(diagramDefinition);
|
||||
});
|
||||
});
|
||||
|
1031
cypress/integration/rendering/classDiagram-v3.spec.js
Normal file
1031
cypress/integration/rendering/classDiagram-v3.spec.js
Normal file
File diff suppressed because it is too large
Load Diff
@@ -32,7 +32,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{ logLevel: 1 }
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('2: should render a simple class diagrams with cardinality', () => {
|
||||
@@ -61,7 +60,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('3: should render a simple class diagram with different visibilities', () => {
|
||||
@@ -79,7 +77,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('4: should render a simple class diagram with comments', () => {
|
||||
@@ -109,7 +106,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('5: should render a simple class diagram with abstract method', () => {
|
||||
@@ -121,7 +117,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('6: should render a simple class diagram with static method', () => {
|
||||
@@ -133,7 +128,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('7: should render a simple class diagram with Generic class', () => {
|
||||
@@ -153,7 +147,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('8: should render a simple class diagram with Generic class and relations', () => {
|
||||
@@ -174,7 +167,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('9: should render a simple class diagram with clickable link', () => {
|
||||
@@ -196,7 +188,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('10: should render a simple class diagram with clickable callback', () => {
|
||||
@@ -218,7 +209,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('11: should render a simple class diagram with return type on method', () => {
|
||||
@@ -233,7 +223,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('12: should render a simple class diagram with generic types', () => {
|
||||
@@ -249,7 +238,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('13: should render a simple class diagram with css classes applied', () => {
|
||||
@@ -267,7 +255,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('14: should render a simple class diagram with css classes applied directly', () => {
|
||||
@@ -283,7 +270,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('15: should render a simple class diagram with css classes applied to multiple classes', () => {
|
||||
@@ -298,7 +284,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('16: should render multiple class diagrams', () => {
|
||||
@@ -351,7 +336,6 @@ describe('Class diagram', () => {
|
||||
],
|
||||
{}
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
// it('17: should render a class diagram when useMaxWidth is true (default)', () => {
|
||||
@@ -421,7 +405,6 @@ describe('Class diagram', () => {
|
||||
`,
|
||||
{ logLevel: 1 }
|
||||
);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('should render class diagram with newlines in title', () => {
|
||||
@@ -439,7 +422,6 @@ describe('Class diagram', () => {
|
||||
+quack()
|
||||
}
|
||||
`);
|
||||
cy.get('svg');
|
||||
});
|
||||
|
||||
it('should render class diagram with many newlines in title', () => {
|
||||
@@ -447,7 +429,7 @@ describe('Class diagram', () => {
|
||||
classDiagram
|
||||
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
||||
+String Also
|
||||
-Stirng Many
|
||||
-String Many
|
||||
#int Members
|
||||
+And()
|
||||
-Many()
|
||||
@@ -461,7 +443,7 @@ describe('Class diagram', () => {
|
||||
classDiagram
|
||||
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
||||
+String Also
|
||||
-Stirng Many
|
||||
-String Many
|
||||
#int Members
|
||||
+And()
|
||||
-Many()
|
||||
@@ -477,7 +459,7 @@ describe('Class diagram', () => {
|
||||
namespace testingNamespace {
|
||||
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
||||
+String Also
|
||||
-Stirng Many
|
||||
-String Many
|
||||
#int Members
|
||||
+And()
|
||||
-Many()
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user