mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-10-31 10:54:15 +01:00 
			
		
		
		
	Compare commits
	
		
			714 Commits
		
	
	
		
			v10.9.0
			...
			5237-unifi
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 8fb9b21f59 | ||
|   | b8dd4b9048 | ||
|   | 4f6586873f | ||
|   | a56aa56cbc | ||
|   | 48e313bf18 | ||
|   | fa6bcd8b30 | ||
|   | eed5ba6c1e | ||
|   | 8e40f31ed3 | ||
|   | af05df937e | ||
|   | f01a9d50fb | ||
|   | f14b65cf43 | ||
|   | e5069083c9 | ||
|   | 8a079299a6 | ||
|   | dfe223c3b8 | ||
|   | e09410448c | ||
|   | 269ddf4a34 | ||
|   | e41bccad64 | ||
|   | 7da85b9005 | ||
|   | 8d23b684f5 | ||
|   | 47776e3ca1 | ||
|   | 52e0dc6464 | ||
|   | 5413668c1a | ||
|   | 3e60270193 | ||
|   | ddaa7afbb5 | ||
|   | 2377a0d753 | ||
|   | a4de1b4944 | ||
|   | 5b66810646 | ||
|   | aa63f320f8 | ||
|   | ca2c112c9a | ||
|   | 75b0ee3daf | ||
|   | 60c79dfb2f | ||
|   | c10ab23387 | ||
|   | ec7adb7e00 | ||
|   | 0d2c7c3b2c | ||
|   | c8f2abad18 | ||
|   | b6ef7367c2 | ||
|   | 4463e9d7a3 | ||
|   | 991721e955 | ||
|   | 47d4929bc6 | ||
|   | ff36301cc5 | ||
|   | 7fb079ef3c | ||
|   | 7bcba29493 | ||
|   | 8744008630 | ||
|   | 418d34cbee | ||
|   | fcd5c2c21d | ||
|   | e3c6281b26 | ||
|   | ae5b886148 | ||
|   | c5badf8341 | ||
|   | da882de0d4 | ||
|   | 633febaeab | ||
|   | bf9485c231 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | a722bdcd37 | ||
|   | 8a5fe53706 | ||
|   | 362e49aa2c | ||
|   | 6d2939c9b9 | ||
|   | 9a11cb7bb3 | ||
|   | 45cd2c005b | ||
|   | 2d241808e9 | ||
|   | 9fc17f67c6 | ||
|   | 287e903385 | ||
|   | b1b27f7a2b | ||
|   | 745ec0daae | ||
|   | 64f1d2f005 | ||
|   | 55afd8cdb8 | ||
|   | 42a12a62ac | ||
|   | e8018ed779 | ||
|   | 00eaebeac8 | ||
|   | dd92aecdca | ||
|   | 20f9e503cb | ||
|   | 2df26ca323 | ||
|   | b7cb9673b0 | ||
|   | 8d815f878c | ||
|   | dab26df9c4 | ||
|   | c7fe9a6465 | ||
|   | 4f26f3ae2e | ||
|   | 730fa89e4c | ||
|   | 0326d899c4 | ||
|   | c993adfcdb | ||
|   | 4885b311f8 | ||
|   | 3274f673ab | ||
|   | f5fefc0499 | ||
|   | ab077992f5 | ||
|   | 2f80c3a2c4 | ||
|   | 4c0b8f6f40 | ||
|   | ce6f2739b5 | ||
|   | 7ecb772c6c | ||
|   | f480fb7c85 | ||
|   | 94bb43907d | ||
|   | 32a62bede8 | ||
|   | 7372d9055a | ||
|   | 3ff4a6910d | ||
|   | 683695bec2 | ||
|   | fbe13f4e9e | ||
|   | 4f642428de | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 954f5d7d42 | ||
|   | 4a12c46350 | ||
|   | 9eb64cd6db | ||
|   | 7b8e76c26f | ||
|   | 665be1ecfe | ||
|   | edda73c7fc | ||
|   | 6413529a6e | ||
|   | f5e1df08a0 | ||
|   | bb2bbfdf92 | ||
|   | 7529db8254 | ||
|   | b9a73c88b5 | ||
|   | 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 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | d4e00de1fd | ||
|   | 0c36248073 | ||
|   | 08e4489ede | ||
|   | 76801ff564 | ||
|   | c4ccfec316 | ||
|   | 1ac9244e68 | ||
|   | 7e837dfee2 | ||
|   | 21185227ad | ||
|   | b3e29dc11b | ||
|   | 9f6fc5a074 | ||
|   | f2d3ac1e7b | ||
|   | edad740e15 | ||
|   | 8265e53128 | ||
|   | d316b05fa1 | ||
|   | 3000f0208f | ||
|   | e49c95c220 | ||
|   | 47c5abb8a5 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | be9b349e51 | ||
|   | b22ae106b2 | ||
|   | 7fe4a2ce6c | ||
|   | 8102ba4d52 | ||
|   | dd5bfb3b24 | ||
|   | 18defaae6d | ||
|   | a2702e4058 | ||
|   | e6e463092c | ||
|   | 128c69aa76 | ||
|   | 3e4193e3d5 | ||
|   | da40dbf1dd | ||
|   | 01350467bd | ||
|   | 6b1d568172 | ||
|   | d220720dde | ||
|   | b7f864cdb0 | ||
|   | 1f8accd6e0 | ||
|   | 8205e3619a | ||
|   | 7f33ae0f40 | ||
|   | 13aa3265e3 | ||
|   | 3b0687e557 | ||
|   | 273941a9fe | ||
|   | 718811be9c | ||
|   | 8d9cb09261 | ||
|   | 196d88559c | ||
|   | 357da0ca28 | ||
|   | 9b411fa8d4 | ||
|   | 087a5748c8 | ||
|   | 6105185d05 | ||
|   | c993a817d1 | ||
|   | 002aa29f19 | ||
|   | 07de090723 | ||
|   | 3809732e48 | ||
|   | eb4a6fd2ed | ||
|   | 3357844a1f | ||
|   | 0d8fe3b626 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 5df988d2ac | ||
|   | e9ef277929 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 2dcdcba227 | ||
|   | 5b6c5dff0a | ||
|   | 7fa887b644 | ||
|   | 5c6b2cf490 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | e0930b5cbb | ||
|   | 2a3d03254d | ||
|   | e570863801 | ||
|   | 866d9416b4 | ||
|   | e048085b5a | ||
|   | 9ed2f4b2d3 | ||
|   | c2eb2184fc | ||
|   | a2e3b4ca06 | ||
|   | 909ad02a18 | ||
|   | 4a930d2b5b | ||
|   | 4a19103891 | ||
|   | bb0c45b090 | ||
|   | d0583f9947 | ||
|   | 12bd301401 | ||
|   | a14637b416 | ||
|   | 5d1ac22fd1 | ||
|   | 3ccfea84b8 | ||
|   | 38beca11fd | ||
|   | 3555577581 | ||
|   | e852596862 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | f15fde26f9 | ||
|   | 73c426f8be | ||
|   | 8f40c1a77f | ||
|   | 0d00e88580 | ||
|   | 8792e0a978 | ||
|   | e27e56f7bf | ||
|   | 6b7e1225dd | ||
|   | 0051620840 | ||
|   | 63f9d3e0b4 | ||
|   | 90b1111382 | ||
|   | 0aa526d707 | ||
|   | 4daef2591d | ||
|   | 2d91aa0b06 | ||
|   | 2fd6de0af5 | ||
|   | 799af4e550 | ||
|   | b8e0bcee5b | ||
|   | 3567308a22 | ||
|   | aca0bebaf4 | ||
|   | 4ee4555cbd | ||
|   | 253adcb0eb | ||
|   | 585609b907 | ||
|   | 1d8332d61e | ||
|   | 3f95c78428 | ||
|   | 8e95c4db55 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | f476a7566c | ||
|   | 4304fba0f5 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 07bd9825a1 | ||
|   | 69c7cb9f6f | ||
|   | fd473af5b0 | ||
|   | d1f02f6bed | ||
|   | c5cc9dbffa | ||
|   | 43e183b658 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 153f319666 | ||
|   | 3b8e6ecc42 | ||
|   | 29ec8cbd0a | ||
|   | 3072604070 | ||
|   | 562d10809c | ||
|   | c00bf26c77 | ||
|   | a2f54f7da4 | ||
|   | 12bf139708 | ||
|   | dbb69ad7cd | ||
|   | b78f16ef19 | ||
|   | 223f339682 | ||
|   | 3f556fa3fc | ||
|   | 16db0c039f | ||
|   | 94874ddbbe | ||
|   | ea86697973 | ||
|   | fa1605e7e7 | ||
|   | 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 | ||
|   | b914f48a91 | ||
|   | de89355a49 | ||
|   | 6502036be9 | ||
|   | f86da19362 | ||
|   | b04e150dc1 | ||
|   | 1c0c374c29 | ||
|   | fcda3dc8c6 | ||
|   | d370dd43b1 | ||
|   | c90d7b8395 | ||
|   | 4feb2e639b | ||
|   | 37ba7af6f6 | ||
|   | 10fb85663f | ||
|   | 33287a63ad | ||
|   | 3134a87e72 | ||
|   | d68b59a390 | ||
|   | 447263ecc2 | ||
|   | 08a7f662ea | ||
|   | 007fb5deb9 | ||
|   | 6422175ef2 | ||
|   | 32ca0b97fc | ||
|   | 244b161032 | ||
|   | 75a6fb1d91 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 32c2aecc62 | ||
|   | b0ef0de032 | ||
| ![renovate[bot]](/assets/img/avatar_default.png)  | 92692653a7 | ||
|   | 77ba19cd04 | ||
|   | 5b43460ea4 | ||
|   | 579f1f9dc1 | ||
|   | de4ad764ce | ||
|   | 33444466f3 | ||
|   | 73888eafe1 | ||
|   | cd3d560e8d | ||
|   | c0497d3413 | ||
|   | 648f779e2c | ||
|   | b1915132d5 | ||
|   | 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 | ||
|   | be6b3176f4 | ||
|   | aef29affa3 | ||
|   | 70d236244f | ||
|   | 171a2019ec | ||
|   | 70df6bbbca | ||
|   | 5807d521b7 | ||
|   | 67e482ff97 | ||
|   | 2b2bbe35d0 | ||
|   | 8862d63377 | ||
|   | fc7427536c | ||
|   | 0cb365cf31 | ||
|   | 49a0d0d9bf | ||
|   | 3602191f69 | ||
|   | 5935e277e6 | ||
|   | 0ce33cb160 | ||
|   | d945030803 | ||
|   | 60a484f1e4 | ||
|   | c8fc989237 | ||
|   | 392ebd0af4 | ||
|   | cabcf1e270 | ||
|   | af7364bdf9 | ||
|   | 14e1e6368a | ||
|   | f1aa6fff9c | ||
|   | d11bfaa6c4 | ||
|   | 25cd86feec | ||
|   | 062176d8d0 | ||
|   | a344d88020 | ||
|   | 30b180d77b | ||
|   | 00423ed152 | ||
|   | 48ff3b2c11 | ||
|   | eee0d4bf31 | ||
|   | e047755a21 | ||
|   | b30d609d19 | ||
|   | 8ad056b8a2 | ||
|   | c1cb171071 | ||
|   | 17959f648a | ||
|   | c3d9aa791a | ||
|   | f846e7719e | ||
|   | f25c215f6a | ||
|   | 2640120be8 | ||
|   | b55014617e | ||
|   | 42589a0034 | ||
|   | 82c405289d | ||
|   | 191ea24e29 | ||
|   | 72a6fad1db | ||
|   | a2a99485f9 | ||
|   | 969e2c1ff1 | ||
|   | 7d0faa3fed | ||
|   | 4256177531 | ||
|   | 327530fb9d | ||
|   | 55be75c974 | ||
|   | 47a6ce4342 | ||
|   | 3ecb841c1a | ||
|   | 1d2450245e | ||
|   | f6c4c9260f | ||
|   | f354d68350 | ||
|   | bea76aa682 | ||
|   | 6d4b27aacb | ||
|   | e008b7dae7 | ||
|   | 96a3991c56 | ||
|   | 8d1d691bc3 | ||
|   | e07608209b | ||
|   | 50cdb74d54 | ||
|   | edc091f4d4 | ||
|   | e0448a7b7b | ||
|   | 0f02f5ff34 | ||
|   | b2111adef5 | ||
|   | 442da6c4a2 | ||
|   | f715863540 | ||
|   | ed7dbb100d | ||
|   | 52fdea0419 | ||
|   | 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 | ||
|   | 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 | ||
|   | 7b29a380fc | ||
|   | 997c23befa | ||
|   | 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 | ||
|   | 222d8eed4e | ||
|   | 718d52a72c | ||
|   | fe1a06271a | ||
|   | bd2370555b | ||
|   | 86c9ee4e90 | ||
|   | b26bcf1343 | ||
|   | 5d5c6275f9 | ||
|   | 9c1a47d1fc | ||
|   | 13852b7f4e | ||
|   | 4fd7a88a15 | ||
|   | 5c2a6b5eb1 | ||
|   | 9cbebbb8a0 | ||
|   | e26d987c4e | ||
|   | 53669efaf8 | ||
|   | b68f45ef59 | ||
|   | 8f44de651b | ||
|   | 2ede244da0 | ||
|   | 77a181978e | ||
|   | 170bbce0d3 | ||
|   | fc99d9be41 | ||
|   | 9fb9bed806 | ||
|   | 01b2f80a95 | ||
|   | da7ff777d1 | ||
|   | 8d48f8d8b0 | ||
|   | b4618f9ba1 | ||
|   | 2c5d83fab3 | 
							
								
								
									
										30
									
								
								.build/common.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								.build/common.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| /** | ||||
|  * 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; | ||||
							
								
								
									
										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, | ||||
							
								
								
									
										124
									
								
								.build/jsonSchema.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								.build/jsonSchema.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,124 @@ | ||||
| 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', | ||||
|   'timeline', | ||||
|   'gitGraph', | ||||
|   'c4', | ||||
|   'sankey', | ||||
|   'block', | ||||
|   'packet', | ||||
| ] 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)};`; | ||||
| }; | ||||
							
								
								
									
										18
									
								
								.build/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								.build/types.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| 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`); | ||||
|     out.length > 0 && console.log(out.toString()); | ||||
|   } catch (e) { | ||||
|     console.error(e); | ||||
|     e.stdout.length > 0 && console.error(e.stdout.toString()); | ||||
|     e.stderr.length > 0 && console.error(e.stderr.toString()); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| for (const { packageName } of Object.values(packageOptions)) { | ||||
|   buildType(packageName); | ||||
| } | ||||
| @@ -1,3 +0,0 @@ | ||||
| { | ||||
|   "extends": ["@commitlint/config-conventional"] | ||||
| } | ||||
| @@ -27,6 +27,7 @@ controly | ||||
| CSSCLASS | ||||
| CYLINDEREND | ||||
| CYLINDERSTART | ||||
| DAGA | ||||
| datakey | ||||
| DEND | ||||
| descr | ||||
| @@ -53,6 +54,7 @@ GENERICTYPE | ||||
| getBoundarys | ||||
| grammr | ||||
| graphtype | ||||
| iife | ||||
| interp | ||||
| introdcued | ||||
| INVTRAPEND | ||||
| @@ -74,11 +76,13 @@ loglevel | ||||
| LOGMSG | ||||
| lookaheads | ||||
| mdast | ||||
| metafile | ||||
| minlen | ||||
| Mstartx | ||||
| MULT | ||||
| NODIR | ||||
| NSTR | ||||
| outdir | ||||
| Qcontrolx | ||||
| reinit | ||||
| rels | ||||
| @@ -86,6 +90,7 @@ reqs | ||||
| rewritelinks | ||||
| rgba | ||||
| RIGHTOF | ||||
| roughjs | ||||
| sankey | ||||
| sequencenumber | ||||
| shrc | ||||
|   | ||||
| @@ -36,6 +36,7 @@ jsfiddle | ||||
| jsonschema | ||||
| katex | ||||
| khroma | ||||
| langium | ||||
| mathml | ||||
| matplotlib | ||||
| mdbook | ||||
| @@ -53,6 +54,7 @@ presetAttributify | ||||
| pyplot | ||||
| redmine | ||||
| rehype | ||||
| roughjs | ||||
| rscratch | ||||
| sparkline | ||||
| sphinxcontrib | ||||
|   | ||||
| @@ -9,6 +9,7 @@ elems | ||||
| gantt | ||||
| gitgraph | ||||
| gzipped | ||||
| handdrawn | ||||
| knsv | ||||
| Knut | ||||
| marginx | ||||
| @@ -17,6 +18,7 @@ Markdownish | ||||
| mermaidjs | ||||
| mindmap | ||||
| mindmaps | ||||
| mrtree | ||||
| multigraph | ||||
| nodesep | ||||
| NOTEGROUP | ||||
|   | ||||
| @@ -1 +1,4 @@ | ||||
| circo | ||||
| handdrawnSeed | ||||
| neato | ||||
| newbranch | ||||
|   | ||||
							
								
								
									
										65
									
								
								.esbuild/build.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								.esbuild/build.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| import { build } from 'esbuild'; | ||||
| import { mkdir, writeFile } from 'node:fs/promises'; | ||||
| import { packageOptions } from '../.build/common.js'; | ||||
| import { generateLangium } from '../.build/generateLangium.js'; | ||||
| import { MermaidBuildOptions, defaultOptions, getBuildConfig } from './util.js'; | ||||
|  | ||||
| const shouldVisualize = process.argv.includes('--visualize'); | ||||
|  | ||||
| const buildPackage = async (entryName: keyof typeof packageOptions) => { | ||||
|   const commonOptions: MermaidBuildOptions = { ...defaultOptions, 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 } | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   const results = await Promise.all(buildConfigs.map((option) => build(getBuildConfig(option)))); | ||||
|  | ||||
|   if (shouldVisualize) { | ||||
|     for (const { metafile } of results) { | ||||
|       if (!metafile) { | ||||
|         continue; | ||||
|       } | ||||
|       const fileName = Object.keys(metafile.outputs) | ||||
|         .filter((file) => !file.includes('chunks') && file.endsWith('js'))[0] | ||||
|         .replace('dist/', ''); | ||||
|       // Upload metafile into https://esbuild.github.io/analyze/ | ||||
|       await writeFile(`stats/${fileName}.meta.json`, JSON.stringify(metafile)); | ||||
|     } | ||||
|   } | ||||
| }; | ||||
|  | ||||
| const handler = (e) => { | ||||
|   console.error(e); | ||||
|   process.exit(1); | ||||
| }; | ||||
|  | ||||
| const main = async () => { | ||||
|   await generateLangium(); | ||||
|   await mkdir('stats').catch(() => {}); | ||||
|   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); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| 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 { 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; | ||||
							
								
								
									
										102
									
								
								.esbuild/server.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								.esbuild/server.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| import express from 'express'; | ||||
| import type { NextFunction, Request, Response } from 'express'; | ||||
| import cors from 'cors'; | ||||
| import { getBuildConfig, defaultOptions } from './util.js'; | ||||
| import { context } from 'esbuild'; | ||||
| import chokidar from 'chokidar'; | ||||
| import { generateLangium } from '../.build/generateLangium.js'; | ||||
| import { packageOptions } from '../.build/common.js'; | ||||
|  | ||||
| const configs = Object.values(packageOptions).map(({ packageName }) => | ||||
|   getBuildConfig({ ...defaultOptions, minify: false, core: false, entryName: packageName }) | ||||
| ); | ||||
| const mermaidIIFEConfig = getBuildConfig({ | ||||
|   ...defaultOptions, | ||||
|   minify: false, | ||||
|   core: false, | ||||
|   entryName: 'mermaid', | ||||
|   format: 'iife', | ||||
| }); | ||||
| configs.push(mermaidIIFEConfig); | ||||
|  | ||||
| const contexts = await Promise.all(configs.map((config) => context(config))); | ||||
|  | ||||
| const rebuildAll = async () => { | ||||
|   console.time('Rebuild time'); | ||||
|   await Promise.all(contexts.map((ctx) => ctx.rebuild())).catch((e) => console.error(e)); | ||||
|   console.timeEnd('Rebuild time'); | ||||
| }; | ||||
|  | ||||
| let clients: { id: number; response: Response }[] = []; | ||||
| function eventsHandler(request: Request, response: Response, next: NextFunction) { | ||||
|   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); | ||||
|   } | ||||
|   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/], | ||||
|     }) | ||||
|     .on('all', async (event, path) => { | ||||
|       // Ignore other events. | ||||
|       if (!['add', 'change'].includes(event)) { | ||||
|         return; | ||||
|       } | ||||
|       if (/\.langium$/.test(path)) { | ||||
|         await generateLangium(); | ||||
|       } | ||||
|       console.log(`${path} changed. Rebuilding...`); | ||||
|       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`); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| createServer(); | ||||
							
								
								
									
										101
									
								
								.esbuild/util.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								.esbuild/util.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
| import { resolve } from 'path'; | ||||
| import { fileURLToPath } from 'url'; | ||||
| import type { BuildOptions } from 'esbuild'; | ||||
| import { readFileSync } from 'fs'; | ||||
| import jsonSchemaPlugin from './jsonSchemaPlugin.js'; | ||||
| import { 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'; | ||||
|   entryName: keyof typeof packageOptions; | ||||
| } | ||||
|  | ||||
| export const defaultOptions: Omit<MermaidBuildOptions, 'entryName'> = { | ||||
|   minify: false, | ||||
|   metafile: false, | ||||
|   core: false, | ||||
|   format: 'esm', | ||||
| } 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 }: MermaidBuildOptions) => { | ||||
|   if (core) { | ||||
|     fileName += '.core'; | ||||
|   } else if (format === 'esm') { | ||||
|     fileName += '.esm'; | ||||
|   } | ||||
|   if (minify) { | ||||
|     fileName += '.min'; | ||||
|   } | ||||
|   return fileName; | ||||
| }; | ||||
|  | ||||
| export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => { | ||||
|   const { core, entryName, metafile, format, minify } = options; | ||||
|   const external: string[] = ['require', 'fs', 'path']; | ||||
|   const { name, file, packageName } = packageOptions[entryName]; | ||||
|   const outFileName = getFileName(name, options); | ||||
|   let output: BuildOptions = buildOptions({ | ||||
|     absWorkingDir: resolve(__dirname, `../packages/${packageName}`), | ||||
|     entryPoints: { | ||||
|       [outFileName]: `src/${file}`, | ||||
|     }, | ||||
|     metafile, | ||||
|     minify, | ||||
|     logLevel: 'info', | ||||
|     chunkNames: `chunks/${outFileName}/[name]-[hash]`, | ||||
|     define: { | ||||
|       '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; | ||||
|     output.globalName = '__esbuild_esm_mermaid'; | ||||
|     // Workaround for removing the .default access in esbuild IIFE. | ||||
|     // https://github.com/mermaid-js/mermaid/pull/4109#discussion_r1292317396 | ||||
|     output.footer = { | ||||
|       js: 'globalThis.mermaid = globalThis.__esbuild_esm_mermaid.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 | ||||
							
								
								
									
										1
									
								
								.eslintignore
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								.eslintignore
									
									
									
									
									
										Symbolic link
									
								
							| @@ -0,0 +1 @@ | ||||
| .gitignore | ||||
| @@ -14,7 +14,7 @@ module.exports = { | ||||
|     }, | ||||
|     tsconfigRootDir: __dirname, | ||||
|     sourceType: 'module', | ||||
|     ecmaVersion: 2020, | ||||
|     ecmaVersion: 2022, | ||||
|     allowAutomaticSingleRunInference: true, | ||||
|     project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'], | ||||
|     parser: '@typescript-eslint/parser', | ||||
| @@ -23,7 +23,7 @@ module.exports = { | ||||
|     'eslint:recommended', | ||||
|     'plugin:@typescript-eslint/recommended', | ||||
|     'plugin:json/recommended', | ||||
|     'plugin:markdown/recommended', | ||||
|     'plugin:markdown/recommended-legacy', | ||||
|     'plugin:@cspell/recommended', | ||||
|     'prettier', | ||||
|   ], | ||||
| @@ -53,6 +53,7 @@ module.exports = { | ||||
|     '@typescript-eslint/no-floating-promises': 'error', | ||||
|     '@typescript-eslint/no-misused-promises': 'error', | ||||
|     '@typescript-eslint/no-unused-vars': 'warn', | ||||
|     '@typescript-eslint/consistent-type-definitions': 'error', | ||||
|     '@typescript-eslint/ban-ts-comment': [ | ||||
|       'error', | ||||
|       { | ||||
|   | ||||
							
								
								
									
										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 | ||||
|   | ||||
							
								
								
									
										4
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							| @@ -37,13 +37,13 @@ jobs: | ||||
|         run: pnpm run build | ||||
|  | ||||
|       - name: Upload Mermaid Build as Artifact | ||||
|         uses: actions/upload-artifact@v3 | ||||
|         uses: actions/upload-artifact@v4 | ||||
|         with: | ||||
|           name: mermaid-build | ||||
|           path: packages/mermaid/dist | ||||
|  | ||||
|       - name: Upload Mermaid Mindmap Build as Artifact | ||||
|         uses: actions/upload-artifact@v3 | ||||
|         uses: actions/upload-artifact@v4 | ||||
|         with: | ||||
|           name: mermaid-mindmap-build | ||||
|           path: packages/mermaid-mindmap/dist | ||||
|   | ||||
							
								
								
									
										6
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							| @@ -33,7 +33,7 @@ jobs: | ||||
|  | ||||
|       # Initializes the CodeQL tools for scanning. | ||||
|       - name: Initialize CodeQL | ||||
|         uses: github/codeql-action/init@v2 | ||||
|         uses: github/codeql-action/init@v3 | ||||
|         with: | ||||
|           config-file: ./.github/codeql/codeql-config.yml | ||||
|           languages: ${{ matrix.language }} | ||||
| @@ -45,7 +45,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@v3 | ||||
|  | ||||
|       # ℹ️ 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 +59,4 @@ jobs: | ||||
|       #   make release | ||||
|  | ||||
|       - name: Perform CodeQL Analysis | ||||
|         uses: github/codeql-action/analyze@v2 | ||||
|         uses: github/codeql-action/analyze@v3 | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/workflows/dependency-review.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/dependency-review.yml
									
									
									
									
										vendored
									
									
								
							| @@ -17,4 +17,4 @@ jobs: | ||||
|       - name: 'Checkout Repository' | ||||
|         uses: actions/checkout@v4 | ||||
|       - name: 'Dependency Review' | ||||
|         uses: actions/dependency-review-action@v3 | ||||
|         uses: actions/dependency-review-action@v4 | ||||
|   | ||||
							
								
								
									
										56
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							| @@ -17,9 +17,19 @@ 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 | ||||
|     }} | ||||
| jobs: | ||||
|   cache: | ||||
|     runs-on: ubuntu-latest | ||||
| @@ -48,11 +58,26 @@ jobs: | ||||
|         with: | ||||
|           ref: ${{ env.targetHash }} | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }} | ||||
|         uses: cypress-io/github-action@v6 | ||||
|         with: | ||||
|           # 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 | ||||
|  | ||||
|       - name: Cypress run | ||||
|         uses: cypress-io/github-action@v4 | ||||
|         uses: cypress-io/github-action@v6 | ||||
|         id: cypress-snapshot-gen | ||||
|         if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }} | ||||
|         with: | ||||
|           install: false | ||||
|           start: pnpm run dev | ||||
|           wait-on: 'http://localhost:9000' | ||||
|           browser: chrome | ||||
| @@ -81,20 +106,35 @@ jobs: | ||||
|       # These cached snapshots are downloaded, providing the reference snapshots. | ||||
|       - name: Cache snapshots | ||||
|         id: cache-snapshot | ||||
|         uses: actions/cache/restore@v3 | ||||
|         uses: actions/cache/restore@v4 | ||||
|         with: | ||||
|           path: ./cypress/snapshots | ||||
|           key: ${{ runner.os }}-snapshots-${{ env.targetHash }} | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         uses: cypress-io/github-action@v6 | ||||
|         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@v6 | ||||
|         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 | ||||
| @@ -108,7 +148,7 @@ jobs: | ||||
|           CYPRESS_COMMIT: ${{ github.sha }} | ||||
|  | ||||
|       - name: Upload Coverage to Codecov | ||||
|         uses: codecov/codecov-action@v3 | ||||
|         uses: codecov/codecov-action@v4 | ||||
|         # 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: | ||||
| @@ -145,7 +185,7 @@ jobs: | ||||
|       - name: Save snapshots cache | ||||
|         id: cache-upload | ||||
|         if: ${{ github.event_name == 'push' && needs.e2e.result != 'failure' }} | ||||
|         uses: actions/cache/save@v3 | ||||
|         uses: actions/cache/save@v4 | ||||
|         with: | ||||
|           path: ./snapshots | ||||
|           key: ${{ runner.os }}-snapshots-${{ github.event.after }} | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							| @@ -29,7 +29,7 @@ jobs: | ||||
|       - uses: actions/checkout@v4 | ||||
|  | ||||
|       - name: Restore lychee cache | ||||
|         uses: actions/cache@v3 | ||||
|         uses: actions/cache@v4 | ||||
|         with: | ||||
|           path: .lycheecache | ||||
|           key: cache-lychee-${{ github.sha }} | ||||
|   | ||||
							
								
								
									
										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@v6 | ||||
|         with: | ||||
|           config-name: pr-labeler.yml | ||||
|           disable-autolabeler: false | ||||
|   | ||||
							
								
								
									
										6
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							| @@ -37,13 +37,13 @@ jobs: | ||||
|         run: pnpm install --frozen-lockfile | ||||
|  | ||||
|       - name: Setup Pages | ||||
|         uses: actions/configure-pages@v3 | ||||
|         uses: actions/configure-pages@v4 | ||||
|  | ||||
|       - 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@v3 | ||||
|         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@v4 | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/workflows/release-draft.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/release-draft.yml
									
									
									
									
										vendored
									
									
								
							| @@ -16,7 +16,7 @@ jobs: | ||||
|       pull-requests: read # required to read PR titles/labels | ||||
|     steps: | ||||
|       - name: Draft Release | ||||
|         uses: release-drafter/release-drafter@v5 | ||||
|         uses: release-drafter/release-drafter@v6 | ||||
|         with: | ||||
|           disable-autolabeler: true | ||||
|         env: | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							| @@ -39,7 +39,7 @@ jobs: | ||||
|           pnpm exec vitest run ./packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts --coverage | ||||
|  | ||||
|       - name: Upload Coverage to Codecov | ||||
|         uses: codecov/codecov-action@v3 | ||||
|         uses: codecov/codecov-action@v4 | ||||
|         # Run step only pushes to develop and pull_requests | ||||
|         if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/develop' }} | ||||
|         with: | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/workflows/update-browserlist.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/update-browserlist.yml
									
									
									
									
										vendored
									
									
								
							| @@ -19,7 +19,7 @@ jobs: | ||||
|           message: 'chore: update browsers list' | ||||
|           push: false | ||||
|       - name: Create Pull Request | ||||
|         uses: peter-evans/create-pull-request@v5 | ||||
|         uses: peter-evans/create-pull-request@v6 | ||||
|         with: | ||||
|           branch: update-browserslist | ||||
|           title: Update Browserslist | ||||
|   | ||||
							
								
								
									
										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/ | ||||
|   | ||||
| @@ -1,4 +0,0 @@ | ||||
| #!/bin/sh | ||||
| # . "$(dirname "$0")/_/husky.sh" | ||||
|  | ||||
| # npx --no-install commitlint --edit $1 | ||||
| @@ -1,4 +1,4 @@ | ||||
| #!/bin/sh | ||||
| . "$(dirname "$0")/_/husky.sh" | ||||
|  | ||||
| pnpm run pre-commit | ||||
| NODE_OPTIONS="--max_old_space_size=8192" pnpm run pre-commit | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| v20.11.1 | ||||
| 20.12.2 | ||||
|   | ||||
| @@ -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" | ||||
| } | ||||
|   | ||||
| @@ -3,11 +3,12 @@ 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 +37,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; | ||||
| @@ -72,34 +55,8 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions) | ||||
|       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: { | ||||
| @@ -129,7 +86,7 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions) | ||||
|       // @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, | ||||
| @@ -149,24 +106,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) { | ||||
|   await build(getBuildConfig({ minify: false, watch, core: false, entryName: 'parser' })); | ||||
|   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' })); | ||||
|   } | ||||
| } 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 { 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,9 +15,9 @@ 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')); | ||||
|   | ||||
| @@ -1,2 +1,2 @@ | ||||
| FROM node:20.11.1-alpine3.19 AS base | ||||
| FROM node:20.12.2-alpine3.19 AS base | ||||
| RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" sh - | ||||
|   | ||||
| @@ -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, | ||||
| }; | ||||
| @@ -118,11 +118,53 @@ describe('Configuration', () => { | ||||
|     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.window().should('have.property', 'rendered', true); | ||||
|       cy.get('svg').should('be.visible'); | ||||
|       cy.matchImageSnapshot( | ||||
|         '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'); | ||||
|         }); | ||||
|       cy.matchImageSnapshot( | ||||
|         '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'); | ||||
|         }); | ||||
|       cy.matchImageSnapshot( | ||||
|         'configuration.spec-should-render-error-diagram-if-suppressErrorRendering-is-not-set' | ||||
|       ); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
							
								
								
									
										14
									
								
								cypress/integration/other/flowchart-elk.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								cypress/integration/other/flowchart-elk.spec.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| import { urlSnapshotTest, openURLAndVerifyRendering } from '../../helpers/util.ts'; | ||||
|  | ||||
| describe('Flowchart elk', () => { | ||||
|   it('should use dagre as fallback', () => { | ||||
|     urlSnapshotTest('http://localhost:9000/flow-elk.html', { | ||||
|       name: 'flow-elk fallback to dagre', | ||||
|     }); | ||||
|   }); | ||||
|   it('should allow overriding with external package', () => { | ||||
|     urlSnapshotTest('http://localhost:9000/flow-elk.html?elk=true', { | ||||
|       name: 'flow-elk overriding dagre with elk', | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
							
								
								
									
										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'); | ||||
|   }); | ||||
| }); | ||||
| @@ -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>'); | ||||
|   }); | ||||
| }); | ||||
| @@ -137,4 +137,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'); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -844,3 +844,42 @@ end | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| describe('Title and arrow styling #4813', () => { | ||||
|   it('should render a flowchart with title', () => { | ||||
|     const titleString = 'Test Title'; | ||||
|     renderGraph( | ||||
|       `--- | ||||
|       title: ${titleString} | ||||
|       --- | ||||
|       flowchart LR | ||||
|       A-->B | ||||
|       A-->C`, | ||||
|       { flowchart: { defaultRenderer: 'elk' } } | ||||
|     ); | ||||
|     cy.get('svg').should((svg) => { | ||||
|       const title = svg[0].querySelector('text'); | ||||
|       expect(title.textContent).to.contain(titleString); | ||||
|     }); | ||||
|   }); | ||||
|  | ||||
|   it('Render with stylized arrows', () => { | ||||
|     renderGraph( | ||||
|       ` | ||||
|       flowchart LR | ||||
|       A-->B | ||||
|       B-.-oC | ||||
|       C==xD | ||||
|       D ~~~ A`, | ||||
|       { flowchart: { defaultRenderer: 'elk' } } | ||||
|     ); | ||||
|     cy.get('svg').should((svg) => { | ||||
|       const edges = svg[0].querySelectorAll('.edges path'); | ||||
|       console.log(edges); | ||||
|       expect(edges[0]).to.have.attr('pattern', 'solid'); | ||||
|       expect(edges[1]).to.have.attr('pattern', 'dotted'); | ||||
|       expect(edges[2]).to.have.css('stroke-width', '3.5px'); | ||||
|       expect(edges[3]).to.have.css('stroke-width', '1.5px'); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -760,6 +760,51 @@ A ~~~ B | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('3258: Should render subgraphs with main graph nodeSpacing and rankSpacing', () => { | ||||
|     imgSnapshotTest( | ||||
|       `--- | ||||
|       title: Subgraph nodeSpacing and rankSpacing example | ||||
|       --- | ||||
|       flowchart LR | ||||
|         X --> Y | ||||
|         subgraph X | ||||
|           direction LR | ||||
|           A | ||||
|           C | ||||
|         end | ||||
|         subgraph Y | ||||
|           B | ||||
|           D | ||||
|         end | ||||
|       `, | ||||
|       { flowchart: { nodeSpacing: 1, rankSpacing: 1 } } | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('3258: Should render subgraphs with large nodeSpacing and rankSpacing', () => { | ||||
|     imgSnapshotTest( | ||||
|       `--- | ||||
|       title: Subgraph nodeSpacing and rankSpacing example | ||||
|       config: | ||||
|         flowchart:  | ||||
|           nodeSpacing: 250 | ||||
|           rankSpacing: 250 | ||||
|       --- | ||||
|       flowchart LR | ||||
|         X --> Y | ||||
|         subgraph X | ||||
|           direction LR | ||||
|           A | ||||
|           C | ||||
|         end | ||||
|         subgraph Y | ||||
|           B | ||||
|           D | ||||
|         end | ||||
|       ` | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   describe('Markdown strings flowchart (#4220)', () => { | ||||
|     describe('html labels', () => { | ||||
|       it('With styling and classes', () => { | ||||
| @@ -904,6 +949,18 @@ end | ||||
|         ); | ||||
|       }); | ||||
|     }); | ||||
|  | ||||
|     it('should not auto wrap when markdownAutoWrap is false', () => { | ||||
|       imgSnapshotTest( | ||||
|         `flowchart TD | ||||
|     angular_velocity["\`**angular_velocity** | ||||
|       *angular_displacement / duration* | ||||
|       [rad/s, 1/s] | ||||
|       {vector}\`"] | ||||
|     frequency["frequency\n(1 / period_duration)\n[Hz, 1/s]"]`, | ||||
|         { markdownAutoWrap: false } | ||||
|       ); | ||||
|     }); | ||||
|   }); | ||||
|   describe('Subgraph title margins', () => { | ||||
|     it('Should render subgraphs with title margins set (LR)', () => { | ||||
|   | ||||
| @@ -101,12 +101,12 @@ describe('Gantt diagram', () => { | ||||
|       title Adding GANTT diagram to mermaid | ||||
|       excludes weekdays 2014-01-10 | ||||
|       todayMarker off | ||||
|    | ||||
|  | ||||
|       section team's critical event | ||||
|       deadline A           :milestone, crit, deadlineA, 2024-02-01, 0 | ||||
|       deadline B           :milestone, crit, deadlineB, 2024-02-15, 0 | ||||
|       boss on leave        :bossaway, 2024-01-28, 2024-02-11 | ||||
|    | ||||
|  | ||||
|       section new intern | ||||
|       onboarding           :onboarding, 2024-01-02, 1w | ||||
|       literature review    :litreview, 2024-01-02, 10d | ||||
| @@ -573,7 +573,28 @@ describe('Gantt diagram', () => { | ||||
|       ` | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('should render a gantt diagram exculding friday and saturday', () => { | ||||
|     imgSnapshotTest( | ||||
|       `gantt | ||||
|       title A Gantt Diagram | ||||
|       dateFormat  YYYY-MM-DD | ||||
|       excludes weekends | ||||
|       weekend friday | ||||
|       section Section1 | ||||
|       A task :a1, 2024-02-28, 10d` | ||||
|     ); | ||||
|   }); | ||||
|   it('should render a gantt diagram exculding saturday and sunday', () => { | ||||
|     imgSnapshotTest( | ||||
|       `gantt | ||||
|       title A Gantt Diagram | ||||
|       dateFormat  YYYY-MM-DD | ||||
|       excludes weekends | ||||
|       weekend saturday | ||||
|       section Section1 | ||||
|       A task :a1, 2024-02-28, 10d` | ||||
|     ); | ||||
|   }); | ||||
|   it('should render when compact is true', () => { | ||||
|     imgSnapshotTest( | ||||
|       ` | ||||
|   | ||||
| @@ -1013,4 +1013,524 @@ gitGraph TB: | ||||
|       { gitGraph: { parallelCommits: true } } | ||||
|     ); | ||||
|   }); | ||||
|   describe('Git-Graph Bottom-to-Top Orientation Tests', () => { | ||||
|     it('50: should render a simple gitgraph with commit on main branch | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|          commit id: "1" | ||||
|          commit id: "2" | ||||
|          commit id: "3" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('51: should render a simple gitgraph with commit on main branch with Id | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|          commit id: "One" | ||||
|          commit id: "Two" | ||||
|          commit id: "Three" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('52: should render a simple gitgraph with different commitTypes on main branch | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|          commit id: "Normal Commit" | ||||
|          commit id: "Reverse Commit" type: REVERSE | ||||
|          commit id: "Highlight Commit" type: HIGHLIGHT | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('53: should render a simple gitgraph with tags commitTypes on main branch | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|          commit id: "Normal Commit with tag" tag: "v1.0.0" | ||||
|          commit id: "Reverse Commit with tag" type: REVERSE tag: "RC_1" | ||||
|          commit id: "Highlight Commit" type: HIGHLIGHT  tag: "8.8.4" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('54: should render a simple gitgraph with two branches | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|          commit id: "1" | ||||
|          commit id: "2" | ||||
|          branch develop | ||||
|          checkout develop | ||||
|          commit id: "3" | ||||
|          commit id: "4" | ||||
|          checkout main | ||||
|          commit id: "5" | ||||
|          commit id: "6" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('55: should render a simple gitgraph with two branches and merge commit | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|          commit id: "1" | ||||
|          commit id: "2" | ||||
|          branch develop | ||||
|          checkout develop | ||||
|          commit id: "3" | ||||
|          commit id: "4" | ||||
|          checkout main | ||||
|          merge develop | ||||
|          commit id: "5" | ||||
|          commit id: "6" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('56: should render a simple gitgraph with three branches and tagged merge commit | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|          commit id: "1" | ||||
|          commit id: "2" | ||||
|          branch nice_feature | ||||
|          checkout nice_feature | ||||
|          commit id: "3" | ||||
|          checkout main | ||||
|          commit id: "4" | ||||
|          checkout nice_feature | ||||
|          branch very_nice_feature | ||||
|          checkout very_nice_feature | ||||
|          commit id: "5" | ||||
|          checkout main | ||||
|          commit id: "6" | ||||
|          checkout nice_feature | ||||
|          commit id: "7" | ||||
|          checkout main | ||||
|          merge nice_feature id: "12345" tag: "my merge commit" | ||||
|          checkout very_nice_feature | ||||
|          commit id: "8" | ||||
|          checkout main | ||||
|          commit id: "9" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('57: should render a simple gitgraph with more than 8 branches &  overriding variables | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': { | ||||
|           'gitBranchLabel0': '#ffffff', | ||||
|           'gitBranchLabel1': '#ffffff', | ||||
|           'gitBranchLabel2': '#ffffff', | ||||
|           'gitBranchLabel3': '#ffffff', | ||||
|           'gitBranchLabel4': '#ffffff', | ||||
|           'gitBranchLabel5': '#ffffff', | ||||
|           'gitBranchLabel6': '#ffffff', | ||||
|           'gitBranchLabel7': '#ffffff', | ||||
|     } } }%% | ||||
|     gitGraph BT: | ||||
|       checkout main | ||||
|       branch branch1 | ||||
|       branch branch2 | ||||
|       branch branch3 | ||||
|       branch branch4 | ||||
|       branch branch5 | ||||
|       branch branch6 | ||||
|       branch branch7 | ||||
|       branch branch8 | ||||
|       branch branch9 | ||||
|       checkout branch1 | ||||
|       commit id: "1" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('58: should render a simple gitgraph with rotated labels | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'gitGraph': { | ||||
|           'rotateCommitLabel': true | ||||
|     } } }%% | ||||
|           gitGraph BT: | ||||
|           commit id: "75f7219e83b321cd3fdde7dcf83bc7c1000a6828" | ||||
|           commit id: "0db4784daf82736dec4569e0dc92980d328c1f2e" | ||||
|           commit id: "7067e9973f9eaa6cd4a4b723c506d1eab598e83e" | ||||
|           commit id: "66972321ad6c199013b5b31f03b3a86fa3f9817d" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('59: should render a simple gitgraph with horizontal labels | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'gitGraph': { | ||||
|           'rotateCommitLabel': false | ||||
|     } } }%% | ||||
|           gitGraph BT: | ||||
|           commit id: "Alpha" | ||||
|           commit id: "Beta" | ||||
|           commit id: "Gamma" | ||||
|           commit id: "Delta" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('60: should render a simple gitgraph with cherry pick commit | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         ` | ||||
|       gitGraph BT: | ||||
|          commit id: "ZERO" | ||||
|          branch develop | ||||
|          commit id:"A" | ||||
|          checkout main | ||||
|          commit id:"ONE" | ||||
|          checkout develop | ||||
|          commit id:"B" | ||||
|          checkout main | ||||
|          commit id:"TWO" | ||||
|          cherry-pick id:"A" | ||||
|          commit id:"THREE" | ||||
|          checkout develop | ||||
|          commit id:"C" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('61: should render a gitgraph with cherry pick commit with custom tag | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         ` | ||||
|       gitGraph BT: | ||||
|          commit id: "ZERO" | ||||
|          branch develop | ||||
|          commit id:"A" | ||||
|          checkout main | ||||
|          commit id:"ONE" | ||||
|          checkout develop | ||||
|          commit id:"B" | ||||
|          checkout main | ||||
|          commit id:"TWO" | ||||
|          cherry-pick id:"A" tag: "snapshot" | ||||
|          commit id:"THREE" | ||||
|          checkout develop | ||||
|          commit id:"C" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('62: should render a gitgraph with cherry pick commit with no tag | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         ` | ||||
|       gitGraph BT: | ||||
|          commit id: "ZERO" | ||||
|          branch develop | ||||
|          commit id:"A" | ||||
|          checkout main | ||||
|          commit id:"ONE" | ||||
|          checkout develop | ||||
|          commit id:"B" | ||||
|          checkout main | ||||
|          commit id:"TWO" | ||||
|          cherry-pick id:"A" tag: "" | ||||
|          commit id:"THREE" | ||||
|          checkout develop | ||||
|          commit id:"C" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('63: should render a simple gitgraph with two cherry pick commit | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         ` | ||||
|       gitGraph BT: | ||||
|          commit id: "ZERO" | ||||
|          branch develop | ||||
|          commit id:"A" | ||||
|          checkout main | ||||
|          commit id:"ONE" | ||||
|          checkout develop | ||||
|          commit id:"B" | ||||
|          branch featureA | ||||
|          commit id:"FIX" | ||||
|          commit id: "FIX-2" | ||||
|          checkout main | ||||
|          commit id:"TWO" | ||||
|          cherry-pick id:"A" | ||||
|          commit id:"THREE" | ||||
|          cherry-pick id:"FIX" | ||||
|          checkout develop | ||||
|          commit id:"C" | ||||
|          merge featureA | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('64: should render commits for more than 8 branches | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         ` | ||||
|         gitGraph BT: | ||||
|         checkout main | ||||
|         %% Make sure to manually set the ID of all commits, for consistent visual tests | ||||
|         commit id: "1-abcdefg" | ||||
|         checkout main | ||||
|         branch branch1 | ||||
|         commit id: "2-abcdefg" | ||||
|         checkout main | ||||
|         merge branch1 | ||||
|         branch branch2 | ||||
|         commit id: "3-abcdefg" | ||||
|         checkout main | ||||
|         merge branch2 | ||||
|         branch branch3 | ||||
|         commit id: "4-abcdefg" | ||||
|         checkout main | ||||
|         merge branch3 | ||||
|         branch branch4 | ||||
|         commit id: "5-abcdefg" | ||||
|         checkout main | ||||
|         merge branch4 | ||||
|         branch branch5 | ||||
|         commit id: "6-abcdefg" | ||||
|         checkout main | ||||
|         merge branch5 | ||||
|         branch branch6 | ||||
|         commit id: "7-abcdefg" | ||||
|         checkout main | ||||
|         merge branch6 | ||||
|         branch branch7 | ||||
|         commit id: "8-abcdefg" | ||||
|         checkout main | ||||
|         merge branch7 | ||||
|         branch branch8 | ||||
|         commit id: "9-abcdefg" | ||||
|         checkout main | ||||
|         merge branch8 | ||||
|         branch branch9 | ||||
|         commit id: "10-abcdefg" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('65: should render a simple gitgraph with three branches,custom merge commit id,tag,type | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|          commit id: "1" | ||||
|          commit id: "2" | ||||
|          branch nice_feature | ||||
|          checkout nice_feature | ||||
|          commit id: "3" | ||||
|          checkout main | ||||
|          commit id: "4" | ||||
|          checkout nice_feature | ||||
|          branch very_nice_feature | ||||
|          checkout very_nice_feature | ||||
|          commit id: "5" | ||||
|          checkout main | ||||
|          commit id: "6" | ||||
|          checkout nice_feature | ||||
|          commit id: "7" | ||||
|          checkout main | ||||
|          merge nice_feature id: "customID" tag: "customTag" type: REVERSE | ||||
|          checkout very_nice_feature | ||||
|          commit id: "8" | ||||
|          checkout main | ||||
|          commit id: "9" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('66: should render a simple gitgraph with a title | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `--- | ||||
|   title: simple gitGraph | ||||
|   --- | ||||
|   gitGraph BT: | ||||
|     commit id: "1-abcdefg" | ||||
|   `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('67: should render a simple gitgraph overlapping commits | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|          commit id:"s1" | ||||
|          commit id:"s2" | ||||
|          branch branch1 | ||||
|          commit id:"s3" | ||||
|          commit id:"s4" | ||||
|          checkout main | ||||
|          commit id:"s5" | ||||
|          checkout branch1 | ||||
|          commit id:"s6" | ||||
|          commit id:"s7" | ||||
|          merge main | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('68: should render a simple gitgraph with two branches from same commit | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|         commit id:"1-abcdefg" | ||||
|         commit id:"2-abcdefg" | ||||
|         branch feature-001 | ||||
|         commit id:"3-abcdefg" | ||||
|         commit id:"4-abcdefg" | ||||
|         checkout main | ||||
|         branch feature-002 | ||||
|         commit id:"5-abcdefg" | ||||
|         checkout feature-001 | ||||
|         merge feature-002 | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('69: should render GitGraph with branch that is not used immediately | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|         commit id:"1-abcdefg" | ||||
|         branch x | ||||
|         checkout main | ||||
|         commit id:"2-abcdefg" | ||||
|         checkout x | ||||
|         commit id:"3-abcdefg" | ||||
|         checkout main | ||||
|         merge x | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('70: should render GitGraph with branch and sub-branch neither of which used immediately | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|         commit id:"1-abcdefg" | ||||
|         branch x | ||||
|         checkout main | ||||
|         commit id:"2-abcdefg" | ||||
|         checkout x | ||||
|         commit id:"3-abcdefg" | ||||
|         checkout main | ||||
|         merge x | ||||
|         checkout x | ||||
|         branch y | ||||
|         checkout x | ||||
|         commit id:"4-abcdefg" | ||||
|         checkout y | ||||
|         commit id:"5-abcdefg" | ||||
|         checkout x | ||||
|         merge y | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('71: should render GitGraph with parallel commits | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|         commit id:"1-abcdefg" | ||||
|         commit id:"2-abcdefg" | ||||
|         branch develop | ||||
|         commit id:"3-abcdefg" | ||||
|         commit id:"4-abcdefg" | ||||
|         checkout main | ||||
|         branch feature | ||||
|         commit id:"5-abcdefg" | ||||
|         commit id:"6-abcdefg" | ||||
|         checkout main | ||||
|         commit id:"7-abcdefg" | ||||
|         commit id:"8-abcdefg" | ||||
|         `, | ||||
|         { gitGraph: { parallelCommits: true } } | ||||
|       ); | ||||
|     }); | ||||
|     it('72: should render GitGraph with unconnected branches and parallel commits | Vertical Branch - Bottom-to-top', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph BT: | ||||
|         branch dev | ||||
|         branch v2 | ||||
|         branch feat | ||||
|         commit id:"1-abcdefg" | ||||
|         commit id:"2-abcdefg" | ||||
|         checkout main | ||||
|         commit id:"3-abcdefg" | ||||
|         checkout dev | ||||
|         commit id:"4-abcdefg" | ||||
|         checkout v2 | ||||
|         commit id:"5-abcdefg" | ||||
|         checkout main | ||||
|         commit id:"6-abcdefg" | ||||
|         `, | ||||
|         { gitGraph: { parallelCommits: true } } | ||||
|       ); | ||||
|     }); | ||||
|     it('73: should render a simple gitgraph with three branches and tagged merge commit using switch instead of checkout', () => { | ||||
|       imgSnapshotTest( | ||||
|         `gitGraph | ||||
|          commit id: "1" | ||||
|          commit id: "2" | ||||
|          branch nice_feature | ||||
|          switch nice_feature | ||||
|          commit id: "3" | ||||
|          switch main | ||||
|          commit id: "4" | ||||
|          switch nice_feature | ||||
|          branch very_nice_feature | ||||
|          switch very_nice_feature | ||||
|          commit id: "5" | ||||
|          switch main | ||||
|          commit id: "6" | ||||
|          switch nice_feature | ||||
|          commit id: "7" | ||||
|          switch main | ||||
|          merge nice_feature id: "12345" tag: "my merge commit" | ||||
|          switch very_nice_feature | ||||
|          commit id: "8" | ||||
|          switch main | ||||
|          commit id: "9" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('74: should render commits for more than 8 branches using switch instead of checkout', () => { | ||||
|       imgSnapshotTest( | ||||
|         ` | ||||
|         gitGraph | ||||
|         switch main | ||||
|         %% Make sure to manually set the ID of all commits, for consistent visual tests | ||||
|         commit id: "1-abcdefg" | ||||
|         switch main | ||||
|         branch branch1 | ||||
|         commit id: "2-abcdefg" | ||||
|         switch main | ||||
|         merge branch1 | ||||
|         branch branch2 | ||||
|         commit id: "3-abcdefg" | ||||
|         switch main | ||||
|         merge branch2 | ||||
|         branch branch3 | ||||
|         commit id: "4-abcdefg" | ||||
|         switch main | ||||
|         merge branch3 | ||||
|         branch branch4 | ||||
|         commit id: "5-abcdefg" | ||||
|         switch main | ||||
|         merge branch4 | ||||
|         branch branch5 | ||||
|         commit id: "6-abcdefg" | ||||
|         switch main | ||||
|         merge branch5 | ||||
|         branch branch6 | ||||
|         commit id: "7-abcdefg" | ||||
|         switch main | ||||
|         merge branch6 | ||||
|         branch branch7 | ||||
|         commit id: "8-abcdefg" | ||||
|         switch main | ||||
|         merge branch7 | ||||
|         branch branch8 | ||||
|         commit id: "9-abcdefg" | ||||
|         switch main | ||||
|         merge branch8 | ||||
|         branch branch9 | ||||
|         commit id: "10-abcdefg" | ||||
|         `, | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
							
								
								
									
										67
									
								
								cypress/integration/rendering/packet.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								cypress/integration/rendering/packet.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | ||||
| import { imgSnapshotTest } from '../../helpers/util'; | ||||
|  | ||||
| describe('packet structure', () => { | ||||
|   it('should render a simple packet diagram', () => { | ||||
|     imgSnapshotTest( | ||||
|       `packet-beta | ||||
|   title Hello world | ||||
|   0-10: "hello" | ||||
| ` | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('should render a complex packet diagram', () => { | ||||
|     imgSnapshotTest( | ||||
|       `packet-beta | ||||
|         0-15: "Source Port" | ||||
|         16-31: "Destination Port" | ||||
|         32-63: "Sequence Number" | ||||
|         64-95: "Acknowledgment Number" | ||||
|         96-99: "Data Offset" | ||||
|         100-105: "Reserved" | ||||
|         106: "URG" | ||||
|         107: "ACK" | ||||
|         108: "PSH" | ||||
|         109: "RST" | ||||
|         110: "SYN" | ||||
|         111: "FIN" | ||||
|         112-127: "Window" | ||||
|         128-143: "Checksum" | ||||
|         144-159: "Urgent Pointer" | ||||
|         160-191: "(Options and Padding)" | ||||
|         192-223: "data" | ||||
|       ` | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('should render a complex packet diagram with showBits false', () => { | ||||
|     imgSnapshotTest( | ||||
|       ` | ||||
|       --- | ||||
|       title: "Packet Diagram" | ||||
|       config: | ||||
|         packet: | ||||
|           showBits: false | ||||
|       --- | ||||
|       packet-beta | ||||
|         0-15: "Source Port" | ||||
|         16-31: "Destination Port" | ||||
|         32-63: "Sequence Number" | ||||
|         64-95: "Acknowledgment Number" | ||||
|         96-99: "Data Offset" | ||||
|         100-105: "Reserved" | ||||
|         106: "URG" | ||||
|         107: "ACK" | ||||
|         108: "PSH" | ||||
|         109: "RST" | ||||
|         110: "SYN" | ||||
|         111: "FIN" | ||||
|         112-127: "Window" | ||||
|         128-143: "Checksum" | ||||
|         144-159: "Urgent Pointer" | ||||
|         160-191: "(Options and Padding)" | ||||
|         192-223: "data" | ||||
|       ` | ||||
|     ); | ||||
|   }); | ||||
| }); | ||||
| @@ -1,4 +1,4 @@ | ||||
| import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts'; | ||||
| import { imgSnapshotTest } from '../../helpers/util.ts'; | ||||
|  | ||||
| describe('Quadrant Chart', () => { | ||||
|   it('should render if only chart type is provided', () => { | ||||
| @@ -226,4 +226,52 @@ describe('Quadrant Chart', () => { | ||||
|     ); | ||||
|     cy.get('svg'); | ||||
|   }); | ||||
|  | ||||
|   it('it should render data points with styles', () => { | ||||
|     imgSnapshotTest( | ||||
|       ` | ||||
|   quadrantChart | ||||
|     title Reach and engagement of campaigns | ||||
|     x-axis Reach --> | ||||
|     y-axis Engagement --> | ||||
|     quadrant-1 We should expand | ||||
|     quadrant-2 Need to promote | ||||
|     quadrant-3 Re-evaluate | ||||
|     quadrant-4 May be improved | ||||
|     Campaign A: [0.3, 0.6] radius: 20 | ||||
|     Campaign B: [0.45, 0.23]     color: #ff0000   | ||||
|     Campaign C: [0.57, 0.69]  stroke-color: #ff00ff   | ||||
|     Campaign D: [0.78, 0.34]        stroke-width: 3px     | ||||
|     Campaign E: [0.40, 0.34] radius: 20,   color: #ff0000  , stroke-color  : #ff00ff,     stroke-width    :   3px    | ||||
|     Campaign F: [0.35, 0.78] stroke-width: 3px , color: #ff0000, radius: 20, stroke-color:     #ff00ff | ||||
|     Campaign G: [0.22, 0.22] stroke-width: 3px  , color: #309708  ,  radius  : 20  ,  stroke-color:    #5060ff | ||||
|     Campaign H: [0.22, 0.44] | ||||
|       `, | ||||
|       {} | ||||
|     ); | ||||
|     cy.get('svg'); | ||||
|   }); | ||||
|  | ||||
|   it('it should render data points with styles + classes', () => { | ||||
|     imgSnapshotTest( | ||||
|       ` | ||||
|   quadrantChart | ||||
|     title Reach and engagement of campaigns | ||||
|     x-axis Reach --> | ||||
|     y-axis Engagement --> | ||||
|     quadrant-1 We should expand | ||||
|     quadrant-2 Need to promote | ||||
|     quadrant-3 Re-evaluate | ||||
|     quadrant-4 May be improved | ||||
|     Campaign A:::class1: [0.3, 0.6] radius: 20 | ||||
|     Campaign B: [0.45, 0.23] color: #ff0000 | ||||
|     Campaign C: [0.57, 0.69] stroke-color: #ff00ff | ||||
|     Campaign D:::class2: [0.78, 0.34] stroke-width: 3px | ||||
|     Campaign E:::class2: [0.40, 0.34] radius: 20, color: #ff0000, stroke-color: #ff00ff, stroke-width: 3px | ||||
|     Campaign F:::class1: [0.35, 0.78] | ||||
|     classDef class1 color: #908342, radius : 10, stroke-color: #310085, stroke-width: 10px | ||||
|     classDef class2 color: #f00fff, radius : 10 | ||||
|     ` | ||||
|     ); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -375,7 +375,7 @@ context('Sequence diagram', () => { | ||||
|         {} | ||||
|       ); | ||||
|     }); | ||||
|     it('should have actor-top and actor-bottom classes on top and bottom actor box and symbol', () => { | ||||
|     it('should have actor-top and actor-bottom classes on top and bottom actor box and symbol and actor-box and actor-man classes for text tags', () => { | ||||
|       imgSnapshotTest( | ||||
|         ` | ||||
|         sequenceDiagram | ||||
| @@ -394,6 +394,9 @@ context('Sequence diagram', () => { | ||||
|       cy.get('.actor-man').should('have.class', 'actor-bottom'); | ||||
|       cy.get('.actor.actor-bottom').should('not.have.class', 'actor-top'); | ||||
|       cy.get('.actor-man.actor-bottom').should('not.have.class', 'actor-top'); | ||||
|  | ||||
|       cy.get('text.actor-box').should('include.text', 'Alice'); | ||||
|       cy.get('text.actor-man').should('include.text', 'Bob'); | ||||
|     }); | ||||
|     it('should render long notes left of actor', () => { | ||||
|       imgSnapshotTest( | ||||
| @@ -807,7 +810,10 @@ context('Sequence diagram', () => { | ||||
|         note left of Alice: config: mirrorActors=true<br/>directive: mirrorActors=false | ||||
|         Bob->>Alice: Short as well | ||||
|       `, | ||||
|         { logLevel: 0, sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' } } | ||||
|         { | ||||
|           logLevel: 0, | ||||
|           sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' }, | ||||
|         } | ||||
|       ); | ||||
|     }); | ||||
|   }); | ||||
| @@ -858,7 +864,10 @@ context('Sequence diagram', () => { | ||||
|         a->>j: Hello John, how are you? | ||||
|         j-->>a: Great! | ||||
|       `, | ||||
|         { logLevel: 0, sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' } } | ||||
|         { | ||||
|           logLevel: 0, | ||||
|           sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' }, | ||||
|         } | ||||
|       ); | ||||
|     }); | ||||
|     it('should support actor links and properties when not mirrored EXPERIMENTAL: USE WITH CAUTION', () => { | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css" | ||||
| @@ -33,7 +33,9 @@ | ||||
|         background-image: radial-gradient(#fff 1%, transparent 11%), | ||||
|           radial-gradient(#fff 1%, transparent 11%); | ||||
|         background-size: 20px 20px; | ||||
|         background-position: 0 0, 10px 10px; | ||||
|         background-position: | ||||
|           0 0, | ||||
|           10px 10px; | ||||
|         background-repeat: repeat; | ||||
|       } | ||||
|       .malware { | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|     <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| <!DOCTYPE html> | ||||
| <!doctype html> | ||||
| <html> | ||||
|   <head> | ||||
|     <meta charset="utf-8" /> | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| <!DOCTYPE html> | ||||
| <!doctype html> | ||||
| <html> | ||||
|   <head> | ||||
|     <meta charset="utf-8" /> | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| <!DOCTYPE html> | ||||
| <!doctype html> | ||||
| <html> | ||||
|   <head> | ||||
|     <meta charset="utf-8" /> | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| <!DOCTYPE html> | ||||
| <!doctype html> | ||||
| <html> | ||||
|   <head> | ||||
|     <meta charset="utf-8" /> | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| <!DOCTYPE html> | ||||
| <!doctype html> | ||||
| <html> | ||||
|   <head> | ||||
|     <meta charset="utf-8" /> | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| <html> | ||||
|   <head> | ||||
|     <meta charset="utf-8" /> | ||||
|     <script src="./viewer.js" type="module"></script> | ||||
|     <script type="module" src="./viewer.js"></script> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|       rel="stylesheet" | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| <!DOCTYPE html> | ||||
| <!doctype html> | ||||
| <html lang="en"> | ||||
|   <head> | ||||
|     <meta charset="UTF-8" /> | ||||
|   | ||||
| @@ -11,8 +11,7 @@ example-diagram | ||||
|     <!-- <script src="//cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js"></script> --> | ||||
|     <!-- <script type="module" src="./external-diagrams-mindmap.mjs" /> --> | ||||
|     <script type="module"> | ||||
|       import exampleDiagram from '../../packages/mermaid-example-diagram/dist/mermaid-example-diagram.core.mjs'; | ||||
|       // import example from '../../packages/mermaid-example-diagram/src/detector'; | ||||
|       import exampleDiagram from './mermaid-example-diagram.esm.mjs'; | ||||
|       import mermaid from './mermaid.esm.mjs'; | ||||
|  | ||||
|       await mermaid.registerExternalDiagrams([exampleDiagram]); | ||||
|   | ||||
							
								
								
									
										28
									
								
								cypress/platform/flow-elk.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								cypress/platform/flow-elk.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| <html> | ||||
|   <body> | ||||
|     <pre class="mermaid"> | ||||
|       flowchart-elk | ||||
|       a[hello] --> b[world] | ||||
|       b --> c{test} | ||||
|       c --> one | ||||
|       c --> two | ||||
|       c --> three | ||||
|     </pre> | ||||
|  | ||||
|     <script type="module"> | ||||
|       import mermaid from './mermaid.esm.mjs'; | ||||
|       import elk from './mermaid-flowchart-elk.esm.min.mjs'; | ||||
|       if (window.location.search.includes('elk')) { | ||||
|         await mermaid.registerExternalDiagrams([elk]); | ||||
|       } | ||||
|       mermaid.initialize({ | ||||
|         logLevel: 3, | ||||
|         startOnLoad: false, | ||||
|       }); | ||||
|       await mermaid.run(); | ||||
|       if (window.Cypress) { | ||||
|         window.rendered = true; | ||||
|       } | ||||
|     </script> | ||||
|   </body> | ||||
| </html> | ||||
							
								
								
									
										775
									
								
								cypress/platform/flowchart-refactor.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										775
									
								
								cypress/platform/flowchart-refactor.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,775 @@ | ||||
| <html> | ||||
|  | ||||
| <head> | ||||
|   <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" /> | ||||
|   <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|   <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" /> | ||||
|   <link href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css" rel="stylesheet" /> | ||||
|   <link href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" rel="stylesheet" /> | ||||
|   <link rel="preconnect" href="https://fonts.googleapis.com" /> | ||||
|   <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> | ||||
|   <link href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&display=swap" rel="stylesheet" /> | ||||
|   <link | ||||
|     href="https://fonts.googleapis.com/css2?family=Caveat:wght@400..700&family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap" | ||||
|     rel="stylesheet" /> | ||||
|   <link href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap" | ||||
|     rel="stylesheet" /> | ||||
|  | ||||
|   <style> | ||||
|     body { | ||||
|       font-family: 'Arial'; | ||||
|     } | ||||
|  | ||||
|     table { | ||||
|       width: 100%; | ||||
|       border-collapse: collapse; | ||||
|       table-layout: fixed; | ||||
|     } | ||||
|  | ||||
|     th, | ||||
|     td { | ||||
|       border: 1px solid black; | ||||
|       padding: 10px; | ||||
|       text-align: center; | ||||
|       vertical-align: middle; | ||||
|     } | ||||
|  | ||||
|     .separator { | ||||
|       height: 20px; | ||||
|       background-color: #f0f0f0; | ||||
|     } | ||||
|  | ||||
|     .vertical-header { | ||||
|       text-align: center; | ||||
|     } | ||||
|  | ||||
|     .collapsible { | ||||
|       background-color: #f9f9f9; | ||||
|       color: #444; | ||||
|       cursor: pointer; | ||||
|       padding: 18px; | ||||
|       width: 100%; | ||||
|       border: none; | ||||
|       text-align: left; | ||||
|       outline: none; | ||||
|       font-size: 15px; | ||||
|     } | ||||
|  | ||||
|     .active, | ||||
|     .collapsible:hover { | ||||
|       background-color: #ccc; | ||||
|     } | ||||
|  | ||||
|     .collapsible:after { | ||||
|       content: '\002B'; | ||||
|       color: #777; | ||||
|       font-weight: bold; | ||||
|       float: right; | ||||
|       margin-left: 2px; | ||||
|     } | ||||
|  | ||||
|     .active:after { | ||||
|       content: "\2212"; | ||||
|     } | ||||
|  | ||||
|     .content { | ||||
|       padding: 0 5px; | ||||
|       max-height: 0; | ||||
|       overflow: hidden; | ||||
|       transition: max-height 0.2s ease-out; | ||||
|       background-color: #f1f1f1; | ||||
|     } | ||||
|  | ||||
|     .content .pre-scrollable { | ||||
|       max-height: 200px; | ||||
|       overflow-y: scroll; | ||||
|     } | ||||
|   </style> | ||||
| </head> | ||||
|  | ||||
| <body> | ||||
|   <table> | ||||
|     <tr> | ||||
|       <th></th> <!-- Placeholder for the top left corner --> | ||||
|       <th>Dagre</th> | ||||
|       <th>Dagre with rough</th> | ||||
|       <th>ELK</th> | ||||
|       <th>ELK with rough</th> | ||||
|     </tr> | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Stadium shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|       flowchart LR | ||||
|     id1([This is the text in the box]) | ||||
|  | ||||
|   </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram1" class="mermaid"> | ||||
| flowchart LR | ||||
|     id1([This is the text in the box]) | ||||
|  | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram2" class="mermaid"> | ||||
| %%{init: {"look": "handdrawn"} }%% | ||||
| flowchart LR | ||||
|     id1([This is the text in the box]) | ||||
|  | ||||
|  | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram3" class="mermaid"> | ||||
| %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
| flowchart LR | ||||
|     id1([This is the text in the box]) | ||||
|  | ||||
|  | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram4" class="mermaid"> | ||||
| %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
| flowchart LR | ||||
|     id1([This is the text in the box]) | ||||
|  | ||||
|  | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Sub-Routine shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|       flowchart LR | ||||
|     id1[[This is the text in the box]] | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram5" class="mermaid"> | ||||
| flowchart LR | ||||
|     id1[[This is the text in the box]] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram6" class="mermaid"> | ||||
| %%{init: {"look": "handdrawn"} }%% | ||||
| flowchart LR | ||||
|     id1[[This is the text in the box]] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram7" class="mermaid"> | ||||
| %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
| flowchart LR | ||||
|     id1[[This is the text in the box]] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram8" class="mermaid"> | ||||
| %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
| flowchart LR | ||||
|     id1[[This is the text in the box]] | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Cylindrical shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart LR | ||||
|     id1[(Database)] | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram9" class="mermaid"> | ||||
|           flowchart LR | ||||
|     id1[(Database)] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram10" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart LR | ||||
|     id1[(Database)] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram11" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1[(Database)] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram12" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1[(Database)] | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Circle shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart LR | ||||
|     id1((This is the text in the circle)) | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram13" class="mermaid"> | ||||
|           flowchart LR | ||||
|     id1((This is the text in the circle)) | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram14" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart LR | ||||
|     id1((This is the text in the circle)) | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram15" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1((This is the text in the circle)) | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram16" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1((This is the text in the circle)) | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Double Circle shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart TD | ||||
|     id1(((This is the text in the circle))) | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram17" class="mermaid"> | ||||
|           flowchart TD | ||||
|     id1(((This is the text in the circle))) | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram18" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart TD | ||||
|     id1(((This is the text in the circle))) | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram19" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart TD | ||||
|     id1(((This is the text in the circle))) | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram20" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart TD | ||||
|     id1(((This is the text in the circle))) | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Asymmetric shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart LR | ||||
|     id1>This is the text in the box] | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram21" class="mermaid"> | ||||
|           flowchart LR | ||||
|     id1>This is the text in the box] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram22" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart LR | ||||
|     id1>This is the text in the box]   | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram23" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1>This is the text in the box]   | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram24" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1>This is the text in the box] | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Rhombus/Diamond/Question shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart LR | ||||
|     id1{This is the text in the box} | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram25" class="mermaid"> | ||||
|           flowchart LR | ||||
|     id1{This is the text in the box} | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram26" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart LR | ||||
|     id1{This is the text in the box} | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram27" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1{This is the text in the box} | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram28" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1{This is the text in the box} | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Hexagon shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart LR | ||||
|     id1{{This is the text in the box}} | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram29" class="mermaid"> | ||||
|           flowchart LR | ||||
|     id1{{This is the text in the box}} | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram30" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart LR | ||||
|     id1{{This is the text in the box}} | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram31" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1{{This is the text in the box}} | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram32" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1{{This is the text in the box}} | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Parallelogram shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart TD | ||||
|     id1[/This is the text in the box/] | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram33" class="mermaid"> | ||||
|           flowchart TD | ||||
|     id1[/This is the text in the box/] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram34" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart TD | ||||
|     id1[/This is the text in the box/]   | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram35" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart TD | ||||
|     id1[/This is the text in the box/]  | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram36" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart TD | ||||
|     id1[/This is the text in the box/] | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header -->   | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Parallelogram Alt shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart TD | ||||
|     id1[\This is the text in the box\] | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram37" class="mermaid"> | ||||
|           flowchart TD | ||||
|     id1[\This is the text in the box\] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram38" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart TD | ||||
|     id1[\This is the text in the box\] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram39" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart TD | ||||
|     id1[\This is the text in the box\] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram40" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart TD | ||||
|     id1[\This is the text in the box\] | ||||
|  | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Trapezoid shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart TD | ||||
|     A[/Christmas\] | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram41" class="mermaid"> | ||||
|           flowchart TD | ||||
|     A[/Christmas\] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram42" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart TD | ||||
|     A[/Christmas\] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram43" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart TD | ||||
|     A[/Christmas\] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram44" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart TD | ||||
|     A[/Christmas\] | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Trapezoid Alt shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart TD | ||||
|     A[\Christmas/] | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram45" class="mermaid"> | ||||
|           flowchart TD | ||||
|     A[\Christmas/] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram46" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart TD | ||||
|     A[\Christmas/] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram47" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart TD | ||||
|     A[\Christmas/] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram48" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart TD | ||||
|     A[\Christmas/]   | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Rect with rounded corner</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart LR | ||||
|     id1(This is the text in the box) | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram49" class="mermaid"> | ||||
|           flowchart LR | ||||
|     id1(This is the text in the box) | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram50" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart LR | ||||
|     id1(This is the text in the box) | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram51" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1(This is the text in the box) | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram52" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1(This is the text in the box)  | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Rect with sharp corner</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|               flowchart LR | ||||
|     id1[This is the text in the box] | ||||
|     </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram53" class="mermaid"> | ||||
|           flowchart LR | ||||
|     id1[This is the text in the box] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram54" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn"} }%% | ||||
|           flowchart LR | ||||
|     id1[This is the text in the box] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram55" class="mermaid"> | ||||
|           %%{init: {"handdrawn": false, "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1[This is the text in the box] | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram56" class="mermaid"> | ||||
|           %%{init: {"look": "handdrawn", "layout": "elk"} }%% | ||||
|           flowchart LR | ||||
|     id1[This is the text in the box] | ||||
|       </pre> | ||||
|       </td> | ||||
|     </tr> | ||||
|     <!-- Separator row --> | ||||
|     <tr class="separator"> | ||||
|       <td colspan="5"></td> <!-- This cell spans all columns including the vertical header --> | ||||
|     </tr> | ||||
|  | ||||
|   </table> | ||||
|  | ||||
|  | ||||
|   <script type="module"> | ||||
|     import mermaid from './mermaid.esm.mjs'; | ||||
|     import { layouts } from './mermaid-layout-elk.esm.mjs'; | ||||
|     mermaid.registerLayoutLoaders(layouts); | ||||
|     mermaid.parseError = function (err, hash) { | ||||
|  | ||||
|     }; | ||||
|  | ||||
|     mermaid.initialize({ | ||||
|       handdrawn: false, | ||||
|       mergeEdges: true, | ||||
|       layout: 'dagre', | ||||
|       flowchart: { titleTopMargin: 10 }, | ||||
|       // fontFamily: 'Caveat', | ||||
|       fontFamily: 'Kalam', | ||||
|       sequence: { | ||||
|         actorFontFamily: 'courier', | ||||
|         noteFontFamily: 'courier', | ||||
|         messageFontFamily: 'courier', | ||||
|       }, | ||||
|       fontSize: 16, | ||||
|       logLevel: 0, | ||||
|     }); | ||||
|     function callback() { | ||||
|       alert('It worked'); | ||||
|     } | ||||
|     mermaid.parseError = function (err, hash) { | ||||
|       console.error('In parse error:'); | ||||
|       console.error(err); | ||||
|     }; | ||||
|  | ||||
|  | ||||
|     let coll = document.getElementsByClassName("collapsible"); | ||||
|     for (const element of coll) { | ||||
|   element.addEventListener("click", function () { | ||||
|         this.classList.toggle("active"); | ||||
|         let content = this.nextElementSibling; | ||||
|         if (content.style.maxHeight) { | ||||
|           content.style.maxHeight = null; | ||||
|         } else { | ||||
|           content.style.maxHeight = content.scrollHeight + "px"; | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
|  | ||||
|   </script> | ||||
| </body> | ||||
|  | ||||
| </html> | ||||
							
								
								
									
										181
									
								
								cypress/platform/flowchart-sate.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								cypress/platform/flowchart-sate.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,181 @@ | ||||
| <html> | ||||
|  | ||||
| <head> | ||||
|   <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" /> | ||||
|   <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|   <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" /> | ||||
|   <link href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css" rel="stylesheet" /> | ||||
|   <link href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" rel="stylesheet" /> | ||||
|   <link rel="preconnect" href="https://fonts.googleapis.com" /> | ||||
|   <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> | ||||
|   <link href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&display=swap" rel="stylesheet" /> | ||||
|   <link | ||||
|     href="https://fonts.googleapis.com/css2?family=Caveat:wght@400..700&family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap" | ||||
|     rel="stylesheet" /> | ||||
|   <link href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap" | ||||
|     rel="stylesheet" /> | ||||
|  | ||||
|   <style> | ||||
|     body { | ||||
|       font-family: 'Arial'; | ||||
|     } | ||||
|  | ||||
|     table { | ||||
|       width: 100%; | ||||
|       border-collapse: collapse; | ||||
|       table-layout: fixed; | ||||
|     } | ||||
|  | ||||
|     th, | ||||
|     td { | ||||
|       border: 1px solid black; | ||||
|       padding: 10px; | ||||
|       text-align: center; | ||||
|       vertical-align: middle; | ||||
|     } | ||||
|  | ||||
|     .separator { | ||||
|       height: 20px; | ||||
|       background-color: #f0f0f0; | ||||
|     } | ||||
|  | ||||
|     .vertical-header { | ||||
|       text-align: center; | ||||
|     } | ||||
|  | ||||
|     .collapsible { | ||||
|       background-color: #f9f9f9; | ||||
|       color: #444; | ||||
|       cursor: pointer; | ||||
|       padding: 18px; | ||||
|       width: 100%; | ||||
|       border: none; | ||||
|       text-align: left; | ||||
|       outline: none; | ||||
|       font-size: 15px; | ||||
|     } | ||||
|  | ||||
|     .active, | ||||
|     .collapsible:hover { | ||||
|       background-color: #ccc; | ||||
|     } | ||||
|  | ||||
|     .collapsible:after { | ||||
|       content: '\002B'; | ||||
|       color: #777; | ||||
|       font-weight: bold; | ||||
|       float: right; | ||||
|       margin-left: 2px; | ||||
|     } | ||||
|  | ||||
|     .active:after { | ||||
|       content: "\2212"; | ||||
|     } | ||||
|  | ||||
|     .content { | ||||
|       padding: 0 5px; | ||||
|       max-height: 0; | ||||
|       overflow: hidden; | ||||
|       transition: max-height 0.2s ease-out; | ||||
|       background-color: #f1f1f1; | ||||
|     } | ||||
|  | ||||
|     .content .pre-scrollable { | ||||
|       max-height: 200px; | ||||
|       overflow-y: scroll; | ||||
|     } | ||||
|   </style> | ||||
| </head> | ||||
|  | ||||
| <body> | ||||
|   <table> | ||||
|     <tr> | ||||
|       <th></th> <!-- Placeholder for the top left corner --> | ||||
|       <th>State rough</th> | ||||
|       <th>Flowchart rough</th> | ||||
|     </tr> | ||||
|     <tr> | ||||
|       <th class="vertical-header"> | ||||
|         <button class="collapsible">Stadium shape</button> | ||||
|         <div class="content"> | ||||
|           <div class="pre-scrollable"> | ||||
|             <pre> | ||||
|       flowchart LR | ||||
|     id1([This is the text in the box]) | ||||
|  | ||||
|   </pre> | ||||
|           </div> | ||||
|       </th> | ||||
|       <td> | ||||
|         <pre id="diagram1" class="mermaid"> | ||||
| %%{init: {"look": "handdrawn"} }%% | ||||
| stateDiagram-v2 | ||||
|     stateA | ||||
|  | ||||
|       </pre> | ||||
|       </td> | ||||
|       <td> | ||||
|         <pre id="diagram2" class="mermaid"> | ||||
| %%{init: {"look": "handdrawn"} }%% | ||||
| flowchart LR | ||||
|     id1[[This is the text in the box]] | ||||
|  | ||||
|  | ||||
|       </pre> | ||||
|       </td> | ||||
|  | ||||
|     </tr> | ||||
|  | ||||
|  | ||||
|   </table> | ||||
|  | ||||
|  | ||||
|   <script type="module"> | ||||
|     import mermaid from './mermaid.esm.mjs'; | ||||
|     import { layouts } from './mermaid-layout-elk.esm.mjs'; | ||||
|     mermaid.registerLayoutLoaders(layouts); | ||||
|     mermaid.parseError = function (err, hash) { | ||||
|  | ||||
|     }; | ||||
|  | ||||
|     mermaid.initialize({ | ||||
|       handdrawn: false, | ||||
|       mergeEdges: true, | ||||
|       layout: 'dagre', | ||||
|       flowchart: { titleTopMargin: 10 }, | ||||
|       // fontFamily: 'Caveat', | ||||
|       fontFamily: 'Kalam', | ||||
|       sequence: { | ||||
|         actorFontFamily: 'courier', | ||||
|         noteFontFamily: 'courier', | ||||
|         messageFontFamily: 'courier', | ||||
|       }, | ||||
|       fontSize: 16, | ||||
|       logLevel: 0, | ||||
|     }); | ||||
|     function callback() { | ||||
|       alert('It worked'); | ||||
|     } | ||||
|     mermaid.parseError = function (err, hash) { | ||||
|       console.error('In parse error:'); | ||||
|       console.error(err); | ||||
|     }; | ||||
|  | ||||
|  | ||||
|     let coll = document.getElementsByClassName("collapsible"); | ||||
|     for (const element of coll) { | ||||
|   element.addEventListener("click", function () { | ||||
|         this.classList.toggle("active"); | ||||
|         let content = this.nextElementSibling; | ||||
|         if (content.style.maxHeight) { | ||||
|           content.style.maxHeight = null; | ||||
|         } else { | ||||
|           content.style.maxHeight = content.scrollHeight + "px"; | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
|  | ||||
|   </script> | ||||
| </body> | ||||
|  | ||||
| </html> | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|     <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|     <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|     <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
							
								
								
									
										29
									
								
								cypress/platform/iife.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								cypress/platform/iife.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| <html> | ||||
|   <body> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
| graph TB | ||||
|       a --> b | ||||
|       a --> c | ||||
|       b --> d | ||||
|       c --> d | ||||
|     </pre> | ||||
|  | ||||
|     <div id="d2"></div> | ||||
|  | ||||
|     <script src="/mermaid.min.js"></script> | ||||
|     <script> | ||||
|       mermaid.initialize({ | ||||
|         startOnLoad: true, | ||||
|       }); | ||||
|       const value = `graph TD\nHello --> World`; | ||||
|       const el = document.getElementById('d2'); | ||||
|       mermaid.render('did', value).then(({ svg }) => { | ||||
|         console.log(svg); | ||||
|         el.innerHTML = svg; | ||||
|         if (window.Cypress) { | ||||
|           window.rendered = true; | ||||
|         } | ||||
|       }); | ||||
|     </script> | ||||
|   </body> | ||||
| </html> | ||||
| @@ -1,4 +1,4 @@ | ||||
| <!DOCTYPE html> | ||||
| <!doctype html> | ||||
| <html> | ||||
|   <head> | ||||
|     <meta charset="utf-8" /> | ||||
| @@ -17,20 +17,20 @@ | ||||
|     graph TB | ||||
|       Function-->URL | ||||
|       click Function clickByFlow "Add a div" | ||||
|       click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" | ||||
|       click URL "http://localhost:9000/info.html" "Visit <strong>mermaid docs</strong>" | ||||
|       </pre> | ||||
|       <pre id="FirstLine" class="mermaid2"> | ||||
|   graph TB | ||||
|     1Function-->2URL | ||||
|     click 1Function clickByFlow "Add a div" | ||||
|     click 2URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>" | ||||
|     click 2URL "http://localhost:9000/info.html" "Visit <strong>mermaid docs</strong>" | ||||
|       </pre> | ||||
|  | ||||
|       <pre id="FirstLine" class="mermaid2"> | ||||
|   classDiagram | ||||
|     class Test | ||||
|     class ShapeLink | ||||
|     link ShapeLink "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link" | ||||
|     link ShapeLink "http://localhost:9000/info.html" "This is a tooltip for a link" | ||||
|     class ShapeCallback | ||||
|     callback ShapeCallback "clickByClass" "This is a tooltip for a callback" | ||||
|       </pre> | ||||
| @@ -42,7 +42,7 @@ | ||||
|       <pre id="FirstLine" class="mermaid"> | ||||
|   classDiagram-v2 | ||||
|     class ShapeLink | ||||
|     link ShapeLink "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link" | ||||
|     link ShapeLink "http://localhost:9000/info.html" "This is a tooltip for a link" | ||||
|       </pre> | ||||
|     </div> | ||||
|  | ||||
| @@ -77,7 +77,7 @@ | ||||
|     Calling a Callback (look at the console log) :cl2, after cl1, 3d | ||||
|     Calling a Callback with args :cl3, after cl1, 3d | ||||
|  | ||||
|     click cl1 href "http://localhost:9000/webpackUsage.html" | ||||
|     click cl1 href "http://localhost:9000/info.html" | ||||
|     click cl2 call clickByGantt() | ||||
|     click cl3 call clickByGantt("test1", test2, test3) | ||||
|  | ||||
| @@ -102,9 +102,15 @@ | ||||
|         div.className = 'created-by-gant-click'; | ||||
|         div.style = 'padding: 20px; background: green; color: white;'; | ||||
|         div.innerText = 'Clicked By Gant'; | ||||
|         if (arg1) div.innerText += ' ' + arg1; | ||||
|         if (arg2) div.innerText += ' ' + arg2; | ||||
|         if (arg3) div.innerText += ' ' + arg3; | ||||
|         if (arg1) { | ||||
|           div.innerText += ' ' + arg1; | ||||
|         } | ||||
|         if (arg2) { | ||||
|           div.innerText += ' ' + arg2; | ||||
|         } | ||||
|         if (arg3) { | ||||
|           div.innerText += ' ' + arg3; | ||||
|         } | ||||
|  | ||||
|         document.getElementsByTagName('body')[0].appendChild(div); | ||||
|       } | ||||
|   | ||||
							
								
								
									
										433
									
								
								cypress/platform/knsv-4442.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										433
									
								
								cypress/platform/knsv-4442.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,433 @@ | ||||
| <html> | ||||
|   <head> | ||||
|     <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" /> | ||||
|     <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css" | ||||
|       rel="stylesheet" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|       rel="stylesheet" | ||||
|     /> | ||||
|     <style> | ||||
|       body { | ||||
|         /* background: rgb(221, 208, 208); */ | ||||
|         /* background:#333; */ | ||||
|         font-family: 'Arial'; | ||||
|         /* font-size: 18px !important; */ | ||||
|       } | ||||
|       h1 { | ||||
|         color: grey; | ||||
|       } | ||||
|       .mermaid2 { | ||||
|         display: none; | ||||
|       } | ||||
|       .mermaid svg { | ||||
|         /* font-size: 18px !important; */ | ||||
|         background-color: #efefef; | ||||
|         background-image: radial-gradient(#fff 51%, transparent 91%), | ||||
|           radial-gradient(#fff 51%, transparent 91%); | ||||
|         background-size: 20px 20px; | ||||
|         background-position: | ||||
|           0 0, | ||||
|           10px 10px; | ||||
|         background-repeat: repeat; | ||||
|       } | ||||
|       .malware { | ||||
|         position: fixed; | ||||
|         bottom: 0; | ||||
|         left: 0; | ||||
|         right: 0; | ||||
|         height: 150px; | ||||
|         background: red; | ||||
|         color: black; | ||||
|         display: flex; | ||||
|         display: flex; | ||||
|         justify-content: center; | ||||
|         align-items: center; | ||||
|         font-family: monospace; | ||||
|         font-size: 72px; | ||||
|       } | ||||
|       /* tspan { | ||||
|         font-size: 6px !important; | ||||
|       } */ | ||||
|     </style> | ||||
|   </head> | ||||
|   <body> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
| stateDiagram-v2 | ||||
|     [*] --> Still | ||||
|     Still --> [*] | ||||
|     Still --> Moving | ||||
|     Moving --> Still | ||||
|     Moving --> Crash | ||||
|     Crash --> [*]    </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart RL | ||||
|     subgraph "`one`" | ||||
|       a1 -- l1 --> a2 | ||||
|       a1 -- l2 --> a2 | ||||
|     end | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
| flowchart RL | ||||
|     subgraph "`one`" | ||||
|       a1 -- l1 --> a2 | ||||
|       a1 -- l2 --> a2 | ||||
|     end | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart | ||||
| id["`A root with a long text that wraps to keep the node size in check. A root with a long text that wraps to keep the node size in check`"]</pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart LR | ||||
|     A[A text that needs to be wrapped wraps to another line] | ||||
|     B[A text that needs to be<br/>wrapped wraps to another line] | ||||
|     C["`A text that needs to be wrapped to another line`"]</pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart LR | ||||
|     C["`A text | ||||
|         that needs | ||||
|         to be wrapped | ||||
|         in another | ||||
|         way`"] | ||||
|   </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid"> | ||||
|       classDiagram-v2 | ||||
|         note "I love this diagram!\nDo you love it?" | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
|     stateDiagram-v2 | ||||
|     State1: The state with a note with minus - and plus + in it | ||||
|     note left of State1 | ||||
|       Important information! You can write | ||||
|       notes with . and  in them. | ||||
|     end note    </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| mindmap | ||||
| root | ||||
|   Child3(A node with an icon and with a long text that wraps to keep the node size in check) | ||||
| </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       %%{init: {"theme": "forest"} }%% | ||||
| mindmap | ||||
|     id1[**Start2**<br/>end] | ||||
|       id2[**Start2**<br />end] | ||||
|       %% Another comment | ||||
|       id3[**Start2**<br>end] %% Comment | ||||
|       id4[**Start2**<br >end<br    >the very end] | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| mindmap | ||||
|     id1["`**Start2** | ||||
|     second line 😎 with long text that is wrapping to the next line`"] | ||||
|       id2["`Child **with bold** text`"] | ||||
|       id3["`Children of which some | ||||
|       is using *italic type of* text`"] | ||||
|       id4[Child] | ||||
|       id5["`Child | ||||
|       Row | ||||
|       and another | ||||
|       `"] | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| mindmap | ||||
|     id1("`**Root**`"] | ||||
|       id2["`A formatted text... with **bold** and *italics*`"] | ||||
|       id3[Regular labels works as usual] | ||||
|       id4["`Emojis and unicode works too: 🤓 | ||||
|       शान्तिः سلام  和平 `"] | ||||
|  | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
| %%{init: {"flowchart": {"defaultRenderer": "elk"}} }%% | ||||
| flowchart TB | ||||
|   %% I could not figure out how to use double quotes in labels in Mermaid | ||||
|   subgraph ibm[IBM Espresso CPU] | ||||
|     core0[IBM PowerPC Broadway Core 0] | ||||
|     core1[IBM PowerPC Broadway Core 1] | ||||
|     core2[IBM PowerPC Broadway Core 2] | ||||
|  | ||||
|     rom[16 KB ROM] | ||||
|  | ||||
|     core0 --- core2 | ||||
|  | ||||
|     rom --> core2 | ||||
|   end | ||||
|  | ||||
|   subgraph amd["`**AMD** Latte GPU`"] | ||||
|     mem[Memory & I/O Bridge] | ||||
|     dram[DRAM Controller] | ||||
|     edram[32 MB EDRAM MEM1] | ||||
|     rom[512 B SEEPROM] | ||||
|  | ||||
|     sata[SATA IF] | ||||
|     exi[EXI] | ||||
|  | ||||
|     subgraph gx[GX] | ||||
|       sram[3 MB 1T-SRAM] | ||||
|     end | ||||
|  | ||||
|     radeon[AMD Radeon R7xx GX2] | ||||
|  | ||||
|     mem --- gx | ||||
|     mem --- radeon | ||||
|  | ||||
|     rom --- mem | ||||
|  | ||||
|     mem --- sata | ||||
|     mem --- exi | ||||
|  | ||||
|     dram --- sata | ||||
|     dram --- exi | ||||
|   end | ||||
|  | ||||
|   ddr3[2 GB DDR3 RAM MEM2] | ||||
|  | ||||
|   mem --- ddr3 | ||||
|   dram --- ddr3 | ||||
|   edram --- ddr3 | ||||
|  | ||||
|   core1 --- mem | ||||
|  | ||||
|   exi --- rtc | ||||
|   rtc{{rtc}} | ||||
| </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| %%{init: {"flowchart": {"defaultRenderer": "elk", "htmlLabels": false}} }%% | ||||
| flowchart TB | ||||
|   %% I could not figure out how to use double quotes in labels in Mermaid | ||||
|   subgraph ibm[IBM Espresso CPU] | ||||
|     core0[IBM PowerPC Broadway Core 0] | ||||
|     core1[IBM PowerPC Broadway Core 1] | ||||
|     core2[IBM PowerPC Broadway Core 2] | ||||
|  | ||||
|     rom[16 KB ROM] | ||||
|  | ||||
|     core0 --- core2 | ||||
|  | ||||
|     rom --> core2 | ||||
|   end | ||||
|  | ||||
|   subgraph amd["`**AMD** Latte GPU`"] | ||||
|     mem[Memory & I/O Bridge] | ||||
|     dram[DRAM Controller] | ||||
|     edram[32 MB EDRAM MEM1] | ||||
|     rom[512 B SEEPROM] | ||||
|  | ||||
|     sata[SATA IF] | ||||
|     exi[EXI] | ||||
|  | ||||
|     subgraph gx[GX] | ||||
|       sram[3 MB 1T-SRAM] | ||||
|     end | ||||
|  | ||||
|     radeon[AMD Radeon R7xx GX2] | ||||
|  | ||||
|     mem --- gx | ||||
|     mem --- radeon | ||||
|  | ||||
|     rom --- mem | ||||
|  | ||||
|     mem --- sata | ||||
|     mem --- exi | ||||
|  | ||||
|     dram --- sata | ||||
|     dram --- exi | ||||
|   end | ||||
|  | ||||
|   ddr3[2 GB DDR3 RAM MEM2] | ||||
|  | ||||
|   mem --- ddr3 | ||||
|   dram --- ddr3 | ||||
|   edram --- ddr3 | ||||
|  | ||||
|   core1 --- mem | ||||
|  | ||||
|   exi --- rtc | ||||
|   rtc{{rtc}} | ||||
| </pre | ||||
|     > | ||||
|  | ||||
|     <br /> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart TB | ||||
|   %% I could not figure out how to use double quotes in labels in Mermaid | ||||
|   subgraph ibm[IBM Espresso CPU] | ||||
|     core0[IBM PowerPC Broadway Core 0] | ||||
|     core1[IBM PowerPC Broadway Core 1] | ||||
|     core2[IBM PowerPC Broadway Core 2] | ||||
|  | ||||
|     rom[16 KB ROM] | ||||
|  | ||||
|     core0 --- core2 | ||||
|  | ||||
|     rom --> core2 | ||||
|   end | ||||
|  | ||||
|   subgraph amd[AMD Latte GPU] | ||||
|     mem[Memory & I/O Bridge] | ||||
|     dram[DRAM Controller] | ||||
|     edram[32 MB EDRAM MEM1] | ||||
|     rom[512 B SEEPROM] | ||||
|  | ||||
|     sata[SATA IF] | ||||
|     exi[EXI] | ||||
|  | ||||
|     subgraph gx[GX] | ||||
|       sram[3 MB 1T-SRAM] | ||||
|     end | ||||
|  | ||||
|     radeon[AMD Radeon R7xx GX2] | ||||
|  | ||||
|     mem --- gx | ||||
|     mem --- radeon | ||||
|  | ||||
|     rom --- mem | ||||
|  | ||||
|     mem --- sata | ||||
|     mem --- exi | ||||
|  | ||||
|     dram --- sata | ||||
|     dram --- exi | ||||
|   end | ||||
|  | ||||
|   ddr3[2 GB DDR3 RAM MEM2] | ||||
|  | ||||
|   mem --- ddr3 | ||||
|   dram --- ddr3 | ||||
|   edram --- ddr3 | ||||
|  | ||||
|   core1 --- mem | ||||
|  | ||||
|   exi --- rtc | ||||
|   rtc{{rtc}} | ||||
| </pre | ||||
|     > | ||||
|     <br /> | ||||
|       | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       flowchart LR | ||||
|   B1 --be be--x B2 | ||||
|   B1 --bo bo--o B3 | ||||
|   subgraph Ugge | ||||
|       B2 | ||||
|       B3 | ||||
|       subgraph inner | ||||
|           B4 | ||||
|           B5 | ||||
|       end | ||||
|       subgraph inner2 | ||||
|         subgraph deeper | ||||
|           C4 | ||||
|           C5 | ||||
|         end | ||||
|         C6 | ||||
|       end | ||||
|  | ||||
|       B4 --> C4 | ||||
|  | ||||
|       B3 -- X --> B4 | ||||
|       B2 --> inner | ||||
|  | ||||
|       C4 --> C5 | ||||
|   end | ||||
|  | ||||
|   subgraph outer | ||||
|       B6 | ||||
|   end | ||||
|   B6 --> B5 | ||||
|   </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| sequenceDiagram | ||||
|     Customer->>+Stripe: Makes a payment request | ||||
|     Stripe->>+Bank: Forwards the payment request to the bank | ||||
|     Bank->>+Customer: Asks for authorization | ||||
|     Customer->>+Bank: Provides authorization | ||||
|     Bank->>+Stripe: Sends a response with payment details | ||||
|     Stripe->>+Merchant: Sends a notification of payment receipt | ||||
|     Merchant->>+Stripe: Confirms the payment | ||||
|     Stripe->>+Customer: Sends a confirmation of payment | ||||
|     Customer->>+Merchant: Receives goods or services | ||||
|         </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| mindmap | ||||
|   root((mindmap)) | ||||
|     Origins | ||||
|       Long history | ||||
|       ::icon(fa fa-book) | ||||
|       Popularisation | ||||
|         British popular psychology author Tony Buzan | ||||
|     Research | ||||
|       On effectiveness<br/>and features | ||||
|       On Automatic creation | ||||
|         Uses | ||||
|             Creative techniques | ||||
|             Strategic planning | ||||
|             Argument mapping | ||||
|     Tools | ||||
|       Pen and paper | ||||
|       Mermaid | ||||
|     </pre> | ||||
|     <br /> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|   example-diagram | ||||
|     </pre> | ||||
|  | ||||
|     <!-- <div id="cy"></div> --> | ||||
|     <!-- <script src="http://localhost:9000/packages/mermaid-mindmap/dist/mermaid-mindmap-detector.js"></script> --> | ||||
|     <!-- <script src="./mermaid-example-diagram-detector.js"></script>    --> | ||||
|     <!-- <script src="//cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js"></script> --> | ||||
|     <!-- <script src="./mermaid.js"></script> --> | ||||
|  | ||||
|     <scrpt> | ||||
|       // import mindmap from '../../packages/mermaid-mindmap/src/detector'; // import example from | ||||
|       '../../packages/mermaid-example-diagram/src/mermaid-example-diagram.core.mjs'; import mermaid | ||||
|       from './mermaid.esm.mjs'; // await mermaid.registerExternalDiagrams([example]); | ||||
|       mermaid.parseError = function (err, hash) { // console.error('Mermaid error: ', err); }; | ||||
|       mermaid.initialize({ // theme: 'forest', startOnLoad: true, logLevel: 0, flowchart: { // | ||||
|       defaultRenderer: 'elk', useMaxWidth: false, // htmlLabels: false, htmlLabels: true, }, // | ||||
|       htmlLabels: false, gantt: { useMaxWidth: false, }, useMaxWidth: false, }); function callback() | ||||
|       { alert('It worked'); } mermaid.parseError = function (err, hash) { console.error('In parse | ||||
|       error:'); console.error(err); }; // mermaid.test1('first_slow', 1200).then((r) => | ||||
|       console.info(r)); // mermaid.test1('second_fast', 200).then((r) => console.info(r)); // | ||||
|       mermaid.test1('third_fast', 200).then((r) => console.info(r)); // mermaid.test1('forth_slow', | ||||
|       1200).then((r) => console.info(r)); | ||||
|     </scrpt> | ||||
|     <script | ||||
|       type="text/javascript" | ||||
|       src="https://cdn.jsdelivr.net/npm/mermaid@10.2.0/dist/mermaid.min.js" | ||||
|     ></script> | ||||
|     <script type="module"> | ||||
|       import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.2.0/dist/mermaid.min.js'; | ||||
|       (function () { | ||||
|         mermaid.initialize({ startOnLoad: false }); | ||||
|         const elements = document.getElementsByClassName('mermaid'); | ||||
|         console.log(elements); | ||||
|         let id = 0; | ||||
|         [...elements].forEach((elem) => { | ||||
|           const insertSvg = function (svgCode) { | ||||
|             elem.innerHTML = svgCode; | ||||
|           }; | ||||
|  | ||||
|           console.log(atob(elem.innerText)); | ||||
|  | ||||
|           mermaid.render(`graphDiv-${id++}`, atob(elem.innerText), insertSvg); | ||||
|         }); | ||||
|       })(); | ||||
|     </script> | ||||
|   </body> | ||||
| </html> | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css" | ||||
|   | ||||
| @@ -14,33 +14,45 @@ | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|       rel="stylesheet" | ||||
|     /> | ||||
|     <link rel="preconnect" href="https://fonts.googleapis.com" /> | ||||
|     <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&display=swap" | ||||
|       rel="stylesheet" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css2?family=Caveat:wght@400..700&family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap" | ||||
|       rel="stylesheet" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap" | ||||
|       rel="stylesheet" | ||||
|     /> | ||||
|  | ||||
|     <style> | ||||
|       body { | ||||
|         /* background: rgb(221, 208, 208); */ | ||||
|         background: #333; | ||||
|         /* background: #333; */ | ||||
|         font-family: 'Arial'; | ||||
|         /* font-size: 18px !important; */ | ||||
|       } | ||||
|       h1 { | ||||
|         color: grey; | ||||
|       } | ||||
|       .mermaid { | ||||
|         border: 1px solid #ddd; | ||||
|         margin: 10px; | ||||
|       } | ||||
|       .mermaid2 { | ||||
|         display: none; | ||||
|       } | ||||
|       .mermaid svg { | ||||
|         /* font-size: 18px !important; */ | ||||
|         /* background-color: #efefef; */ | ||||
|         background-color: #333; | ||||
|         background-image: radial-gradient(#333 51%, transparent 91%), | ||||
|           radial-gradient(#333 51%, transparent 91%); | ||||
|  | ||||
|         /* background-color: #efefef; | ||||
|         background-image: radial-gradient(#fff 51%, transparent 91%), | ||||
|           radial-gradient(#fff 51%, transparent 91%); | ||||
|         background-size: 20px 20px; | ||||
|         background-position: 0 0, 10px 10px; | ||||
|         background-repeat: repeat; | ||||
|         border: 2px solid rgb(131, 142, 205); | ||||
|         background-position: | ||||
|           0 0, | ||||
|           10px 10px; | ||||
|         background-repeat: repeat; */ | ||||
|       } | ||||
|       .malware { | ||||
|         position: fixed; | ||||
| @@ -58,544 +70,202 @@ | ||||
|         font-size: 72px; | ||||
|       } | ||||
|       /* tspan { | ||||
|         font-size: 6px !important; | ||||
|       } */ | ||||
|               font-size: 6px !important; | ||||
|             } */ | ||||
|     </style> | ||||
|   </head> | ||||
|   <body> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
|       block-beta | ||||
|   blockArrowId<["Label"]>(right) | ||||
|   blockArrowId2<["Label"]>(left) | ||||
|   blockArrowId3<["Label"]>(up) | ||||
|   blockArrowId4<["Label"]>(down) | ||||
|   blockArrowId5<["Label"]>(x) | ||||
|   blockArrowId6<["Label"]>(y) | ||||
|   blockArrowId6<["Label"]>(x, down) | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
| block-beta | ||||
|   block:e:4 | ||||
|     columns 2 | ||||
|       f | ||||
|       g | ||||
|   end | ||||
|  | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
| block-beta | ||||
|   block:e:4 | ||||
|     columns 2 | ||||
|       f | ||||
|       g | ||||
|       h | ||||
|   end | ||||
|  | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
| block-beta | ||||
|   columns 4 | ||||
|   a b c d | ||||
|   block:e:4 | ||||
|     columns 2 | ||||
|       f | ||||
|       g | ||||
|       h | ||||
|   end | ||||
|   i:4 | ||||
|  | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart LR | ||||
|   X-- "y" -->z | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
| columns 5 | ||||
|    A space B | ||||
|    A --x B | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
| columns 3 | ||||
|   a["A wide one"] b:2 c:2 d | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
|   block:e | ||||
|       f | ||||
|   end | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
|   columns 3 | ||||
|   a:3 | ||||
|   block:e:3 | ||||
|       f | ||||
|   end | ||||
|   g | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
|   columns 3 | ||||
|   a:3 | ||||
|   block:e:3 | ||||
|       f | ||||
|       g | ||||
|   end | ||||
|   h | ||||
|   i | ||||
|   j | ||||
|  | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
| columns 3 | ||||
|   a b:2 | ||||
|   block:e:3 | ||||
|       f | ||||
|   end | ||||
|   g h i | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
| block-beta | ||||
| columns 3 | ||||
|   a b c | ||||
|   e:3 | ||||
|   f g h | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
| block-beta | ||||
| columns 1 | ||||
|   db(("DB")) | ||||
|   blockArrowId6<["   "]>(down) | ||||
|   block:ID | ||||
|     A | ||||
|     B["A wide one in the middle"] | ||||
|     C | ||||
|   end | ||||
|   space | ||||
|   D | ||||
|   ID --> D | ||||
|   C --> D | ||||
|   style B fill:#f9F,stroke:#333,stroke-width:4px | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid"> | ||||
| block-beta | ||||
|   columns 5 | ||||
|   A1:3 | ||||
|   A2:1 | ||||
|   A3 | ||||
|   B1 B2 B3:3 | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
|   block | ||||
|     D | ||||
|     E | ||||
|   end | ||||
|   db("This is the text in the box") | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
|  | ||||
|       block | ||||
|         D | ||||
|       end | ||||
|       A["A: I am a wide one"] | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
|     A["square"] | ||||
|     B("rounded") | ||||
|     C(("circle")) | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
|     A>"rect_left_inv_arrow"] | ||||
|     B{"diamond"} | ||||
|     C{{"hexagon"}} | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
|     A(["stadium"]) | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
|     %% A[["subroutine"]] | ||||
|     %% B[("cylinder")] | ||||
|     C>"surprise"] | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| block-beta | ||||
|     A[/"lean right"/] | ||||
|     B[\"lean left"\] | ||||
|     C[/"trapezoid"\] | ||||
|     D[\"trapezoid"/] | ||||
|     </pre> | ||||
|  | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart | ||||
|       B | ||||
|       style B fill:#f9F,stroke:#333,stroke-width:4px | ||||
|     </pre> | ||||
|  | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       flowchart LR | ||||
|       a1 -- apa --> b1 | ||||
|     </pre> | ||||
|  | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart RL | ||||
|   subgraph "`one`" | ||||
|     id | ||||
|   end | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart RL | ||||
|     subgraph "`one`" | ||||
|       a1 -- l1 --> a2 | ||||
|       a1 -- l2 --> a2 | ||||
|     end | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart | ||||
| id["`A root with a long text that wraps to keep the node size in check. A root with a long text that wraps to keep the node size in check`"]</pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart LR | ||||
|     A[A text that needs to be wrapped wraps to another line] | ||||
|     B[A text that needs to be<br/>wrapped wraps to another line] | ||||
|     C["`A text that needs to be wrapped to another line`"]</pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart LR | ||||
|     C["`A text | ||||
|         that needs | ||||
|         to be wrapped | ||||
|         in another | ||||
|         way`"] | ||||
|   </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       classDiagram-v2 | ||||
|         note "I love this diagram!\nDo you love it?" | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|     stateDiagram-v2 | ||||
|     State1: The state with a note with minus - and plus + in it | ||||
|     note left of State1 | ||||
|       Important information! You can write | ||||
|       notes with . and  in them. | ||||
|     end note    </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| mindmap | ||||
| root | ||||
|   Child3(A node with an icon and with a long text that wraps to keep the node size in check) | ||||
| </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       %%{init: {"theme": "forest"} }%% | ||||
| mindmap | ||||
|     id1[**Start2**<br/>end] | ||||
|       id2[**Start2**<br />end] | ||||
|       %% Another comment | ||||
|       id3[**Start2**<br>end] %% Comment | ||||
|       id4[**Start2**<br >end<br    >the very end] | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| mindmap | ||||
|     id1["`**Start2** | ||||
|     second line 😎 with long text that is wrapping to the next line`"] | ||||
|       id2["`Child **with bold** text`"] | ||||
|       id3["`Children of which some | ||||
|       is using *italic type of* text`"] | ||||
|       id4[Child] | ||||
|       id5["`Child | ||||
|       Row | ||||
|       and another | ||||
|       `"] | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| mindmap | ||||
|     id1("`**Root**`"] | ||||
|       id2["`A formatted text... with **bold** and *italics*`"] | ||||
|       id3[Regular labels works as usual] | ||||
|       id4["`Emojis and unicode works too: 🤓 | ||||
|       शान्तिः سلام  和平 `"] | ||||
|  | ||||
|     </pre> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| %%{init: {"flowchart": {"defaultRenderer": "elk"}} }%% | ||||
| flowchart TB | ||||
|   %% I could not figure out how to use double quotes in labels in Mermaid | ||||
|   subgraph ibm[IBM Espresso CPU] | ||||
|     core0[IBM PowerPC Broadway Core 0] | ||||
|     core1[IBM PowerPC Broadway Core 1] | ||||
|     core2[IBM PowerPC Broadway Core 2] | ||||
|  | ||||
|     rom[16 KB ROM] | ||||
|  | ||||
|     core0 --- core2 | ||||
|  | ||||
|     rom --> core2 | ||||
|   end | ||||
|  | ||||
|   subgraph amd["`**AMD** Latte GPU`"] | ||||
|     mem[Memory & I/O Bridge] | ||||
|     dram[DRAM Controller] | ||||
|     edram[32 MB EDRAM MEM1] | ||||
|     rom[512 B SEEPROM] | ||||
|  | ||||
|     sata[SATA IF] | ||||
|     exi[EXI] | ||||
|  | ||||
|     subgraph gx[GX] | ||||
|       sram[3 MB 1T-SRAM] | ||||
|     end | ||||
|  | ||||
|     radeon[AMD Radeon R7xx GX2] | ||||
|  | ||||
|     mem --- gx | ||||
|     mem --- radeon | ||||
|  | ||||
|     rom --- mem | ||||
|  | ||||
|     mem --- sata | ||||
|     mem --- exi | ||||
|  | ||||
|     dram --- sata | ||||
|     dram --- exi | ||||
|   end | ||||
|  | ||||
|   ddr3[2 GB DDR3 RAM MEM2] | ||||
|  | ||||
|   mem --- ddr3 | ||||
|   dram --- ddr3 | ||||
|   edram --- ddr3 | ||||
|  | ||||
|   core1 --- mem | ||||
|  | ||||
|   exi --- rtc | ||||
|   rtc{{rtc}} | ||||
| </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| %%{init: {"flowchart": {"defaultRenderer": "elk", "htmlLabels": false}} }%% | ||||
| flowchart TB | ||||
|   %% I could not figure out how to use double quotes in labels in Mermaid | ||||
|   subgraph ibm[IBM Espresso CPU] | ||||
|     core0[IBM PowerPC Broadway Core 0] | ||||
|     core1[IBM PowerPC Broadway Core 1] | ||||
|     core2[IBM PowerPC Broadway Core 2] | ||||
|  | ||||
|     rom[16 KB ROM] | ||||
|  | ||||
|     core0 --- core2 | ||||
|  | ||||
|     rom --> core2 | ||||
|   end | ||||
|  | ||||
|   subgraph amd["`**AMD** Latte GPU`"] | ||||
|     mem[Memory & I/O Bridge] | ||||
|     dram[DRAM Controller] | ||||
|     edram[32 MB EDRAM MEM1] | ||||
|     rom[512 B SEEPROM] | ||||
|  | ||||
|     sata[SATA IF] | ||||
|     exi[EXI] | ||||
|  | ||||
|     subgraph gx[GX] | ||||
|       sram[3 MB 1T-SRAM] | ||||
|     end | ||||
|  | ||||
|     radeon[AMD Radeon R7xx GX2] | ||||
|  | ||||
|     mem --- gx | ||||
|     mem --- radeon | ||||
|  | ||||
|     rom --- mem | ||||
|  | ||||
|     mem --- sata | ||||
|     mem --- exi | ||||
|  | ||||
|     dram --- sata | ||||
|     dram --- exi | ||||
|   end | ||||
|  | ||||
|   ddr3[2 GB DDR3 RAM MEM2] | ||||
|  | ||||
|   mem --- ddr3 | ||||
|   dram --- ddr3 | ||||
|   edram --- ddr3 | ||||
|  | ||||
|   core1 --- mem | ||||
|  | ||||
|   exi --- rtc | ||||
|   rtc{{rtc}} | ||||
| </pre | ||||
|     > | ||||
|  | ||||
|     <br /> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| flowchart TB | ||||
|   %% I could not figure out how to use double quotes in labels in Mermaid | ||||
|   subgraph ibm[IBM Espresso CPU] | ||||
|     core0[IBM PowerPC Broadway Core 0] | ||||
|     core1[IBM PowerPC Broadway Core 1] | ||||
|     core2[IBM PowerPC Broadway Core 2] | ||||
|  | ||||
|     rom[16 KB ROM] | ||||
|  | ||||
|     core0 --- core2 | ||||
|  | ||||
|     rom --> core2 | ||||
|   end | ||||
|  | ||||
|   subgraph amd[AMD Latte GPU] | ||||
|     mem[Memory & I/O Bridge] | ||||
|     dram[DRAM Controller] | ||||
|     edram[32 MB EDRAM MEM1] | ||||
|     rom[512 B SEEPROM] | ||||
|  | ||||
|     sata[SATA IF] | ||||
|     exi[EXI] | ||||
|  | ||||
|     subgraph gx[GX] | ||||
|       sram[3 MB 1T-SRAM] | ||||
|     end | ||||
|  | ||||
|     radeon[AMD Radeon R7xx GX2] | ||||
|  | ||||
|     mem --- gx | ||||
|     mem --- radeon | ||||
|  | ||||
|     rom --- mem | ||||
|  | ||||
|     mem --- sata | ||||
|     mem --- exi | ||||
|  | ||||
|     dram --- sata | ||||
|     dram --- exi | ||||
|   end | ||||
|  | ||||
|   ddr3[2 GB DDR3 RAM MEM2] | ||||
|  | ||||
|   mem --- ddr3 | ||||
|   dram --- ddr3 | ||||
|   edram --- ddr3 | ||||
|  | ||||
|   core1 --- mem | ||||
|  | ||||
|   exi --- rtc | ||||
|   rtc{{rtc}} | ||||
| </pre | ||||
|     > | ||||
|     <br /> | ||||
|       | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       flowchart LR | ||||
|   B1 --be be--x B2 | ||||
|   B1 --bo bo--o B3 | ||||
|   subgraph Ugge | ||||
|       B2 | ||||
|       B3 | ||||
|       subgraph inner | ||||
|           B4 | ||||
|           B5 | ||||
|       end | ||||
|       subgraph inner2 | ||||
|         subgraph deeper | ||||
|           C4 | ||||
|           C5 | ||||
|         end | ||||
|         C6 | ||||
|       end | ||||
|  | ||||
|       B4 --> C4 | ||||
|  | ||||
|       B3 -- X --> B4 | ||||
|       B2 --> inner | ||||
|  | ||||
|       C4 --> C5 | ||||
|   end | ||||
|  | ||||
|   subgraph outer | ||||
|       B6 | ||||
|   end | ||||
|   B6 --> B5 | ||||
|   </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| %%{ | ||||
|   init: { | ||||
|   "theme":"base", | ||||
|   "fontFamily": "Kalam", | ||||
|   "themeVariables": { | ||||
|     "background": "#FFFFFF", | ||||
|     "primaryColor": "#7bdfa7", | ||||
|     "primaryTextColor": "#3c3c3b", | ||||
|     "secondaryColor": "#642470", | ||||
|     "secondaryTextColor": "#3c3c3b", | ||||
|     "tertiaryColor": "#1c736D", | ||||
|     "tertiaryTextColor": "#3c3c3b", | ||||
|     "noteBkgColor": "#9fd8ef", | ||||
|     "loopTextColor": "#636362", | ||||
|     "labelBoxBkgColor": "#642470", | ||||
|     "labelBoxBorderColor": "#642470", | ||||
|     "labelTextColor": "#d4d4d4", | ||||
|     "signalTextColor": "#636362", | ||||
|     "signalColor": "#642470" | ||||
|   } | ||||
|   } | ||||
| }%% | ||||
| sequenceDiagram | ||||
|     Customer->>+Stripe: Makes a payment request | ||||
|     Stripe->>+Bank: Forwards the payment request to the bank | ||||
|     Bank->>+Customer: Asks for authorization | ||||
|     Customer->>+Bank: Provides authorization | ||||
|     Bank->>+Stripe: Sends a response with payment details | ||||
|     Stripe->>+Merchant: Sends a notification of payment receipt | ||||
|     Merchant->>+Stripe: Confirms the payment | ||||
|     Stripe->>+Customer: Sends a confirmation of payment | ||||
|     Customer->>+Merchant: Receives goods or services | ||||
|         </pre | ||||
|     Alice->>+John: Hello John, how are you? | ||||
|     Alice->>+John: John, can you hear me? | ||||
|     John-->>-Alice: Hi Alice, I can hear you! | ||||
|     John-->>-Alice: I feel great! | ||||
|       </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| mindmap | ||||
|   root((mindmap)) | ||||
|     Origins | ||||
|       Long history | ||||
|       ::icon(fa fa-book) | ||||
|       Popularisation | ||||
|         British popular psychology author Tony Buzan | ||||
|     Research | ||||
|       On effectiveness<br/>and features | ||||
|       On Automatic creation | ||||
|         Uses | ||||
|             Creative techniques | ||||
|             Strategic planning | ||||
|             Argument mapping | ||||
|     Tools | ||||
|       Pen and paper | ||||
|       Mermaid | ||||
|     </pre> | ||||
|     <br /> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|   example-diagram | ||||
|     </pre> | ||||
| %%{ | ||||
|   init: { | ||||
|     "theme":"base", | ||||
|   "fontFamily": "Forth Bold", | ||||
|   "themeVariables": { | ||||
|     "background": "#FFFFFF", | ||||
|     "primaryColor": "#7bdfa7", | ||||
|     "primaryTextColor": "#3c3c3b", | ||||
|     "secondaryColor": "#642470", | ||||
|     "secondaryTextColor": "#3c3c3b", | ||||
|     "tertiaryColor": "#1c736D", | ||||
|     "tertiaryTextColor": "#3c3c3b", | ||||
|     "noteBkgColor": "#9fd8ef", | ||||
|     "loopTextColor": "#636362", | ||||
|     "labelBoxBkgColor": "#642470", | ||||
|     "labelBoxBorderColor": "#642470", | ||||
|     "labelTextColor": "#d4d4d4", | ||||
|     "signalTextColor": "#636362", | ||||
|     "signalColor": "#642470" | ||||
|   } | ||||
|   } | ||||
| }%% | ||||
| sequenceDiagram | ||||
|     Alice->>+John: Hello John, how are you? | ||||
|     Alice->>+John: John, can you hear me? | ||||
|     John-->>-Alice: Hi Alice, I can hear you! | ||||
|     John-->>-Alice: I feel great! | ||||
|       </pre | ||||
|     > | ||||
|  | ||||
|     <!-- <div id="cy"></div> --> | ||||
|     <!-- <script src="http://localhost:9000/packages/mermaid-mindmap/dist/mermaid-mindmap-detector.js"></script> --> | ||||
|     <!-- <script src="./mermaid-example-diagram-detector.js"></script>    --> | ||||
|     <!-- <script src="//cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js"></script> --> | ||||
|     <!-- <script src="./mermaid.js"></script> --> | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       %%{init: {"layout": "elk", "mergeEdges": true} }%% | ||||
| stateDiagram | ||||
|       A --> B | ||||
|       </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid"> | ||||
|       %%{init: {"layout": "elk", "mergeEdges": true} }%% | ||||
| flowchart | ||||
|       A --> B(This is B) | ||||
|       </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       %%{init: {"layout": "elk", "mergeEdges": false, "elk.nodePlacement.strategy": "NETWORK_SIMPLEX"} }%% | ||||
| stateDiagram | ||||
|   State T0 { | ||||
|     direction LR | ||||
|     A --> B | ||||
|   } | ||||
|   State T1 { | ||||
|     [*] --> NumLockOff | ||||
|     NumLockOff --> NumLockOn : EvNumLockPressed | ||||
|     NumLockOn --> NumLockOff : EvNumLockPressed | ||||
|   } | ||||
|       </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       %%{init: {"layout": "dagre", "mergeEdges": true} }%% | ||||
| stateDiagram | ||||
|   direction TB | ||||
|   State T1 { | ||||
|     T11 | ||||
|   } | ||||
|       </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       %%{init: {"layout": "dagre", "mergeEdges": true} }%% | ||||
| stateDiagram | ||||
| State T1 { | ||||
|     T21 | ||||
|     -- | ||||
|     T22 | ||||
|     } | ||||
|       </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       %%{init: {"layout": "elk", "mergeEdges": true} }%% | ||||
| stateDiagram | ||||
|   direction TB | ||||
|   State T1 { | ||||
|     T11 | ||||
|   } | ||||
|       </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       %%{init: {"layout": "elk", "mergeEdges": true} }%% | ||||
| stateDiagram | ||||
| State T1 { | ||||
|     T21 | ||||
|     -- | ||||
|     T22 | ||||
|     } | ||||
|       </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       %%{init: {"layout": "elk", "mergeEdges": true} }%% | ||||
| stateDiagram | ||||
|   [*] --> T1 | ||||
|   T1 --> T2 | ||||
|   T1 --> T3 | ||||
|   T1 --> T4 | ||||
|       </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
|       %%{init: {"layout": "elk"} }%% | ||||
| stateDiagram | ||||
|   [*] --> T1 | ||||
|   T1 --> T2 | ||||
|   T2 --> T3 | ||||
|   T3 --> T1 | ||||
|   T1 --> T3 | ||||
|       </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| stateDiagram | ||||
|   State1: The state with a note | ||||
|   note right of State1 | ||||
|       Important information! You can write | ||||
|       notes. | ||||
|   end note | ||||
|       </pre | ||||
|     > | ||||
|     <pre id="diagram" class="mermaid2"> | ||||
| stateDiagram-v2 | ||||
|     direction LR | ||||
|     [*] --> Active | ||||
|  | ||||
|     state Active { | ||||
|       direction BT | ||||
|         [*] --> Inner | ||||
|         Inner --> NumLockOn : EvNumLockPressed | ||||
|     } | ||||
|     %% Outer --> Inner | ||||
|       </pre | ||||
|     > | ||||
|  | ||||
|     <script type="module"> | ||||
|       // import mindmap from '../../packages/mermaid-mindmap/src/detector'; | ||||
|       // import example from '../../packages/mermaid-example-diagram/src/mermaid-example-diagram.core.mjs'; | ||||
|       import mermaid from './mermaid.esm.mjs'; | ||||
|       // await mermaid.registerExternalDiagrams([example]); | ||||
|       import { layouts } from './mermaid-layout-elk.esm.mjs'; | ||||
|       mermaid.registerLayoutLoaders(layouts); | ||||
|       mermaid.parseError = function (err, hash) { | ||||
|         // console.error('Mermaid error: ', err); | ||||
|         console.error('Mermaid error: ', err); | ||||
|       }; | ||||
|       // mermaid.initialize({ | ||||
|       //   // theme: 'forest', | ||||
|       //   startOnLoad: true, | ||||
|       //   logLevel: 0, | ||||
|       //   flowchart: { | ||||
|       //     // defaultRenderer: 'elk', | ||||
|       //     useMaxWidth: false, | ||||
|       //     // htmlLabels: false, | ||||
|       //     htmlLabels: true, | ||||
|       //   }, | ||||
|       //   // htmlLabels: false, | ||||
|       //   gantt: { | ||||
|       //     useMaxWidth: false, | ||||
|       //   }, | ||||
|       //   useMaxWidth: false, | ||||
|       // }); | ||||
|       mermaid.initialize({ | ||||
|         theme: 'dark', | ||||
|         startOnLoad: true, | ||||
|         theme: 'base', | ||||
|         handdrawnSeed: 12, | ||||
|         look: 'handdrawn', | ||||
|         'elk.nodePlacement.strategy': 'NETWORK_SIMPLEX', | ||||
|         // layout: 'dagre', | ||||
|         layout: 'elk', | ||||
|         flowchart: { titleTopMargin: 10 }, | ||||
|         // fontFamily: 'Caveat', | ||||
|         // fontFamily: 'Kalam', | ||||
|         fontFamily: 'courier', | ||||
|         sequence: { | ||||
|           actorFontFamily: 'courier', | ||||
|           noteFontFamily: 'courier', | ||||
|           messageFontFamily: 'courier', | ||||
|         }, | ||||
|         fontSize: 12, | ||||
|         logLevel: 0, | ||||
|       }); | ||||
|       function callback() { | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| <!DOCTYPE html> | ||||
| <!doctype html> | ||||
| <html lang="en"> | ||||
|   <head> | ||||
|     <meta charset="utf-8" /> | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
| @@ -21,7 +21,11 @@ sequenceDiagram | ||||
|     mermaid.initialize({ | ||||
|       theme: 'base', | ||||
|       themeVariables: {}, | ||||
|       startOnLoad: true, | ||||
|       startOnLoad: false, | ||||
|     }); | ||||
|     await mermaid.run(); | ||||
|     if (window.Cypress) { | ||||
|       window.rendered = true; | ||||
|     } | ||||
|   </script> | ||||
| </html> | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| <!DOCTYPE html> | ||||
| <!doctype html> | ||||
| <html> | ||||
|   <head> | ||||
|     <meta charset="utf-8" /> | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| <!DOCTYPE html> | ||||
| <!doctype html> | ||||
| <html> | ||||
|   <head> | ||||
|     <meta charset="utf-8" /> | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" /> | ||||
|     <link | ||||
|       rel="stylesheet" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" | ||||
|       href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css" | ||||
|     /> | ||||
|     <link | ||||
|       href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user