mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-03 20:34:20 +01:00 
			
		
		
		
	Compare commits
	
		
			683 Commits
		
	
	
		
			mermaid@11
			...
			mindmap-la
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					a1585c6f70 | ||
| 
						 | 
					5fcadd0e30 | ||
| 
						 | 
					5df8a22853 | ||
| 
						 | 
					973401f4af | ||
| 
						 | 
					30d2cac243 | ||
| 
						 | 
					516e03db1a | ||
| 
						 | 
					d24becb455 | ||
| 
						 | 
					08048c39d7 | ||
| 
						 | 
					7dd31dc7c9 | ||
| 
						 | 
					0bbfa8e602 | ||
| 
						 | 
					4977cdb1f4 | ||
| 
						 | 
					8f0703bdc2 | ||
| 
						 | 
					d2ce80be10 | ||
| 
						 | 
					6bcfb4df3a | ||
| 
						 | 
					df3c3d2fdc | ||
| 
						 | 
					97cde9827b | ||
| 
						 | 
					b2bafe8980 | ||
| 
						 | 
					24aec8c280 | ||
| 
						 | 
					8c4fc3c6ff | ||
| 
						 | 
					d72ee5fc95 | ||
| 
						 | 
					b3ff80f211 | ||
| 
						 | 
					8a34154efa | ||
| 
						 | 
					8ce1f70066 | ||
| 
						 | 
					334294c6af | ||
| 
						 | 
					e0f3f2bd5a | ||
| 
						 | 
					6dad2ab327 | ||
| 
						 | 
					4d2e424c30 | ||
| 
						 | 
					ff217957fc | ||
| 
						 | 
					866b29c050 | ||
| 
						 | 
					a463d11e57 | ||
| 
						 | 
					5267f7c6ea | ||
| 
						 | 
					2bdecc2842 | ||
| 
						 | 
					d8efe9a55d | ||
| 
						 | 
					ae564f30af | ||
| 
						 | 
					2a6da19956 | ||
| 
						 | 
					de41669320 | ||
| 
						 | 
					02b997f4e4 | ||
| 
						 | 
					90c0908ed5 | ||
| 
						 | 
					a7d76b2695 | ||
| 
						 | 
					e46c7ae996 | ||
| 
						 | 
					af7a5fe77d | ||
| 
						 | 
					f9fbadbbe2 | ||
| 
						 | 
					dec82de586 | ||
| 
						 | 
					598c72853f | ||
| 
						 | 
					b1e1a0c0d7 | ||
| 
						 | 
					a9f3b432ff | ||
| 
						 | 
					cd2ab38927 | ||
| 
						 | 
					04448e3b6a | ||
| 
						 | 
					2a12a64c06 | ||
| 
						 | 
					586b528a16 | ||
| 
						 | 
					36e6e6e1be | ||
| 
						 | 
					1de7d31d90 | ||
| 
						 | 
					34d91d0e88 | ||
| 
						 | 
					101dc6d52c | ||
| 
						 | 
					1fbe17e04c | ||
| 
						 | 
					8fed1c86b0 | ||
| 
						 | 
					b808801347 | ||
| 
						 | 
					58ec4ca39f | ||
| 
						 | 
					7e3d547094 | ||
| 
						 | 
					79f010143a | ||
| 
						 | 
					aa9df775cd | ||
| 
						 | 
					2601ec89c8 | ||
| 
						 | 
					566415c189 | ||
| 
						 | 
					cbabc7b709 | ||
| 
						 | 
					873962c739 | ||
| 
						 | 
					2aeb435f19 | ||
| 
						 | 
					e0818c9e47 | ||
| 
						 | 
					a3753d8f4d | ||
| 
						 | 
					308e2cc107 | ||
| 
						 | 
					a578cb8def | ||
| 
						 | 
					a823bf043b | ||
| 
						 | 
					3980c99c22 | ||
| 
						 | 
					c81f63b462 | ||
| 
						 | 
					16167a64e5 | ||
| 
						 | 
					cba4d733f0 | ||
| 
						 | 
					6a0fb67ab7 | ||
| 
						 | 
					4bfd0f753d | ||
| 
						 | 
					bf83262d7c | ||
| 
						 | 
					ccdd0f0146 | ||
| 
						 | 
					82646432a1 | ||
| 
						 | 
					c82579097c | ||
| 
						 | 
					92132ad4f1 | ||
| 
						 | 
					8564ebbdbd | ||
| 
						 | 
					1ca6ff93ff | ||
| 
						 | 
					20098b287b | ||
| 
						 | 
					0474a8422b | ||
| 
						 | 
					075f0f580f | ||
| 
						 | 
					78ded6452f | ||
| 
						 | 
					08085b8821 | ||
| 
						 | 
					5f35d70ce2 | ||
| 
						 | 
					08951dbbf0 | ||
| 
						 | 
					7caf377963 | ||
| 
						 | 
					0103da0179 | ||
| 
						 | 
					a6c9ab04dc | ||
| 
						 | 
					b9c472e091 | ||
| 
						 | 
					4ed4756220 | ||
| 
						 | 
					4b12ebee51 | ||
| 
						 | 
					d6e1541bc8 | ||
| 
						 | 
					0507fe114e | ||
| 
						 | 
					2bb77406fb | ||
| 
						 | 
					2215bf6aaa | ||
| 
						 | 
					206cc51578 | ||
| 
						 | 
					c4c55277cb | ||
| 
						 | 
					0c2d222aa6 | ||
| 
						 | 
					fc3d4859db | ||
| 
						 | 
					c7714fd666 | ||
| 
						 | 
					e2bf95c922 | ||
| 
						 | 
					a79a50b77f | ||
| 
						 | 
					9133fcb9a8 | ||
| 
						 | 
					00e9ed2024 | ||
| 
						 | 
					5919d39812 | ||
| 
						 | 
					f5fa0ae876 | ||
| 
						 | 
					de9eb67040 | ||
| 
						 | 
					cb7518a960 | ||
| 
						 | 
					34bf5c8be1 | ||
| 
						 | 
					7d1319f97c | ||
| 
						 | 
					9c46e960e7 | ||
| 
						 | 
					cd956e1b60 | ||
| 
						 | 
					78cf1706a9 | ||
| 
						 | 
					607e9ab989 | ||
| 
						 | 
					0cf0b684cf | ||
| 
						 | 
					cb0cb5dfc7 | ||
| 
						 | 
					330c48fa3f | ||
| 
						 | 
					2ff6de11dc | ||
| 
						 | 
					385fab8c67 | ||
| 
						 | 
					a3fed10d55 | ||
| 
						 | 
					2a859f2739 | ||
| 
						 | 
					c7fa906115 | ||
| 
						 | 
					3c69bd34c7 | ||
| 
						 | 
					f5d27bf7ef | ||
| 
						 | 
					5a03f07853 | ||
| 
						 | 
					8474cf43fe | ||
| 
						 | 
					f56895832f | ||
| 
						 | 
					8975a1907a | ||
| 
						 | 
					1f512e9671 | ||
| 
						 | 
					12b6371abf | ||
| 
						 | 
					5310d60e63 | ||
| 
						 | 
					3ae87ca06a | ||
| 
						 | 
					e2520dde20 | ||
| 
						 | 
					3e8204aa21 | ||
| 
						 | 
					0b57984d27 | ||
| 
						 | 
					bcaa40f1d5 | ||
| 
						 | 
					0107494b59 | ||
| 
						 | 
					11c3ac58fd | ||
| 
						 | 
					af2eb13932 | ||
| 
						 | 
					41e84b726a | ||
| 
						 | 
					a1ba65c0c0 | ||
| 
						 | 
					5fe6e5dccc | ||
| 
						 | 
					946452c7b4 | ||
| 
						 | 
					4bb6351489 | ||
| 
						 | 
					8c63a2e411 | ||
| 
						 | 
					4467fd4363 | ||
| 
						 | 
					7e567a8759 | ||
| 
						 | 
					edf062720d | ||
| 
						 | 
					3348eea6af | ||
| 
						 | 
					ae7ffab9ac | ||
| 
						 | 
					ecdbc676d2 | ||
| 
						 | 
					6a01b04e3c | ||
| 
						 | 
					aafe8de3d3 | ||
| 
						 | 
					24287637b5 | ||
| 
						 | 
					f69cc17795 | ||
| 
						 | 
					934f4da507 | ||
| 
						 | 
					6957f35782 | ||
| 
						 | 
					b00be59ea8 | ||
| 
						 | 
					dff00f2c4f | ||
| 
						 | 
					eb9987435a | ||
| 
						 | 
					a300d0db94 | ||
| 
						 | 
					7e7f3c56c2 | ||
| 
						 | 
					ea987861f3 | ||
| 
						 | 
					178c7130c6 | ||
| 
						 | 
					f87d0dd88a | ||
| 
						 | 
					2396f90269 | ||
| 
						 | 
					97e35fd30a | ||
| 
						 | 
					7a5f999f42 | ||
| 
						 | 
					cd8d74bb96 | ||
| 
						 | 
					56c6853e05 | ||
| 
						 | 
					01e2af0cfd | ||
| 
						 | 
					f55ff99f74 | ||
| 
						 | 
					d25770ee73 | ||
| 
						 | 
					2b05d7e1ed | ||
| 
						 | 
					30735266a4 | ||
| 
						 | 
					926862c196 | ||
| 
						 | 
					44e668e704 | ||
| 
						 | 
					404216273a | ||
| 
						 | 
					5a6831ae7e | ||
| 
						 | 
					03119fea2c | ||
| 
						 | 
					5351211256 | ||
| 
						 | 
					92c0aa4331 | ||
| 
						 | 
					7bd5c03d87 | ||
| 
						 | 
					de72e18a7f | ||
| 
						 | 
					4fdb1d5906 | ||
| 
						 | 
					a2bf5103ce | ||
| 
						 | 
					8b7a4db2ef | ||
| 
						 | 
					73f8dee643 | ||
| 
						 | 
					8bdd7ec719 | ||
| 
						 | 
					7facc8f50d | ||
| 
						 | 
					52cd9e8e55 | ||
| 
						 | 
					9208e7faaf | ||
| 
						 | 
					2798e27b1e | ||
| 
						 | 
					f4c08a0c6f | ||
| 
						 | 
					6a538da07d | ||
| 
						 | 
					b2dfa74865 | ||
| 
						 | 
					930e917215 | ||
| 
						 | 
					cdbd3e58a3 | ||
| 
						 | 
					630c4d6954 | ||
| 
						 | 
					fd4493733f | ||
| 
						 | 
					e588743bf4 | ||
| 
						 | 
					04d68e7f9a | ||
| 
						 | 
					9795b6e089 | ||
| 
						 | 
					ceb8d4c7ef | ||
| 
						 | 
					32c70a0f6a | ||
| 
						 | 
					af2632f14a | ||
| 
						 | 
					8f89ba1930 | ||
| 
						 | 
					ad6f855f5e | ||
| 
						 | 
					f2f2a1d275 | ||
| 
						 | 
					17fcf43cdb | ||
| 
						 | 
					99a2dc7c1f | ||
| 
						 | 
					34e756fde6 | ||
| 
						 | 
					f74fad057a | ||
| 
						 | 
					32ea973b12 | ||
| 
						 | 
					0104d19f66 | ||
| 
						 | 
					936d1074b2 | ||
| 
						 | 
					7b2083926d | ||
| 
						 | 
					bb9210c55e | ||
| 
						 | 
					16d9b63457 | ||
| 
						 | 
					bf3370fa5b | ||
| 
						 | 
					9f9091e5e4 | ||
| 
						 | 
					d1b1a67d99 | ||
| 
						 | 
					ac625bdc7f | ||
| 
						 | 
					40b85c3bbf | ||
| 
						 | 
					f8e329f890 | ||
| 
						 | 
					9b9cec9809 | ||
| 
						 | 
					ad653138e1 | ||
| 
						 | 
					f5f3b08f12 | ||
| 
						 | 
					f7e31a978b | ||
| 
						 | 
					2d583b186d | ||
| 
						 | 
					b322392f97 | ||
| 
						 | 
					573b6d9ba7 | ||
| 
						 | 
					ea39254556 | ||
| 
						 | 
					044a3d9686 | ||
| 
						 | 
					f28f7b713d | ||
| 
						 | 
					cfbd05515e | ||
| 
						 | 
					20927a1c8e | ||
| 
						 | 
					b2ab34ca2b | ||
| 
						 | 
					55e1dd0ead | ||
| 
						 | 
					a403f78168 | ||
| 
						 | 
					6c45aa3602 | ||
| 
						 | 
					85ce310884 | ||
| 
						 | 
					fac570cb8c | ||
| 
						 | 
					a7bcd7dee5 | ||
| 
						 | 
					bb5a7a585e | ||
| 
						 | 
					5d1b27132a | ||
| 
						 | 
					288abd01e0 | ||
| 
						 | 
					95d73bc3f0 | ||
| 
						 | 
					0f5125b5e3 | ||
| 
						 | 
					12c120368d | ||
| 
						 | 
					a7f2c0bc34 | ||
| 
						 | 
					5e97b2f764 | ||
| 
						 | 
					d53c66dde5 | ||
| 
						 | 
					1fb91d14c9 | ||
| 
						 | 
					d80cc38bb2 | ||
| 
						 | 
					d6022408a9 | ||
| 
						 | 
					41a737f682 | ||
| 
						 | 
					0c2e1bc3fe | ||
| 
						 | 
					f399561565 | ||
| 
						 | 
					05bdf0e20e | ||
| 
						 | 
					292cd83439 | ||
| 
						 | 
					3848649bdd | ||
| 
						 | 
					1341e3d156 | ||
| 
						 | 
					1d6a55a311 | ||
| 
						 | 
					4d25caba8e | ||
| 
						 | 
					f6335571cc | ||
| 
						 | 
					bb895d8cf4 | ||
| 
						 | 
					1ddaf10b89 | ||
| 
						 | 
					02b833f251 | ||
| 
						 | 
					0ce0c3cd75 | ||
| 
						 | 
					00ca7ac94f | ||
| 
						 | 
					34cd280ae4 | ||
| 
						 | 
					d0986ace8c | ||
| 
						 | 
					bc2bd3d769 | ||
| 
						 | 
					f047b81bb9 | ||
| 
						 | 
					7db1d672a9 | ||
| 
						 | 
					91e2c04e56 | ||
| 
						 | 
					a2f0d8e4d6 | ||
| 
						 | 
					00a8dc47f5 | ||
| 
						 | 
					5caaf36a3b | ||
| 
						 | 
					4128197468 | ||
| 
						 | 
					40494b16f5 | ||
| 
						 | 
					840a197044 | ||
| 
						 | 
					ae0fcbfb8b | ||
| 
						 | 
					a38a0ab869 | ||
| 
						 | 
					1b5672e73d | ||
| 
						 | 
					b22103b769 | ||
| 
						 | 
					9e29fd0c4a | ||
| 
						 | 
					a2650adec2 | ||
| 
						 | 
					33f9d8bdc9 | ||
| 
						 | 
					446f6a7701 | ||
| 
						 | 
					2ace92858f | ||
| 
						 | 
					510fd0fe71 | ||
| 
						 | 
					9268cc2e07 | ||
| 
						 | 
					7c7fd4bc5e | ||
| 
						 | 
					baa261fdd1 | ||
| 
						 | 
					aaf15fccc1 | ||
| 
						 | 
					3724d11255 | ||
| 
						 | 
					5510f18d33 | ||
| 
						 | 
					edbf125c83 | ||
| 
						 | 
					ad6248147c | ||
| 
						 | 
					d47e4724cb | ||
| 
						 | 
					4f592115e0 | ||
| 
						 | 
					d2d78a5576 | ||
| 
						 | 
					5447a9f4f9 | ||
| 
						 | 
					dc698c0309 | ||
| 
						 | 
					31665fbad8 | ||
| 
						 | 
					a5561b9be0 | ||
| 
						 | 
					60db05b75c | ||
| 
						 | 
					3be59a7b4d | ||
| 
						 | 
					ff00141a0a | ||
| 
						 | 
					374ebbb087 | ||
| 
						 | 
					9d06d8f31e | ||
| 
						 | 
					97b12e9718 | ||
| 
						 | 
					50816a7f98 | ||
| 
						 | 
					a318ea3692 | ||
| 
						 | 
					1424127127 | ||
| 
						 | 
					9c27125f2d | ||
| 
						 | 
					6140be24da | ||
| 
						 | 
					de40d80ef9 | ||
| 
						 | 
					c9b8f034d5 | ||
| 
						 | 
					162e9e50ad | ||
| 
						 | 
					225e5dde60 | ||
| 
						 | 
					726b42ba00 | ||
| 
						 | 
					c22b5701db | ||
| 
						 | 
					c6b715f737 | ||
| 
						 | 
					bc69180958 | ||
| 
						 | 
					a64b14dbfd | ||
| 
						 | 
					1c8b996cbb | ||
| 
						 | 
					eb8e4da5f6 | ||
| 
						 | 
					2fdd24ab15 | ||
| 
						 | 
					c01aee842a | ||
| 
						 | 
					2c22e80dba | ||
| 
						 | 
					0518e9cfd7 | ||
| 
						 | 
					fe2e73ed94 | ||
| 
						 | 
					4f5c4b8349 | ||
| 
						 | 
					ce99d968f4 | ||
| 
						 | 
					877a7e288a | ||
| 
						 | 
					4eeea1076c | ||
| 
						 | 
					f43e35039f | ||
| 
						 | 
					dbf885b077 | ||
| 
						 | 
					78c1d97f0f | ||
| 
						 | 
					5abda14809 | ||
| 
						 | 
					ad2f17205a | ||
| 
						 | 
					bb4b92a663 | ||
| 
						 | 
					9bd599666b | ||
| 
						 | 
					98fe7a6e03 | ||
| 
						 | 
					5857953d51 | ||
| 
						 | 
					5dab86a067 | ||
| 
						 | 
					9ef35549f4 | ||
| 
						 | 
					4beed963b8 | ||
| 
						 | 
					3122c3b75c | ||
| 
						 | 
					dffa689e2b | ||
| 
						 | 
					5ed2278887 | ||
| 
						 | 
					d6376ca1ff | ||
| 
						 | 
					99bd0c48fa | ||
| 
						 | 
					eb7289a65a | ||
| 
						 | 
					80c6b945fa | ||
| 
						 | 
					34a12103d0 | ||
| 
						 | 
					46b8a75199 | ||
| 
						 | 
					1dca45a76d | ||
| 
						 | 
					d1d5bd14f6 | ||
| 
						 | 
					974867a089 | ||
| 
						 | 
					52532a7801 | ||
| 
						 | 
					6eb56b9363 | ||
| 
						 | 
					f7c91a72cb | ||
| 
						 | 
					c53e044559 | ||
| 
						 | 
					d846a8c65a | ||
| 
						 | 
					c3ba23a4e9 | ||
| 
						 | 
					c688c387a0 | ||
| 
						 | 
					300fb85a73 | ||
| 
						 | 
					9c6e554153 | ||
| 
						 | 
					b5c78b7225 | ||
| 
						 | 
					26bd8cb53c | ||
| 
						 | 
					da6361f652 | ||
| 
						 | 
					167fef5cff | ||
| 
						 | 
					3233c63fc0 | ||
| 
						 | 
					1182aaaf4d | ||
| 
						 | 
					b78c061a8f | ||
| 
						 | 
					39a5abc714 | ||
| 
						 | 
					6650efc1a6 | ||
| 
						 | 
					a4754ad195 | ||
| 
						 | 
					91cbe5bc01 | ||
| 
						 | 
					d2996dd553 | ||
| 
						 | 
					7a7836ad90 | ||
| 
						 | 
					7ca9242b24 | ||
| 
						 | 
					ebfcf3ea07 | ||
| 
						 | 
					62edea6b33 | ||
| 
						 | 
					72eda9ce52 | ||
| 
						 | 
					cfd84e54d5 | ||
| 
						 | 
					cfe710f42b | ||
| 
						 | 
					438f388b5c | ||
| 
						 | 
					e89c77a5ca | ||
| 
						 | 
					87e76bbcf5 | ||
| 
						 | 
					0b4754ed60 | ||
| 
						 | 
					fe6f05eec9 | ||
| 
						 | 
					31984acfe0 | ||
| 
						 | 
					9badfe7489 | ||
| 
						 | 
					548256507d | ||
| 
						 | 
					d8ebf7a136 | ||
| 
						 | 
					27912bee8c | ||
| 
						 | 
					a758b24b75 | ||
| 
						 | 
					3004d4d93a | ||
| 
						 | 
					88abf46fc3 | ||
| 
						 | 
					2eeba0e999 | ||
| 
						 | 
					397684fe49 | ||
| 
						 | 
					bc1f769f13 | ||
| 
						 | 
					f6592235a2 | ||
| 
						 | 
					57805dafa4 | ||
| 
						 | 
					3b92f979e3 | ||
| 
						 | 
					7a7e4b4e6f | ||
| 
						 | 
					c5843bee23 | ||
| 
						 | 
					7aef182fbf | ||
| 
						 | 
					2fb6ea7b77 | ||
| 
						 | 
					add48da4c8 | ||
| 
						 | 
					ada42b892c | ||
| 
						 | 
					62f9261c4e | ||
| 
						 | 
					a19b42f3c2 | ||
| 
						 | 
					9f90f4f23a | ||
| 
						 | 
					451c886f50 | ||
| 
						 | 
					0a1a112605 | ||
| 
						 | 
					63cf7cbd94 | ||
| 
						 | 
					8ab60c3a7a | ||
| 
						 | 
					0342579b9c | ||
| 
						 | 
					348401c4f4 | ||
| 
						 | 
					8145199203 | ||
| 
						 | 
					f408e938d4 | ||
| 
						 | 
					6471ae4d49 | ||
| 
						 | 
					af6e2b4cb6 | ||
| 
						 | 
					7a4a52b50a | ||
| 
						 | 
					ee05d8588f | ||
| 
						 | 
					58175f647e | ||
| 
						 | 
					5f7c68def7 | ||
| 
						 | 
					82d019234a | ||
| 
						 | 
					d618b8398e | ||
| 
						 | 
					ec0e3e4cd6 | ||
| 
						 | 
					db4ea020ba | ||
| 
						 | 
					72cf84cb40 | ||
| 
						 | 
					5366e8b692 | ||
| 
						 | 
					6ca8f46d37 | ||
| 
						 | 
					b2dfbb6ffd | ||
| 
						 | 
					ffa7804af0 | ||
| 
						 | 
					f454865b97 | ||
| 
						 | 
					d83b1a5dbc | ||
| 
						 | 
					d07f85e6ac | ||
| 
						 | 
					a79c0f4c00 | ||
| 
						 | 
					4a19740aea | ||
| 
						 | 
					fbac4c61bb | ||
| 
						 | 
					4dbaa2b5d6 | ||
| 
						 | 
					9cad3c7aea | ||
| 
						 | 
					56d66cdabc | ||
| 
						 | 
					a0e5408850 | ||
| 
						 | 
					d155e414a0 | ||
| 
						 | 
					d81ddf246c | ||
| 
						 | 
					ffe1bb359f | ||
| 
						 | 
					88a39f8e16 | ||
| 
						 | 
					9fb46ae88f | ||
| 
						 | 
					798fb98b2a | ||
| 
						 | 
					7c0af381d1 | ||
| 
						 | 
					384f59eee2 | ||
| 
						 | 
					127390978a | ||
| 
						 | 
					baf3adf1c0 | ||
| 
						 | 
					d0768cbc37 | ||
| 
						 | 
					f00507449b | ||
| 
						 | 
					509793d5c2 | ||
| 
						 | 
					8dd0e7a794 | ||
| 
						 | 
					8a8d169e27 | ||
| 
						 | 
					b53cf0a1fb | ||
| 
						 | 
					58fa99787c | ||
| 
						 | 
					1a9a9f43e6 | ||
| 
						 | 
					aeec4b7f77 | ||
| 
						 | 
					40686f198c | ||
| 
						 | 
					295af02744 | ||
| 
						 | 
					a3f35f6367 | ||
| 
						 | 
					523286bbcb | ||
| 
						 | 
					c296f48ebe | ||
| 
						 | 
					9609aced14 | ||
| 
						 | 
					97788df7e3 | ||
| 
						 | 
					47d4d56fa6 | ||
| 
						 | 
					5e9c887385 | ||
| 
						 | 
					fdb8ae5b53 | ||
| 
						 | 
					65ff22d94b | ||
| 
						 | 
					5cf093ca9e | ||
| 
						 | 
					03ff28e927 | ||
| 
						 | 
					16a1a90705 | ||
| 
						 | 
					3221cbfa0a | ||
| 
						 | 
					f0a8ccb177 | ||
| 
						 | 
					a30705cdcc | ||
| 
						 | 
					e2de55202f | ||
| 
						 | 
					b4043840ca | ||
| 
						 | 
					8f3e17e386 | ||
| 
						 | 
					4e950e7256 | ||
| 
						 | 
					de3e381ccf | ||
| 
						 | 
					b2fde76753 | ||
| 
						 | 
					b5587d8b87 | ||
| 
						 | 
					9b75aeb224 | ||
| 
						 | 
					993858cdc8 | ||
| 
						 | 
					f4e1f07412 | ||
| 
						 | 
					09e0de6053 | ||
| 
						 | 
					9a50bf5237 | ||
| 
						 | 
					5747009c8f | ||
| 
						 | 
					dc513ec211 | ||
| 
						 | 
					5f58d4f7b0 | ||
| 
						 | 
					3536ceb5d3 | ||
| 
						 | 
					7ed33a91c0 | ||
| 
						 | 
					f8bf03d365 | ||
| 
						 | 
					4202ee521a | ||
| 
						 | 
					0e25fd42f9 | ||
| 
						 | 
					feee5d1c8c | ||
| 
						 | 
					ab6d92c544 | ||
| 
						 | 
					d27d4abab7 | ||
| 
						 | 
					3162cff7a9 | ||
| 
						 | 
					74edf7a027 | ||
| 
						 | 
					9681a27b31 | ||
| 
						 | 
					22091f6182 | ||
| 
						 | 
					ba534985ec | ||
| 
						 | 
					edc1ae1e0c | ||
| 
						 | 
					c00f3fb090 | ||
| 
						 | 
					23bc25ef94 | ||
| 
						 | 
					42dfa20fd4 | ||
| 
						 | 
					cc2373ea89 | ||
| 
						 | 
					22bc234ff3 | ||
| 
						 | 
					fa48f9580f | ||
| 
						 | 
					38ca14da43 | ||
| 
						 | 
					74a56fc58a | ||
| 
						 | 
					08ffbb61e9 | ||
| 
						 | 
					232e60c8cb | ||
| 
						 | 
					cd9ca76e39 | ||
| 
						 | 
					c13d988392 | ||
| 
						 | 
					15ffe2021a | ||
| 
						 | 
					4fbc19e0d7 | ||
| 
						 | 
					02f661a103 | ||
| 
						 | 
					130638f6e1 | ||
| 
						 | 
					9ab2761c1d | ||
| 
						 | 
					41d7a549b0 | ||
| 
						 | 
					2b8998fdd1 | ||
| 
						 | 
					202ef31071 | ||
| 
						 | 
					b09f2e836a | ||
| 
						 | 
					6a814a0d91 | ||
| 
						 | 
					b07bb9b3ff | ||
| 
						 | 
					5120ed09ab | ||
| 
						 | 
					081681f05b | ||
| 
						 | 
					f7648e85d9 | ||
| 
						 | 
					fe833e6d16 | ||
| 
						 | 
					809f4eb609 | ||
| 
						 | 
					61f3fc5ede | ||
| 
						 | 
					90bbf90a83 | ||
| 
						 | 
					92efc24283 | ||
| 
						 | 
					1c45df4567 | ||
| 
						 | 
					1575a93136 | ||
| 
						 | 
					bde653b1c2 | ||
| 
						 | 
					e9e663ffa3 | ||
| 
						 | 
					963efa64c7 | ||
| 
						 | 
					e2e5101005 | ||
| 
						 | 
					6ea13cded3 | ||
| 
						 | 
					c063b92cc9 | ||
| 
						 | 
					304f133227 | ||
| 
						 | 
					54a0dd0af6 | ||
| 
						 | 
					54ee6bd46d | ||
| 
						 | 
					f0e47f29fd | ||
| 
						 | 
					ab5b7694c6 | ||
| 
						 | 
					eb76dfb1ca | ||
| 
						 | 
					28d7ec092c | ||
| 
						 | 
					84b03f3a08 | ||
| 
						 | 
					f9ac9867c1 | ||
| 
						 | 
					ee6fb83265 | ||
| 
						 | 
					46c16c963b | ||
| 
						 | 
					32a68d489e | ||
| 
						 | 
					7bbebff583 | ||
| 
						 | 
					c432aec2f6 | ||
| 
						 | 
					64237fbaa7 | ||
| 
						 | 
					d90609b26c | ||
| 
						 | 
					adec6cd254 | ||
| 
						 | 
					5ce60cacbf | ||
| 
						 | 
					9ddedb0b49 | ||
| 
						 | 
					e977deaf11 | ||
| 
						 | 
					85a7771b70 | ||
| 
						 | 
					3778fef1a1 | ||
| 
						 | 
					0bff720e20 | ||
| 
						 | 
					7ba415dad1 | ||
| 
						 | 
					7f47678862 | ||
| 
						 | 
					127bac1147 | ||
| 
						 | 
					9a90d795ca | ||
| 
						 | 
					f7fe8f2f59 | ||
| 
						 | 
					1d9c2aab8d | ||
| 
						 | 
					8fba9c1236 | ||
| 
						 | 
					04800ff677 | ||
| 
						 | 
					5d3d1047a4 | ||
| 
						 | 
					0f08c3bc9c | ||
| 
						 | 
					7809b5a93f | ||
| 
						 | 
					ef9bb53e67 | ||
| 
						 | 
					3e32332814 | ||
| 
						 | 
					e1aab25144 | ||
| 
						 | 
					c8697301ee | ||
| 
						 | 
					fcb1de915b | ||
| 
						 | 
					e345294658 | ||
| 
						 | 
					9936099e25 | ||
| 
						 | 
					59352ad4d8 | ||
| 
						 | 
					ba70f15de5 | ||
| 
						 | 
					e70b069576 | ||
| 
						 | 
					28bab4a323 | ||
| 
						 | 
					6cc31b7453 | ||
| 
						 | 
					29ca1504dd | ||
| 
						 | 
					16d2251e43 | ||
| 
						 | 
					bc2cc61240 | ||
| 
						 | 
					6836e9c7a8 | ||
| 
						 | 
					8dc016e7f9 | ||
| 
						 | 
					3cad7984a3 | ||
| 
						 | 
					f5bae98098 | ||
| 
						 | 
					0695893e30 | ||
| 
						 | 
					9ef6090c8c | ||
| 
						 | 
					fa6f3e5fff | ||
| 
						 | 
					ec0d9c389a | ||
| 
						 | 
					323b07a2e4 | ||
| 
						 | 
					c153d0455f | ||
| 
						 | 
					9b00f1f2fb | ||
| 
						 | 
					a055ff7db3 | ||
| 
						 | 
					d032723a47 | ||
| 
						 | 
					daf83f596d | ||
| 
						 | 
					df636c6d0a | ||
| 
						 | 
					64554a6c60 | ||
| 
						 | 
					becadf0a7d | ||
| 
						 | 
					54d485f173 | ||
| 
						 | 
					b4f5b8ddaf | ||
| 
						 | 
					cb5c1ae367 | ||
| 
						 | 
					b29081d4e8 | ||
| 
						 | 
					654097c438 | ||
| 
						 | 
					1e672868c4 | ||
| 
						 | 
					bff32827b5 | ||
| 
						 | 
					65f9b29b86 | ||
| 
						 | 
					b4879d13b8 | ||
| 
						 | 
					95964b5487 | ||
| 
						 | 
					4e17da0a30 | ||
| 
						 | 
					2a91849a38 | ||
| 
						 | 
					082de76eef | ||
| 
						 | 
					570ae78b15 | ||
| 
						 | 
					885ac6f947 | ||
| 
						 | 
					193fdb225e | ||
| 
						 | 
					7cbd80af33 | ||
| 
						 | 
					16c448b89b | ||
| 
						 | 
					cb0a4703bd | ||
| 
						 | 
					5a2a8f9bd4 | ||
| 
						 | 
					9854748fc3 | ||
| 
						 | 
					8cb1c68166 | ||
| 
						 | 
					d752240efc | ||
| 
						 | 
					5ae5a0cea3 | ||
| 
						 | 
					01e5346004 | ||
| 
						 | 
					1b34077f55 | ||
| 
						 | 
					87fa698c79 | ||
| 
						 | 
					b49afeefc2 | ||
| 
						 | 
					8ace44b428 | ||
| 
						 | 
					39a6c308fb | ||
| 
						 | 
					2771b14f65 | ||
| 
						 | 
					9ff09f28e7 | ||
| 
						 | 
					eddd8313c9 | ||
| 
						 | 
					b67cdb171d | ||
| 
						 | 
					c789172b89 | ||
| 
						 | 
					1d68c4f075 | ||
| 
						 | 
					df22fb5e00 | ||
| 
						 | 
					5d2b0f74af | ||
| 
						 | 
					723b8f1d32 | ||
| 
						 | 
					5be5aa3dfa | ||
| 
						 | 
					69e12fd67d | ||
| 
						 | 
					49e23c74bc | ||
| 
						 | 
					8b169f3796 | ||
| 
						 | 
					b5da91b29a | ||
| 
						 | 
					1d4ea56740 | ||
| 
						 | 
					0d664b1fd2 | ||
| 
						 | 
					29c3293265 | ||
| 
						 | 
					df110e5e11 | ||
| 
						 | 
					6247bd5f89 | ||
| 
						 | 
					cba4752433 | ||
| 
						 | 
					d0dd4e6e5e | ||
| 
						 | 
					d2892ea249 | ||
| 
						 | 
					983c28686f | ||
| 
						 | 
					f2f1ad4605 | ||
| 
						 | 
					10562e72f4 | 
@@ -27,6 +27,7 @@ const MERMAID_CONFIG_DIAGRAM_KEYS = [
 | 
			
		||||
  'block',
 | 
			
		||||
  'packet',
 | 
			
		||||
  'architecture',
 | 
			
		||||
  'radar',
 | 
			
		||||
] as const;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								.changeset/eleven-wolves-deny.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.changeset/eleven-wolves-deny.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
---
 | 
			
		||||
'mermaid': patch
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
chore: Convert StateDB into TypeScript
 | 
			
		||||
							
								
								
									
										5
									
								
								.changeset/gold-shoes-camp.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.changeset/gold-shoes-camp.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
---
 | 
			
		||||
'mermaid': patch
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
fix: Remove incorrect `style="undefined;"` attributes in some Mermaid diagrams
 | 
			
		||||
							
								
								
									
										7
									
								
								.changeset/honest-trees-dress.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.changeset/honest-trees-dress.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
---
 | 
			
		||||
'@mermaid-js/mermaid-zenuml': patch
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
chore: bump minimum ZenUML version to 3.23.28
 | 
			
		||||
 | 
			
		||||
commit: 9d06d8f31e7f12af9e9e092214f907f2dc93ad75
 | 
			
		||||
							
								
								
									
										5
									
								
								.changeset/neat-moose-compare.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.changeset/neat-moose-compare.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
---
 | 
			
		||||
'mermaid': minor
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
feat: Add support for styling Journey Diagram title (color, font-family, and font-size)
 | 
			
		||||
							
								
								
									
										6
									
								
								.changeset/sad-mails-accept.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.changeset/sad-mails-accept.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
---
 | 
			
		||||
'mermaid': patch
 | 
			
		||||
'@mermaid-js/parser': patch
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
Refactor grammar so that title don't break Architecture Diagrams
 | 
			
		||||
							
								
								
									
										5
									
								
								.changeset/soft-readers-tan.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.changeset/soft-readers-tan.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
---
 | 
			
		||||
'mermaid': minor
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
feat: Dynamically Render Data Labels Within Bar Charts
 | 
			
		||||
							
								
								
									
										5
									
								
								.changeset/ten-lamps-trade.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.changeset/ten-lamps-trade.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
---
 | 
			
		||||
'mermaid': patch
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
fix: allow colons in events
 | 
			
		||||
							
								
								
									
										7
									
								
								.changeset/yellow-mirrors-change.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.changeset/yellow-mirrors-change.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
---
 | 
			
		||||
'@mermaid-js/mermaid-zenuml': patch
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
fix(zenuml): limit `peerDependencies` to Mermaid v10 and v11
 | 
			
		||||
 | 
			
		||||
commit: 0ad44c12feead9d20c6a870a49327ada58d6e657
 | 
			
		||||
@@ -53,7 +53,6 @@ frontmatter
 | 
			
		||||
funs
 | 
			
		||||
gantt
 | 
			
		||||
GENERICTYPE
 | 
			
		||||
getBoundarys
 | 
			
		||||
grammr
 | 
			
		||||
graphtype
 | 
			
		||||
halign
 | 
			
		||||
@@ -88,6 +87,7 @@ NODIR
 | 
			
		||||
NSTR
 | 
			
		||||
outdir
 | 
			
		||||
Qcontrolx
 | 
			
		||||
QSTR
 | 
			
		||||
reinit
 | 
			
		||||
rels
 | 
			
		||||
reqs
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@ dompurify
 | 
			
		||||
elkjs
 | 
			
		||||
fcose
 | 
			
		||||
fontawesome
 | 
			
		||||
Forgejo
 | 
			
		||||
Foswiki
 | 
			
		||||
Gitea
 | 
			
		||||
graphlib
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,19 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => {
 | 
			
		||||
      { ...iifeOptions, minify: true, metafile: shouldVisualize }
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
  if (entryName === 'mermaid-zenuml') {
 | 
			
		||||
    const iifeOptions: MermaidBuildOptions = {
 | 
			
		||||
      ...commonOptions,
 | 
			
		||||
      format: 'iife',
 | 
			
		||||
      globalName: 'mermaid-zenuml',
 | 
			
		||||
    };
 | 
			
		||||
    buildConfigs.push(
 | 
			
		||||
      // mermaid-zenuml.js
 | 
			
		||||
      { ...iifeOptions },
 | 
			
		||||
      // mermaid-zenuml.min.js
 | 
			
		||||
      { ...iifeOptions, minify: true, metafile: shouldVisualize }
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const results = await Promise.all(buildConfigs.map((option) => build(getBuildConfig(option))));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -58,6 +58,7 @@ export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
 | 
			
		||||
    format,
 | 
			
		||||
    minify,
 | 
			
		||||
    options: { name, file, packageName },
 | 
			
		||||
    globalName = 'mermaid',
 | 
			
		||||
  } = options;
 | 
			
		||||
  const external: string[] = ['require', 'fs', 'path'];
 | 
			
		||||
  const outFileName = getFileName(name, options);
 | 
			
		||||
@@ -68,6 +69,7 @@ export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
 | 
			
		||||
    },
 | 
			
		||||
    metafile,
 | 
			
		||||
    minify,
 | 
			
		||||
    globalName,
 | 
			
		||||
    logLevel: 'info',
 | 
			
		||||
    chunkNames: `chunks/${outFileName}/[name]-[hash]`,
 | 
			
		||||
    define: {
 | 
			
		||||
@@ -89,11 +91,12 @@ export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
 | 
			
		||||
  if (format === 'iife') {
 | 
			
		||||
    output.format = 'iife';
 | 
			
		||||
    output.splitting = false;
 | 
			
		||||
    output.globalName = '__esbuild_esm_mermaid';
 | 
			
		||||
    const originalGlobalName = output.globalName ?? 'mermaid';
 | 
			
		||||
    output.globalName = `__esbuild_esm_mermaid_nm[${JSON.stringify(originalGlobalName)}]`;
 | 
			
		||||
    // Workaround for removing the .default access in esbuild IIFE.
 | 
			
		||||
    // https://github.com/mermaid-js/mermaid/pull/4109#discussion_r1292317396
 | 
			
		||||
    output.footer = {
 | 
			
		||||
      js: 'globalThis.mermaid = globalThis.__esbuild_esm_mermaid.default;',
 | 
			
		||||
      js: `globalThis[${JSON.stringify(originalGlobalName)}] = globalThis.${output.globalName}.default;`,
 | 
			
		||||
    };
 | 
			
		||||
    output.outExtension = { '.js': '.js' };
 | 
			
		||||
  } else {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							@@ -4,7 +4,7 @@ contact_links:
 | 
			
		||||
    url: https://github.com/mermaid-js/mermaid/discussions
 | 
			
		||||
    about: Ask the Community questions or share your own graphs in our discussions.
 | 
			
		||||
  - name: Discord
 | 
			
		||||
    url: https://discord.gg/AgrbSrBer3
 | 
			
		||||
    url: https://discord.gg/sKeNQX4Wtj
 | 
			
		||||
    about: Join our Community on Discord for Help and a casual chat.
 | 
			
		||||
  - name: Documentation
 | 
			
		||||
    url: https://mermaid.js.org
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/theme_proposal.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/theme_proposal.yml
									
									
									
									
										vendored
									
									
								
							@@ -29,7 +29,7 @@ body:
 | 
			
		||||
      label: Colors
 | 
			
		||||
      description: |-
 | 
			
		||||
        A detailed list of the different colour values to use.
 | 
			
		||||
        A list of currently used variable names can be found [here](https://mermaid-js.github.io/mermaid/#/theming?id=theme-variables-reference-table)
 | 
			
		||||
        See the [list of currently used variable names](https://mermaid-js.github.io/mermaid/#/theming?id=theme-variables-reference-table)
 | 
			
		||||
      placeholder: |-
 | 
			
		||||
        - background: #f4f4f4
 | 
			
		||||
        - primaryColor: #fff4dd
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										9
									
								
								.github/lychee.toml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.github/lychee.toml
									
									
									
									
										vendored
									
									
								
							@@ -46,8 +46,13 @@ exclude = [
 | 
			
		||||
# Drupal 403
 | 
			
		||||
"https://(www.)?drupal.org",
 | 
			
		||||
 | 
			
		||||
# Swimm returns 404, eventhough the link is valid
 | 
			
		||||
"https://docs.swimm.io"
 | 
			
		||||
# Swimm returns 404, even though the link is valid
 | 
			
		||||
"https://docs.swimm.io",
 | 
			
		||||
 | 
			
		||||
# Timeout
 | 
			
		||||
"https://huehive.co",
 | 
			
		||||
"https://foswiki.org",
 | 
			
		||||
"https://www.gnu.org",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# Exclude all private IPs from checking.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/stale.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/stale.yml
									
									
									
									
										vendored
									
									
								
							@@ -15,5 +15,5 @@ markComment: >
 | 
			
		||||
  If you are still interested in this issue and it is still relevant you can comment to revive it.
 | 
			
		||||
# Comment to post when closing a stale issue. Set to `false` to disable
 | 
			
		||||
closeComment: >
 | 
			
		||||
  This issue has been been automatically closed due to a lack of activity. 
 | 
			
		||||
  This issue has been automatically closed due to a lack of activity. 
 | 
			
		||||
  This is done to maintain a clean list of issues that the community is interested in developing.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/autofix.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/autofix.yml
									
									
									
									
										vendored
									
									
								
							@@ -13,13 +13,13 @@ jobs:
 | 
			
		||||
  autofix:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
        # uses version from "packageManager" field in package.json
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          cache: pnpm
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
@@ -42,4 +42,4 @@ jobs:
 | 
			
		||||
        working-directory: ./packages/mermaid
 | 
			
		||||
        run: pnpm run docs:build
 | 
			
		||||
 | 
			
		||||
      - uses: autofix-ci/action@ff86a557419858bb967097bfc916833f5647fa8c # main
 | 
			
		||||
      - uses: autofix-ci/action@551dded8c6cc8a1054039c8bc0b8b48c51dfc6ef # main
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/build-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/build-docs.yml
									
									
									
									
										vendored
									
									
								
							@@ -18,12 +18,12 @@ jobs:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          cache: pnpm
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/check-readme-in-sync.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/check-readme-in-sync.yml
									
									
									
									
										vendored
									
									
								
							@@ -18,7 +18,7 @@ jobs:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - name: Check for difference in README.md and docs/README.md
 | 
			
		||||
        run: |
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							@@ -32,11 +32,11 @@ jobs:
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      # Initializes the CodeQL tools for scanning.
 | 
			
		||||
      - name: Initialize CodeQL
 | 
			
		||||
        uses: github/codeql-action/init@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12
 | 
			
		||||
        uses: github/codeql-action/init@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
 | 
			
		||||
        with:
 | 
			
		||||
          config-file: ./.github/codeql/codeql-config.yml
 | 
			
		||||
          languages: ${{ matrix.language }}
 | 
			
		||||
@@ -48,7 +48,7 @@ jobs:
 | 
			
		||||
      # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
 | 
			
		||||
      # If this step fails, then you should remove it and run the build manually (see below)
 | 
			
		||||
      - name: Autobuild
 | 
			
		||||
        uses: github/codeql-action/autobuild@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12
 | 
			
		||||
        uses: github/codeql-action/autobuild@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
 | 
			
		||||
 | 
			
		||||
      # ℹ️ Command-line programs to run using the OS shell.
 | 
			
		||||
      # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
 | 
			
		||||
@@ -62,4 +62,4 @@ jobs:
 | 
			
		||||
      #   make release
 | 
			
		||||
 | 
			
		||||
      - name: Perform CodeQL Analysis
 | 
			
		||||
        uses: github/codeql-action/analyze@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12
 | 
			
		||||
        uses: github/codeql-action/analyze@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								.github/workflows/dependency-review.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/dependency-review.yml
									
									
									
									
										vendored
									
									
								
							@@ -15,6 +15,6 @@ jobs:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: 'Checkout Repository'
 | 
			
		||||
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
      - name: 'Dependency Review'
 | 
			
		||||
        uses: actions/dependency-review-action@5a2ce3f5b92ee19cbb1541a4984c76d921601d7c # v4.3.4
 | 
			
		||||
        uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/e2e-applitools.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/e2e-applitools.yml
									
									
									
									
										vendored
									
									
								
							@@ -32,13 +32,13 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "::error,title=Not using Applitools::APPLITOOLS_API_KEY is empty, disabling Applitools for this run."
 | 
			
		||||
 | 
			
		||||
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
        # uses version from "packageManager" field in package.json
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
 | 
			
		||||
@@ -54,7 +54,7 @@ jobs:
 | 
			
		||||
          APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com'
 | 
			
		||||
 | 
			
		||||
      - name: Cypress run
 | 
			
		||||
        uses: cypress-io/github-action@d79d2d530a66e641eb4a5f227e13bc985c60b964 # v4.2.2
 | 
			
		||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
			
		||||
        id: cypress
 | 
			
		||||
        with:
 | 
			
		||||
          start: pnpm run dev
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										39
									
								
								.github/workflows/e2e-timings.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								.github/workflows/e2e-timings.yml
									
									
									
									
										vendored
									
									
								
							@@ -11,6 +11,7 @@ concurrency: ${{ github.workflow }}-${{ github.ref }}
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: write
 | 
			
		||||
  pull-requests: write
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  timings:
 | 
			
		||||
@@ -19,18 +20,19 @@ jobs:
 | 
			
		||||
      image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
 | 
			
		||||
      options: --user 1001
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        uses: cypress-io/github-action@0da3c06ed8217b912deea9d8ee69630baed1737e # v6.7.6
 | 
			
		||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
			
		||||
        with:
 | 
			
		||||
          runTests: false
 | 
			
		||||
 | 
			
		||||
      - name: Cypress run
 | 
			
		||||
        uses: cypress-io/github-action@0da3c06ed8217b912deea9d8ee69630baed1737e # v6.7.6
 | 
			
		||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
			
		||||
        id: cypress
 | 
			
		||||
        with:
 | 
			
		||||
          install: false
 | 
			
		||||
@@ -44,10 +46,25 @@ jobs:
 | 
			
		||||
          SPLIT: 1
 | 
			
		||||
          SPLIT_INDEX: 0
 | 
			
		||||
          SPLIT_FILE: 'cypress/timings.json'
 | 
			
		||||
      - name: Commit changes
 | 
			
		||||
        uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
 | 
			
		||||
 | 
			
		||||
      - name: Compare timings
 | 
			
		||||
        id: compare
 | 
			
		||||
        run: |
 | 
			
		||||
          OUTPUT=$(pnpm tsx scripts/compare-timings.ts)
 | 
			
		||||
          echo "$OUTPUT" >> $GITHUB_STEP_SUMMARY
 | 
			
		||||
 | 
			
		||||
          echo "output<<EOF" >> $GITHUB_OUTPUT
 | 
			
		||||
          echo "$OUTPUT" >> $GITHUB_OUTPUT
 | 
			
		||||
          echo "EOF" >> $GITHUB_OUTPUT
 | 
			
		||||
 | 
			
		||||
      - name: Commit and create pull request
 | 
			
		||||
        uses: peter-evans/create-pull-request@a7b20e1da215b3ef3ccddb48ff65120256ed6226
 | 
			
		||||
        with:
 | 
			
		||||
          add: 'cypress/timings.json'
 | 
			
		||||
          author_name: 'github-actions[bot]'
 | 
			
		||||
          author_email: '41898282+github-actions[bot]@users.noreply.github.com'
 | 
			
		||||
          message: 'chore: update E2E timings'
 | 
			
		||||
          add-paths: |
 | 
			
		||||
            cypress/timings.json
 | 
			
		||||
          commit-message: 'chore: update E2E timings'
 | 
			
		||||
          branch: update-timings
 | 
			
		||||
          title: Update E2E Timings
 | 
			
		||||
          body: ${{ steps.compare.outputs.output }}
 | 
			
		||||
          delete-branch: true
 | 
			
		||||
          sign-commits: true
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										42
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							@@ -28,6 +28,8 @@ env:
 | 
			
		||||
      ) || 
 | 
			
		||||
      github.event.before
 | 
			
		||||
    }}
 | 
			
		||||
  RUN_VISUAL_TEST: >-
 | 
			
		||||
    ${{ github.repository == 'mermaid-js/mermaid' && (github.event_name != 'pull_request' || !startsWith(github.head_ref, 'renovate/')) }}
 | 
			
		||||
jobs:
 | 
			
		||||
  cache:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
@@ -35,30 +37,29 @@ jobs:
 | 
			
		||||
      image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
 | 
			
		||||
      options: --user 1001
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
      - name: Cache snapshots
 | 
			
		||||
        id: cache-snapshot
 | 
			
		||||
        uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
 | 
			
		||||
        uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
 | 
			
		||||
        with:
 | 
			
		||||
          save-always: true
 | 
			
		||||
          path: ./cypress/snapshots
 | 
			
		||||
          key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
 | 
			
		||||
 | 
			
		||||
      # If a snapshot for a given Hash is not found, we checkout that commit, run the tests and cache the snapshots.
 | 
			
		||||
      - name: Switch to base branch
 | 
			
		||||
        if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
 | 
			
		||||
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
        with:
 | 
			
		||||
          ref: ${{ env.targetHash }}
 | 
			
		||||
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
 | 
			
		||||
        uses: cypress-io/github-action@0da3c06ed8217b912deea9d8ee69630baed1737e # v6.7.6
 | 
			
		||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
			
		||||
        with:
 | 
			
		||||
          # just perform install
 | 
			
		||||
          runTests: false
 | 
			
		||||
@@ -81,26 +82,26 @@ jobs:
 | 
			
		||||
      matrix:
 | 
			
		||||
        containers: [1, 2, 3, 4, 5]
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
        # uses version from "packageManager" field in package.json
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
 | 
			
		||||
      # These cached snapshots are downloaded, providing the reference snapshots.
 | 
			
		||||
      - name: Cache snapshots
 | 
			
		||||
        id: cache-snapshot
 | 
			
		||||
        uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
 | 
			
		||||
        uses: actions/cache/restore@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
 | 
			
		||||
        with:
 | 
			
		||||
          path: ./cypress/snapshots
 | 
			
		||||
          key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
 | 
			
		||||
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        uses: cypress-io/github-action@0da3c06ed8217b912deea9d8ee69630baed1737e # v6.7.6
 | 
			
		||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
			
		||||
        with:
 | 
			
		||||
          runTests: false
 | 
			
		||||
 | 
			
		||||
@@ -116,7 +117,7 @@ jobs:
 | 
			
		||||
      # Install NPM dependencies, cache them correctly
 | 
			
		||||
      # and run all Cypress tests
 | 
			
		||||
      - name: Cypress run
 | 
			
		||||
        uses: cypress-io/github-action@0da3c06ed8217b912deea9d8ee69630baed1737e # v6.7.6
 | 
			
		||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
			
		||||
        id: cypress
 | 
			
		||||
        with:
 | 
			
		||||
          install: false
 | 
			
		||||
@@ -125,21 +126,20 @@ jobs:
 | 
			
		||||
          browser: chrome
 | 
			
		||||
          # Disable recording if we don't have an API key
 | 
			
		||||
          # e.g. if this action was run from a fork
 | 
			
		||||
          record: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
 | 
			
		||||
          record: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY != '' }}
 | 
			
		||||
        env:
 | 
			
		||||
          CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
 | 
			
		||||
          VITEST_COVERAGE: true
 | 
			
		||||
          ARGOS_PARALLEL: ${{ env.RUN_VISUAL_TEST == 'true' }}
 | 
			
		||||
          ARGOS_PARALLEL_TOTAL: ${{ env.RUN_VISUAL_TEST == 'true' && strategy.job-total || 1 }}
 | 
			
		||||
          ARGOS_PARALLEL_INDEX: ${{ env.RUN_VISUAL_TEST == 'true' && matrix.containers || 1 }}
 | 
			
		||||
          CYPRESS_COMMIT: ${{ github.sha }}
 | 
			
		||||
          ARGOS_TOKEN: ${{ secrets.ARGOS_TOKEN }}
 | 
			
		||||
          ARGOS_PARALLEL: true
 | 
			
		||||
          ARGOS_PARALLEL_TOTAL: ${{ strategy.job-total }}
 | 
			
		||||
          ARGOS_PARALLEL_INDEX: ${{ matrix.containers }}
 | 
			
		||||
          CYPRESS_RECORD_KEY: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY || ''}}
 | 
			
		||||
          SPLIT: ${{ strategy.job-total }}
 | 
			
		||||
          SPLIT_INDEX: ${{ strategy.job-index }}
 | 
			
		||||
          SPLIT_FILE: 'cypress/timings.json'
 | 
			
		||||
          VITEST_COVERAGE: true
 | 
			
		||||
 | 
			
		||||
      - name: Upload Coverage to Codecov
 | 
			
		||||
        uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
 | 
			
		||||
        uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1
 | 
			
		||||
        # Run step only pushes to develop and pull_requests
 | 
			
		||||
        if: ${{ steps.cypress.conclusion == 'success' && (github.event_name == 'pull_request' || github.ref == 'refs/heads/develop')}}
 | 
			
		||||
        with:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							@@ -29,17 +29,17 @@ jobs:
 | 
			
		||||
      # lychee only uses the GITHUB_TOKEN to avoid rate-limiting
 | 
			
		||||
      contents: read
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - name: Restore lychee cache
 | 
			
		||||
        uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
 | 
			
		||||
        uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
 | 
			
		||||
        with:
 | 
			
		||||
          path: .lycheecache
 | 
			
		||||
          key: cache-lychee-${{ github.sha }}
 | 
			
		||||
          restore-keys: cache-lychee-
 | 
			
		||||
 | 
			
		||||
      - name: Link Checker
 | 
			
		||||
        uses: lycheeverse/lychee-action@c053181aa0c3d17606addfe97a9075a32723548a # v1.9.3
 | 
			
		||||
        uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 # v2.3.0
 | 
			
		||||
        with:
 | 
			
		||||
          args: >-
 | 
			
		||||
            --config .github/lychee.toml
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							@@ -15,7 +15,7 @@ jobs:
 | 
			
		||||
  docker-lint:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - uses: hadolint/hadolint-action@54c9adbab1582c2ef04b2016b760714a4bfde3cf # v3.1.0
 | 
			
		||||
        with:
 | 
			
		||||
@@ -23,13 +23,13 @@ jobs:
 | 
			
		||||
  lint:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
        # uses version from "packageManager" field in package.json
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          cache: pnpm
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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@3f0f87098bd6b5c5b9a36d49c41d998ea58f9348 # v6.0.0
 | 
			
		||||
        uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
 | 
			
		||||
        with:
 | 
			
		||||
          config-name: pr-labeler.yml
 | 
			
		||||
          disable-autolabeler: false
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							@@ -23,12 +23,12 @@ jobs:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          cache: pnpm
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
@@ -37,7 +37,7 @@ jobs:
 | 
			
		||||
        run: pnpm install --frozen-lockfile
 | 
			
		||||
 | 
			
		||||
      - name: Setup Pages
 | 
			
		||||
        uses: actions/configure-pages@1f0c5cde4bc74cd7e1254d0cb4de8d49e9068c7d # v4.0.0
 | 
			
		||||
        uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0
 | 
			
		||||
 | 
			
		||||
      - name: Run Build
 | 
			
		||||
        run: pnpm --filter mermaid run docs:build:vitepress
 | 
			
		||||
 
 | 
			
		||||
@@ -9,14 +9,14 @@ jobs:
 | 
			
		||||
  publish-preview:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 0
 | 
			
		||||
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          cache: pnpm
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/release-preview.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/release-preview.yml
									
									
									
									
										vendored
									
									
								
							@@ -26,12 +26,12 @@ jobs:
 | 
			
		||||
    timeout-minutes: 5
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Repo
 | 
			
		||||
        uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
 | 
			
		||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          cache: pnpm
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							@@ -21,12 +21,12 @@ jobs:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Repo
 | 
			
		||||
        uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
 | 
			
		||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          cache: pnpm
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
@@ -36,7 +36,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
      - name: Create Release Pull Request or Publish to npm
 | 
			
		||||
        id: changesets
 | 
			
		||||
        uses: changesets/action@3de3850952bec538fde60aac71731376e57b9b57 # v1.4.8
 | 
			
		||||
        uses: changesets/action@c8bada60c408975afd1a20b3db81d6eee6789308 # v1.4.9
 | 
			
		||||
        with:
 | 
			
		||||
          version: pnpm changeset:version
 | 
			
		||||
          publish: pnpm changeset:publish
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/scorecard.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/scorecard.yml
									
									
									
									
										vendored
									
									
								
							@@ -16,22 +16,22 @@ jobs:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout code
 | 
			
		||||
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
        with:
 | 
			
		||||
          persist-credentials: false
 | 
			
		||||
      - name: Run analysis
 | 
			
		||||
        uses: ossf/scorecard-action@dc50aa9510b46c811795eb24b2f1ba02a914e534 # v2.3.3
 | 
			
		||||
        uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1
 | 
			
		||||
        with:
 | 
			
		||||
          results_file: results.sarif
 | 
			
		||||
          results_format: sarif
 | 
			
		||||
          publish_results: true
 | 
			
		||||
      - name: Upload artifact
 | 
			
		||||
        uses: actions/upload-artifact@97a0fba1372883ab732affbe8f94b823f91727db # v3.pre.node20
 | 
			
		||||
        uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
 | 
			
		||||
        with:
 | 
			
		||||
          name: SARIF file
 | 
			
		||||
          path: results.sarif
 | 
			
		||||
          retention-days: 5
 | 
			
		||||
      - name: Upload to code-scanning
 | 
			
		||||
        uses: github/codeql-action/upload-sarif@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12
 | 
			
		||||
        uses: github/codeql-action/upload-sarif@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
 | 
			
		||||
        with:
 | 
			
		||||
          sarif_file: results.sarif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							@@ -9,13 +9,13 @@ jobs:
 | 
			
		||||
  unit-test:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
        # uses version from "packageManager" field in package.json
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          cache: pnpm
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
@@ -43,7 +43,7 @@ jobs:
 | 
			
		||||
          pnpm test:check:tsc
 | 
			
		||||
 | 
			
		||||
      - name: Upload Coverage to Codecov
 | 
			
		||||
        uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
 | 
			
		||||
        uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1
 | 
			
		||||
        # Run step only pushes to develop and pull_requests
 | 
			
		||||
        if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/develop' }}
 | 
			
		||||
        with:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/workflows/update-browserlist.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/update-browserlist.yml
									
									
									
									
										vendored
									
									
								
							@@ -8,8 +8,8 @@ jobs:
 | 
			
		||||
  update-browser-list:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
 | 
			
		||||
      - uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v4.0.0
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
      - run: npx update-browserslist-db@latest
 | 
			
		||||
      - name: Commit changes
 | 
			
		||||
        uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
 | 
			
		||||
@@ -19,7 +19,7 @@ jobs:
 | 
			
		||||
          message: 'chore: update browsers list'
 | 
			
		||||
          push: false
 | 
			
		||||
      - name: Create Pull Request
 | 
			
		||||
        uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0
 | 
			
		||||
        uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6
 | 
			
		||||
        with:
 | 
			
		||||
          branch: update-browserslist
 | 
			
		||||
          title: Update Browserslist
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -52,3 +52,4 @@ vite.config.ts.timestamp-*
 | 
			
		||||
 | 
			
		||||
# autogenereated by langium-cli
 | 
			
		||||
generated/
 | 
			
		||||
.cursor/*
 | 
			
		||||
 
 | 
			
		||||
@@ -1 +1 @@
 | 
			
		||||
20.12.2
 | 
			
		||||
22.14.0
 | 
			
		||||
 
 | 
			
		||||
@@ -256,7 +256,7 @@ mermaid.run({
 | 
			
		||||
- Problem showing graph with php on localhost [\#502](https://github.com/knsv/mermaid/issues/502)
 | 
			
		||||
- logLevel's option doesnt work at 7.0.0 [\#501](https://github.com/knsv/mermaid/issues/501)
 | 
			
		||||
- How do I get the log for a render or parse attempt? [\#500](https://github.com/knsv/mermaid/issues/500)
 | 
			
		||||
- Mermaid neutral style style to built in latest release [\#499](https://github.com/knsv/mermaid/issues/499)
 | 
			
		||||
- Mermaid neutral style to built in latest release [\#499](https://github.com/knsv/mermaid/issues/499)
 | 
			
		||||
- Any plans for adding a typescript definition file? [\#495](https://github.com/knsv/mermaid/issues/495)
 | 
			
		||||
- Gantt diagrams too narrow [\#493](https://github.com/knsv/mermaid/issues/493)
 | 
			
		||||
- Flowchart edge labels placement [\#490](https://github.com/knsv/mermaid/issues/490)
 | 
			
		||||
@@ -833,7 +833,7 @@ mermaid.run({
 | 
			
		||||
- Merge pull request \#1 from knsv/master [\#96](https://github.com/knsv/mermaid/pull/96) ([gkchic](https://github.com/gkchic))
 | 
			
		||||
- Removed duplicated section in flowchart docs [\#94](https://github.com/knsv/mermaid/pull/94) ([kaime](https://github.com/kaime))
 | 
			
		||||
- Grammar changes to sequence page [\#93](https://github.com/knsv/mermaid/pull/93) ([gkchic](https://github.com/gkchic))
 | 
			
		||||
- Github buttons [\#89](https://github.com/knsv/mermaid/pull/89) ([gkchic](https://github.com/gkchic))
 | 
			
		||||
- GitHub buttons [\#89](https://github.com/knsv/mermaid/pull/89) ([gkchic](https://github.com/gkchic))
 | 
			
		||||
- Template change [\#88](https://github.com/knsv/mermaid/pull/88) ([gkchic](https://github.com/gkchic))
 | 
			
		||||
 | 
			
		||||
## [0.3.1](https://github.com/knsv/mermaid/tree/0.3.1) (2015-01-05)
 | 
			
		||||
@@ -1002,4 +1002,4 @@ mermaid.run({
 | 
			
		||||
 | 
			
		||||
## [0.1.0](https://github.com/knsv/mermaid/tree/0.1.0) (2014-11-16)
 | 
			
		||||
 | 
			
		||||
\* _This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)_
 | 
			
		||||
\* _This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/GitHub-Changelog-Generator)_
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
FROM node:20.12.2-alpine3.19@sha256:7a91aa397f2e2dfbfcdad2e2d72599f374e0b0172be1d86eeb73f1d33f36a4b2
 | 
			
		||||
FROM node:22.12.0-alpine3.19@sha256:40dc4b415c17b85bea9be05314b4a753f45a4e1716bb31c01182e6c53d51a654
 | 
			
		||||
 | 
			
		||||
USER 0:0
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										42
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								README.md
									
									
									
									
									
								
							@@ -15,7 +15,7 @@ Generate diagrams from markdown-like text.
 | 
			
		||||
<a href="https://mermaid.live/"><b>Live Editor!</b></a>
 | 
			
		||||
</p>
 | 
			
		||||
<p align="center">
 | 
			
		||||
 <a href="https://mermaid.js.org">📖 Documentation</a> | <a href="https://mermaid.js.org/intro/">🚀 Getting Started</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/AgrbSrBer3" title="Discord invite">🙌 Join Us</a>
 | 
			
		||||
 <a href="https://mermaid.js.org">📖 Documentation</a> | <a href="https://mermaid.js.org/intro/">🚀 Getting Started</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/sKeNQX4Wtj" title="Discord invite">🙌 Join Us</a>
 | 
			
		||||
</p>
 | 
			
		||||
<p align="center">
 | 
			
		||||
<a href="./README.zh-CN.md">简体中文</a>
 | 
			
		||||
@@ -33,7 +33,7 @@ Try Live Editor previews of future releases: <a href="https://develop.git.mermai
 | 
			
		||||
[](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop)
 | 
			
		||||
[](https://www.jsdelivr.com/package/npm/mermaid)
 | 
			
		||||
[](https://www.npmjs.com/package/mermaid)
 | 
			
		||||
[](https://discord.gg/AgrbSrBer3)
 | 
			
		||||
[](https://discord.gg/sKeNQX4Wtj)
 | 
			
		||||
[](https://twitter.com/mermaidjs_)
 | 
			
		||||
[](https://argos-ci.com?utm_source=mermaid&utm_campaign=oss)
 | 
			
		||||
[](https://securityscorecards.dev/viewer/?uri=github.com/mermaid-js/mermaid)
 | 
			
		||||
@@ -44,7 +44,7 @@ Try Live Editor previews of future releases: <a href="https://develop.git.mermai
 | 
			
		||||
 | 
			
		||||
**Thanks to all involved, people committing pull requests, people answering questions! 🙏**
 | 
			
		||||
 | 
			
		||||
<a href="https://mermaid.js.org/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a>
 | 
			
		||||
<a href="https://mermaid.js.org/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt='Banner for "The Official Guide to Mermaid.js" book'></a>
 | 
			
		||||
 | 
			
		||||
## Table of content
 | 
			
		||||
 | 
			
		||||
@@ -95,6 +95,10 @@ In our release process we rely heavily on visual regression tests using [applito
 | 
			
		||||
 | 
			
		||||
<!-- </Main description> -->
 | 
			
		||||
 | 
			
		||||
## Mermaid AI Bot
 | 
			
		||||
 | 
			
		||||
[Mermaid](https://codeparrot.ai/oracle?owner=mermaid-js&repo=mermaid) Bot will help you understand this repository better. You can ask for code examples, installation guide, debugging help and much more.
 | 
			
		||||
 | 
			
		||||
## Examples
 | 
			
		||||
 | 
			
		||||
**The following are some examples of the diagrams, charts and graphs that can be made using Mermaid. Click here to jump into the [text syntax](https://mermaid.js.org/intro/syntax-reference.html).**
 | 
			
		||||
@@ -253,6 +257,34 @@ pie
 | 
			
		||||
 | 
			
		||||
### Git graph [experimental - <a href="https://mermaid.live/edit#pako:eNqNkMFugzAMhl8F-VyVAR1tOW_aA-zKxSSGRCMJCk6lCvHuNZPKZdM0n-zf3_8r8QIqaIIGMqnB8kfEybQ--y4VnLP8-9RF9Mpkmm40hmlnDKmvkPiH_kfS7nFo_VN0FAf6XwocQGgxa_nGsm1bYEOOWmik1dRjGrmF1q-Cpkkj07u2HCI0PY4zHQATh8-7V9BwTPSE3iwOEd1OjQE1iWkBvk_bzQY7s0Sq4Hs7bHqKo8iGeZqbPN_WR7mpSd1RHpvPVhuMbG7XOq_L-oJlRfW5wteq0qorrpe-PBW9Pr8UJcK6rg-BLYPQ">live editor</a>]
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
gitGraph
 | 
			
		||||
  commit
 | 
			
		||||
  commit
 | 
			
		||||
  branch develop
 | 
			
		||||
  checkout develop
 | 
			
		||||
  commit
 | 
			
		||||
  commit
 | 
			
		||||
  checkout main
 | 
			
		||||
  merge develop
 | 
			
		||||
  commit
 | 
			
		||||
  commit
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```mermaid
 | 
			
		||||
gitGraph
 | 
			
		||||
  commit
 | 
			
		||||
  commit
 | 
			
		||||
  branch develop
 | 
			
		||||
  checkout develop
 | 
			
		||||
  commit
 | 
			
		||||
  commit
 | 
			
		||||
  checkout main
 | 
			
		||||
  merge develop
 | 
			
		||||
  commit
 | 
			
		||||
  commit
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Bar chart (using gantt chart) [<a href="https://mermaid.js.org/syntax/gantt.html">docs</a> - <a href="https://mermaid.live/edit#pako:eNptkU1vhCAQhv8KIenNugiI4rkf6bmXpvEyFVxJFDYyNt1u9r8X63Z7WQ9m5pknLzieaBeMpQ3dg0dsPUkPOhwteXZIXmJcbCT3xMAxkuh8Z8kIEclyMIB209fqKcwTICFvG4IvFy_oLrZ-g9F26ILfQgvNFN94VaRXQ1iWqpumZBcu1J8p1E1TXDx59eQNr5LyEqjJn6hv5QnGNlxevZJmdLLpy5xJSzut45biYCfb0iaVxvawjNjS1p-TCguG16PvaIPzYjO67e3BwX6GiTY9jPFKH43DMF_hGMDY1J4oHg-_f8hFTJFd8L3br3yZx4QHxENsdrt1nO8dDstH3oVpF50ZYMbhU6ud4qoGLqyqBJRCmO6j0HXPZdGbihUc6Pmc0QP49xD-b5X69ZQv2gjO81IwzWqhC1lKrjJ6pA3nVS7SMiVjrKirWlYp5fs3osgrWeo00lorLWvOzz8JVbXm">live editor</a>]
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
@@ -419,7 +451,7 @@ For public sites, it can be precarious to retrieve text from users on the intern
 | 
			
		||||
 | 
			
		||||
As an extra level of security for sites with external users we are happy to introduce a new security level in which the diagram is rendered in a sandboxed iframe preventing javascript in the code from being executed. This is a great step forward for better security.
 | 
			
		||||
 | 
			
		||||
_Unfortunately you can not have a cake and eat it at the same time which in this case means that some of the interactive functionality gets blocked along with the possible malicious code._
 | 
			
		||||
_Unfortunately you cannot have a cake and eat it at the same time which in this case means that some of the interactive functionality gets blocked along with the possible malicious code._
 | 
			
		||||
 | 
			
		||||
## Reporting vulnerabilities
 | 
			
		||||
 | 
			
		||||
@@ -435,7 +467,7 @@ A quick note from Knut Sveidqvist:
 | 
			
		||||
>
 | 
			
		||||
> _Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._
 | 
			
		||||
>
 | 
			
		||||
> _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_
 | 
			
		||||
> _Thank you to the ever-growing list of [contributors](https://github.com/mermaid-js/mermaid/graphs/contributors) that brought the project this far!_
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ Mermaid
 | 
			
		||||
<a href="https://mermaid.live/"><b>实时编辑器!</b></a>
 | 
			
		||||
</p>
 | 
			
		||||
<p align="center">
 | 
			
		||||
 <a href="https://mermaid.js.org">📖 文档</a> | <a href="https://mermaid.js.org/intro/">🚀 入门</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/AgrbSrBer3" title="Discord invite">🙌 加入我们</a>
 | 
			
		||||
 <a href="https://mermaid.js.org">📖 文档</a> | <a href="https://mermaid.js.org/intro/">🚀 入门</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/sKeNQX4Wtj" title="Discord invite">🙌 加入我们</a>
 | 
			
		||||
</p>
 | 
			
		||||
<p align="center">
 | 
			
		||||
<a href="./README.md">English</a>
 | 
			
		||||
@@ -34,7 +34,7 @@ Mermaid
 | 
			
		||||
[](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop)
 | 
			
		||||
[](https://www.jsdelivr.com/package/npm/mermaid)
 | 
			
		||||
[](https://www.npmjs.com/package/mermaid)
 | 
			
		||||
[](https://discord.gg/AgrbSrBer3)
 | 
			
		||||
[](https://discord.gg/sKeNQX4Wtj)
 | 
			
		||||
[](https://twitter.com/mermaidjs_)
 | 
			
		||||
 | 
			
		||||
<img src="./img/header.png" alt="" />
 | 
			
		||||
@@ -43,13 +43,13 @@ Mermaid
 | 
			
		||||
 | 
			
		||||
**感谢所有参与进来提交 PR,解答疑问的人们! 🙏**
 | 
			
		||||
 | 
			
		||||
<a href="https://mermaid.js.org/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a>
 | 
			
		||||
<a href="https://mermaid.js.org/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt='Banner for "The Official Guide to Mermaid.js" book'></a>
 | 
			
		||||
 | 
			
		||||
## 关于 Mermaid
 | 
			
		||||
 | 
			
		||||
<!-- <Main description>   -->
 | 
			
		||||
 | 
			
		||||
Mermaid 是一个基于 Javascript 的图表绘制工具,通过解析类 Markdown 的文本语法来实现图表的创建和动态修改。Mermaid 诞生的主要目的是让文档的更新能够及时跟上开发进度。
 | 
			
		||||
Mermaid 是一个基于 JavaScript 的图表绘制工具,通过解析类 Markdown 的文本语法来实现图表的创建和动态修改。Mermaid 诞生的主要目的是让文档的更新能够及时跟上开发进度。
 | 
			
		||||
 | 
			
		||||
> Doc-Rot 是 Mermaid 致力于解决的一个难题。
 | 
			
		||||
 | 
			
		||||
@@ -358,7 +358,7 @@ _很不幸的是,鱼与熊掌不可兼得,在这个场景下它意味着在
 | 
			
		||||
 | 
			
		||||
> _特别感谢 [d3](https://d3js.org/) 和 [dagre-d3](https://github.com/cpettitt/dagre-d3) 这两个优秀的项目,它们提供了图形布局和绘图工具库!_ > _同样感谢 [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) 提供了时序图语法的使用。 感谢 Jessica Peter 提供了甘特图渲染的灵感。_ > _感谢 [Tyler Long](https://github.com/tylerlong) 从 2017 年四月开始成为了项目的合作者。_
 | 
			
		||||
>
 | 
			
		||||
> _感谢越来越多的 [贡献者们](https://github.com/knsv/mermaid/graphs/contributors),没有你们,就没有这个项目的今天!_
 | 
			
		||||
> _感谢越来越多的 [贡献者们](https://github.com/mermaid-js/mermaid/graphs/contributors),没有你们,就没有这个项目的今天!_
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
import eyesPlugin from '@applitools/eyes-cypress';
 | 
			
		||||
import { registerArgosTask } from '@argos-ci/cypress/task';
 | 
			
		||||
import coverage from '@cypress/code-coverage/task';
 | 
			
		||||
import coverage from '@cypress/code-coverage/task.js';
 | 
			
		||||
import { defineConfig } from 'cypress';
 | 
			
		||||
import { addMatchImageSnapshotPlugin } from 'cypress-image-snapshot/plugin';
 | 
			
		||||
import { addMatchImageSnapshotPlugin } from 'cypress-image-snapshot/plugin.js';
 | 
			
		||||
import cypressSplit from 'cypress-split';
 | 
			
		||||
 | 
			
		||||
export default eyesPlugin(
 | 
			
		||||
@@ -23,12 +23,10 @@ export default eyesPlugin(
 | 
			
		||||
        });
 | 
			
		||||
        // copy any needed variables from process.env to config.env
 | 
			
		||||
        config.env.useAppli = process.env.USE_APPLI ? true : false;
 | 
			
		||||
        config.env.useArgos = !!process.env.CI;
 | 
			
		||||
        config.env.useArgos = process.env.RUN_VISUAL_TEST === 'true';
 | 
			
		||||
 | 
			
		||||
        if (config.env.useArgos) {
 | 
			
		||||
          registerArgosTask(on, config, {
 | 
			
		||||
            token: 'fc3a35cf5200db928d65b2047861582d9444032b',
 | 
			
		||||
          });
 | 
			
		||||
          registerArgosTask(on, config);
 | 
			
		||||
        } else {
 | 
			
		||||
          addMatchImageSnapshotPlugin(on, config);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -132,3 +132,10 @@ export const verifyScreenshot = (name: string): void => {
 | 
			
		||||
    cy.matchImageSnapshot(name);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const verifyNumber = (value: number, expected: number, deltaPercent = 10): void => {
 | 
			
		||||
  expect(value).to.be.within(
 | 
			
		||||
    expected * (1 - deltaPercent / 100),
 | 
			
		||||
    expected * (1 + deltaPercent / 100)
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ describe('Interaction', () => {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('Graph: should handle a click on a node with a bound url', () => {
 | 
			
		||||
      // When there is a URL, cy.contains selects the a tag instead of the span. The .node is a child of a, so we have to use find instead of parent.
 | 
			
		||||
      // When there is a URL, `cy.contains()` selects the `a` tag instead of the `span` tag. The .node is a child of `a`, so we have to use `find()` instead of `parent`.
 | 
			
		||||
      cy.contains('URLTest1').find('.node').click();
 | 
			
		||||
      cy.location().should(({ href }) => {
 | 
			
		||||
        expect(href).to.eq('http://localhost:9000/empty.html');
 | 
			
		||||
@@ -146,7 +146,7 @@ describe('Interaction', () => {
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('Interaction - security level other, missspelling', () => {
 | 
			
		||||
  describe('Interaction - security level other, misspelling', () => {
 | 
			
		||||
    beforeEach(() => {
 | 
			
		||||
      cy.visit('http://localhost:9000/click_security_other.html');
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,25 @@ describe.skip('architecture diagram', () => {
 | 
			
		||||
            `
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('should render a simple architecture diagram with titleAndAccessibilities', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `architecture-beta
 | 
			
		||||
          title Simple Architecture Diagram
 | 
			
		||||
          accTitle: Accessibility Title
 | 
			
		||||
          accDescr: Accessibility Description
 | 
			
		||||
          group api(cloud)[API]
 | 
			
		||||
 | 
			
		||||
          service db(database)[Database] in api
 | 
			
		||||
          service disk1(disk)[Storage] in api
 | 
			
		||||
          service disk2(disk)[Storage] in api
 | 
			
		||||
          service server(server)[Server] in api
 | 
			
		||||
 | 
			
		||||
          db:L -- R:server
 | 
			
		||||
          disk1:T -- B:server
 | 
			
		||||
          disk2:T -- B:db
 | 
			
		||||
      `
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('should render an architecture diagram with groups within groups', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `architecture-beta
 | 
			
		||||
@@ -171,6 +190,58 @@ describe.skip('architecture diagram', () => {
 | 
			
		||||
            `
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render an architecture diagram with a reasonable height', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `architecture-beta
 | 
			
		||||
              group federated(cloud)[Federated Environment]
 | 
			
		||||
                  service server1(server)[System] in federated
 | 
			
		||||
                  service edge(server)[Edge Device] in federated
 | 
			
		||||
                  server1:R -- L:edge
 | 
			
		||||
 | 
			
		||||
              group on_prem(cloud)[Hub]
 | 
			
		||||
                  service firewall(server)[Firewall Device] in on_prem
 | 
			
		||||
                  service server(server)[Server] in on_prem
 | 
			
		||||
                  firewall:R -- L:server
 | 
			
		||||
 | 
			
		||||
                  service db1(database)[db1] in on_prem
 | 
			
		||||
                  service db2(database)[db2] in on_prem
 | 
			
		||||
                  service db3(database)[db3] in on_prem
 | 
			
		||||
                  service db4(database)[db4] in on_prem
 | 
			
		||||
                  service db5(database)[db5] in on_prem
 | 
			
		||||
                  service db6(database)[db6] in on_prem
 | 
			
		||||
 | 
			
		||||
                  junction mid in on_prem
 | 
			
		||||
                  server:B -- T:mid
 | 
			
		||||
 | 
			
		||||
                  junction 1Leftofmid in on_prem
 | 
			
		||||
                  1Leftofmid:R -- L:mid
 | 
			
		||||
                  1Leftofmid:B -- T:db1
 | 
			
		||||
 | 
			
		||||
                  junction 2Leftofmid in on_prem
 | 
			
		||||
                  2Leftofmid:R -- L:1Leftofmid
 | 
			
		||||
                  2Leftofmid:B -- T:db2
 | 
			
		||||
 | 
			
		||||
                  junction 3Leftofmid in on_prem
 | 
			
		||||
                  3Leftofmid:R -- L:2Leftofmid
 | 
			
		||||
                  3Leftofmid:B -- T:db3
 | 
			
		||||
 | 
			
		||||
                  junction 1RightOfMid in on_prem
 | 
			
		||||
                  mid:R -- L:1RightOfMid
 | 
			
		||||
                  1RightOfMid:B -- T:db4
 | 
			
		||||
                  
 | 
			
		||||
                  junction 2RightOfMid in on_prem
 | 
			
		||||
                  1RightOfMid:R -- L:2RightOfMid
 | 
			
		||||
                  2RightOfMid:B -- T:db5        
 | 
			
		||||
                  
 | 
			
		||||
                  junction 3RightOfMid in on_prem
 | 
			
		||||
                  2RightOfMid:R -- L:3RightOfMid
 | 
			
		||||
                  3RightOfMid:B -- T:db6         
 | 
			
		||||
 | 
			
		||||
                  edge:R -- L:firewall
 | 
			
		||||
      `
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// Skipped as the layout is not deterministic, and causes issues in E2E tests.
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ describe('Block diagram', () => {
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('BL2: should handle colums statement in sub-blocks', () => {
 | 
			
		||||
  it('BL2: should handle columns statement in sub-blocks', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `block-beta
 | 
			
		||||
  id1["Hello"]
 | 
			
		||||
@@ -30,7 +30,7 @@ describe('Block diagram', () => {
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('BL3: should align block widths and handle colums statement in sub-blocks', () => {
 | 
			
		||||
  it('BL3: should align block widths and handle columns statement in sub-blocks', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `block-beta
 | 
			
		||||
  block
 | 
			
		||||
@@ -46,7 +46,7 @@ describe('Block diagram', () => {
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('BL4: should align block widths and handle colums statements in deeper sub-blocks then 1 level', () => {
 | 
			
		||||
  it('BL4: should align block widths and handle columns statements in deeper sub-blocks then 1 level', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `block-beta
 | 
			
		||||
  columns 1
 | 
			
		||||
@@ -66,7 +66,7 @@ describe('Block diagram', () => {
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('BL5: should align block widths and handle colums statements in deeper sub-blocks then 1 level (alt)', () => {
 | 
			
		||||
  it('BL5: should align block widths and handle columns statements in deeper sub-blocks then 1 level (alt)', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `block-beta
 | 
			
		||||
  columns 1
 | 
			
		||||
@@ -236,7 +236,7 @@ describe('Block diagram', () => {
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('BL17: width alignment - blocks shold be equal in width', () => {
 | 
			
		||||
  it('BL17: width alignment - blocks should be equal in width', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `block-beta
 | 
			
		||||
    A("This is the text")
 | 
			
		||||
 
 | 
			
		||||
@@ -429,7 +429,7 @@ describe('Class diagram', () => {
 | 
			
		||||
    classDiagram
 | 
			
		||||
      class \`This\nTitle\nHas\nMany\nNewlines\` {
 | 
			
		||||
        +String Also
 | 
			
		||||
        -Stirng Many
 | 
			
		||||
        -String Many
 | 
			
		||||
        #int Members
 | 
			
		||||
        +And()
 | 
			
		||||
        -Many()
 | 
			
		||||
@@ -443,7 +443,7 @@ describe('Class diagram', () => {
 | 
			
		||||
    classDiagram
 | 
			
		||||
      class \`This\nTitle\nHas\nMany\nNewlines\` {
 | 
			
		||||
        +String Also
 | 
			
		||||
        -Stirng Many
 | 
			
		||||
        -String Many
 | 
			
		||||
        #int Members
 | 
			
		||||
        +And()
 | 
			
		||||
        -Many()
 | 
			
		||||
@@ -459,7 +459,7 @@ describe('Class diagram', () => {
 | 
			
		||||
      namespace testingNamespace {
 | 
			
		||||
      class \`This\nTitle\nHas\nMany\nNewlines\` {
 | 
			
		||||
        +String Also
 | 
			
		||||
        -Stirng Many
 | 
			
		||||
        -String Many
 | 
			
		||||
        #int Members
 | 
			
		||||
        +And()
 | 
			
		||||
        -Many()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										652
									
								
								cypress/integration/rendering/erDiagram-unified.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										652
									
								
								cypress/integration/rendering/erDiagram-unified.spec.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,652 @@
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
 | 
			
		||||
 | 
			
		||||
const testOptions = [
 | 
			
		||||
  { description: '', options: { logLevel: 1 } },
 | 
			
		||||
  { description: 'ELK: ', options: { logLevel: 1, layout: 'elk' } },
 | 
			
		||||
  { description: 'HD: ', options: { logLevel: 1, look: 'handDrawn' } },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
describe('Entity Relationship Diagram Unified', () => {
 | 
			
		||||
  testOptions.forEach(({ description, options }) => {
 | 
			
		||||
    it(`${description}should render a simple ER diagram`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
          ORDER ||--|{ LINE-ITEM : contains
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a simple ER diagram without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
          ORDER ||--|{ LINE-ITEM : contains
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render an ER diagram with a recursive relationship`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          CUSTOMER ||..o{ CUSTOMER : refers
 | 
			
		||||
          CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
          ORDER ||--|{ LINE-ITEM : contains
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render an ER diagram with multiple relationships between the same two entities`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          CUSTOMER ||--|{ ADDRESS : "invoiced at"
 | 
			
		||||
          CUSTOMER ||--|{ ADDRESS : "receives goods at"
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a cyclical ER diagram`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          A ||--|{ B : likes
 | 
			
		||||
          B ||--|{ C : likes
 | 
			
		||||
          C ||--|{ A : likes
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a not-so-simple ER diagram`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          CUSTOMER }|..|{ DELIVERY-ADDRESS : has
 | 
			
		||||
          CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
          CUSTOMER ||--o{ INVOICE : "liable for"
 | 
			
		||||
          DELIVERY-ADDRESS ||--o{ ORDER : receives
 | 
			
		||||
          INVOICE ||--|{ ORDER : covers
 | 
			
		||||
          ORDER ||--|{ ORDER-ITEM : includes
 | 
			
		||||
          PRODUCT-CATEGORY ||--|{ PRODUCT : contains
 | 
			
		||||
          PRODUCT ||--o{ ORDER-ITEM : "ordered in"
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a not-so-simple ER diagram without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          CUSTOMER }|..|{ DELIVERY-ADDRESS : has
 | 
			
		||||
          CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
          CUSTOMER ||--o{ INVOICE : "liable for"
 | 
			
		||||
          DELIVERY-ADDRESS ||--o{ ORDER : receives
 | 
			
		||||
          INVOICE ||--|{ ORDER : covers
 | 
			
		||||
          ORDER ||--|{ ORDER-ITEM : includes
 | 
			
		||||
          PRODUCT-CATEGORY ||--|{ PRODUCT : contains
 | 
			
		||||
          PRODUCT ||--o{ ORDER-ITEM : "ordered in"
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render multiple ER diagrams`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        [
 | 
			
		||||
          `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
          ORDER ||--|{ LINE-ITEM : contains
 | 
			
		||||
        `,
 | 
			
		||||
          `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
          ORDER ||--|{ LINE-ITEM : contains
 | 
			
		||||
        `,
 | 
			
		||||
        ],
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render an ER diagram with blank or empty labels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          BOOK }|..|{ AUTHOR : ""
 | 
			
		||||
          BOOK }|..|{ GENRE : " "
 | 
			
		||||
          AUTHOR }|..|{ GENRE : "  "
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities that have no relationships`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          DEAD_PARROT
 | 
			
		||||
          HERMIT
 | 
			
		||||
          RECLUSE
 | 
			
		||||
          SOCIALITE }o--o{ SOCIALITE : "interacts with"
 | 
			
		||||
          RECLUSE }o--o{ SOCIALITE : avoids
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with and without attributes`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          BOOK { string title }
 | 
			
		||||
          AUTHOR }|..|{ BOOK : writes
 | 
			
		||||
          BOOK { float price }
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with generic and array attributes`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          BOOK {
 | 
			
		||||
            string title
 | 
			
		||||
            string[] authors
 | 
			
		||||
            type~T~ type
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with generic and array attributes without htmlLabels`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          BOOK {
 | 
			
		||||
            string title
 | 
			
		||||
            string[] authors
 | 
			
		||||
            type~T~ type
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with length in attributes type`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          CLUSTER {
 | 
			
		||||
            varchar(99) name
 | 
			
		||||
            string(255) description
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with length in attributes type without htmlLabels`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          CLUSTER {
 | 
			
		||||
            varchar(99) name
 | 
			
		||||
            string(255) description
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities and attributes with big and small entity names`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          PRIVATE_FINANCIAL_INSTITUTION {
 | 
			
		||||
            string name
 | 
			
		||||
            int    turnover
 | 
			
		||||
          }
 | 
			
		||||
          PRIVATE_FINANCIAL_INSTITUTION ||..|{ EMPLOYEE : employs
 | 
			
		||||
          EMPLOYEE { bool officer_of_firm }
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities and attributes with big and small entity names without htmlLabels`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          PRIVATE_FINANCIAL_INSTITUTION {
 | 
			
		||||
            string name
 | 
			
		||||
            int    turnover
 | 
			
		||||
          }
 | 
			
		||||
          PRIVATE_FINANCIAL_INSTITUTION ||..|{ EMPLOYEE : employs
 | 
			
		||||
          EMPLOYEE { bool officer_of_firm }
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with attributes that begin with asterisk`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          BOOK {
 | 
			
		||||
            int         *id
 | 
			
		||||
            string      name
 | 
			
		||||
            varchar(99) summary
 | 
			
		||||
          }
 | 
			
		||||
          BOOK }o..o{ STORE : soldBy
 | 
			
		||||
          STORE {
 | 
			
		||||
            int         *id
 | 
			
		||||
            string      name
 | 
			
		||||
            varchar(50) address
 | 
			
		||||
          }
 | 
			
		||||
          `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with attributes that begin with asterisk without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          BOOK {
 | 
			
		||||
            int         *id
 | 
			
		||||
            string      name
 | 
			
		||||
            varchar(99) summary
 | 
			
		||||
          }
 | 
			
		||||
          BOOK }o..o{ STORE : soldBy
 | 
			
		||||
          STORE {
 | 
			
		||||
            int         *id
 | 
			
		||||
            string      name
 | 
			
		||||
            varchar(50) address
 | 
			
		||||
          }
 | 
			
		||||
          `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with keys`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME {
 | 
			
		||||
          string name PK
 | 
			
		||||
        }
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes
 | 
			
		||||
        BOOK {
 | 
			
		||||
            float price
 | 
			
		||||
            string author FK
 | 
			
		||||
            string title PK
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with keys without htmlLabels`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME {
 | 
			
		||||
          string name PK
 | 
			
		||||
        }
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes
 | 
			
		||||
        BOOK {
 | 
			
		||||
            float price
 | 
			
		||||
            string author FK
 | 
			
		||||
            string title PK
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with comments`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME {
 | 
			
		||||
          string name "comment"
 | 
			
		||||
        }
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes
 | 
			
		||||
        BOOK {
 | 
			
		||||
            string author
 | 
			
		||||
            string title "author comment"
 | 
			
		||||
            float price "price comment"
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with comments without htmlLabels`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME {
 | 
			
		||||
          string name "comment"
 | 
			
		||||
        }
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes
 | 
			
		||||
        BOOK {
 | 
			
		||||
            string author
 | 
			
		||||
            string title "author comment"
 | 
			
		||||
            float price "price comment"
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with keys and comments`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME {
 | 
			
		||||
          string name PK "comment"
 | 
			
		||||
        }
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes
 | 
			
		||||
        BOOK {
 | 
			
		||||
            string description
 | 
			
		||||
            float price "price comment"
 | 
			
		||||
            string title PK "title comment"
 | 
			
		||||
            string author FK
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with keys and comments without htmlLabels`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME {
 | 
			
		||||
          string name PK "comment"
 | 
			
		||||
        }
 | 
			
		||||
        AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes
 | 
			
		||||
        BOOK {
 | 
			
		||||
            string description
 | 
			
		||||
            float price "price comment"
 | 
			
		||||
            string title PK "title comment"
 | 
			
		||||
            string author FK
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with aliases`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
        T1 one or zero to one or more T2 : test
 | 
			
		||||
        T2 one or many optionally to zero or one T3 : test
 | 
			
		||||
        T3 zero or more to zero or many T4 : test
 | 
			
		||||
        T4 many(0) to many(1) T5 : test
 | 
			
		||||
        T5 many optionally to one T6 : test
 | 
			
		||||
        T6 only one optionally to only one T1 : test
 | 
			
		||||
        T4 0+ to 1+ T6 : test
 | 
			
		||||
        T1 1 to 1 T3 : test
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a simple ER diagram with a title`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `---
 | 
			
		||||
  title: simple ER diagram
 | 
			
		||||
  ---
 | 
			
		||||
  erDiagram
 | 
			
		||||
  CUSTOMER ||--o{ ORDER : places
 | 
			
		||||
  ORDER ||--|{ LINE-ITEM : contains
 | 
			
		||||
  `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with entity name aliases`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
        p[Person] {
 | 
			
		||||
          varchar(64) firstName
 | 
			
		||||
          varchar(64) lastName
 | 
			
		||||
        }
 | 
			
		||||
        c["Customer Account"] {
 | 
			
		||||
          varchar(128) email
 | 
			
		||||
        }
 | 
			
		||||
        p ||--o| c : has
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render relationship labels with line breaks`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
        p[Person] {
 | 
			
		||||
            string firstName
 | 
			
		||||
            string lastName
 | 
			
		||||
        }
 | 
			
		||||
        a["Customer Account"] {
 | 
			
		||||
            string email
 | 
			
		||||
        }
 | 
			
		||||
  
 | 
			
		||||
        b["Customer Account Secondary"] {
 | 
			
		||||
          string email
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        c["Customer Account Tertiary"] {
 | 
			
		||||
          string email
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        d["Customer Account Nth"] {
 | 
			
		||||
          string email
 | 
			
		||||
        }
 | 
			
		||||
  
 | 
			
		||||
        p ||--o| a : "has<br />one"
 | 
			
		||||
        p ||--o| b : "has<br />one<br />two"
 | 
			
		||||
        p ||--o| c : "has<br />one<br/>two<br />three"
 | 
			
		||||
        p ||--o| d : "has<br />one<br />two<br/>three<br />...<br/>Nth"
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render an ER diagram with unicode text`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          _**testẽζ➕Ø😀㌕ぼ**_ {
 | 
			
		||||
              *__List~List~int~~sdfds__* **driversLicense** PK "***The l😀icense #***"
 | 
			
		||||
              *string(99)~T~~~~~~* firstName "Only __99__ <br>characters are a<br>llowed dsfsdfsdfsdfs"
 | 
			
		||||
              string last*Name*
 | 
			
		||||
              string __phone__ UK
 | 
			
		||||
              int _age_
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render an ER diagram with unicode text without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      erDiagram
 | 
			
		||||
          _**testẽζ➕Ø😀㌕ぼ**_ {
 | 
			
		||||
              *__List~List~int~~sdfds__* **driversLicense** PK "***The l😀icense #***"
 | 
			
		||||
              *string(99)~T~~~~~~* firstName "Only __99__ <br>characters are a<br>llowed dsfsdfsdfsdfs"
 | 
			
		||||
              string last*Name*
 | 
			
		||||
              string __phone__ UK
 | 
			
		||||
              int _age_
 | 
			
		||||
          }
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render an ER diagram with relationships with unicode text`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
          erDiagram
 | 
			
		||||
            person[😀] {
 | 
			
		||||
                string *first*Name
 | 
			
		||||
                string _**last**Name_
 | 
			
		||||
            }
 | 
			
		||||
            a["*Customer Account*"] {
 | 
			
		||||
                **string** ema*i*l
 | 
			
		||||
            }
 | 
			
		||||
            person ||--o| a : __hẽ😀__
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render an ER diagram with relationships with unicode text without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
          erDiagram
 | 
			
		||||
            person[😀] {
 | 
			
		||||
                string *first*Name
 | 
			
		||||
                string _**last**Name_
 | 
			
		||||
            }
 | 
			
		||||
            a["*Customer Account*"] {
 | 
			
		||||
                **string** ema*i*l
 | 
			
		||||
            }
 | 
			
		||||
            person ||--o| a : __hẽ😀__
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render an ER diagram with TB direction`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
          erDiagram
 | 
			
		||||
          direction TB
 | 
			
		||||
          CAR ||--|{ NAMED-DRIVER : allows
 | 
			
		||||
          PERSON ||..o{ NAMED-DRIVER : is
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render an ER diagram with BT direction`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
          erDiagram
 | 
			
		||||
          direction BT
 | 
			
		||||
          CAR ||--|{ NAMED-DRIVER : allows
 | 
			
		||||
          PERSON ||..o{ NAMED-DRIVER : is
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render an ER diagram with LR direction`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
          erDiagram
 | 
			
		||||
          direction LR
 | 
			
		||||
          CAR ||--|{ NAMED-DRIVER : allows
 | 
			
		||||
          PERSON ||..o{ NAMED-DRIVER : is
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render an ER diagram with RL direction`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
          erDiagram
 | 
			
		||||
          direction RL
 | 
			
		||||
          CAR ||--|{ NAMED-DRIVER : allows
 | 
			
		||||
          PERSON ||..o{ NAMED-DRIVER : is
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with styles applied from style statement`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
            erDiagram
 | 
			
		||||
              c[CUSTOMER]
 | 
			
		||||
              p[PERSON]
 | 
			
		||||
              style c,p fill:#f9f,stroke:blue, color:grey, font-size:24px,font-weight:bold
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with styles applied from style statement without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
            erDiagram
 | 
			
		||||
              c[CUSTOMER]
 | 
			
		||||
              p[PERSON]
 | 
			
		||||
              style c,p fill:#f9f,stroke:blue, color:grey, font-size:24px,font-weight:bold
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with styles applied from class statement`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
            erDiagram
 | 
			
		||||
              c[CUSTOMER]
 | 
			
		||||
              p[PERSON]:::blue
 | 
			
		||||
              classDef bold font-size:24px, font-weight: bold
 | 
			
		||||
              classDef blue stroke:lightblue, color: #0000FF
 | 
			
		||||
              class c,p bold
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with styles applied from class statement without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
            erDiagram
 | 
			
		||||
              c[CUSTOMER]
 | 
			
		||||
              p[PERSON]:::blue
 | 
			
		||||
              classDef bold font-size:24px, font-weight: bold
 | 
			
		||||
              classDef blue stroke:lightblue, color: #0000FF
 | 
			
		||||
              class c,p bold
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render entities with styles applied from the default class and other styles`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
            erDiagram
 | 
			
		||||
              c[CUSTOMER]
 | 
			
		||||
              p[PERSON]:::blue
 | 
			
		||||
              classDef blue stroke:lightblue, color: #0000FF
 | 
			
		||||
              classDef default fill:pink
 | 
			
		||||
              style c color:green
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@@ -109,8 +109,8 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
      const style = svg.attr('style');
 | 
			
		||||
      expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
      const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      expect(maxWidthValue).to.be.within(140 * 0.95, 140 * 1.05);
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±6%
 | 
			
		||||
      expect(maxWidthValue).to.be.within(140 * 0.96, 140 * 1.06);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -125,8 +125,8 @@ describe('Entity Relationship Diagram', () => {
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      const width = parseFloat(svg.attr('width'));
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      expect(width).to.be.within(140 * 0.95, 140 * 1.05);
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±6%
 | 
			
		||||
      expect(width).to.be.within(140 * 0.96, 140 * 1.06);
 | 
			
		||||
      // expect(svg).to.have.attr('height', '465');
 | 
			
		||||
      expect(svg).to.not.have.attr('style');
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
 | 
			
		||||
import { imgSnapshotTest, renderGraph, verifyNumber } from '../../helpers/util.ts';
 | 
			
		||||
 | 
			
		||||
describe('Flowchart ELK', () => {
 | 
			
		||||
  it('1-elk: should render a simple flowchart', () => {
 | 
			
		||||
@@ -109,7 +109,7 @@ describe('Flowchart ELK', () => {
 | 
			
		||||
      const style = svg.attr('style');
 | 
			
		||||
      expect(style).to.match(/^max-width: [\d.]+px;$/);
 | 
			
		||||
      const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
 | 
			
		||||
      expect(maxWidthValue).to.be.within(230 * 0.95, 230 * 1.05);
 | 
			
		||||
      verifyNumber(maxWidthValue, 380);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  it('8-elk: should render a flowchart when useMaxWidth is false', () => {
 | 
			
		||||
@@ -128,7 +128,7 @@ describe('Flowchart ELK', () => {
 | 
			
		||||
      const width = parseFloat(svg.attr('width'));
 | 
			
		||||
      // use within because the absolute value can be slightly different depending on the environment ±5%
 | 
			
		||||
      // expect(height).to.be.within(446 * 0.95, 446 * 1.05);
 | 
			
		||||
      expect(width).to.be.within(230 * 0.95, 230 * 1.05);
 | 
			
		||||
      verifyNumber(width, 380);
 | 
			
		||||
      expect(svg).to.not.have.attr('style');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
@@ -208,13 +208,13 @@ describe('Flowchart ELK', () => {
 | 
			
		||||
      `flowchart-elk TB
 | 
			
		||||
  internet
 | 
			
		||||
  nat
 | 
			
		||||
  routeur
 | 
			
		||||
  router
 | 
			
		||||
  lb1
 | 
			
		||||
  lb2
 | 
			
		||||
  compute1
 | 
			
		||||
  compute2
 | 
			
		||||
  subgraph project
 | 
			
		||||
  routeur
 | 
			
		||||
  router
 | 
			
		||||
  nat
 | 
			
		||||
    subgraph subnet1
 | 
			
		||||
      compute1
 | 
			
		||||
@@ -225,8 +225,8 @@ describe('Flowchart ELK', () => {
 | 
			
		||||
      lb2
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  internet --> routeur
 | 
			
		||||
  routeur --> subnet1 & subnet2
 | 
			
		||||
  internet --> router
 | 
			
		||||
  router --> subnet1 & subnet2
 | 
			
		||||
  subnet1 & subnet2 --> nat --> internet
 | 
			
		||||
      `,
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
@@ -443,7 +443,7 @@ flowchart-elk TD
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('63-elk: title on subgraphs should be themable', () => {
 | 
			
		||||
  it('63-elk: title on subgraphs should be themeable', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
      %%{init:{"theme":"base", "themeVariables": {"primaryColor":"#411d4e", "titleColor":"white", "darkMode":true}}}%%
 | 
			
		||||
@@ -692,7 +692,7 @@ A --> B
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      const edges = svg.querySelectorAll('.edges > path');
 | 
			
		||||
      const edges = svg[0].querySelectorAll('.edges > path');
 | 
			
		||||
      edges.forEach((edge) => {
 | 
			
		||||
        expect(edge).to.have.class('flowchart-link');
 | 
			
		||||
      });
 | 
			
		||||
@@ -739,7 +739,7 @@ NL\`") --"\`1o **bold**\`"--> c
 | 
			
		||||
          { flowchart: { titleTopMargin: 0 } }
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
      it('Wrapping long text with a new line', () => {
 | 
			
		||||
      it.skip('Wrapping long text with a new line', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `%%{init: {"flowchart": {"htmlLabels": true}} }%%
 | 
			
		||||
flowchart-elk LR
 | 
			
		||||
@@ -841,7 +841,7 @@ end
 | 
			
		||||
          { flowchart: { titleTopMargin: 0 } }
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
      it('Sub graphs and markdown strings', () => {
 | 
			
		||||
      it('Sub graphs', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `---
 | 
			
		||||
config:
 | 
			
		||||
@@ -900,6 +900,153 @@ flowchart LR
 | 
			
		||||
    n7@{ shape: rect}
 | 
			
		||||
    n8@{ shape: rect}
 | 
			
		||||
 | 
			
		||||
`,
 | 
			
		||||
          { flowchart: { titleTopMargin: 0 } }
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      it('6088-1: should handle diamond shape intersections', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
      flowchart LR
 | 
			
		||||
      subgraph S2
 | 
			
		||||
      subgraph s1["APA"]
 | 
			
		||||
      D{"Use the editor"}
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      D -- Mermaid js --> I{"fa:fa-code Text"}
 | 
			
		||||
            D --> I
 | 
			
		||||
            D --> I
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
`,
 | 
			
		||||
          { flowchart: { titleTopMargin: 0 } }
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      it('6088-2: should handle diamond shape intersections', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
      flowchart LR
 | 
			
		||||
      a
 | 
			
		||||
      subgraph s0["APA"]
 | 
			
		||||
      subgraph s8["APA"]
 | 
			
		||||
      subgraph s1["APA"]
 | 
			
		||||
        D{"X"}
 | 
			
		||||
        E[Q]
 | 
			
		||||
      end
 | 
			
		||||
      subgraph s3["BAPA"]
 | 
			
		||||
        F[Q]
 | 
			
		||||
        I
 | 
			
		||||
      end
 | 
			
		||||
            D --> I
 | 
			
		||||
            D --> I
 | 
			
		||||
            D --> I
 | 
			
		||||
 | 
			
		||||
      I{"X"}
 | 
			
		||||
      end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
`,
 | 
			
		||||
          { flowchart: { titleTopMargin: 0 } }
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      it('6088-3: should handle diamond shape intersections', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
      flowchart LR
 | 
			
		||||
      a
 | 
			
		||||
        D{"Use the editor"}
 | 
			
		||||
 | 
			
		||||
      D -- Mermaid js --> I{"fa:fa-code Text"}
 | 
			
		||||
      D-->I
 | 
			
		||||
      D-->I
 | 
			
		||||
 | 
			
		||||
`,
 | 
			
		||||
          { flowchart: { titleTopMargin: 0 } }
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      it('6088-4: should handle diamond shape intersections', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
flowchart LR
 | 
			
		||||
 subgraph s1["Untitled subgraph"]
 | 
			
		||||
        n1["Evaluate"]
 | 
			
		||||
        n2["Option 1"]
 | 
			
		||||
        n3["Option 2"]
 | 
			
		||||
        n4["fa:fa-car Option 3"]
 | 
			
		||||
  end
 | 
			
		||||
 subgraph s2["Untitled subgraph"]
 | 
			
		||||
        n5["Evaluate"]
 | 
			
		||||
        n6["Option 1"]
 | 
			
		||||
        n7["Option 2"]
 | 
			
		||||
        n8["fa:fa-car Option 3"]
 | 
			
		||||
  end
 | 
			
		||||
    A["Start"] -- Some text --> B("Continue")
 | 
			
		||||
    B --> C{"Evaluate"}
 | 
			
		||||
    C -- One --> D["Option 1"]
 | 
			
		||||
    C -- Two --> E["Option 2"]
 | 
			
		||||
    C -- Three --> F["fa:fa-car Option 3"]
 | 
			
		||||
    n1 -- One --> n2
 | 
			
		||||
    n1 -- Two --> n3
 | 
			
		||||
    n1 -- Three --> n4
 | 
			
		||||
    n5 -- One --> n6
 | 
			
		||||
    n5 -- Two --> n7
 | 
			
		||||
    n5 -- Three --> n8
 | 
			
		||||
    n1@{ shape: diam}
 | 
			
		||||
    n2@{ shape: rect}
 | 
			
		||||
    n3@{ shape: rect}
 | 
			
		||||
    n4@{ shape: rect}
 | 
			
		||||
    n5@{ shape: diam}
 | 
			
		||||
    n6@{ shape: rect}
 | 
			
		||||
    n7@{ shape: rect}
 | 
			
		||||
    n8@{ shape: rect}
 | 
			
		||||
 | 
			
		||||
`,
 | 
			
		||||
          { flowchart: { titleTopMargin: 0 } }
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      it('6088-5: should handle diamond shape intersections', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
flowchart LR
 | 
			
		||||
    A{A} --> B & C
 | 
			
		||||
 | 
			
		||||
`,
 | 
			
		||||
          { flowchart: { titleTopMargin: 0 } }
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
      it('6088-6: should handle diamond shape intersections', () => {
 | 
			
		||||
        imgSnapshotTest(
 | 
			
		||||
          `---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
flowchart LR
 | 
			
		||||
    A{A} --> B & C
 | 
			
		||||
    subgraph "subbe"
 | 
			
		||||
      A
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
`,
 | 
			
		||||
          { flowchart: { titleTopMargin: 0 } }
 | 
			
		||||
        );
 | 
			
		||||
 
 | 
			
		||||
@@ -198,13 +198,13 @@ describe('Flowchart v2', () => {
 | 
			
		||||
      `flowchart TB
 | 
			
		||||
  internet
 | 
			
		||||
  nat
 | 
			
		||||
  routeur
 | 
			
		||||
  router
 | 
			
		||||
  lb1
 | 
			
		||||
  lb2
 | 
			
		||||
  compute1
 | 
			
		||||
  compute2
 | 
			
		||||
  subgraph project
 | 
			
		||||
  routeur
 | 
			
		||||
  router
 | 
			
		||||
  nat
 | 
			
		||||
    subgraph subnet1
 | 
			
		||||
      compute1
 | 
			
		||||
@@ -215,8 +215,8 @@ describe('Flowchart v2', () => {
 | 
			
		||||
      lb2
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  internet --> routeur
 | 
			
		||||
  routeur --> subnet1 & subnet2
 | 
			
		||||
  internet --> router
 | 
			
		||||
  router --> subnet1 & subnet2
 | 
			
		||||
  subnet1 & subnet2 --> nat --> internet
 | 
			
		||||
      `,
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
@@ -433,7 +433,7 @@ flowchart TD
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('63: title on subgraphs should be themable', () => {
 | 
			
		||||
  it('63: title on subgraphs should be themeable', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
      %%{init:{"theme":"base", "themeVariables": {"primaryColor":"#411d4e", "titleColor":"white", "darkMode":true}}}%%
 | 
			
		||||
@@ -699,7 +699,7 @@ A --> B
 | 
			
		||||
      { flowchart: { titleTopMargin: 10 } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('3192: It should be possieble to render flowcharts with invisible edges', () => {
 | 
			
		||||
  it('3192: It should be possible to render flowcharts with invisible edges', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `---
 | 
			
		||||
title: Simple flowchart with invisible edges
 | 
			
		||||
@@ -1076,4 +1076,41 @@ end
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  describe('New @ syntax for node metadata edge cases', () => {
 | 
			
		||||
    it('should be possible to use @  syntax to add labels on multi nodes', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `flowchart TB
 | 
			
		||||
       n2["label for n2"] &   n4@{ label: "label for n4"}   & n5@{ label: "label for n5"}
 | 
			
		||||
        `,
 | 
			
		||||
        {}
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
    it('should be possible to use @  syntax to add labels with trail spaces and &', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `flowchart TB
 | 
			
		||||
       n2["label for n2"] &   n4@{ label: "label for n4"}   & n5@{ label: "label for n5"}   
 | 
			
		||||
        `,
 | 
			
		||||
        {}
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
    it('should be possible to use @  syntax to add labels with trail spaces', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `flowchart TB
 | 
			
		||||
       n2["label for n2"]
 | 
			
		||||
       n4@{ label: "label for n4"}
 | 
			
		||||
       n5@{ label: "label for n5"}  
 | 
			
		||||
        `,
 | 
			
		||||
        {}
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
    it('should be possible to use @  syntax to add labels with trail spaces and edge/link', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `flowchart TD
 | 
			
		||||
    A["A"] --> B["for B"] &    C@{ label: "for c"} & E@{label : "for E"}  
 | 
			
		||||
    D@{label: "for D"}     
 | 
			
		||||
        `,
 | 
			
		||||
        {}
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -895,7 +895,7 @@ graph TD
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
      graph TD
 | 
			
		||||
        classDef default fill:#a34,stroke:#000,stroke-width:4px,color:#fff 
 | 
			
		||||
        classDef default fill:#a34,stroke:#000,stroke-width:4px,color:#fff
 | 
			
		||||
        hello --> default
 | 
			
		||||
      `,
 | 
			
		||||
      { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
 | 
			
		||||
@@ -917,4 +917,21 @@ graph TD
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('#6369: edge color should affect arrow head', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    flowchart LR
 | 
			
		||||
        A --> B
 | 
			
		||||
        A --> C
 | 
			
		||||
        C --> D
 | 
			
		||||
 | 
			
		||||
        linkStyle 0 stroke:#D50000
 | 
			
		||||
        linkStyle 2 stroke:#D50000
 | 
			
		||||
    `,
 | 
			
		||||
      {
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -117,7 +117,7 @@ describe('Gantt diagram', () => {
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('should FAIL redering a gantt chart for issue #1060 with invalid date', () => {
 | 
			
		||||
  it('should FAIL rendering a gantt chart for issue #1060 with invalid date', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
      gantt
 | 
			
		||||
@@ -573,7 +573,7 @@ describe('Gantt diagram', () => {
 | 
			
		||||
      `
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('should render a gantt diagram exculding friday and saturday', () => {
 | 
			
		||||
  it('should render a gantt diagram excluding friday and saturday', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `gantt
 | 
			
		||||
      title A Gantt Diagram
 | 
			
		||||
@@ -584,7 +584,7 @@ describe('Gantt diagram', () => {
 | 
			
		||||
      A task :a1, 2024-02-28, 10d`
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('should render a gantt diagram exculding saturday and sunday', () => {
 | 
			
		||||
  it('should render a gantt diagram excluding saturday and sunday', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `gantt
 | 
			
		||||
      title A Gantt Diagram
 | 
			
		||||
@@ -671,7 +671,7 @@ describe('Gantt diagram', () => {
 | 
			
		||||
      title Gantt Digram
 | 
			
		||||
      dateFormat  YYYY-MM-DD
 | 
			
		||||
      section Section
 | 
			
		||||
      ;A task with a semiclon           :a1, 2014-01-01, 30d
 | 
			
		||||
      ;A task with a semicolon           :a1, 2014-01-01, 30d
 | 
			
		||||
      Another task     :after a1  , 20d
 | 
			
		||||
      section Another
 | 
			
		||||
      Task in sec      :2014-01-12  , 12d
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ describe('Git Graph diagram', () => {
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('2: should render a simple gitgraph with commit on main branch with Id', () => {
 | 
			
		||||
  it('2: should render a simple gitgraph with commit on main branch with id', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `gitGraph
 | 
			
		||||
       commit id: "One"
 | 
			
		||||
@@ -253,7 +253,7 @@ describe('Git Graph diagram', () => {
 | 
			
		||||
      `
 | 
			
		||||
      gitGraph
 | 
			
		||||
      checkout main
 | 
			
		||||
      %% Make sure to manually set the ID of all commits, for consistent visual tests
 | 
			
		||||
      %% Make sure to manually set the id of all commits, for consistent visual tests
 | 
			
		||||
      commit id: "1-abcdefg"
 | 
			
		||||
      checkout main
 | 
			
		||||
      branch branch1
 | 
			
		||||
@@ -343,7 +343,7 @@ gitGraph
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('16: should render a simple gitgraph with commit on main branch with Id | Vertical Branch', () => {
 | 
			
		||||
  it('16: should render a simple gitgraph with commit on main branch with id | Vertical Branch', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `gitGraph TB:
 | 
			
		||||
       commit id: "One"
 | 
			
		||||
@@ -585,7 +585,7 @@ gitGraph
 | 
			
		||||
      `
 | 
			
		||||
      gitGraph TB:
 | 
			
		||||
      checkout main
 | 
			
		||||
      %% Make sure to manually set the ID of all commits, for consistent visual tests
 | 
			
		||||
      %% Make sure to manually set the id of all commits, for consistent visual tests
 | 
			
		||||
      commit id: "1-abcdefg"
 | 
			
		||||
      checkout main
 | 
			
		||||
      branch branch1
 | 
			
		||||
@@ -1024,7 +1024,7 @@ gitGraph TB:
 | 
			
		||||
        {}
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
    it('51: should render a simple gitgraph with commit on main branch with Id | Vertical Branch - Bottom-to-top', () => {
 | 
			
		||||
    it('51: should render a simple gitgraph with commit on main branch with id | Vertical Branch - Bottom-to-top', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `gitGraph BT:
 | 
			
		||||
         commit id: "One"
 | 
			
		||||
@@ -1266,7 +1266,7 @@ gitGraph TB:
 | 
			
		||||
        `
 | 
			
		||||
        gitGraph BT:
 | 
			
		||||
        checkout main
 | 
			
		||||
        %% Make sure to manually set the ID of all commits, for consistent visual tests
 | 
			
		||||
        %% Make sure to manually set the id of all commits, for consistent visual tests
 | 
			
		||||
        commit id: "1-abcdefg"
 | 
			
		||||
        checkout main
 | 
			
		||||
        branch branch1
 | 
			
		||||
@@ -1491,7 +1491,7 @@ gitGraph TB:
 | 
			
		||||
        `
 | 
			
		||||
        gitGraph
 | 
			
		||||
        switch main
 | 
			
		||||
        %% Make sure to manually set the ID of all commits, for consistent visual tests
 | 
			
		||||
        %% Make sure to manually set the id of all commits, for consistent visual tests
 | 
			
		||||
        commit id: "1-abcdefg"
 | 
			
		||||
        switch main
 | 
			
		||||
        branch branch1
 | 
			
		||||
 
 | 
			
		||||
@@ -63,4 +63,199 @@ section Checkout from website
 | 
			
		||||
      { journey: { useMaxWidth: false } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should initialize with a left margin of 150px for user journeys', () => {
 | 
			
		||||
    renderGraph(
 | 
			
		||||
      `
 | 
			
		||||
      ---
 | 
			
		||||
      config:
 | 
			
		||||
        journey:
 | 
			
		||||
          maxLabelWidth: 320
 | 
			
		||||
      ---
 | 
			
		||||
      journey
 | 
			
		||||
        title User Journey Example
 | 
			
		||||
        section Onboarding
 | 
			
		||||
            Sign Up: 5:
 | 
			
		||||
            Browse Features: 3:
 | 
			
		||||
            Use Core Functionality: 4:
 | 
			
		||||
        section Engagement
 | 
			
		||||
            Browse Features: 3
 | 
			
		||||
            Use Core Functionality: 4
 | 
			
		||||
      `,
 | 
			
		||||
      { journey: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    let diagramStartX;
 | 
			
		||||
 | 
			
		||||
    cy.contains('foreignobject', 'Sign Up').then(($diagram) => {
 | 
			
		||||
      diagramStartX = parseFloat($diagram.attr('x'));
 | 
			
		||||
      expect(diagramStartX).to.be.closeTo(150, 2);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should maintain sufficient space between legend and diagram when legend labels are longer', () => {
 | 
			
		||||
    renderGraph(
 | 
			
		||||
      `journey
 | 
			
		||||
      title  Web hook life cycle
 | 
			
		||||
      section Darkoob
 | 
			
		||||
        Make preBuilt:5: Darkoob user
 | 
			
		||||
        register slug : 5: Darkoob userf deliberately increasing the size of this label to check if distance between legend and diagram is  maintained
 | 
			
		||||
        Map slug to a Prebuilt Job:5: Darkoob user
 | 
			
		||||
      section External Service
 | 
			
		||||
        set Darkoob slug as hook for an Event : 5 : admin Exjjjnjjjj qwerty
 | 
			
		||||
        listen to the events : 5 :  External Service
 | 
			
		||||
        call darkoob endpoint : 5 : External Service
 | 
			
		||||
      section Darkoob
 | 
			
		||||
        check for inputs : 5 : DarkoobAPI
 | 
			
		||||
        run the prebuilt job : 5 : DarkoobAPI
 | 
			
		||||
        `,
 | 
			
		||||
      { journey: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    let LabelEndX, diagramStartX;
 | 
			
		||||
 | 
			
		||||
    // Get right edge of the legend
 | 
			
		||||
    cy.contains('tspan', 'Darkoob userf').then((textBox) => {
 | 
			
		||||
      const bbox = textBox[0].getBBox();
 | 
			
		||||
      LabelEndX = bbox.x + bbox.width;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // Get left edge of the diagram
 | 
			
		||||
    cy.contains('foreignobject', 'Make preBuilt').then((rect) => {
 | 
			
		||||
      diagramStartX = parseFloat(rect.attr('x'));
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // Assert right edge of the diagram is greater than or equal to the right edge of the label
 | 
			
		||||
    cy.then(() => {
 | 
			
		||||
      expect(diagramStartX).to.be.gte(LabelEndX);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should wrap a single long word with hyphenation', () => {
 | 
			
		||||
    renderGraph(
 | 
			
		||||
      `
 | 
			
		||||
      ---
 | 
			
		||||
      config:
 | 
			
		||||
        journey:
 | 
			
		||||
          maxLabelWidth: 100
 | 
			
		||||
      ---
 | 
			
		||||
      journey
 | 
			
		||||
        title Long Word Test
 | 
			
		||||
        section Test
 | 
			
		||||
          VeryLongWord: 5: Supercalifragilisticexpialidocious
 | 
			
		||||
      `,
 | 
			
		||||
      { journey: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    // Verify that the line ends with a hyphen, indicating proper hyphenation for words exceeding maxLabelWidth.
 | 
			
		||||
    cy.get('tspan').then((tspans) => {
 | 
			
		||||
      const hasHyphen = [...tspans].some((t) => t.textContent.trim().endsWith('-'));
 | 
			
		||||
      return expect(hasHyphen).to.be.true;
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should wrap text on whitespace without adding hyphens', () => {
 | 
			
		||||
    renderGraph(
 | 
			
		||||
      `
 | 
			
		||||
      ---
 | 
			
		||||
      config:
 | 
			
		||||
        journey:
 | 
			
		||||
          maxLabelWidth: 200
 | 
			
		||||
      ---
 | 
			
		||||
      journey
 | 
			
		||||
        title Whitespace Test
 | 
			
		||||
        section Test
 | 
			
		||||
          TextWithSpaces: 5: Gustavo Fring is played by Giancarlo Esposito and is a character in Breaking Bad.
 | 
			
		||||
      `,
 | 
			
		||||
      { journey: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    // Verify that none of the text spans end with a hyphen.
 | 
			
		||||
    cy.get('tspan').each(($el) => {
 | 
			
		||||
      const text = $el.text();
 | 
			
		||||
      expect(text.trim()).not.to.match(/-$/);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should wrap long labels into multiple lines, keep them under max width, and maintain margins', () => {
 | 
			
		||||
    renderGraph(
 | 
			
		||||
      `
 | 
			
		||||
      ---
 | 
			
		||||
      config:
 | 
			
		||||
        journey:
 | 
			
		||||
          maxLabelWidth: 320
 | 
			
		||||
      ---
 | 
			
		||||
      journey
 | 
			
		||||
        title User Journey Example
 | 
			
		||||
        section Onboarding
 | 
			
		||||
            Sign Up: 5: This is a long label that will be split into multiple lines to test the wrapping functionality
 | 
			
		||||
            Browse Features: 3: This is another long label that will be split into multiple lines to test the wrapping functionality
 | 
			
		||||
            Use Core Functionality: 4: This is yet another long label that will be split into multiple lines to test the wrapping functionality
 | 
			
		||||
        section Engagement
 | 
			
		||||
            Browse Features: 3
 | 
			
		||||
            Use Core Functionality: 4
 | 
			
		||||
      `,
 | 
			
		||||
      { journey: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    let diagramStartX, maxLineWidth;
 | 
			
		||||
 | 
			
		||||
    // Get the diagram's left edge x-coordinate
 | 
			
		||||
    cy.contains('foreignobject', 'Sign Up')
 | 
			
		||||
      .then(($diagram) => {
 | 
			
		||||
        diagramStartX = parseFloat($diagram.attr('x'));
 | 
			
		||||
      })
 | 
			
		||||
      .then(() => {
 | 
			
		||||
        cy.get('text.legend').then(($lines) => {
 | 
			
		||||
          // Check that there are multiple lines
 | 
			
		||||
          expect($lines.length).to.be.equal(9);
 | 
			
		||||
 | 
			
		||||
          // Check that all lines are under the maxLabelWidth
 | 
			
		||||
          $lines.each((index, el) => {
 | 
			
		||||
            const bbox = el.getBBox();
 | 
			
		||||
            expect(bbox.width).to.be.lte(320);
 | 
			
		||||
            maxLineWidth = Math.max(maxLineWidth || 0, bbox.width);
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          /** The expected margin between the diagram and the legend is 150px, as defined by
 | 
			
		||||
           *  conf.leftMargin in user-journey-config.js
 | 
			
		||||
           */
 | 
			
		||||
          expect(diagramStartX - maxLineWidth).to.be.closeTo(150, 2);
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should correctly render the user journey diagram title with the specified styling', () => {
 | 
			
		||||
    renderGraph(
 | 
			
		||||
      `---
 | 
			
		||||
config:
 | 
			
		||||
  journey:
 | 
			
		||||
    titleColor: "#2900A5"
 | 
			
		||||
    titleFontFamily: "Times New Roman"
 | 
			
		||||
    titleFontSize: "5rem"
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
journey
 | 
			
		||||
    title User Journey Example
 | 
			
		||||
    section Onboarding
 | 
			
		||||
        Sign Up: 5: John, Shahir
 | 
			
		||||
        Complete Profile: 4: John
 | 
			
		||||
    section Engagement
 | 
			
		||||
        Browse Features: 3: John
 | 
			
		||||
        Use Core Functionality: 4: John
 | 
			
		||||
    section Retention
 | 
			
		||||
        Revisit Application: 5: John
 | 
			
		||||
        Invite Friends: 3: John
 | 
			
		||||
 | 
			
		||||
        size: 2rem
 | 
			
		||||
    `
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    cy.get('text').contains('User Journey Example').as('title');
 | 
			
		||||
    cy.get('@title').then(($title) => {
 | 
			
		||||
      expect($title).to.have.attr('fill', '#2900A5');
 | 
			
		||||
      expect($title).to.have.attr('font-family', 'Times New Roman');
 | 
			
		||||
      expect($title).to.have.attr('font-size', '5rem');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,7 @@ describe('Kanban diagram', () => {
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('6: should handle assigments', () => {
 | 
			
		||||
  it('6: should handle assignments', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `kanban
 | 
			
		||||
  id1[Todo]
 | 
			
		||||
@@ -118,7 +118,7 @@ kanban
 | 
			
		||||
    docs[Create Documentation]
 | 
			
		||||
    docs[Create Blog about the new diagram]
 | 
			
		||||
  id7[In progress]
 | 
			
		||||
    id6[Create renderer so that it works in all cases. We also add som extra text here for testing purposes. And some more just for the extra flare.]
 | 
			
		||||
    id6[Create renderer so that it works in all cases. We also add some extra text here for testing purposes. And some more just for the extra flare.]
 | 
			
		||||
    id8[Design grammar]@{ assigned: 'knsv' }
 | 
			
		||||
  id9[Ready for deploy]
 | 
			
		||||
  id10[Ready for test]
 | 
			
		||||
 
 | 
			
		||||
@@ -146,7 +146,7 @@ root
 | 
			
		||||
      shouldHaveRoot
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('text shouhld wrap with icon', () => {
 | 
			
		||||
  it('text should wrap with icon', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `mindmap
 | 
			
		||||
root
 | 
			
		||||
 
 | 
			
		||||
@@ -64,7 +64,7 @@ describe('pie chart', () => {
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render a pie diagram when textPosition is setted', () => {
 | 
			
		||||
  it('should render a pie diagram when textPosition is set', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `pie
 | 
			
		||||
        "Dogs": 50
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ describe('Quadrant Chart', () => {
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('should able to render y-axix on right side', () => {
 | 
			
		||||
  it('should able to render y-axis on right side', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
  %%{init: {"quadrantChart": {"yAxisPosition": "right"}}}%%
 | 
			
		||||
@@ -61,7 +61,7 @@ describe('Quadrant Chart', () => {
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('should able to render x-axix on bottom', () => {
 | 
			
		||||
  it('should able to render x-axis on bottom', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
  %%{init: {"quadrantChart": {"xAxisPosition": "bottom"}}}%%
 | 
			
		||||
@@ -77,7 +77,7 @@ describe('Quadrant Chart', () => {
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('should able to render x-axix on bottom and y-axis on right', () => {
 | 
			
		||||
  it('should able to render x-axis on bottom and y-axis on right', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
  %%{init: {"quadrantChart": {"xAxisPosition": "bottom", "yAxisPosition": "right"}}}%%
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										79
									
								
								cypress/integration/rendering/radar.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								cypress/integration/rendering/radar.spec.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
describe('radar structure', () => {
 | 
			
		||||
  it('should render a simple radar diagram', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `radar-beta
 | 
			
		||||
                title Best Radar Ever
 | 
			
		||||
                axis A, B, C
 | 
			
		||||
                curve c1{1, 2, 3}
 | 
			
		||||
            `
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render a radar diagram with multiple curves', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `radar-beta
 | 
			
		||||
                title Best Radar Ever
 | 
			
		||||
                axis A, B, C
 | 
			
		||||
                curve c1{1, 2, 3}
 | 
			
		||||
                curve c2{2, 3, 1}
 | 
			
		||||
            `
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render a complex radar diagram', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `radar-beta 
 | 
			
		||||
                title My favorite ninjas
 | 
			
		||||
                axis Agility, Speed, Strength
 | 
			
		||||
                axis Stam["Stamina"] , Intel["Intelligence"]
 | 
			
		||||
 | 
			
		||||
                curve Ninja1["Naruto Uzumaki"]{
 | 
			
		||||
                    Agility 2, Speed 2,
 | 
			
		||||
                    Strength 3, Stam 5,
 | 
			
		||||
                    Intel 0
 | 
			
		||||
                }
 | 
			
		||||
                curve Ninja2["Sasuke"]{2, 3, 4, 1, 5}
 | 
			
		||||
                curve Ninja3 {3, 2, 1, 5, 4}
 | 
			
		||||
 | 
			
		||||
                showLegend true
 | 
			
		||||
                ticks 3
 | 
			
		||||
                max 8
 | 
			
		||||
                min 0
 | 
			
		||||
                graticule polygon
 | 
			
		||||
            `
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      expect(svg).to.have.length(1);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render radar diagram with config override', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `radar-beta
 | 
			
		||||
                title Best Radar Ever
 | 
			
		||||
                axis A,B,C
 | 
			
		||||
                curve mycurve{1,2,3}`,
 | 
			
		||||
      { radar: { marginTop: 100, axisScaleFactor: 0.5 } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should parse radar diagram with theme override', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `radar-beta
 | 
			
		||||
                axis A,B,C
 | 
			
		||||
                curve mycurve{1,2,3}`,
 | 
			
		||||
      { theme: 'base', themeVariables: { fontSize: 80, cScale0: '#FF0000' } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should handle radar diagram with radar style override', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `radar-beta
 | 
			
		||||
                axis A,B,C
 | 
			
		||||
                curve mycurve{1,2,3}`,
 | 
			
		||||
      { theme: 'base', themeVariables: { radar: { axisColor: '#FF0000' } } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										703
									
								
								cypress/integration/rendering/requirementDiagram-unified.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										703
									
								
								cypress/integration/rendering/requirementDiagram-unified.spec.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,703 @@
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
 | 
			
		||||
 | 
			
		||||
const testOptions = [
 | 
			
		||||
  { description: '', options: { logLevel: 1 } },
 | 
			
		||||
  { description: 'ELK: ', options: { logLevel: 1, layout: 'elk' } },
 | 
			
		||||
  { description: 'HD: ', options: { logLevel: 1, look: 'handDrawn' } },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
describe('Requirement Diagram Unified', () => {
 | 
			
		||||
  testOptions.forEach(({ description, options }) => {
 | 
			
		||||
    it(`${description}should render a simple Requirement diagram`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
        requirement test_req {
 | 
			
		||||
        id: 1
 | 
			
		||||
        text: the test text.
 | 
			
		||||
        risk: high
 | 
			
		||||
        verifymethod: test
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        element test_entity {
 | 
			
		||||
        type: simulation
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        test_entity - satisfies -> test_req
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a simple Requirement diagram without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
        requirement test_req {
 | 
			
		||||
        id: 1
 | 
			
		||||
        text: the test text.
 | 
			
		||||
        risk: high
 | 
			
		||||
        verifymethod: test
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        element test_entity {
 | 
			
		||||
        type: simulation
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        test_entity - satisfies -> test_req
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a not-so-simple Requirement diagram`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
 | 
			
		||||
        requirement test_req {
 | 
			
		||||
        id: 1
 | 
			
		||||
        text: the test text.
 | 
			
		||||
        risk: high
 | 
			
		||||
        verifymethod: test
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        functionalRequirement test_req2 {
 | 
			
		||||
        id: 1.1
 | 
			
		||||
        text: the second test text.
 | 
			
		||||
        risk: low
 | 
			
		||||
        verifymethod: inspection
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        performanceRequirement test_req3 {
 | 
			
		||||
        id: 1.2
 | 
			
		||||
        text: the third test text.
 | 
			
		||||
        risk: medium
 | 
			
		||||
        verifymethod: demonstration
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        interfaceRequirement test_req4 {
 | 
			
		||||
        id: 1.2.1
 | 
			
		||||
        text: the fourth test text.
 | 
			
		||||
        risk: medium
 | 
			
		||||
        verifymethod: analysis
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        physicalRequirement test_req5 {
 | 
			
		||||
        id: 1.2.2
 | 
			
		||||
        text: the fifth test text.
 | 
			
		||||
        risk: medium
 | 
			
		||||
        verifymethod: analysis
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        designConstraint test_req6 {
 | 
			
		||||
        id: 1.2.3
 | 
			
		||||
        text: the sixth test text.
 | 
			
		||||
        risk: medium
 | 
			
		||||
        verifymethod: analysis
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        element test_entity {
 | 
			
		||||
        type: simulation
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        element test_entity2 {
 | 
			
		||||
        type: word doc
 | 
			
		||||
        docRef: reqs/test_entity
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        element test_entity3 {
 | 
			
		||||
        type: "test suite"
 | 
			
		||||
        docRef: github.com/all_the_tests
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        test_entity - satisfies -> test_req2
 | 
			
		||||
        test_req - traces -> test_req2
 | 
			
		||||
        test_req - contains -> test_req3
 | 
			
		||||
        test_req3 - contains -> test_req4
 | 
			
		||||
        test_req4 - derives -> test_req5
 | 
			
		||||
        test_req5 - refines -> test_req6
 | 
			
		||||
        test_entity3 - verifies -> test_req5
 | 
			
		||||
        test_req <- copies - test_entity2
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a not-so-simple Requirement diagram without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
 | 
			
		||||
        requirement test_req {
 | 
			
		||||
        id: 1
 | 
			
		||||
        text: the test text.
 | 
			
		||||
        risk: high
 | 
			
		||||
        verifymethod: test
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        functionalRequirement test_req2 {
 | 
			
		||||
        id: 1.1
 | 
			
		||||
        text: the second test text.
 | 
			
		||||
        risk: low
 | 
			
		||||
        verifymethod: inspection
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        performanceRequirement test_req3 {
 | 
			
		||||
        id: 1.2
 | 
			
		||||
        text: the third test text.
 | 
			
		||||
        risk: medium
 | 
			
		||||
        verifymethod: demonstration
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        interfaceRequirement test_req4 {
 | 
			
		||||
        id: 1.2.1
 | 
			
		||||
        text: the fourth test text.
 | 
			
		||||
        risk: medium
 | 
			
		||||
        verifymethod: analysis
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        physicalRequirement test_req5 {
 | 
			
		||||
        id: 1.2.2
 | 
			
		||||
        text: the fifth test text.
 | 
			
		||||
        risk: medium
 | 
			
		||||
        verifymethod: analysis
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        designConstraint test_req6 {
 | 
			
		||||
        id: 1.2.3
 | 
			
		||||
        text: the sixth test text.
 | 
			
		||||
        risk: medium
 | 
			
		||||
        verifymethod: analysis
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        element test_entity {
 | 
			
		||||
        type: simulation
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        element test_entity2 {
 | 
			
		||||
        type: word doc
 | 
			
		||||
        docRef: reqs/test_entity
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        element test_entity3 {
 | 
			
		||||
        type: "test suite"
 | 
			
		||||
        docRef: github.com/all_the_tests
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        test_entity - satisfies -> test_req2
 | 
			
		||||
        test_req - traces -> test_req2
 | 
			
		||||
        test_req - contains -> test_req3
 | 
			
		||||
        test_req3 - contains -> test_req4
 | 
			
		||||
        test_req4 - derives -> test_req5
 | 
			
		||||
        test_req5 - refines -> test_req6
 | 
			
		||||
        test_entity3 - verifies -> test_req5
 | 
			
		||||
        test_req <- copies - test_entity2
 | 
			
		||||
        `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render multiple Requirement diagrams`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        [
 | 
			
		||||
          `
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
 | 
			
		||||
    requirement test_req {
 | 
			
		||||
    id: 1
 | 
			
		||||
    text: the test text.
 | 
			
		||||
    risk: high
 | 
			
		||||
    verifymethod: test
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    element test_entity {
 | 
			
		||||
    type: simulation
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    test_entity - satisfies -> test_req
 | 
			
		||||
    `,
 | 
			
		||||
          `
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
 | 
			
		||||
    requirement test_req {
 | 
			
		||||
    id: 1
 | 
			
		||||
    text: the test text.
 | 
			
		||||
    risk: high
 | 
			
		||||
    verifymethod: test
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    element test_entity {
 | 
			
		||||
    type: simulation
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    test_entity - satisfies -> test_req
 | 
			
		||||
    `,
 | 
			
		||||
        ],
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a Requirement diagram with empty information`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
        requirement test_req {
 | 
			
		||||
        }
 | 
			
		||||
        element test_entity {
 | 
			
		||||
        }
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with and without information`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
        requirement test_req {
 | 
			
		||||
            id: 1
 | 
			
		||||
            text: the test text.
 | 
			
		||||
            risk: high
 | 
			
		||||
            verifymethod: test
 | 
			
		||||
        }
 | 
			
		||||
        element test_entity {
 | 
			
		||||
        }
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with long and short text`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
        requirement test_req {
 | 
			
		||||
            id: 1
 | 
			
		||||
            text: the test text that is long and takes up a lot of space.
 | 
			
		||||
            risk: high
 | 
			
		||||
            verifymethod: test
 | 
			
		||||
        }
 | 
			
		||||
        element test_entity_name_that_is_extra_long {
 | 
			
		||||
        }
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with long and short text without htmlLabels`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      requirementDiagram
 | 
			
		||||
          requirement test_req {
 | 
			
		||||
              id: 1
 | 
			
		||||
              text: the test text that is long and takes up a lot of space.
 | 
			
		||||
              risk: high
 | 
			
		||||
              verifymethod: test
 | 
			
		||||
          }
 | 
			
		||||
          element test_entity_name_that_is_extra_long {
 | 
			
		||||
          }
 | 
			
		||||
          `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with quoted text for spaces`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      requirementDiagram
 | 
			
		||||
          requirement "test req name with spaces" {
 | 
			
		||||
              id: 1
 | 
			
		||||
              text: the test text that is long and takes up a lot of space.
 | 
			
		||||
              risk: high
 | 
			
		||||
              verifymethod: test
 | 
			
		||||
          }
 | 
			
		||||
          element "test entity name that is extra long with spaces" {
 | 
			
		||||
          }
 | 
			
		||||
          `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with markdown text`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      requirementDiagram
 | 
			
		||||
          requirement "__my bolded name__" {
 | 
			
		||||
              id: 1
 | 
			
		||||
              text: "**Bolded text** _italicized text_"
 | 
			
		||||
              risk: high
 | 
			
		||||
              verifymethod: test
 | 
			
		||||
          }
 | 
			
		||||
          element "*my italicized name*" {
 | 
			
		||||
            type: "**Bolded type** _italicized type_"
 | 
			
		||||
            docref: "*Italicized* __Bolded__"
 | 
			
		||||
          }
 | 
			
		||||
          `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with markdown text without htmlLabels`, () => {
 | 
			
		||||
      renderGraph(
 | 
			
		||||
        `
 | 
			
		||||
      requirementDiagram
 | 
			
		||||
          requirement "__my bolded name__" {
 | 
			
		||||
              id: 1
 | 
			
		||||
              text: "**Bolded text** _italicized text_"
 | 
			
		||||
              risk: high
 | 
			
		||||
              verifymethod: test
 | 
			
		||||
          }
 | 
			
		||||
          element "*my italicized name*" {
 | 
			
		||||
            type: "**Bolded type** _italicized type_"
 | 
			
		||||
            docref: "*Italicized* __Bolded__"
 | 
			
		||||
          }
 | 
			
		||||
          `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a simple Requirement diagram with a title`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `---
 | 
			
		||||
  title: simple Requirement diagram
 | 
			
		||||
  ---
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
 | 
			
		||||
    requirement test_req {
 | 
			
		||||
    id: 1
 | 
			
		||||
    text: the test text.
 | 
			
		||||
    risk: high
 | 
			
		||||
    verifymethod: test
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    element test_entity {
 | 
			
		||||
    type: simulation
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    test_entity - satisfies -> test_req
 | 
			
		||||
  `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a Requirement diagram with TB direction`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
    direction TB
 | 
			
		||||
 | 
			
		||||
    requirement test_req {
 | 
			
		||||
    id: 1
 | 
			
		||||
    text: the test text.
 | 
			
		||||
    risk: high
 | 
			
		||||
    verifymethod: test
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    element test_entity {
 | 
			
		||||
    type: simulation
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    test_entity - satisfies -> test_req
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a Requirement diagram with BT direction`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      requirementDiagram
 | 
			
		||||
      direction BT
 | 
			
		||||
  
 | 
			
		||||
      requirement test_req {
 | 
			
		||||
      id: 1
 | 
			
		||||
      text: the test text.
 | 
			
		||||
      risk: high
 | 
			
		||||
      verifymethod: test
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      element test_entity {
 | 
			
		||||
      type: simulation
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      test_entity - satisfies -> test_req
 | 
			
		||||
          `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a Requirement diagram with LR direction`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      requirementDiagram
 | 
			
		||||
      direction LR
 | 
			
		||||
  
 | 
			
		||||
      requirement test_req {
 | 
			
		||||
      id: 1
 | 
			
		||||
      text: the test text.
 | 
			
		||||
      risk: high
 | 
			
		||||
      verifymethod: test
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      element test_entity {
 | 
			
		||||
      type: simulation
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      test_entity - satisfies -> test_req
 | 
			
		||||
          `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a Requirement diagram with RL direction`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      requirementDiagram
 | 
			
		||||
      direction RL
 | 
			
		||||
  
 | 
			
		||||
      requirement test_req {
 | 
			
		||||
      id: 1
 | 
			
		||||
      text: the test text.
 | 
			
		||||
      risk: high
 | 
			
		||||
      verifymethod: test
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      element test_entity {
 | 
			
		||||
      type: simulation
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      test_entity - satisfies -> test_req
 | 
			
		||||
          `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with styles applied from style statement`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
    requirementDiagram
 | 
			
		||||
 | 
			
		||||
    requirement test_req {
 | 
			
		||||
    id: 1
 | 
			
		||||
    text: the test text.
 | 
			
		||||
    risk: high
 | 
			
		||||
    verifymethod: test
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    element test_entity {
 | 
			
		||||
    type: simulation
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    test_entity - satisfies -> test_req
 | 
			
		||||
 | 
			
		||||
    style test_req,test_entity fill:#f9f,stroke:blue, color:grey, font-weight:bold
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with styles applied from style statement without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
      requirementDiagram
 | 
			
		||||
  
 | 
			
		||||
      requirement test_req {
 | 
			
		||||
      id: 1
 | 
			
		||||
      text: the test text.
 | 
			
		||||
      risk: high
 | 
			
		||||
      verifymethod: test
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      element test_entity {
 | 
			
		||||
      type: simulation
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      test_entity - satisfies -> test_req
 | 
			
		||||
  
 | 
			
		||||
      style test_req,test_entity fill:#f9f,stroke:blue, color:grey, font-weight:bold
 | 
			
		||||
          `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with styles applied from class statement`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
requirementDiagram
 | 
			
		||||
  
 | 
			
		||||
      requirement test_req {
 | 
			
		||||
      id: 1
 | 
			
		||||
      text: the test text.
 | 
			
		||||
      risk: high
 | 
			
		||||
      verifymethod: test
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      element test_entity {
 | 
			
		||||
      type: simulation
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      test_entity - satisfies -> test_req
 | 
			
		||||
      classDef bold font-weight: bold
 | 
			
		||||
      classDef blue stroke:lightblue, color: #0000FF
 | 
			
		||||
      class test_entity bold
 | 
			
		||||
      class test_req blue, bold
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with styles applied from class statement without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
  requirementDiagram
 | 
			
		||||
    
 | 
			
		||||
        requirement test_req {
 | 
			
		||||
        id: 1
 | 
			
		||||
        text: the test text.
 | 
			
		||||
        risk: high
 | 
			
		||||
        verifymethod: test
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        element test_entity {
 | 
			
		||||
        type: simulation
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        test_entity - satisfies -> test_req
 | 
			
		||||
        classDef bold font-weight: bold
 | 
			
		||||
        classDef blue stroke:lightblue, color: #0000FF
 | 
			
		||||
        class test_entity bold
 | 
			
		||||
        class test_req blue, bold
 | 
			
		||||
          `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with styles applied from classes with shorthand syntax`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
  requirementDiagram
 | 
			
		||||
    
 | 
			
		||||
        requirement test_req:::blue {
 | 
			
		||||
        id: 1
 | 
			
		||||
        text: the test text.
 | 
			
		||||
        risk: high
 | 
			
		||||
        verifymethod: test
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        element test_entity {
 | 
			
		||||
        type: simulation
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        test_entity - satisfies -> test_req
 | 
			
		||||
        classDef bold font-weight: bold
 | 
			
		||||
        classDef blue stroke:lightblue, color: #0000FF
 | 
			
		||||
        test_entity:::bold
 | 
			
		||||
          `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with styles applied from classes with shorthand syntax without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
  requirementDiagram
 | 
			
		||||
    
 | 
			
		||||
        requirement test_req:::blue {
 | 
			
		||||
        id: 1
 | 
			
		||||
        text: the test text.
 | 
			
		||||
        risk: high
 | 
			
		||||
        verifymethod: test
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        element test_entity {
 | 
			
		||||
        type: simulation
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        test_entity - satisfies -> test_req
 | 
			
		||||
        classDef bold font-weight: bold
 | 
			
		||||
        classDef blue stroke:lightblue, color: #0000FF
 | 
			
		||||
        test_entity:::bold
 | 
			
		||||
          `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with styles applied from the default class and other styles`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
requirementDiagram
 | 
			
		||||
  
 | 
			
		||||
      requirement test_req:::blue {
 | 
			
		||||
      id: 1
 | 
			
		||||
      text: the test text.
 | 
			
		||||
      risk: high
 | 
			
		||||
      verifymethod: test
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      element test_entity {
 | 
			
		||||
      type: simulation
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      test_entity - satisfies -> test_req
 | 
			
		||||
      classDef blue stroke:lightblue, color:blue
 | 
			
		||||
      classDef default fill:pink
 | 
			
		||||
      style test_entity color:green
 | 
			
		||||
        `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render requirements and elements with styles applied from the default class and other styles without htmlLabels`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
  requirementDiagram
 | 
			
		||||
    
 | 
			
		||||
        requirement test_req:::blue {
 | 
			
		||||
        id: 1
 | 
			
		||||
        text: the test text.
 | 
			
		||||
        risk: high
 | 
			
		||||
        verifymethod: test
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        element test_entity {
 | 
			
		||||
        type: simulation
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        test_entity - satisfies -> test_req
 | 
			
		||||
        classDef blue stroke:lightblue, color:blue
 | 
			
		||||
        classDef default fill:pink
 | 
			
		||||
        style test_entity color:green
 | 
			
		||||
          `,
 | 
			
		||||
        { ...options, htmlLabels: false }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it(`${description}should render a Requirement diagram with a theme`, () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
---
 | 
			
		||||
  theme: forest
 | 
			
		||||
---
 | 
			
		||||
  requirementDiagram
 | 
			
		||||
    
 | 
			
		||||
        requirement test_req:::blue {
 | 
			
		||||
        id: 1
 | 
			
		||||
        text: the test text.
 | 
			
		||||
        risk: high
 | 
			
		||||
        verifymethod: test
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        element test_entity {
 | 
			
		||||
        type: simulation
 | 
			
		||||
        }
 | 
			
		||||
    
 | 
			
		||||
        test_entity - satisfies -> test_req
 | 
			
		||||
          `,
 | 
			
		||||
        options
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@@ -138,8 +138,8 @@ describe('State diagram', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    stateDiagram-v2
 | 
			
		||||
    State1: This a a single line description
 | 
			
		||||
    State2: This a a multi line description
 | 
			
		||||
    State1: This a single line description
 | 
			
		||||
    State2: This a multi line description
 | 
			
		||||
    State2: here comes the multi part
 | 
			
		||||
    [*] --> State1
 | 
			
		||||
    State1 --> State2
 | 
			
		||||
@@ -345,7 +345,7 @@ stateDiagram
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('v2 width of compond state should grow with title if title is wider', () => {
 | 
			
		||||
  it('v2 width of compound state should grow with title if title is wider', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
stateDiagram-v2
 | 
			
		||||
@@ -402,8 +402,8 @@ stateDiagram-v2
 | 
			
		||||
      `
 | 
			
		||||
stateDiagram-v2
 | 
			
		||||
    MyState
 | 
			
		||||
    note left of MyState : I am a leftie
 | 
			
		||||
    note right of MyState : I am a rightie
 | 
			
		||||
    note left of MyState : I am a lefty
 | 
			
		||||
    note right of MyState : I am a righty
 | 
			
		||||
    `,
 | 
			
		||||
      {
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
@@ -552,7 +552,7 @@ style AState fill:#636,border:1px solid red,color:white;
 | 
			
		||||
        { logLevel: 0, fontFamily: 'courier' }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
    it(' should let styles take preceedence over classes', () => {
 | 
			
		||||
    it(' should let styles take precedence over classes', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
stateDiagram-v2
 | 
			
		||||
@@ -565,7 +565,7 @@ style AState fill:#636,border:1px solid red,color:white;
 | 
			
		||||
        { logLevel: 0, fontFamily: 'courier' }
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
    it(' should allow styles to take effect in stubgraphs', () => {
 | 
			
		||||
    it(' should allow styles to take effect in subgraphs', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `
 | 
			
		||||
  stateDiagram
 | 
			
		||||
 
 | 
			
		||||
@@ -129,8 +129,8 @@ describe('State diagram', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    stateDiagram
 | 
			
		||||
    State1: This a a single line description
 | 
			
		||||
    State2: This a a multi line description
 | 
			
		||||
    State1: This a single line description
 | 
			
		||||
    State2: This a multi line description
 | 
			
		||||
    State2: here comes the multi part
 | 
			
		||||
    [*] --> State1
 | 
			
		||||
    State1 --> State2
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ describe('Timeline diagram', () => {
 | 
			
		||||
    title History of Social Media Platform
 | 
			
		||||
    2002 : LinkedIn
 | 
			
		||||
    2004 : Facebook : Google
 | 
			
		||||
    2005 : Youtube
 | 
			
		||||
    2005 : YouTube
 | 
			
		||||
    2006 : Twitter
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
@@ -35,7 +35,7 @@ describe('Timeline diagram', () => {
 | 
			
		||||
        section Stone Age
 | 
			
		||||
          7600 BC : Britain's oldest known house was built in Orkney, Scotland
 | 
			
		||||
          6000 BC : Sea levels rise and Britain becomes an island.<br> The people who live here are hunter-gatherers.
 | 
			
		||||
        section Broze Age
 | 
			
		||||
        section Bronze Age
 | 
			
		||||
          2300 BC : People arrive from Europe and settle in Britain. <br>They bring farming and metalworking.
 | 
			
		||||
                  : New styles of pottery and ways of burying the dead appear.
 | 
			
		||||
          2200 BC : The last major building works are completed at Stonehenge.<br> People now bury their dead in stone circles.
 | 
			
		||||
@@ -51,7 +51,7 @@ describe('Timeline diagram', () => {
 | 
			
		||||
        title History of Social Media Platform
 | 
			
		||||
          2002 : LinkedIn
 | 
			
		||||
          2004 : Facebook : Google
 | 
			
		||||
          2005 : Youtube
 | 
			
		||||
          2005 : YouTube
 | 
			
		||||
          2006 : Twitter
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
@@ -68,7 +68,7 @@ describe('Timeline diagram', () => {
 | 
			
		||||
        title History of Social Media Platform
 | 
			
		||||
          2002 : LinkedIn
 | 
			
		||||
          2004 : Facebook : Google
 | 
			
		||||
          2005 : Youtube
 | 
			
		||||
          2005 : YouTube
 | 
			
		||||
          2006 : Twitter
 | 
			
		||||
          2007 : Tumblr
 | 
			
		||||
          2008 : Instagram
 | 
			
		||||
@@ -84,7 +84,7 @@ describe('Timeline diagram', () => {
 | 
			
		||||
        title History of Social Media Platform
 | 
			
		||||
          2002 : LinkedIn
 | 
			
		||||
          2004 : Facebook : Google
 | 
			
		||||
          2005 : Youtube
 | 
			
		||||
          2005 : YouTube
 | 
			
		||||
          2006 : Twitter
 | 
			
		||||
          2007 : Tumblr
 | 
			
		||||
          2008 : Instagram
 | 
			
		||||
@@ -101,7 +101,7 @@ describe('Timeline diagram', () => {
 | 
			
		||||
        title History of Social Media Platform
 | 
			
		||||
          2002 : LinkedIn
 | 
			
		||||
          2004 : Facebook : Google
 | 
			
		||||
          2005 : Youtube
 | 
			
		||||
          2005 : YouTube
 | 
			
		||||
          2006 : Twitter
 | 
			
		||||
          2007 : Tumblr
 | 
			
		||||
          2008 : Instagram
 | 
			
		||||
@@ -118,7 +118,7 @@ describe('Timeline diagram', () => {
 | 
			
		||||
        title History of Social Media Platform
 | 
			
		||||
          2002 : LinkedIn
 | 
			
		||||
          2004 : Facebook : Google
 | 
			
		||||
          2005 : Youtube
 | 
			
		||||
          2005 : YouTube
 | 
			
		||||
          2006 : Twitter
 | 
			
		||||
          2007 : Tumblr
 | 
			
		||||
          2008 : Instagram
 | 
			
		||||
@@ -135,7 +135,7 @@ describe('Timeline diagram', () => {
 | 
			
		||||
        title History of Social Media Platform
 | 
			
		||||
          2002 : LinkedIn
 | 
			
		||||
          2004 : Facebook : Google
 | 
			
		||||
          2005 : Youtube
 | 
			
		||||
          2005 : YouTube
 | 
			
		||||
          2006 : Twitter
 | 
			
		||||
          2007 : Tumblr
 | 
			
		||||
          2008 : Instagram
 | 
			
		||||
@@ -152,7 +152,7 @@ describe('Timeline diagram', () => {
 | 
			
		||||
        title History of Social Media Platform
 | 
			
		||||
          2002 : LinkedIn
 | 
			
		||||
          2004 : Facebook : Google
 | 
			
		||||
          2005 : Youtube
 | 
			
		||||
          2005 : YouTube
 | 
			
		||||
          2006 : Twitter
 | 
			
		||||
          2007 : Tumblr
 | 
			
		||||
          2008 : Instagram
 | 
			
		||||
 
 | 
			
		||||
@@ -179,6 +179,7 @@ describe('XY Chart', () => {
 | 
			
		||||
            axisLineWidth: 5
 | 
			
		||||
          chartOrientation: horizontal
 | 
			
		||||
          plotReservedSpacePercent: 60
 | 
			
		||||
          showDataLabel: true
 | 
			
		||||
      ---
 | 
			
		||||
      xychart-beta
 | 
			
		||||
        title "Sales Revenue"
 | 
			
		||||
@@ -315,4 +316,516 @@ describe('XY Chart', () => {
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render vertical bar chart with labels', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
    ---
 | 
			
		||||
    xychart-beta
 | 
			
		||||
      title "Sales Revenue"
 | 
			
		||||
      x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
			
		||||
      y-axis "Revenue (in $)" 4000 --> 11000
 | 
			
		||||
      bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
			
		||||
    `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render horizontal bar chart with labels', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
        chartOrientation: horizontal
 | 
			
		||||
    ---
 | 
			
		||||
    xychart-beta
 | 
			
		||||
      title "Sales Revenue"
 | 
			
		||||
      x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
			
		||||
      y-axis "Revenue (in $)" 4000 --> 11000
 | 
			
		||||
      bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
			
		||||
    `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render vertical bar chart without labels by default', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    xychart-beta
 | 
			
		||||
      title "Sales Revenue"
 | 
			
		||||
      x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
			
		||||
      y-axis "Revenue (in $)" 4000 --> 11000
 | 
			
		||||
      bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
			
		||||
    `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render horizontal bar chart without labels by default', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        chartOrientation: horizontal
 | 
			
		||||
    ---
 | 
			
		||||
    xychart-beta
 | 
			
		||||
      title "Sales Revenue"
 | 
			
		||||
      x-axis Months [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
 | 
			
		||||
      y-axis "Revenue (in $)" 4000 --> 11000
 | 
			
		||||
      bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
 | 
			
		||||
    `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render multiple bar plots vertically with labels correctly', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
    ---
 | 
			
		||||
      xychart-beta
 | 
			
		||||
        title "Multiple Bar Plots"
 | 
			
		||||
        x-axis Categories [A, B, C]
 | 
			
		||||
        y-axis "Values" 0 --> 100
 | 
			
		||||
        bar [10, 50, 90]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render multiple bar plots horizontally with labels correctly', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
        chartOrientation: horizontal
 | 
			
		||||
    ---
 | 
			
		||||
      xychart-beta
 | 
			
		||||
        title "Multiple Bar Plots"
 | 
			
		||||
        x-axis Categories [A, B, C]
 | 
			
		||||
        y-axis "Values" 0 --> 100
 | 
			
		||||
        bar [10, 50, 90]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render a single bar with label for a vertical xy-chart', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
    ---
 | 
			
		||||
      xychart-beta
 | 
			
		||||
        title "Single Bar Chart"
 | 
			
		||||
        x-axis Categories [A]
 | 
			
		||||
        y-axis "Value" 0 --> 100
 | 
			
		||||
        bar [75]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render a single bar with label for a horizontal xy-chart', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
        chartOrientation: horizontal
 | 
			
		||||
    ---
 | 
			
		||||
      xychart-beta
 | 
			
		||||
        title "Single Bar Chart"
 | 
			
		||||
        x-axis Categories [A]
 | 
			
		||||
        y-axis "Value" 0 --> 100
 | 
			
		||||
        bar [75]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render negative and decimal values with correct labels for vertical xy-chart', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
    ---
 | 
			
		||||
      xychart-beta
 | 
			
		||||
        title "Decimal and Negative Values"
 | 
			
		||||
        x-axis Categories [A, B, C]
 | 
			
		||||
        y-axis -10 --> 10
 | 
			
		||||
        bar [ -2.5, 0.75, 5.1 ]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render negative and decimal values with correct labels for horizontal xy-chart', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
        chartOrientation: horizontal
 | 
			
		||||
    ---
 | 
			
		||||
      xychart-beta
 | 
			
		||||
        title "Decimal and Negative Values"
 | 
			
		||||
        x-axis Categories [A, B, C]
 | 
			
		||||
        y-axis -10 --> 10
 | 
			
		||||
        bar [ -2.5, 0.75, 5.1 ]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render data labels within each bar in the vertical xy-chart', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
    ---
 | 
			
		||||
    xychart-beta
 | 
			
		||||
            title "Sales Revenue"
 | 
			
		||||
            x-axis Months [jan,b,c]
 | 
			
		||||
            y-axis "Revenue (in $)" 4000 --> 12000
 | 
			
		||||
            bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 3000, 2000, 500, 2000, 3000, 11000, 5000, 6000]
 | 
			
		||||
    `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    cy.get('g.bar-plot-0').within(() => {
 | 
			
		||||
      cy.get('rect').each(($rect, index) => {
 | 
			
		||||
        // Extract bar properties
 | 
			
		||||
        const barProps = {
 | 
			
		||||
          x: parseFloat($rect.attr('x')),
 | 
			
		||||
          y: parseFloat($rect.attr('y')),
 | 
			
		||||
          width: parseFloat($rect.attr('width')),
 | 
			
		||||
          height: parseFloat($rect.attr('height')),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // Get the text element corresponding to this bar by index.
 | 
			
		||||
        cy.get('text')
 | 
			
		||||
          .eq(index)
 | 
			
		||||
          .then(($text) => {
 | 
			
		||||
            const bbox = $text[0].getBBox();
 | 
			
		||||
            const textProps = {
 | 
			
		||||
              x: bbox.x,
 | 
			
		||||
              y: bbox.y,
 | 
			
		||||
              width: bbox.width,
 | 
			
		||||
              height: bbox.height,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
			
		||||
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
			
		||||
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
			
		||||
 | 
			
		||||
            // Check horizontal alignment (within tolerance)
 | 
			
		||||
            expect(textProps.x + textProps.width / 2).to.be.closeTo(
 | 
			
		||||
              barProps.x + barProps.width / 2,
 | 
			
		||||
              5
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
			
		||||
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
			
		||||
          });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render data labels within each bar in the horizontal xy-chart', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
        chartOrientation: horizontal
 | 
			
		||||
    ---
 | 
			
		||||
    xychart-beta
 | 
			
		||||
            title "Sales Revenue"
 | 
			
		||||
            x-axis Months [jan,b,c]
 | 
			
		||||
            y-axis "Revenue (in $)" 4000 --> 12000
 | 
			
		||||
            bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 3000, 2000, 500, 2000, 3000, 11000, 5000, 6000]
 | 
			
		||||
    `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    cy.get('g.bar-plot-0').within(() => {
 | 
			
		||||
      cy.get('rect').each(($rect, index) => {
 | 
			
		||||
        // Extract bar properties
 | 
			
		||||
        const barProps = {
 | 
			
		||||
          x: parseFloat($rect.attr('x')),
 | 
			
		||||
          y: parseFloat($rect.attr('y')),
 | 
			
		||||
          width: parseFloat($rect.attr('width')),
 | 
			
		||||
          height: parseFloat($rect.attr('height')),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // Get the text element corresponding to this bar by index.
 | 
			
		||||
        cy.get('text')
 | 
			
		||||
          .eq(index)
 | 
			
		||||
          .then(($text) => {
 | 
			
		||||
            const bbox = $text[0].getBBox();
 | 
			
		||||
            const textProps = {
 | 
			
		||||
              x: bbox.x,
 | 
			
		||||
              y: bbox.y,
 | 
			
		||||
              width: bbox.width,
 | 
			
		||||
              height: bbox.height,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
			
		||||
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
			
		||||
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
			
		||||
 | 
			
		||||
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
			
		||||
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
			
		||||
            expect(textProps.y + textProps.height / 2).to.be.closeTo(
 | 
			
		||||
              barProps.y + barProps.height / 2,
 | 
			
		||||
              5
 | 
			
		||||
            );
 | 
			
		||||
          });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render data labels within each bar in the vertical xy-chart with a lot of bars of different sizes', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
      ---
 | 
			
		||||
      config:
 | 
			
		||||
        xyChart:
 | 
			
		||||
          showDataLabel: true
 | 
			
		||||
      ---
 | 
			
		||||
      xychart-beta
 | 
			
		||||
        title "Sales Revenue"
 | 
			
		||||
        x-axis Months [jan,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s]
 | 
			
		||||
        y-axis "Revenue (in $)" 4000 --> 12000
 | 
			
		||||
        bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 8000, 10000, 5000, 7600, 4999,11000 ,5000,6000]
 | 
			
		||||
    `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    cy.get('g.bar-plot-0').within(() => {
 | 
			
		||||
      cy.get('rect').each(($rect, index) => {
 | 
			
		||||
        // Extract bar properties
 | 
			
		||||
        const barProps = {
 | 
			
		||||
          x: parseFloat($rect.attr('x')),
 | 
			
		||||
          y: parseFloat($rect.attr('y')),
 | 
			
		||||
          width: parseFloat($rect.attr('width')),
 | 
			
		||||
          height: parseFloat($rect.attr('height')),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // Get the text element corresponding to this bar by index.
 | 
			
		||||
        cy.get('text')
 | 
			
		||||
          .eq(index)
 | 
			
		||||
          .then(($text) => {
 | 
			
		||||
            const bbox = $text[0].getBBox();
 | 
			
		||||
            const textProps = {
 | 
			
		||||
              x: bbox.x,
 | 
			
		||||
              y: bbox.y,
 | 
			
		||||
              width: bbox.width,
 | 
			
		||||
              height: bbox.height,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
			
		||||
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
			
		||||
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
			
		||||
 | 
			
		||||
            // Check horizontal alignment (within tolerance)
 | 
			
		||||
            expect(textProps.x + textProps.width / 2).to.be.closeTo(
 | 
			
		||||
              barProps.x + barProps.width / 2,
 | 
			
		||||
              5
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
			
		||||
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
			
		||||
          });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render data labels within each bar in the horizontal xy-chart with a lot of bars of different sizes', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
        chartOrientation: horizontal
 | 
			
		||||
    ---
 | 
			
		||||
    xychart-beta
 | 
			
		||||
      title "Sales Revenue"
 | 
			
		||||
      x-axis Months [jan,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s]
 | 
			
		||||
      y-axis "Revenue (in $)" 4000 --> 12000
 | 
			
		||||
      bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000, 8000, 10000, 5000, 7600, 4999,11000 ,5000,6000]
 | 
			
		||||
    `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    cy.get('g.bar-plot-0').within(() => {
 | 
			
		||||
      cy.get('rect').each(($rect, index) => {
 | 
			
		||||
        // Extract bar properties
 | 
			
		||||
        const barProps = {
 | 
			
		||||
          x: parseFloat($rect.attr('x')),
 | 
			
		||||
          y: parseFloat($rect.attr('y')),
 | 
			
		||||
          width: parseFloat($rect.attr('width')),
 | 
			
		||||
          height: parseFloat($rect.attr('height')),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // Get the text element corresponding to this bar by index.
 | 
			
		||||
        cy.get('text')
 | 
			
		||||
          .eq(index)
 | 
			
		||||
          .then(($text) => {
 | 
			
		||||
            const bbox = $text[0].getBBox();
 | 
			
		||||
            const textProps = {
 | 
			
		||||
              x: bbox.x,
 | 
			
		||||
              y: bbox.y,
 | 
			
		||||
              width: bbox.width,
 | 
			
		||||
              height: bbox.height,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
			
		||||
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
			
		||||
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
			
		||||
 | 
			
		||||
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
			
		||||
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
			
		||||
            expect(textProps.y + textProps.height / 2).to.be.closeTo(
 | 
			
		||||
              barProps.y + barProps.height / 2,
 | 
			
		||||
              5
 | 
			
		||||
            );
 | 
			
		||||
          });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render data labels correctly for a bar in the vertical xy-chart', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
    ---
 | 
			
		||||
    xychart-beta
 | 
			
		||||
            title "Sales Revenue"
 | 
			
		||||
            x-axis Months [jan]
 | 
			
		||||
            y-axis "Revenue (in $)" 3000 --> 12000
 | 
			
		||||
            bar [4000]
 | 
			
		||||
    `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    cy.get('g.bar-plot-0').within(() => {
 | 
			
		||||
      cy.get('rect').each(($rect, index) => {
 | 
			
		||||
        // Extract bar properties
 | 
			
		||||
        const barProps = {
 | 
			
		||||
          x: parseFloat($rect.attr('x')),
 | 
			
		||||
          y: parseFloat($rect.attr('y')),
 | 
			
		||||
          width: parseFloat($rect.attr('width')),
 | 
			
		||||
          height: parseFloat($rect.attr('height')),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // Get the text element corresponding to this bar by index.
 | 
			
		||||
        cy.get('text')
 | 
			
		||||
          .eq(index)
 | 
			
		||||
          .then(($text) => {
 | 
			
		||||
            const bbox = $text[0].getBBox();
 | 
			
		||||
            const textProps = {
 | 
			
		||||
              x: bbox.x,
 | 
			
		||||
              y: bbox.y,
 | 
			
		||||
              width: bbox.width,
 | 
			
		||||
              height: bbox.height,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
			
		||||
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
			
		||||
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
			
		||||
 | 
			
		||||
            // Check horizontal alignment (within tolerance)
 | 
			
		||||
            expect(textProps.x + textProps.width / 2).to.be.closeTo(
 | 
			
		||||
              barProps.x + barProps.width / 2,
 | 
			
		||||
              5
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
			
		||||
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
			
		||||
          });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render data labels correctly for a bar in the horizontal xy-chart', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    ---
 | 
			
		||||
    config:
 | 
			
		||||
      xyChart:
 | 
			
		||||
        showDataLabel: true
 | 
			
		||||
        chartOrientation: horizontal
 | 
			
		||||
    ---
 | 
			
		||||
    xychart-beta
 | 
			
		||||
            title "Sales Revenue"
 | 
			
		||||
            x-axis Months [jan]
 | 
			
		||||
            y-axis "Revenue (in $)" 3000 --> 12000
 | 
			
		||||
            bar [4000]
 | 
			
		||||
    `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    cy.get('g.bar-plot-0').within(() => {
 | 
			
		||||
      cy.get('rect').each(($rect, index) => {
 | 
			
		||||
        // Extract bar properties
 | 
			
		||||
        const barProps = {
 | 
			
		||||
          x: parseFloat($rect.attr('x')),
 | 
			
		||||
          y: parseFloat($rect.attr('y')),
 | 
			
		||||
          width: parseFloat($rect.attr('width')),
 | 
			
		||||
          height: parseFloat($rect.attr('height')),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // Get the text element corresponding to this bar by index.
 | 
			
		||||
        cy.get('text')
 | 
			
		||||
          .eq(index)
 | 
			
		||||
          .then(($text) => {
 | 
			
		||||
            const bbox = $text[0].getBBox();
 | 
			
		||||
            const textProps = {
 | 
			
		||||
              x: bbox.x,
 | 
			
		||||
              y: bbox.y,
 | 
			
		||||
              width: bbox.width,
 | 
			
		||||
              height: bbox.height,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            // Verify that the text label is positioned within the boundaries of the bar.
 | 
			
		||||
            expect(textProps.x).to.be.greaterThan(barProps.x);
 | 
			
		||||
            expect(textProps.x + textProps.width).to.be.lessThan(barProps.x + barProps.width);
 | 
			
		||||
 | 
			
		||||
            expect(textProps.y).to.be.greaterThan(barProps.y);
 | 
			
		||||
            expect(textProps.y + textProps.height).to.be.lessThan(barProps.y + barProps.height);
 | 
			
		||||
            expect(textProps.y + textProps.height / 2).to.be.closeTo(
 | 
			
		||||
              barProps.y + barProps.height / 2,
 | 
			
		||||
              5
 | 
			
		||||
            );
 | 
			
		||||
          });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
			
		||||
@@ -30,8 +30,8 @@
 | 
			
		||||
      .mermaid svg {
 | 
			
		||||
        /* font-size: 18px !important; */
 | 
			
		||||
        background-color: #eee;
 | 
			
		||||
        background-image: radial-gradient(#fff 1%, transparent 11%),
 | 
			
		||||
          radial-gradient(#fff 1%, transparent 11%);
 | 
			
		||||
        background-image:
 | 
			
		||||
          radial-gradient(#fff 1%, transparent 11%), radial-gradient(#fff 1%, transparent 11%);
 | 
			
		||||
        background-size: 20px 20px;
 | 
			
		||||
        background-position:
 | 
			
		||||
          0 0,
 | 
			
		||||
@@ -60,7 +60,7 @@
 | 
			
		||||
    <pre id="diagram" class="mermaid2">
 | 
			
		||||
 timeline
 | 
			
		||||
        title My day
 | 
			
		||||
        section section with no tasks
 | 
			
		||||
        section Section with no tasks
 | 
			
		||||
        section Go to work at the dog office
 | 
			
		||||
          1930 : first step : second step is a long step
 | 
			
		||||
               : third step
 | 
			
		||||
@@ -70,18 +70,18 @@
 | 
			
		||||
          1960 : India fights poverty, looses war to China and gets nuclear weapons from USA and USSR
 | 
			
		||||
          1970 : Green Revolution comes to india
 | 
			
		||||
        section Another section with no tasks
 | 
			
		||||
          I am a big big big tasks
 | 
			
		||||
          I am not so big tasks
 | 
			
		||||
          I am a very, very big task
 | 
			
		||||
          I am not so big task
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram" class="mermaid">
 | 
			
		||||
 timeline
 | 
			
		||||
        title MermaidChart 2023 Timeline
 | 
			
		||||
        section 2023 Q1 <br> Release Personal Tier
 | 
			
		||||
          Buttet 1 : sub-point 1a : sub-point 1b
 | 
			
		||||
          Bullet 1 : sub-point 1a : sub-point 1b
 | 
			
		||||
               : sub-point 1c
 | 
			
		||||
          Bullet 2 : sub-point 2a : sub-point 2b
 | 
			
		||||
        section 2023 Q2 <br> Release XYZ Tier
 | 
			
		||||
          Buttet 3 : sub-point <br> 3a : sub-point 3b
 | 
			
		||||
          Bullet 3 : sub-point <br> 3a : sub-point 3b
 | 
			
		||||
               : sub-point 3c
 | 
			
		||||
          Bullet 4 : sub-point 4a : sub-point 4b
 | 
			
		||||
 | 
			
		||||
@@ -93,7 +93,7 @@
 | 
			
		||||
        section Stone Age
 | 
			
		||||
          7600 BC : Britain's oldest known house was built in Orkney, Scotland
 | 
			
		||||
          6000 BC : Sea levels rise and Britain becomes an island. The people who live here are hunter-gatherers.
 | 
			
		||||
        section Broze Age
 | 
			
		||||
        section Bronze Age
 | 
			
		||||
          2300 BC : People arrive from Europe and settle in Britain. They bring farming and metalworking.
 | 
			
		||||
               : New styles of pottery and ways of burying the dead appear.
 | 
			
		||||
          2200 BC : The last major building works are completed at Stonehenge. People now bury their dead in stone circles.
 | 
			
		||||
@@ -106,7 +106,7 @@
 | 
			
		||||
        title History of Social Media Platform
 | 
			
		||||
          2002 : LinkedIn
 | 
			
		||||
          2004 : Facebook : Google : Pixar
 | 
			
		||||
          2005 : Youtube
 | 
			
		||||
          2005 : YouTube
 | 
			
		||||
          2006 : Twitter
 | 
			
		||||
          2007 : Tumblr
 | 
			
		||||
          2008s : Instagram
 | 
			
		||||
@@ -122,7 +122,7 @@
 | 
			
		||||
        title History of Social Media Platform
 | 
			
		||||
          2002 : LinkedIn
 | 
			
		||||
          2004 : Facebook : Google : Pixar
 | 
			
		||||
          2005 : Youtube
 | 
			
		||||
          2005 : YouTube
 | 
			
		||||
          2006 : Twitter
 | 
			
		||||
          2007 : Tumblr
 | 
			
		||||
          2008s : Instagram
 | 
			
		||||
@@ -139,7 +139,7 @@
 | 
			
		||||
        title History of Social Media Platform
 | 
			
		||||
          2002 : LinkedIn
 | 
			
		||||
          2004 : Facebook : Google
 | 
			
		||||
          2005 : Youtube
 | 
			
		||||
          2005 : YouTube
 | 
			
		||||
          2006 : Twitter
 | 
			
		||||
          2007 : Tumblr
 | 
			
		||||
          2008 : Instagram
 | 
			
		||||
@@ -152,7 +152,7 @@
 | 
			
		||||
        title History of Social Media Platform
 | 
			
		||||
          2002 : LinkedIn
 | 
			
		||||
          2004 : Facebook : Google
 | 
			
		||||
          2005 : Youtube
 | 
			
		||||
          2005 : YouTube
 | 
			
		||||
          2006 : Twitter
 | 
			
		||||
          2007 : Tumblr
 | 
			
		||||
          2008s : Instagram
 | 
			
		||||
 
 | 
			
		||||
@@ -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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
			
		||||
@@ -37,7 +37,7 @@
 | 
			
		||||
        +String owner
 | 
			
		||||
        +BigDecimal balance
 | 
			
		||||
        +deposit(amount) bool
 | 
			
		||||
        +withdrawl(amount) int
 | 
			
		||||
        +withdrawal(amount) int
 | 
			
		||||
       }
 | 
			
		||||
       cssClass "BankAccount" customCss
 | 
			
		||||
 | 
			
		||||
@@ -56,7 +56,7 @@ classE o-- classF : aggregation
 | 
			
		||||
          +String owner
 | 
			
		||||
          +BigDecimal balance
 | 
			
		||||
          +deposit(amount) bool
 | 
			
		||||
          +withdrawl(amount) int
 | 
			
		||||
          +withdrawal(amount) int
 | 
			
		||||
        }
 | 
			
		||||
          Class01~T~ <|-- AveryLongClass : Cool
 | 
			
		||||
          Class03~T~ *-- Class04~T~
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,7 @@
 | 
			
		||||
 | 
			
		||||
        document.getElementsByTagName('body')[0].appendChild(div);
 | 
			
		||||
      }
 | 
			
		||||
      mermaid.initialize({ startOnLoad: true, securityLevel: 'strct', logLevel: 1 });
 | 
			
		||||
      mermaid.initialize({ startOnLoad: true, securityLevel: 'strict_', logLevel: 1 });
 | 
			
		||||
    </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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
			
		||||
@@ -31,7 +31,7 @@
 | 
			
		||||
        flowchart BT subgraph S1 sub1 -->sub2 end subgraph S2 sub4 end S1 --> S2 sub1 --> sub4
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="mermaid2" style="width: 50%; height: 200px">
 | 
			
		||||
        sequenceDiagram Alice->>Bob:Extremely utterly long line of longness which had preivously
 | 
			
		||||
        sequenceDiagram Alice->>Bob:Extremely utterly long line of longness which had previously
 | 
			
		||||
        overflown the actor box as it is much longer than what it should be Bob->>Alice: I'm short
 | 
			
		||||
        though
 | 
			
		||||
      </div>
 | 
			
		||||
@@ -61,9 +61,9 @@
 | 
			
		||||
      #quot;elit#quot;."}}
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="mermaid2" style="width: 50%; height: 50%">
 | 
			
		||||
      flowchart TB internet nat routeur lb1 lb2 compute1 compute2 subgraph project routeur nat
 | 
			
		||||
      subgraph subnet1 compute1 lb1 end subgraph subnet2 compute2 lb2 end end internet --> routeur
 | 
			
		||||
      routeur --> subnet1 & subnet2 subnet1 & subnet2 --> nat --> internet
 | 
			
		||||
      flowchart TB internet nat router lb1 lb2 compute1 compute2 subgraph project router nat
 | 
			
		||||
      subgraph subnet1 compute1 lb1 end subgraph subnet2 compute2 lb2 end end internet --> router
 | 
			
		||||
      router --> subnet1 & subnet2 subnet1 & subnet2 --> nat --> internet
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="mermaid2" style="width: 50%; height: 50%">
 | 
			
		||||
      flowchart TD subgraph one[One] subgraph sub_one[Sub One] _sub_one end end subgraph two[Two]
 | 
			
		||||
 
 | 
			
		||||
@@ -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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
			
		||||
 
 | 
			
		||||
@@ -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.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
			
		||||
@@ -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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
			
		||||
@@ -38,7 +38,7 @@
 | 
			
		||||
        +String owner
 | 
			
		||||
        +BigDecimal balance
 | 
			
		||||
        +deposit(amount) bool
 | 
			
		||||
        +withdrawl(amount) int
 | 
			
		||||
        +withdrawal(amount) int
 | 
			
		||||
       }
 | 
			
		||||
       cssClass "BankAccount" customCss
 | 
			
		||||
    </pre>
 | 
			
		||||
 
 | 
			
		||||
@@ -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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
			
		||||
@@ -30,8 +30,8 @@
 | 
			
		||||
      .mermaid svg {
 | 
			
		||||
        /* font-size: 18px !important; */
 | 
			
		||||
        background-color: #efefef;
 | 
			
		||||
        background-image: radial-gradient(#fff 51%, transparent 91%),
 | 
			
		||||
          radial-gradient(#fff 51%, transparent 91%);
 | 
			
		||||
        background-image:
 | 
			
		||||
          radial-gradient(#fff 51%, transparent 91%), radial-gradient(#fff 51%, transparent 91%);
 | 
			
		||||
        background-size: 20px 20px;
 | 
			
		||||
        background-position:
 | 
			
		||||
          0 0,
 | 
			
		||||
 
 | 
			
		||||
@@ -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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
			
		||||
 
 | 
			
		||||
@@ -4,14 +4,14 @@
 | 
			
		||||
    <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.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
			
		||||
      rel="stylesheet"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
 | 
			
		||||
      rel="stylesheet"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
@@ -78,45 +78,116 @@
 | 
			
		||||
        font-family: monospace;
 | 
			
		||||
        font-size: 72px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      pre {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* tspan {
 | 
			
		||||
              font-size: 6px !important;
 | 
			
		||||
            } */
 | 
			
		||||
      /* .flowchart-link {
 | 
			
		||||
        stroke-dasharray: 4, 4 !important;
 | 
			
		||||
        animation: flow 1s linear infinite;
 | 
			
		||||
        animation: dashdraw 4.93282s linear infinite;
 | 
			
		||||
        stroke-width: 2px !important;
 | 
			
		||||
      } */
 | 
			
		||||
 | 
			
		||||
      @keyframes dashdraw {
 | 
			
		||||
        from {
 | 
			
		||||
          stroke-dashoffset: 0;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /*stroke-width:2;stroke-dasharray:10.000000,9.865639;stroke-dashoffset:-198.656393;animation:    4.932820s linear infinite;*/
 | 
			
		||||
      /* stroke-width:2;stroke-dasharray:10.000000,9.865639;stroke-dashoffset:-198.656393;animation: dashdraw 4.932820s linear infinite;*/
 | 
			
		||||
    </style>
 | 
			
		||||
  </head>
 | 
			
		||||
 | 
			
		||||
  <body>
 | 
			
		||||
    <pre id="diagram4" class="mermaid">
 | 
			
		||||
      flowchart LR
 | 
			
		||||
        AB["apa@apa@"] --> B(("`apa@apa`"))
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid">
 | 
			
		||||
      flowchart
 | 
			
		||||
        D(("for D"))
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid">
 | 
			
		||||
      flowchart LR
 | 
			
		||||
        A e1@==> B
 | 
			
		||||
        e1@{ animate: true}
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid">
 | 
			
		||||
flowchart LR
 | 
			
		||||
  A e1@--> B
 | 
			
		||||
  classDef animate stroke-width:2,stroke-dasharray:10\,8,stroke-dashoffset:-180,animation: edge-animation-frame 6s linear infinite, stroke-linecap: round
 | 
			
		||||
  class e1 animate
 | 
			
		||||
    </pre>
 | 
			
		||||
    <h2>infinite</h2>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
  A e1@--> B
 | 
			
		||||
  classDef animate stroke-dasharray: 9\,5,stroke-dashoffset: 900,animation: dash 25s linear infinite;
 | 
			
		||||
  class e1 animate
 | 
			
		||||
    </pre>
 | 
			
		||||
    <h2>Mermaid - edge-animation-slow</h2>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
  A e1@--> B
 | 
			
		||||
e1@{ animation: fast}
 | 
			
		||||
    </pre>
 | 
			
		||||
    <h2>Mermaid - edge-animation-fast</h2>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
  A e1@--> B
 | 
			
		||||
  classDef animate stroke-dasharray: 1000,stroke-dashoffset: 1000,animation: dash 10s linear;
 | 
			
		||||
  class e1 edge-animation-fast
 | 
			
		||||
    </pre>
 | 
			
		||||
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
 | 
			
		||||
info    </pre
 | 
			
		||||
    >
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
flowchart LR
 | 
			
		||||
 subgraph s1["Untitled subgraph"]
 | 
			
		||||
        n1["Evaluate"]
 | 
			
		||||
        n2["Option 1"]
 | 
			
		||||
        n3["Option 2"]
 | 
			
		||||
        n4["fa:fa-car Option 3"]
 | 
			
		||||
  end
 | 
			
		||||
    n1 -- One --> n2
 | 
			
		||||
    n1 -- Two --> n3
 | 
			
		||||
    n1 -- Three --> n4
 | 
			
		||||
    n5
 | 
			
		||||
    n1@{ shape: diam}
 | 
			
		||||
    n2@{ shape: rect}
 | 
			
		||||
    n3@{ shape: rect}
 | 
			
		||||
    n4@{ shape: rect}
 | 
			
		||||
    A["Start"] -- Some text --> B("Continue")
 | 
			
		||||
    B --> C{"Evaluate"}
 | 
			
		||||
    C -- One --> D["Option 1"]
 | 
			
		||||
    C -- Two --> E["Option 2"]
 | 
			
		||||
    C -- Three --> F["fa:fa-car Option 3"]
 | 
			
		||||
 | 
			
		||||
      flowchart LR
 | 
			
		||||
      a
 | 
			
		||||
      subgraph s0["APA"]
 | 
			
		||||
      subgraph s8["APA"]
 | 
			
		||||
      subgraph s1["APA"]
 | 
			
		||||
        D{"X"}
 | 
			
		||||
        E[Q]
 | 
			
		||||
      end
 | 
			
		||||
      subgraph s3["BAPA"]
 | 
			
		||||
        F[Q]
 | 
			
		||||
        I
 | 
			
		||||
      end
 | 
			
		||||
            D --> I
 | 
			
		||||
            D --> I
 | 
			
		||||
            D --> I
 | 
			
		||||
 | 
			
		||||
      I{"X"}
 | 
			
		||||
      end
 | 
			
		||||
      end
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid">
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
      flowchart LR
 | 
			
		||||
      a
 | 
			
		||||
        D{"Use the editor"}
 | 
			
		||||
 | 
			
		||||
      D -- Mermaid js --> I{"fa:fa-code Text"}
 | 
			
		||||
      D-->I
 | 
			
		||||
      D-->I
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
@@ -185,6 +256,18 @@ flowchart LR
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
flowchart LR
 | 
			
		||||
    A{A} --> B & C
 | 
			
		||||
    subgraph "subbe"
 | 
			
		||||
      A
 | 
			
		||||
    end
 | 
			
		||||
</pre
 | 
			
		||||
    >
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
flowchart LR
 | 
			
		||||
    n2@{ shape: rect}
 | 
			
		||||
    n3@{ shape: rect}
 | 
			
		||||
@@ -303,7 +386,7 @@ kanban
 | 
			
		||||
    [Create Documentation]
 | 
			
		||||
    docs[Create Blog about the new diagram]
 | 
			
		||||
  id7[In progress]
 | 
			
		||||
    id6[Create renderer so that it works in all cases. We also add som extra text here for testing purposes. And some more just for the extra flare.]
 | 
			
		||||
    id6[Create renderer so that it works in all cases. We also add some extra text here for testing purposes. And some more just for the extra flare.]
 | 
			
		||||
  id9[Ready for deploy]
 | 
			
		||||
    id8[Design grammar]@{ assigned: 'knsv' }
 | 
			
		||||
  id10[Ready for test]
 | 
			
		||||
@@ -351,7 +434,10 @@ kanban
 | 
			
		||||
      window.callback = function () {
 | 
			
		||||
        alert('A callback was triggered');
 | 
			
		||||
      };
 | 
			
		||||
      mermaid.initialize({
 | 
			
		||||
      function callback() {
 | 
			
		||||
        alert('It worked');
 | 
			
		||||
      }
 | 
			
		||||
      await mermaid.initialize({
 | 
			
		||||
        // theme: 'base',
 | 
			
		||||
        // theme: 'default',
 | 
			
		||||
        // theme: 'forest',
 | 
			
		||||
@@ -363,9 +449,11 @@ kanban
 | 
			
		||||
        // layout: 'fixed',
 | 
			
		||||
        // htmlLabels: false,
 | 
			
		||||
        flowchart: { titleTopMargin: 10 },
 | 
			
		||||
 | 
			
		||||
        // fontFamily: 'Caveat',
 | 
			
		||||
        // fontFamily: 'Kalam',
 | 
			
		||||
        // fontFamily: 'courier',
 | 
			
		||||
        fontFamily: 'arial',
 | 
			
		||||
        sequence: {
 | 
			
		||||
          actorFontFamily: 'courier',
 | 
			
		||||
          noteFontFamily: 'courier',
 | 
			
		||||
@@ -377,10 +465,9 @@ kanban
 | 
			
		||||
        fontSize: 12,
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
        callback,
 | 
			
		||||
      });
 | 
			
		||||
      function callback() {
 | 
			
		||||
        alert('It worked');
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      mermaid.parseError = function (err, hash) {
 | 
			
		||||
        console.error('In parse error:');
 | 
			
		||||
        console.error(err);
 | 
			
		||||
 
 | 
			
		||||
@@ -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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
			
		||||
@@ -62,56 +62,23 @@
 | 
			
		||||
 | 
			
		||||
  <body style="display: flex; gap: 2rem; flex-direction: row">
 | 
			
		||||
    <pre id="diagram4" class="mermaid">
 | 
			
		||||
      flowchart LR
 | 
			
		||||
      A@{ icon: "fa:window-minimize", form: circle }
 | 
			
		||||
      E@{ icon: "fa:window-minimize", form: circle }
 | 
			
		||||
      B@{ icon: "fa:bell", form: circle }
 | 
			
		||||
      B2@{ icon: "fa:bell", form: circle }
 | 
			
		||||
      C@{ icon: "fa:address-book",  form: square  }
 | 
			
		||||
      D@{ icon: "fa:star-half",  form: square  }
 | 
			
		||||
      A --> E
 | 
			
		||||
      B --> B2
 | 
			
		||||
 | 
			
		||||
      flowchart
 | 
			
		||||
          A --> A
 | 
			
		||||
          subgraph B
 | 
			
		||||
            B1 --> B1
 | 
			
		||||
          end
 | 
			
		||||
          subgraph C
 | 
			
		||||
            subgraph C1
 | 
			
		||||
              C2 --> C2
 | 
			
		||||
              subgraph D
 | 
			
		||||
                D1 --> D1
 | 
			
		||||
              end
 | 
			
		||||
              D --> D
 | 
			
		||||
            end
 | 
			
		||||
            C1 --> C1
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
      flowchart TB
 | 
			
		||||
       A --test2--> B2@{ icon: "fa:bell", form: "rounded", label: "B2 aiduaid uyawduad uaduabd uyduadb", pos: "b" }
 | 
			
		||||
       B2 --test--> C
 | 
			
		||||
       D --> B2 --> E
 | 
			
		||||
       style B2 fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
  </pre
 | 
			
		||||
    >
 | 
			
		||||
    <pre id="diagram43" class="mermaid2">
 | 
			
		||||
      flowchart BT
 | 
			
		||||
       A --test2--> B2@{ icon: "fa:bell", form: "square", label: "B2", pos: "t", h: 40, w: 30 }
 | 
			
		||||
       B2 --test--> C
 | 
			
		||||
       D --> B2 --> E
 | 
			
		||||
  </pre
 | 
			
		||||
    >
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
      flowchart BT
 | 
			
		||||
       A --test2--> B2@{ icon: "fa:bell", label: "B2 awiugdawu uydgayuiwd wuydguy", pos: "b", h: 40, w: 30 }
 | 
			
		||||
       B2 --test--> C
 | 
			
		||||
  </pre
 | 
			
		||||
    >
 | 
			
		||||
    <pre id="diagram43" class="mermaid2">
 | 
			
		||||
      flowchart BT
 | 
			
		||||
       A --test2--> B2@{ icon: "fa:bell", label: "B2 dawuygd ayuwgd uy", pos: "t", h: 40, w: 30 }
 | 
			
		||||
       B2 --test--> C
 | 
			
		||||
  </pre
 | 
			
		||||
    >
 | 
			
		||||
    <pre id="diagram6" class="mermaid2">
 | 
			
		||||
      flowchart TB
 | 
			
		||||
       A --> B2@{ icon: "fa:bell", form: "circle", label: "test augfuyfavf ydvaubfuac", pos: "t", w: 200, h: 100 } --> C
 | 
			
		||||
  </pre
 | 
			
		||||
    >
 | 
			
		||||
    <pre id="diagram6" class="mermaid2">
 | 
			
		||||
      flowchart TB
 | 
			
		||||
       A --> B2@{ icon: "fa:bell", form: "circle", label: "test augfuyfavf ydvaubfuac", pos: "b", w: 200, h: 100 } --> C
 | 
			
		||||
       D --> B2 --> E
 | 
			
		||||
  </pre
 | 
			
		||||
    >
 | 
			
		||||
    <script type="module">
 | 
			
		||||
      import mermaid from './mermaid.esm.mjs';
 | 
			
		||||
      import layouts from './mermaid-layout-elk.esm.mjs';
 | 
			
		||||
 
 | 
			
		||||
@@ -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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
<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 rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/font-awesome.min.css" />
 | 
			
		||||
  <link href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css" rel="stylesheet" />
 | 
			
		||||
  <link href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap" rel="stylesheet" />
 | 
			
		||||
  <link rel="preconnect" href="https://fonts.googleapis.com" />
 | 
			
		||||
 
 | 
			
		||||
@@ -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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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/6.5.2/css/font-awesome.min.css"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.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