mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-04 12:54:08 +01:00 
			
		
		
		
	Compare commits
	
		
			922 Commits
		
	
	
		
			mermaid@11
			...
			topbar-con
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					f85bb1496a | ||
| 
						 | 
					41a737f682 | ||
| 
						 | 
					0c2e1bc3fe | ||
| 
						 | 
					f399561565 | ||
| 
						 | 
					05bdf0e20e | ||
| 
						 | 
					292cd83439 | ||
| 
						 | 
					3848649bdd | ||
| 
						 | 
					1341e3d156 | ||
| 
						 | 
					1d6a55a311 | ||
| 
						 | 
					4d25caba8e | ||
| 
						 | 
					f6335571cc | ||
| 
						 | 
					bb895d8cf4 | ||
| 
						 | 
					00ca7ac94f | ||
| 
						 | 
					34cd280ae4 | ||
| 
						 | 
					d0986ace8c | ||
| 
						 | 
					bc2bd3d769 | ||
| 
						 | 
					f047b81bb9 | ||
| 
						 | 
					7db1d672a9 | ||
| 
						 | 
					00a8dc47f5 | ||
| 
						 | 
					5caaf36a3b | ||
| 
						 | 
					4128197468 | ||
| 
						 | 
					40494b16f5 | ||
| 
						 | 
					840a197044 | ||
| 
						 | 
					ae0fcbfb8b | ||
| 
						 | 
					a38a0ab869 | ||
| 
						 | 
					1b5672e73d | ||
| 
						 | 
					b22103b769 | ||
| 
						 | 
					33f9d8bdc9 | ||
| 
						 | 
					446f6a7701 | ||
| 
						 | 
					2ace92858f | ||
| 
						 | 
					510fd0fe71 | ||
| 
						 | 
					9268cc2e07 | ||
| 
						 | 
					5447a9f4f9 | ||
| 
						 | 
					dc698c0309 | ||
| 
						 | 
					31665fbad8 | ||
| 
						 | 
					a5561b9be0 | ||
| 
						 | 
					60db05b75c | ||
| 
						 | 
					3be59a7b4d | ||
| 
						 | 
					ff00141a0a | ||
| 
						 | 
					374ebbb087 | ||
| 
						 | 
					9d06d8f31e | ||
| 
						 | 
					97b12e9718 | ||
| 
						 | 
					de40d80ef9 | ||
| 
						 | 
					c9b8f034d5 | ||
| 
						 | 
					162e9e50ad | ||
| 
						 | 
					225e5dde60 | ||
| 
						 | 
					726b42ba00 | ||
| 
						 | 
					c22b5701db | ||
| 
						 | 
					c6b715f737 | ||
| 
						 | 
					bc69180958 | ||
| 
						 | 
					a64b14dbfd | ||
| 
						 | 
					1c8b996cbb | ||
| 
						 | 
					eb8e4da5f6 | ||
| 
						 | 
					2fdd24ab15 | ||
| 
						 | 
					c01aee842a | ||
| 
						 | 
					2c22e80dba | ||
| 
						 | 
					0518e9cfd7 | ||
| 
						 | 
					fe2e73ed94 | ||
| 
						 | 
					4f5c4b8349 | ||
| 
						 | 
					ce99d968f4 | ||
| 
						 | 
					877a7e288a | ||
| 
						 | 
					4eeea1076c | ||
| 
						 | 
					f43e35039f | ||
| 
						 | 
					dbf885b077 | ||
| 
						 | 
					78c1d97f0f | ||
| 
						 | 
					ad2f17205a | ||
| 
						 | 
					98fe7a6e03 | ||
| 
						 | 
					5857953d51 | ||
| 
						 | 
					34a12103d0 | ||
| 
						 | 
					46b8a75199 | ||
| 
						 | 
					1dca45a76d | ||
| 
						 | 
					d1d5bd14f6 | ||
| 
						 | 
					974867a089 | ||
| 
						 | 
					52532a7801 | ||
| 
						 | 
					6eb56b9363 | ||
| 
						 | 
					f7c91a72cb | ||
| 
						 | 
					c53e044559 | ||
| 
						 | 
					d846a8c65a | ||
| 
						 | 
					c3ba23a4e9 | ||
| 
						 | 
					c688c387a0 | ||
| 
						 | 
					300fb85a73 | ||
| 
						 | 
					9c6e554153 | ||
| 
						 | 
					b5c78b7225 | ||
| 
						 | 
					26bd8cb53c | ||
| 
						 | 
					da6361f652 | ||
| 
						 | 
					167fef5cff | ||
| 
						 | 
					3233c63fc0 | ||
| 
						 | 
					1182aaaf4d | ||
| 
						 | 
					b78c061a8f | ||
| 
						 | 
					ebfcf3ea07 | ||
| 
						 | 
					62edea6b33 | ||
| 
						 | 
					72eda9ce52 | ||
| 
						 | 
					cfd84e54d5 | ||
| 
						 | 
					cfe710f42b | ||
| 
						 | 
					87e76bbcf5 | ||
| 
						 | 
					0b4754ed60 | ||
| 
						 | 
					fe6f05eec9 | ||
| 
						 | 
					548256507d | ||
| 
						 | 
					d8ebf7a136 | ||
| 
						 | 
					a758b24b75 | ||
| 
						 | 
					3004d4d93a | ||
| 
						 | 
					88abf46fc3 | ||
| 
						 | 
					2eeba0e999 | ||
| 
						 | 
					397684fe49 | ||
| 
						 | 
					bc1f769f13 | ||
| 
						 | 
					f6592235a2 | ||
| 
						 | 
					57805dafa4 | ||
| 
						 | 
					3b92f979e3 | ||
| 
						 | 
					7a7e4b4e6f | ||
| 
						 | 
					c5843bee23 | ||
| 
						 | 
					ada42b892c | ||
| 
						 | 
					62f9261c4e | ||
| 
						 | 
					a19b42f3c2 | ||
| 
						 | 
					9f90f4f23a | ||
| 
						 | 
					451c886f50 | ||
| 
						 | 
					0a1a112605 | ||
| 
						 | 
					63cf7cbd94 | ||
| 
						 | 
					8ab60c3a7a | ||
| 
						 | 
					0342579b9c | ||
| 
						 | 
					348401c4f4 | ||
| 
						 | 
					8145199203 | ||
| 
						 | 
					f408e938d4 | ||
| 
						 | 
					6471ae4d49 | ||
| 
						 | 
					af6e2b4cb6 | ||
| 
						 | 
					7a4a52b50a | ||
| 
						 | 
					ee05d8588f | ||
| 
						 | 
					58175f647e | ||
| 
						 | 
					ec0e3e4cd6 | ||
| 
						 | 
					72cf84cb40 | ||
| 
						 | 
					6ca8f46d37 | ||
| 
						 | 
					b2dfbb6ffd | ||
| 
						 | 
					ffa7804af0 | ||
| 
						 | 
					f454865b97 | ||
| 
						 | 
					d83b1a5dbc | ||
| 
						 | 
					d07f85e6ac | ||
| 
						 | 
					a79c0f4c00 | ||
| 
						 | 
					4a19740aea | ||
| 
						 | 
					4dbaa2b5d6 | ||
| 
						 | 
					9cad3c7aea | ||
| 
						 | 
					56d66cdabc | ||
| 
						 | 
					a0e5408850 | ||
| 
						 | 
					d155e414a0 | ||
| 
						 | 
					127390978a | ||
| 
						 | 
					baf3adf1c0 | ||
| 
						 | 
					d0768cbc37 | ||
| 
						 | 
					f00507449b | ||
| 
						 | 
					509793d5c2 | ||
| 
						 | 
					8dd0e7a794 | ||
| 
						 | 
					8a8d169e27 | ||
| 
						 | 
					b53cf0a1fb | ||
| 
						 | 
					58fa99787c | ||
| 
						 | 
					1a9a9f43e6 | ||
| 
						 | 
					aeec4b7f77 | ||
| 
						 | 
					40686f198c | ||
| 
						 | 
					295af02744 | ||
| 
						 | 
					a3f35f6367 | ||
| 
						 | 
					523286bbcb | ||
| 
						 | 
					c296f48ebe | ||
| 
						 | 
					9609aced14 | ||
| 
						 | 
					97788df7e3 | ||
| 
						 | 
					47d4d56fa6 | ||
| 
						 | 
					5e9c887385 | ||
| 
						 | 
					fdb8ae5b53 | ||
| 
						 | 
					65ff22d94b | ||
| 
						 | 
					5cf093ca9e | ||
| 
						 | 
					e2de55202f | ||
| 
						 | 
					b4043840ca | ||
| 
						 | 
					8f3e17e386 | ||
| 
						 | 
					4e950e7256 | ||
| 
						 | 
					de3e381ccf | ||
| 
						 | 
					b2fde76753 | ||
| 
						 | 
					b5587d8b87 | ||
| 
						 | 
					9b75aeb224 | ||
| 
						 | 
					993858cdc8 | ||
| 
						 | 
					f4e1f07412 | ||
| 
						 | 
					09e0de6053 | ||
| 
						 | 
					9a50bf5237 | ||
| 
						 | 
					5747009c8f | ||
| 
						 | 
					dc513ec211 | ||
| 
						 | 
					5f58d4f7b0 | ||
| 
						 | 
					3536ceb5d3 | ||
| 
						 | 
					7ed33a91c0 | ||
| 
						 | 
					f8bf03d365 | ||
| 
						 | 
					4202ee521a | ||
| 
						 | 
					0e25fd42f9 | ||
| 
						 | 
					feee5d1c8c | ||
| 
						 | 
					ab6d92c544 | ||
| 
						 | 
					d27d4abab7 | ||
| 
						 | 
					3162cff7a9 | ||
| 
						 | 
					74edf7a027 | ||
| 
						 | 
					9681a27b31 | ||
| 
						 | 
					22091f6182 | ||
| 
						 | 
					ba534985ec | ||
| 
						 | 
					edc1ae1e0c | ||
| 
						 | 
					c00f3fb090 | ||
| 
						 | 
					23bc25ef94 | ||
| 
						 | 
					42dfa20fd4 | ||
| 
						 | 
					cc2373ea89 | ||
| 
						 | 
					22bc234ff3 | ||
| 
						 | 
					fa48f9580f | ||
| 
						 | 
					38ca14da43 | ||
| 
						 | 
					74a56fc58a | ||
| 
						 | 
					08ffbb61e9 | ||
| 
						 | 
					232e60c8cb | ||
| 
						 | 
					cd9ca76e39 | ||
| 
						 | 
					c13d988392 | ||
| 
						 | 
					15ffe2021a | ||
| 
						 | 
					4fbc19e0d7 | ||
| 
						 | 
					02f661a103 | ||
| 
						 | 
					130638f6e1 | ||
| 
						 | 
					9ab2761c1d | ||
| 
						 | 
					41d7a549b0 | ||
| 
						 | 
					2b8998fdd1 | ||
| 
						 | 
					202ef31071 | ||
| 
						 | 
					b09f2e836a | ||
| 
						 | 
					6a814a0d91 | ||
| 
						 | 
					b07bb9b3ff | ||
| 
						 | 
					5120ed09ab | ||
| 
						 | 
					081681f05b | ||
| 
						 | 
					f7648e85d9 | ||
| 
						 | 
					fe833e6d16 | ||
| 
						 | 
					809f4eb609 | ||
| 
						 | 
					61f3fc5ede | ||
| 
						 | 
					90bbf90a83 | ||
| 
						 | 
					92efc24283 | ||
| 
						 | 
					1c45df4567 | ||
| 
						 | 
					1575a93136 | ||
| 
						 | 
					bde653b1c2 | ||
| 
						 | 
					e9e663ffa3 | ||
| 
						 | 
					963efa64c7 | ||
| 
						 | 
					e2e5101005 | ||
| 
						 | 
					6ea13cded3 | ||
| 
						 | 
					c063b92cc9 | ||
| 
						 | 
					304f133227 | ||
| 
						 | 
					54a0dd0af6 | ||
| 
						 | 
					54ee6bd46d | ||
| 
						 | 
					f0e47f29fd | ||
| 
						 | 
					ab5b7694c6 | ||
| 
						 | 
					eb76dfb1ca | ||
| 
						 | 
					28d7ec092c | ||
| 
						 | 
					84b03f3a08 | ||
| 
						 | 
					f9ac9867c1 | ||
| 
						 | 
					ee6fb83265 | ||
| 
						 | 
					46c16c963b | ||
| 
						 | 
					32a68d489e | ||
| 
						 | 
					7bbebff583 | ||
| 
						 | 
					c432aec2f6 | ||
| 
						 | 
					64237fbaa7 | ||
| 
						 | 
					d90609b26c | ||
| 
						 | 
					adec6cd254 | ||
| 
						 | 
					5ce60cacbf | ||
| 
						 | 
					9ddedb0b49 | ||
| 
						 | 
					e977deaf11 | ||
| 
						 | 
					85a7771b70 | ||
| 
						 | 
					3778fef1a1 | ||
| 
						 | 
					0bff720e20 | ||
| 
						 | 
					7ba415dad1 | ||
| 
						 | 
					7f47678862 | ||
| 
						 | 
					127bac1147 | ||
| 
						 | 
					9a90d795ca | ||
| 
						 | 
					f7fe8f2f59 | ||
| 
						 | 
					1d9c2aab8d | ||
| 
						 | 
					8fba9c1236 | ||
| 
						 | 
					04800ff677 | ||
| 
						 | 
					5d3d1047a4 | ||
| 
						 | 
					0f08c3bc9c | ||
| 
						 | 
					7809b5a93f | ||
| 
						 | 
					ef9bb53e67 | ||
| 
						 | 
					3e32332814 | ||
| 
						 | 
					e1aab25144 | ||
| 
						 | 
					c8697301ee | ||
| 
						 | 
					fcb1de915b | ||
| 
						 | 
					e345294658 | ||
| 
						 | 
					9936099e25 | ||
| 
						 | 
					59352ad4d8 | ||
| 
						 | 
					ba70f15de5 | ||
| 
						 | 
					e70b069576 | ||
| 
						 | 
					28bab4a323 | ||
| 
						 | 
					6cc31b7453 | ||
| 
						 | 
					29ca1504dd | ||
| 
						 | 
					16d2251e43 | ||
| 
						 | 
					bc2cc61240 | ||
| 
						 | 
					6836e9c7a8 | ||
| 
						 | 
					8dc016e7f9 | ||
| 
						 | 
					3cad7984a3 | ||
| 
						 | 
					f5bae98098 | ||
| 
						 | 
					0695893e30 | ||
| 
						 | 
					9ef6090c8c | ||
| 
						 | 
					fa6f3e5fff | ||
| 
						 | 
					ec0d9c389a | ||
| 
						 | 
					323b07a2e4 | ||
| 
						 | 
					c153d0455f | ||
| 
						 | 
					9b00f1f2fb | ||
| 
						 | 
					a055ff7db3 | ||
| 
						 | 
					d032723a47 | ||
| 
						 | 
					daf83f596d | ||
| 
						 | 
					df636c6d0a | ||
| 
						 | 
					64554a6c60 | ||
| 
						 | 
					becadf0a7d | ||
| 
						 | 
					54d485f173 | ||
| 
						 | 
					b4f5b8ddaf | ||
| 
						 | 
					cb5c1ae367 | ||
| 
						 | 
					b29081d4e8 | ||
| 
						 | 
					654097c438 | ||
| 
						 | 
					1e672868c4 | ||
| 
						 | 
					bff32827b5 | ||
| 
						 | 
					65f9b29b86 | ||
| 
						 | 
					9868f3a4c3 | ||
| 
						 | 
					b4879d13b8 | ||
| 
						 | 
					95964b5487 | ||
| 
						 | 
					4e17da0a30 | ||
| 
						 | 
					d8bf155f0e | ||
| 
						 | 
					0b4f85230a | ||
| 
						 | 
					0dff4ca438 | ||
| 
						 | 
					cc29437ede | ||
| 
						 | 
					dfaaf361f3 | ||
| 
						 | 
					37538310d3 | ||
| 
						 | 
					c7ae08abc3 | ||
| 
						 | 
					69973eaa02 | ||
| 
						 | 
					d3b2c7ea18 | ||
| 
						 | 
					68f41f685d | ||
| 
						 | 
					255279eb22 | ||
| 
						 | 
					fe3cffbb67 | ||
| 
						 | 
					2a91849a38 | ||
| 
						 | 
					082de76eef | ||
| 
						 | 
					570ae78b15 | ||
| 
						 | 
					885ac6f947 | ||
| 
						 | 
					8328f74751 | ||
| 
						 | 
					01b5079562 | ||
| 
						 | 
					6b23647bec | ||
| 
						 | 
					193fdb225e | ||
| 
						 | 
					c8ce416aba | ||
| 
						 | 
					1388662132 | ||
| 
						 | 
					757627427b | ||
| 
						 | 
					7cbd80af33 | ||
| 
						 | 
					16c448b89b | ||
| 
						 | 
					c218e365bd | ||
| 
						 | 
					f507dbbe00 | ||
| 
						 | 
					9966beb99b | ||
| 
						 | 
					f4713332c0 | ||
| 
						 | 
					63ff5b1d98 | ||
| 
						 | 
					cb0a4703bd | ||
| 
						 | 
					7e71b85668 | ||
| 
						 | 
					1dd7bcb0a6 | ||
| 
						 | 
					bbf6ab1206 | ||
| 
						 | 
					56f522ec50 | ||
| 
						 | 
					d4e5acc530 | ||
| 
						 | 
					ef9cbb61e5 | ||
| 
						 | 
					8a0ecc1fe9 | ||
| 
						 | 
					c6e1271ef7 | ||
| 
						 | 
					b02294376a | ||
| 
						 | 
					97c61d818c | ||
| 
						 | 
					1c66237fa8 | ||
| 
						 | 
					8ef5d324fd | ||
| 
						 | 
					c1ca3511c4 | ||
| 
						 | 
					953d288957 | ||
| 
						 | 
					143806b360 | ||
| 
						 | 
					a381ab6c41 | ||
| 
						 | 
					93e20fdaa3 | ||
| 
						 | 
					ece3b254db | ||
| 
						 | 
					dd42305e8c | ||
| 
						 | 
					c34fd152d5 | ||
| 
						 | 
					8f0e0b9c39 | ||
| 
						 | 
					fe8932e906 | ||
| 
						 | 
					5a2a8f9bd4 | ||
| 
						 | 
					9854748fc3 | ||
| 
						 | 
					73bbde8476 | ||
| 
						 | 
					01a41ef530 | ||
| 
						 | 
					124d2f72dd | ||
| 
						 | 
					34e8946c58 | ||
| 
						 | 
					0197c08916 | ||
| 
						 | 
					ef30283fe9 | ||
| 
						 | 
					dffaf9fa8f | ||
| 
						 | 
					9168d5d1f4 | ||
| 
						 | 
					f33ebfaf7a | ||
| 
						 | 
					054f929150 | ||
| 
						 | 
					8cb1c68166 | ||
| 
						 | 
					d752240efc | ||
| 
						 | 
					8d0902de4c | ||
| 
						 | 
					f6c32b6da4 | ||
| 
						 | 
					bdf145ffe3 | ||
| 
						 | 
					75ca802b62 | ||
| 
						 | 
					3f85b6179d | ||
| 
						 | 
					5ae5a0cea3 | ||
| 
						 | 
					b315d70af5 | ||
| 
						 | 
					848be3d129 | ||
| 
						 | 
					5fabd414fb | ||
| 
						 | 
					17e2f9e0d4 | ||
| 
						 | 
					7fa8b35bdc | ||
| 
						 | 
					e6ea4eae50 | ||
| 
						 | 
					7401cb8f6a | ||
| 
						 | 
					e765007b21 | ||
| 
						 | 
					b5cd101d86 | ||
| 
						 | 
					da12ace593 | ||
| 
						 | 
					2c676b6222 | ||
| 
						 | 
					0af08276d2 | ||
| 
						 | 
					d790e353b0 | ||
| 
						 | 
					e07e9b9daf | ||
| 
						 | 
					948ec4d1ce | ||
| 
						 | 
					e62d268c89 | ||
| 
						 | 
					742ad7c130 | ||
| 
						 | 
					56cc3728c5 | ||
| 
						 | 
					fb86e5c689 | ||
| 
						 | 
					01e5346004 | ||
| 
						 | 
					1b34077f55 | ||
| 
						 | 
					87fa698c79 | ||
| 
						 | 
					b49afeefc2 | ||
| 
						 | 
					8ace44b428 | ||
| 
						 | 
					39a6c308fb | ||
| 
						 | 
					2771b14f65 | ||
| 
						 | 
					f8746bee04 | ||
| 
						 | 
					bb97fdbd1e | ||
| 
						 | 
					e3ec6ed993 | ||
| 
						 | 
					6df1fa1a03 | ||
| 
						 | 
					fd6b875f87 | ||
| 
						 | 
					be3da0b39d | ||
| 
						 | 
					64bc7f4bd9 | ||
| 
						 | 
					75e796f183 | ||
| 
						 | 
					6cc0132e0a | ||
| 
						 | 
					4bc70b7325 | ||
| 
						 | 
					bfdd0f244d | ||
| 
						 | 
					0e819ae050 | ||
| 
						 | 
					10f11e016f | ||
| 
						 | 
					b7d66bb975 | ||
| 
						 | 
					74695d2e88 | ||
| 
						 | 
					38eed7c988 | ||
| 
						 | 
					d16e46a386 | ||
| 
						 | 
					97820a50c2 | ||
| 
						 | 
					df948bcf2c | ||
| 
						 | 
					cfd097b029 | ||
| 
						 | 
					ffc1fef599 | ||
| 
						 | 
					1e8e4e4b73 | ||
| 
						 | 
					b67cdb171d | ||
| 
						 | 
					c789172b89 | ||
| 
						 | 
					1d68c4f075 | ||
| 
						 | 
					606ecf8990 | ||
| 
						 | 
					16a5fc05d6 | ||
| 
						 | 
					62fd359c0e | ||
| 
						 | 
					b0f4ace3a1 | ||
| 
						 | 
					6f506c30eb | ||
| 
						 | 
					cf2c7f7f8c | ||
| 
						 | 
					6041729ae2 | ||
| 
						 | 
					b7ef8b2b5a | ||
| 
						 | 
					bfea287b44 | ||
| 
						 | 
					9afb181d06 | ||
| 
						 | 
					cfe7cce41d | ||
| 
						 | 
					33029c8bd2 | ||
| 
						 | 
					e54d10c706 | ||
| 
						 | 
					df22fb5e00 | ||
| 
						 | 
					5d2b0f74af | ||
| 
						 | 
					86c7532f46 | ||
| 
						 | 
					723b8f1d32 | ||
| 
						 | 
					5be5aa3dfa | ||
| 
						 | 
					69e12fd67d | ||
| 
						 | 
					8aa87c7091 | ||
| 
						 | 
					e1024838e8 | ||
| 
						 | 
					4cce43f0a1 | ||
| 
						 | 
					49e23c74bc | ||
| 
						 | 
					8b169f3796 | ||
| 
						 | 
					b5da91b29a | ||
| 
						 | 
					1d4ea56740 | ||
| 
						 | 
					0d664b1fd2 | ||
| 
						 | 
					29c3293265 | ||
| 
						 | 
					c69ab34eac | ||
| 
						 | 
					7353be3b16 | ||
| 
						 | 
					02be63ed72 | ||
| 
						 | 
					742531a2c2 | ||
| 
						 | 
					991d403d7f | ||
| 
						 | 
					290c678dc7 | ||
| 
						 | 
					2c31a599af | ||
| 
						 | 
					2655be0bad | ||
| 
						 | 
					4f97c8c70e | ||
| 
						 | 
					f85977246c | ||
| 
						 | 
					a4fd42214b | ||
| 
						 | 
					ca885027d4 | ||
| 
						 | 
					9f6f1e96e5 | ||
| 
						 | 
					351ce30d8a | ||
| 
						 | 
					2933eb5c28 | ||
| 
						 | 
					09ecf76034 | ||
| 
						 | 
					2b86750cb3 | ||
| 
						 | 
					b45224755e | ||
| 
						 | 
					14524e1b0e | ||
| 
						 | 
					efa47e3176 | ||
| 
						 | 
					1bc45405e0 | ||
| 
						 | 
					3720e1a894 | ||
| 
						 | 
					76138cf3b9 | ||
| 
						 | 
					2506c29f6b | ||
| 
						 | 
					463ba6ed6d | ||
| 
						 | 
					17b783135f | ||
| 
						 | 
					8df2729bd4 | ||
| 
						 | 
					a001619464 | ||
| 
						 | 
					3c5a19d297 | ||
| 
						 | 
					a98290a6e2 | ||
| 
						 | 
					9bac464442 | ||
| 
						 | 
					df110e5e11 | ||
| 
						 | 
					6247bd5f89 | ||
| 
						 | 
					cba4752433 | ||
| 
						 | 
					d0dd4e6e5e | ||
| 
						 | 
					d2892ea249 | ||
| 
						 | 
					983c28686f | ||
| 
						 | 
					f2f1ad4605 | ||
| 
						 | 
					10562e72f4 | ||
| 
						 | 
					11fb806992 | ||
| 
						 | 
					d424a4473a | ||
| 
						 | 
					4062813d44 | ||
| 
						 | 
					29b9d3069b | ||
| 
						 | 
					c38d9a6620 | ||
| 
						 | 
					2f65429aa4 | ||
| 
						 | 
					c24028f2a4 | ||
| 
						 | 
					a20c292653 | ||
| 
						 | 
					1c6304b3fb | ||
| 
						 | 
					3ac93af80c | ||
| 
						 | 
					ce586e1b31 | ||
| 
						 | 
					926f97124b | ||
| 
						 | 
					0f2301f2d6 | ||
| 
						 | 
					58e8f65135 | ||
| 
						 | 
					1b51fbfcca | ||
| 
						 | 
					1296840696 | ||
| 
						 | 
					f99e2c9366 | ||
| 
						 | 
					c71b56ebe3 | ||
| 
						 | 
					9904afce64 | ||
| 
						 | 
					a827fb1202 | ||
| 
						 | 
					51be99c9de | ||
| 
						 | 
					b83b778f2a | ||
| 
						 | 
					86a91597f9 | ||
| 
						 | 
					1b12ac133e | ||
| 
						 | 
					e55880a9c4 | ||
| 
						 | 
					9cc309b69c | ||
| 
						 | 
					d3308232e8 | ||
| 
						 | 
					0b8f27e1d2 | ||
| 
						 | 
					93f2c241b8 | ||
| 
						 | 
					fb44e769f2 | ||
| 
						 | 
					fabdfd9ae8 | ||
| 
						 | 
					72d60d2633 | ||
| 
						 | 
					2d7686eb65 | ||
| 
						 | 
					d9a26ff193 | ||
| 
						 | 
					2401eea725 | ||
| 
						 | 
					ddf18dd233 | ||
| 
						 | 
					4b98dabc3f | ||
| 
						 | 
					5a3e0ccc3d | ||
| 
						 | 
					38a3ad3370 | ||
| 
						 | 
					b777c12094 | ||
| 
						 | 
					8fc36d2684 | ||
| 
						 | 
					e2474049d8 | ||
| 
						 | 
					6e0fe03552 | ||
| 
						 | 
					cda48a7143 | ||
| 
						 | 
					e5a28de26e | ||
| 
						 | 
					0ae4f97036 | ||
| 
						 | 
					218bfe1603 | ||
| 
						 | 
					339c670839 | ||
| 
						 | 
					c5a19f6e85 | ||
| 
						 | 
					be57484573 | ||
| 
						 | 
					0cb88c21dc | ||
| 
						 | 
					0bc1f5296f | ||
| 
						 | 
					4776f97f82 | ||
| 
						 | 
					460db0aea7 | ||
| 
						 | 
					02cf111995 | ||
| 
						 | 
					14d9d92112 | ||
| 
						 | 
					fce77a19b0 | ||
| 
						 | 
					719685b930 | ||
| 
						 | 
					0cbc000bfa | ||
| 
						 | 
					ef8c0025fd | ||
| 
						 | 
					16847ea06c | ||
| 
						 | 
					be0bbe9950 | ||
| 
						 | 
					b503c2c758 | ||
| 
						 | 
					1d14f4658d | ||
| 
						 | 
					c7382af161 | ||
| 
						 | 
					f6adca902f | ||
| 
						 | 
					d50a6cf75c | ||
| 
						 | 
					2cebf09cf2 | ||
| 
						 | 
					46419f7bfe | ||
| 
						 | 
					43e8f831c0 | ||
| 
						 | 
					760ea1e020 | ||
| 
						 | 
					07d7704ef4 | ||
| 
						 | 
					a4878d05f0 | ||
| 
						 | 
					c5bcd2f22c | ||
| 
						 | 
					df1fba7fc5 | ||
| 
						 | 
					bb521f7af8 | ||
| 
						 | 
					f9818b8bd7 | ||
| 
						 | 
					dfcb4af18b | ||
| 
						 | 
					5c67e42a55 | ||
| 
						 | 
					7441be09b5 | ||
| 
						 | 
					a75665c7bf | ||
| 
						 | 
					4cb0f87b72 | ||
| 
						 | 
					1e8cd63645 | ||
| 
						 | 
					3860a99951 | ||
| 
						 | 
					226b3bfa74 | ||
| 
						 | 
					a5559c6588 | ||
| 
						 | 
					de2c05cd54 | ||
| 
						 | 
					6d916fb66f | ||
| 
						 | 
					90b6df24a1 | ||
| 
						 | 
					3e807e0131 | ||
| 
						 | 
					e2e2caa0e9 | ||
| 
						 | 
					b3dee343d1 | ||
| 
						 | 
					608f7afa70 | ||
| 
						 | 
					58ef0ee174 | ||
| 
						 | 
					2a76dc6409 | ||
| 
						 | 
					91e3da1293 | ||
| 
						 | 
					fa46267c14 | ||
| 
						 | 
					dc7e32eb10 | ||
| 
						 | 
					10679297f9 | ||
| 
						 | 
					3e697e2ea4 | ||
| 
						 | 
					6a649d347d | ||
| 
						 | 
					fd372941c7 | ||
| 
						 | 
					1c8c95367d | ||
| 
						 | 
					f031abcec2 | ||
| 
						 | 
					dd62322ae5 | ||
| 
						 | 
					48e5dee963 | ||
| 
						 | 
					b3dfc60fff | ||
| 
						 | 
					bb3b95f0bd | ||
| 
						 | 
					4fc9028dc1 | ||
| 
						 | 
					02cadd87ff | ||
| 
						 | 
					1c105154a6 | ||
| 
						 | 
					daaeded0b5 | ||
| 
						 | 
					ed7d41a3cb | ||
| 
						 | 
					f052a3f686 | ||
| 
						 | 
					11da07b735 | ||
| 
						 | 
					d01e180caf | ||
| 
						 | 
					4c400966b4 | ||
| 
						 | 
					bd0a00d373 | ||
| 
						 | 
					3b8bd6b979 | ||
| 
						 | 
					f849c36942 | ||
| 
						 | 
					c83fc753a1 | ||
| 
						 | 
					eeeb5fcdd9 | ||
| 
						 | 
					41f22864b4 | ||
| 
						 | 
					6a99a1a40a | ||
| 
						 | 
					1fcebab9ed | ||
| 
						 | 
					bed301a485 | ||
| 
						 | 
					31546b08ff | ||
| 
						 | 
					25337dc453 | ||
| 
						 | 
					cb85d50f61 | ||
| 
						 | 
					a52949318a | ||
| 
						 | 
					745495c2d5 | ||
| 
						 | 
					dd261a54df | ||
| 
						 | 
					94d2a0ee89 | ||
| 
						 | 
					f035db2feb | ||
| 
						 | 
					b105c7b35e | ||
| 
						 | 
					149f991c1d | ||
| 
						 | 
					a43ee60942 | ||
| 
						 | 
					5f11cd417f | ||
| 
						 | 
					3782b69744 | ||
| 
						 | 
					ca93280b17 | ||
| 
						 | 
					2ec9f0af2e | ||
| 
						 | 
					3eb338df04 | ||
| 
						 | 
					b7790ba6b5 | ||
| 
						 | 
					b67c931f18 | ||
| 
						 | 
					97186504b5 | ||
| 
						 | 
					bd4ca9af1b | ||
| 
						 | 
					9ac20a5cb8 | ||
| 
						 | 
					20a58d6dbb | ||
| 
						 | 
					191e4217fc | ||
| 
						 | 
					8745daa701 | ||
| 
						 | 
					27f7b615cc | ||
| 
						 | 
					e3c426de86 | ||
| 
						 | 
					c6410472c8 | ||
| 
						 | 
					d807466780 | ||
| 
						 | 
					c8b9c4cebc | ||
| 
						 | 
					741072a126 | ||
| 
						 | 
					be9123ee2b | ||
| 
						 | 
					3f5afe8daf | ||
| 
						 | 
					522de3abd8 | ||
| 
						 | 
					d37d77cc1a | ||
| 
						 | 
					4740be6562 | ||
| 
						 | 
					a07f1f3337 | ||
| 
						 | 
					02851fd672 | ||
| 
						 | 
					233e36c988 | ||
| 
						 | 
					2b12a658f6 | ||
| 
						 | 
					b74842ceb3 | ||
| 
						 | 
					ca84f7d4a9 | ||
| 
						 | 
					1892277273 | ||
| 
						 | 
					f12df395f8 | ||
| 
						 | 
					89e82e4d97 | ||
| 
						 | 
					af2340d889 | ||
| 
						 | 
					775a6381b4 | ||
| 
						 | 
					38c6ad5ad6 | ||
| 
						 | 
					d63dc319c7 | ||
| 
						 | 
					c5539e0aa0 | ||
| 
						 | 
					14601b7871 | ||
| 
						 | 
					7a86fd7b44 | ||
| 
						 | 
					0b3522894a | ||
| 
						 | 
					aa0836aecc | ||
| 
						 | 
					78f9238865 | ||
| 
						 | 
					5ca4fccbb0 | ||
| 
						 | 
					7f2044024b | ||
| 
						 | 
					d2de9702c5 | ||
| 
						 | 
					92a8783d95 | ||
| 
						 | 
					4bd1e5c524 | ||
| 
						 | 
					10826055f3 | ||
| 
						 | 
					6cf050e6e5 | ||
| 
						 | 
					52e1a36ffe | ||
| 
						 | 
					e83a95d3ed | ||
| 
						 | 
					44561f57d3 | ||
| 
						 | 
					4c26fe224b | ||
| 
						 | 
					61af74609a | ||
| 
						 | 
					9f2f3bd780 | ||
| 
						 | 
					38bcbcdd0a | ||
| 
						 | 
					d8c340d9c5 | ||
| 
						 | 
					8456d7b100 | ||
| 
						 | 
					2fa044d484 | ||
| 
						 | 
					4162a25425 | ||
| 
						 | 
					e26a38b619 | ||
| 
						 | 
					92aa2859a0 | ||
| 
						 | 
					1d8f524913 | ||
| 
						 | 
					59991b70a1 | ||
| 
						 | 
					a6b877676e | ||
| 
						 | 
					3c49c00f2b | ||
| 
						 | 
					c97716e780 | ||
| 
						 | 
					355e218837 | ||
| 
						 | 
					a3145a32e7 | ||
| 
						 | 
					8b6fb94835 | ||
| 
						 | 
					83ea81d975 | ||
| 
						 | 
					aae9db92ee | ||
| 
						 | 
					6c5b7ce9f4 | ||
| 
						 | 
					8bb70ea493 | ||
| 
						 | 
					bff9f65c88 | ||
| 
						 | 
					88607e8aa0 | ||
| 
						 | 
					17c6ed6303 | ||
| 
						 | 
					bfd8c63daa | ||
| 
						 | 
					6de7f1b088 | ||
| 
						 | 
					3359d87115 | ||
| 
						 | 
					e8fdc965a2 | ||
| 
						 | 
					67bcd3e0d6 | ||
| 
						 | 
					9421f63775 | ||
| 
						 | 
					01bf7af360 | ||
| 
						 | 
					4754ed01ab | ||
| 
						 | 
					a2c262f940 | ||
| 
						 | 
					7963ad9b20 | ||
| 
						 | 
					5e34810335 | ||
| 
						 | 
					e44eb5258b | ||
| 
						 | 
					e564c395ba | ||
| 
						 | 
					3d1af09090 | ||
| 
						 | 
					1cc2f323de | ||
| 
						 | 
					194684e27b | ||
| 
						 | 
					ee17e020cf | ||
| 
						 | 
					2b8ef765e7 | ||
| 
						 | 
					dbe965303b | ||
| 
						 | 
					3d9e919545 | ||
| 
						 | 
					30eb02510b | ||
| 
						 | 
					06aa72ec16 | ||
| 
						 | 
					cf45a35971 | ||
| 
						 | 
					a601d3bccf | ||
| 
						 | 
					f46a135458 | ||
| 
						 | 
					82cc473801 | ||
| 
						 | 
					9c41708d9e | ||
| 
						 | 
					a51d3aa2ad | ||
| 
						 | 
					797d72b716 | ||
| 
						 | 
					dd0304387e | ||
| 
						 | 
					e111965411 | ||
| 
						 | 
					41cf1262b2 | ||
| 
						 | 
					e5532c3418 | ||
| 
						 | 
					a881d46178 | ||
| 
						 | 
					edb99c2842 | ||
| 
						 | 
					4d04d1a8c3 | ||
| 
						 | 
					1d1766b5c3 | ||
| 
						 | 
					0ade03c4de | ||
| 
						 | 
					2aa5089930 | ||
| 
						 | 
					2259a59ac6 | ||
| 
						 | 
					d8d56df272 | ||
| 
						 | 
					ec29f749af | ||
| 
						 | 
					9467735fab | ||
| 
						 | 
					9e3aa705ae | ||
| 
						 | 
					0f8cc48d03 | ||
| 
						 | 
					95bd5dfdab | ||
| 
						 | 
					e6ce370cdd | ||
| 
						 | 
					78346cbe84 | ||
| 
						 | 
					9a953f7f80 | ||
| 
						 | 
					14bb09a3db | ||
| 
						 | 
					89fb65913d | ||
| 
						 | 
					41a75005c8 | ||
| 
						 | 
					54ecd7d423 | ||
| 
						 | 
					352194c942 | ||
| 
						 | 
					30e4ab99d9 | ||
| 
						 | 
					5f0160c036 | ||
| 
						 | 
					443c886050 | ||
| 
						 | 
					b7fd21e17a | ||
| 
						 | 
					2f24f6271a | ||
| 
						 | 
					6507624232 | ||
| 
						 | 
					e337331122 | ||
| 
						 | 
					1d5f7ce08f | ||
| 
						 | 
					adedb5f803 | ||
| 
						 | 
					9774c08336 | ||
| 
						 | 
					525dcd4760 | ||
| 
						 | 
					d75661e49d | ||
| 
						 | 
					52d6035c23 | ||
| 
						 | 
					5a9221680f | ||
| 
						 | 
					3a5fef3e50 | ||
| 
						 | 
					8883008ca1 | ||
| 
						 | 
					0eec89255f | ||
| 
						 | 
					3d4c5d1a41 | ||
| 
						 | 
					105b11fca2 | ||
| 
						 | 
					a259aeba27 | ||
| 
						 | 
					8462f21c01 | ||
| 
						 | 
					5d3a175ed6 | ||
| 
						 | 
					69bec16080 | ||
| 
						 | 
					f7e4ee61c7 | ||
| 
						 | 
					8e0bb994bb | ||
| 
						 | 
					336c3127ed | ||
| 
						 | 
					6209165b32 | ||
| 
						 | 
					f3bb5c0c26 | ||
| 
						 | 
					9cb09f1fb4 | ||
| 
						 | 
					cfeb794b34 | ||
| 
						 | 
					f4d4c784e4 | ||
| 
						 | 
					eb341bdfb6 | ||
| 
						 | 
					ee84ed4236 | ||
| 
						 | 
					f27feb268a | ||
| 
						 | 
					56e9095619 | ||
| 
						 | 
					b3495219ae | ||
| 
						 | 
					71753671e0 | ||
| 
						 | 
					9746497673 | ||
| 
						 | 
					882a2cc63e | ||
| 
						 | 
					f29f5eb207 | ||
| 
						 | 
					600247df79 | ||
| 
						 | 
					8fa1fed8b5 | ||
| 
						 | 
					63e9194c5d | ||
| 
						 | 
					06310faa32 | ||
| 
						 | 
					c9c821da5c | ||
| 
						 | 
					c2c65b4df2 | ||
| 
						 | 
					9b7f5ed963 | ||
| 
						 | 
					75f755b823 | ||
| 
						 | 
					1cfe987fa1 | ||
| 
						 | 
					4cf7c97b8f | ||
| 
						 | 
					3715254a78 | ||
| 
						 | 
					ab44053ba4 | ||
| 
						 | 
					5c6f3e66a6 | ||
| 
						 | 
					5e5265c8b0 | ||
| 
						 | 
					13719aa694 | ||
| 
						 | 
					9d9109a68c | ||
| 
						 | 
					cb91c3f8a8 | ||
| 
						 | 
					c08fad6487 | ||
| 
						 | 
					23329f1ee9 | ||
| 
						 | 
					e842b72aaa | ||
| 
						 | 
					7c26148252 | ||
| 
						 | 
					7d6a97e264 | ||
| 
						 | 
					99f7d65f47 | ||
| 
						 | 
					db1db1ab0e | ||
| 
						 | 
					cec28464ec | ||
| 
						 | 
					a2fba0284e | ||
| 
						 | 
					f424a51133 | ||
| 
						 | 
					46b8faddae | ||
| 
						 | 
					19cce07ab5 | ||
| 
						 | 
					439dcb10b2 | ||
| 
						 | 
					98cb8b998e | ||
| 
						 | 
					1654a4b01c | ||
| 
						 | 
					8e72611922 | ||
| 
						 | 
					a857d3807f | ||
| 
						 | 
					3dc0af3159 | ||
| 
						 | 
					abf7ecd2ca | ||
| 
						 | 
					8d8b6c1c33 | ||
| 
						 | 
					262790b22d | ||
| 
						 | 
					4e8a7e0b4c | ||
| 
						 | 
					121e27e850 | ||
| 
						 | 
					0152ed7027 | ||
| 
						 | 
					f233bfd75e | ||
| 
						 | 
					4298a57297 | ||
| 
						 | 
					6e8ea148bc | ||
| 
						 | 
					777522e8d5 | ||
| 
						 | 
					a4007ffb80 | ||
| 
						 | 
					de875c9e27 | ||
| 
						 | 
					3cfcb2da41 | ||
| 
						 | 
					4c3db653f5 | ||
| 
						 | 
					90b7a3be63 | ||
| 
						 | 
					0fbe5f2f10 | ||
| 
						 | 
					36f2989249 | ||
| 
						 | 
					99956b4283 | ||
| 
						 | 
					9c5a8f7ef1 | ||
| 
						 | 
					e2f3041aa2 | ||
| 
						 | 
					9926ae4e74 | ||
| 
						 | 
					58463b5e80 | ||
| 
						 | 
					7b51327b24 | ||
| 
						 | 
					06dd350aab | ||
| 
						 | 
					4f2085765d | ||
| 
						 | 
					eceae9b64c | ||
| 
						 | 
					98754b9fc6 | ||
| 
						 | 
					f813870e7d | ||
| 
						 | 
					763a0c0d83 | ||
| 
						 | 
					d30444dae7 | ||
| 
						 | 
					c983c0605e | ||
| 
						 | 
					2fa03ea369 | ||
| 
						 | 
					6c1ae90972 | ||
| 
						 | 
					a17e7d92d9 | ||
| 
						 | 
					b3a4e3f40e | ||
| 
						 | 
					b7acf94b41 | ||
| 
						 | 
					9e5c3ec1b5 | ||
| 
						 | 
					5550753193 | ||
| 
						 | 
					394c6aea74 | ||
| 
						 | 
					3febd7dfdf | ||
| 
						 | 
					ef895a3d8c | ||
| 
						 | 
					8f5f7fc2a8 | ||
| 
						 | 
					c673cf22bd | ||
| 
						 | 
					4d401c127d | ||
| 
						 | 
					3c119e4a52 | ||
| 
						 | 
					303a160359 | ||
| 
						 | 
					3cd5244949 | ||
| 
						 | 
					31b8707819 | ||
| 
						 | 
					a0893b8e6c | ||
| 
						 | 
					e1c8eb8a72 | ||
| 
						 | 
					bc546ef562 | ||
| 
						 | 
					251b94647b | ||
| 
						 | 
					4aeb2ae9a2 | ||
| 
						 | 
					0f635ed344 | ||
| 
						 | 
					efe6affe64 | ||
| 
						 | 
					f140d1ab45 | ||
| 
						 | 
					89e4de1dd0 | ||
| 
						 | 
					ac48f01e25 | ||
| 
						 | 
					4c48b8cc54 | ||
| 
						 | 
					b807e330c8 | ||
| 
						 | 
					04b15e7ece | ||
| 
						 | 
					575c39e8a5 | ||
| 
						 | 
					933f3f391c | ||
| 
						 | 
					cfb5b88ee6 | ||
| 
						 | 
					9cd44eb92c | ||
| 
						 | 
					d0942d4897 | ||
| 
						 | 
					3d789a0675 | ||
| 
						 | 
					1d3f214109 | ||
| 
						 | 
					e51077c765 | ||
| 
						 | 
					809fc1ce30 | ||
| 
						 | 
					f176b71c7c | ||
| 
						 | 
					4d8e519298 | ||
| 
						 | 
					958204e831 | ||
| 
						 | 
					82c247bb11 | ||
| 
						 | 
					2a56b640c0 | ||
| 
						 | 
					eae67a9696 | 
@@ -1,3 +1,9 @@
 | 
			
		||||
export interface PackageOptions {
 | 
			
		||||
  name: string;
 | 
			
		||||
  packageName: string;
 | 
			
		||||
  file: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Shared common options for both ESBuild and Vite
 | 
			
		||||
 */
 | 
			
		||||
@@ -27,4 +33,4 @@ export const packageOptions = {
 | 
			
		||||
    packageName: 'mermaid-layout-elk',
 | 
			
		||||
    file: 'layouts.ts',
 | 
			
		||||
  },
 | 
			
		||||
} as const;
 | 
			
		||||
} as const satisfies Record<string, PackageOptions>;
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,7 @@ const MERMAID_CONFIG_DIAGRAM_KEYS = [
 | 
			
		||||
  'xyChart',
 | 
			
		||||
  'requirement',
 | 
			
		||||
  'mindmap',
 | 
			
		||||
  'kanban',
 | 
			
		||||
  'timeline',
 | 
			
		||||
  'gitGraph',
 | 
			
		||||
  'c4',
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@ concat
 | 
			
		||||
controlx
 | 
			
		||||
controly
 | 
			
		||||
CSSCLASS
 | 
			
		||||
curv
 | 
			
		||||
CYLINDEREND
 | 
			
		||||
CYLINDERSTART
 | 
			
		||||
DAGA
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,9 @@ dictionaryDefinitions:
 | 
			
		||||
  - name: suggestions
 | 
			
		||||
    words:
 | 
			
		||||
      - none
 | 
			
		||||
      - disp
 | 
			
		||||
      - subproc
 | 
			
		||||
      - tria
 | 
			
		||||
    suggestWords:
 | 
			
		||||
      - seperator:separator
 | 
			
		||||
      - vertice:vertex
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@ dompurify
 | 
			
		||||
elkjs
 | 
			
		||||
fcose
 | 
			
		||||
fontawesome
 | 
			
		||||
Forgejo
 | 
			
		||||
Foswiki
 | 
			
		||||
Gitea
 | 
			
		||||
graphlib
 | 
			
		||||
 
 | 
			
		||||
@@ -5,12 +5,14 @@ bmatrix
 | 
			
		||||
braintree
 | 
			
		||||
catmull
 | 
			
		||||
compositTitleSize
 | 
			
		||||
curv
 | 
			
		||||
doublecircle
 | 
			
		||||
elems
 | 
			
		||||
gantt
 | 
			
		||||
gitgraph
 | 
			
		||||
gzipped
 | 
			
		||||
handDrawn
 | 
			
		||||
kanban
 | 
			
		||||
knsv
 | 
			
		||||
Knut
 | 
			
		||||
marginx
 | 
			
		||||
@@ -24,6 +26,7 @@ multigraph
 | 
			
		||||
nodesep
 | 
			
		||||
NOTEGROUP
 | 
			
		||||
Pinterest
 | 
			
		||||
procs
 | 
			
		||||
rankdir
 | 
			
		||||
ranksep
 | 
			
		||||
rect
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,10 @@ import { defaultOptions, getBuildConfig } from './util.js';
 | 
			
		||||
const shouldVisualize = process.argv.includes('--visualize');
 | 
			
		||||
 | 
			
		||||
const buildPackage = async (entryName: keyof typeof packageOptions) => {
 | 
			
		||||
  const commonOptions: MermaidBuildOptions = { ...defaultOptions, entryName } as const;
 | 
			
		||||
  const commonOptions: MermaidBuildOptions = {
 | 
			
		||||
    ...defaultOptions,
 | 
			
		||||
    options: packageOptions[entryName],
 | 
			
		||||
  } as const;
 | 
			
		||||
  const buildConfigs: MermaidBuildOptions[] = [
 | 
			
		||||
    // package.mjs
 | 
			
		||||
    { ...commonOptions },
 | 
			
		||||
@@ -40,7 +43,7 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => {
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
      const fileName = Object.keys(metafile.outputs)
 | 
			
		||||
        .find((file) => !file.includes('chunks') && file.endsWith('js'))
 | 
			
		||||
        .find((file) => !file.includes('chunks') && file.endsWith('js'))!
 | 
			
		||||
        .replace('dist/', '');
 | 
			
		||||
      // Upload metafile into https://esbuild.github.io/analyze/
 | 
			
		||||
      await writeFile(`stats/${fileName}.meta.json`, JSON.stringify(metafile));
 | 
			
		||||
 
 | 
			
		||||
@@ -9,13 +9,18 @@ import { generateLangium } from '../.build/generateLangium.js';
 | 
			
		||||
import { defaultOptions, getBuildConfig } from './util.js';
 | 
			
		||||
 | 
			
		||||
const configs = Object.values(packageOptions).map(({ packageName }) =>
 | 
			
		||||
  getBuildConfig({ ...defaultOptions, minify: false, core: false, entryName: packageName })
 | 
			
		||||
  getBuildConfig({
 | 
			
		||||
    ...defaultOptions,
 | 
			
		||||
    minify: false,
 | 
			
		||||
    core: false,
 | 
			
		||||
    options: packageOptions[packageName],
 | 
			
		||||
  })
 | 
			
		||||
);
 | 
			
		||||
const mermaidIIFEConfig = getBuildConfig({
 | 
			
		||||
  ...defaultOptions,
 | 
			
		||||
  minify: false,
 | 
			
		||||
  core: false,
 | 
			
		||||
  entryName: 'mermaid',
 | 
			
		||||
  options: packageOptions.mermaid,
 | 
			
		||||
  format: 'iife',
 | 
			
		||||
});
 | 
			
		||||
configs.push(mermaidIIFEConfig);
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ import { fileURLToPath } from 'url';
 | 
			
		||||
import type { BuildOptions } from 'esbuild';
 | 
			
		||||
import { readFileSync } from 'fs';
 | 
			
		||||
import jsonSchemaPlugin from './jsonSchemaPlugin.js';
 | 
			
		||||
import { packageOptions } from '../.build/common.js';
 | 
			
		||||
import type { PackageOptions } from '../.build/common.js';
 | 
			
		||||
import { jisonPlugin } from './jisonPlugin.js';
 | 
			
		||||
 | 
			
		||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
 | 
			
		||||
@@ -13,10 +13,10 @@ export interface MermaidBuildOptions extends BuildOptions {
 | 
			
		||||
  core: boolean;
 | 
			
		||||
  metafile: boolean;
 | 
			
		||||
  format: 'esm' | 'iife';
 | 
			
		||||
  entryName: keyof typeof packageOptions;
 | 
			
		||||
  options: PackageOptions;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const defaultOptions: Omit<MermaidBuildOptions, 'entryName'> = {
 | 
			
		||||
export const defaultOptions: Omit<MermaidBuildOptions, 'entryName' | 'options'> = {
 | 
			
		||||
  minify: false,
 | 
			
		||||
  metafile: false,
 | 
			
		||||
  core: false,
 | 
			
		||||
@@ -52,9 +52,14 @@ const getFileName = (fileName: string, { core, format, minify }: MermaidBuildOpt
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
 | 
			
		||||
  const { core, entryName, metafile, format, minify } = options;
 | 
			
		||||
  const {
 | 
			
		||||
    core,
 | 
			
		||||
    metafile,
 | 
			
		||||
    format,
 | 
			
		||||
    minify,
 | 
			
		||||
    options: { name, file, packageName },
 | 
			
		||||
  } = options;
 | 
			
		||||
  const external: string[] = ['require', 'fs', 'path'];
 | 
			
		||||
  const { name, file, packageName } = packageOptions[entryName];
 | 
			
		||||
  const outFileName = getFileName(name, options);
 | 
			
		||||
  const output: BuildOptions = buildOptions({
 | 
			
		||||
    absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/lychee.toml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/lychee.toml
									
									
									
									
										vendored
									
									
								
							@@ -44,7 +44,13 @@ exclude = [
 | 
			
		||||
"https://chromewebstore.google.com",
 | 
			
		||||
 | 
			
		||||
# Drupal 403
 | 
			
		||||
"https://(www.)?drupal.org"
 | 
			
		||||
"https://(www.)?drupal.org",
 | 
			
		||||
 | 
			
		||||
# Swimm returns 404, eventhough the link is valid
 | 
			
		||||
"https://docs.swimm.io",
 | 
			
		||||
 | 
			
		||||
# Timeout
 | 
			
		||||
"https://huehive.co"
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# Exclude all private IPs from checking.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
 | 
			
		||||
        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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
 | 
			
		||||
        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@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5
 | 
			
		||||
        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@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5
 | 
			
		||||
        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@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5
 | 
			
		||||
        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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
 | 
			
		||||
        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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								.github/workflows/e2e-timings.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								.github/workflows/e2e-timings.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
name: E2E - Generate Timings
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  # run this workflow every night at 3am
 | 
			
		||||
  schedule:
 | 
			
		||||
    - cron: '28 3 * * *'
 | 
			
		||||
  # or when the user triggers it from GitHub Actions page
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: write
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  timings:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    container:
 | 
			
		||||
      image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
 | 
			
		||||
      options: --user 1001
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
			
		||||
        with:
 | 
			
		||||
          runTests: false
 | 
			
		||||
      - name: Cypress run
 | 
			
		||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
			
		||||
        id: cypress
 | 
			
		||||
        with:
 | 
			
		||||
          install: false
 | 
			
		||||
          start: pnpm run dev:coverage
 | 
			
		||||
          wait-on: 'http://localhost:9000'
 | 
			
		||||
          browser: chrome
 | 
			
		||||
          publish-summary: false
 | 
			
		||||
        env:
 | 
			
		||||
          VITEST_COVERAGE: true
 | 
			
		||||
          CYPRESS_COMMIT: ${{ github.sha }}
 | 
			
		||||
          SPLIT: 1
 | 
			
		||||
          SPLIT_INDEX: 0
 | 
			
		||||
          SPLIT_FILE: 'cypress/timings.json'
 | 
			
		||||
      - name: Commit changes
 | 
			
		||||
        uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
 | 
			
		||||
        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'
 | 
			
		||||
      - name: Create Pull Request
 | 
			
		||||
        uses: peter-evans/create-pull-request@v5
 | 
			
		||||
        with:
 | 
			
		||||
          branch: release-promotion
 | 
			
		||||
          title: Update E2E Timings
 | 
			
		||||
							
								
								
									
										52
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							@@ -28,7 +28,8 @@ env:
 | 
			
		||||
      ) || 
 | 
			
		||||
      github.event.before
 | 
			
		||||
    }}
 | 
			
		||||
  shouldRunParallel: ${{ secrets.CYPRESS_RECORD_KEY != '' && !(github.event_name == 'push' && github.ref == 'refs/heads/develop') }}
 | 
			
		||||
  RUN_VISUAL_TEST: >-
 | 
			
		||||
    ${{ github.repository == 'mermaid-js/mermaid' && (github.event_name != 'pull_request' || !startsWith(github.head_ref, 'renovate/')) }}
 | 
			
		||||
jobs:
 | 
			
		||||
  cache:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
@@ -36,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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
 | 
			
		||||
        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@df7484c5ba85def7eef30db301afa688187bc378 # v6.7.2
 | 
			
		||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
			
		||||
        with:
 | 
			
		||||
          # just perform install
 | 
			
		||||
          runTests: false
 | 
			
		||||
@@ -80,28 +80,28 @@ jobs:
 | 
			
		||||
    strategy:
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
      matrix:
 | 
			
		||||
        containers: [1, 2, 3, 4]
 | 
			
		||||
        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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
 | 
			
		||||
        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@df7484c5ba85def7eef30db301afa688187bc378 # v6.7.2
 | 
			
		||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
			
		||||
        with:
 | 
			
		||||
          runTests: false
 | 
			
		||||
 | 
			
		||||
@@ -117,11 +117,8 @@ jobs:
 | 
			
		||||
      # Install NPM dependencies, cache them correctly
 | 
			
		||||
      # and run all Cypress tests
 | 
			
		||||
      - name: Cypress run
 | 
			
		||||
        uses: cypress-io/github-action@df7484c5ba85def7eef30db301afa688187bc378 # v6.7.2
 | 
			
		||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
			
		||||
        id: cypress
 | 
			
		||||
        # If CYPRESS_RECORD_KEY is set, run in parallel on all containers
 | 
			
		||||
        # Otherwise (e.g. if running from fork), we run on a single container only
 | 
			
		||||
        if: ${{ env.shouldRunParallel == 'true' || ( matrix.containers == 1 ) }}
 | 
			
		||||
        with:
 | 
			
		||||
          install: false
 | 
			
		||||
          start: pnpm run dev:coverage
 | 
			
		||||
@@ -129,19 +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: ${{ env.shouldRunParallel == 'true' }}
 | 
			
		||||
          parallel: ${{ env.shouldRunParallel == 'true' }}
 | 
			
		||||
          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: ${{ env.shouldRunParallel == 'true' }}
 | 
			
		||||
          ARGOS_PARALLEL_TOTAL: 4
 | 
			
		||||
          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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
 | 
			
		||||
        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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
 | 
			
		||||
        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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
 | 
			
		||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
			
		||||
        with:
 | 
			
		||||
          cache: pnpm
 | 
			
		||||
          node-version-file: '.node-version'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								.github/workflows/release-preview.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/release-preview.yml
									
									
									
									
										vendored
									
									
								
							@@ -3,6 +3,7 @@ name: Preview release
 | 
			
		||||
on:
 | 
			
		||||
  pull_request:
 | 
			
		||||
    branches: [develop]
 | 
			
		||||
    types: [opened, synchronize, labeled, ready_for_review]
 | 
			
		||||
 | 
			
		||||
concurrency:
 | 
			
		||||
  group: ${{ github.workflow }}-${{ github.event.number }}
 | 
			
		||||
@@ -25,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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
 | 
			
		||||
        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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
 | 
			
		||||
        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@aba318e9165b45b7948c60273e0b72fce0a64eb9 # v1.4.7
 | 
			
		||||
        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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
 | 
			
		||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
			
		||||
        with:
 | 
			
		||||
          persist-credentials: false
 | 
			
		||||
      - name: Run analysis
 | 
			
		||||
        uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1
 | 
			
		||||
        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@f0f3afee809481da311ca3a6ff1ff51d81dbeb24 # v3.26.4
 | 
			
		||||
        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@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
 | 
			
		||||
        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 +1 @@
 | 
			
		||||
20.12.2
 | 
			
		||||
22.14.0
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								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)
 | 
			
		||||
@@ -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>]
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
@@ -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="" />
 | 
			
		||||
@@ -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,9 @@
 | 
			
		||||
import { defineConfig } from 'cypress';
 | 
			
		||||
import { addMatchImageSnapshotPlugin } from 'cypress-image-snapshot/plugin';
 | 
			
		||||
import coverage from '@cypress/code-coverage/task';
 | 
			
		||||
import eyesPlugin from '@applitools/eyes-cypress';
 | 
			
		||||
import { registerArgosTask } from '@argos-ci/cypress/task';
 | 
			
		||||
import coverage from '@cypress/code-coverage/task';
 | 
			
		||||
import { defineConfig } from 'cypress';
 | 
			
		||||
import { addMatchImageSnapshotPlugin } from 'cypress-image-snapshot/plugin';
 | 
			
		||||
import cypressSplit from 'cypress-split';
 | 
			
		||||
 | 
			
		||||
export default eyesPlugin(
 | 
			
		||||
  defineConfig({
 | 
			
		||||
@@ -13,6 +14,7 @@ export default eyesPlugin(
 | 
			
		||||
      specPattern: 'cypress/integration/**/*.{js,ts}',
 | 
			
		||||
      setupNodeEvents(on, config) {
 | 
			
		||||
        coverage(on, config);
 | 
			
		||||
        cypressSplit(on, config);
 | 
			
		||||
        on('before:browser:launch', (browser, launchOptions) => {
 | 
			
		||||
          if (browser.name === 'chrome' && browser.isHeadless) {
 | 
			
		||||
            launchOptions.args.push('--window-size=1440,1024', '--force-device-scale-factor=1');
 | 
			
		||||
@@ -21,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);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -29,6 +29,7 @@ export const mermaidUrl = (
 | 
			
		||||
  options: CypressMermaidConfig,
 | 
			
		||||
  api: boolean
 | 
			
		||||
): string => {
 | 
			
		||||
  options.handDrawnSeed = 1;
 | 
			
		||||
  const codeObject: CodeObject = {
 | 
			
		||||
    code: graphStr,
 | 
			
		||||
    mermaid: options,
 | 
			
		||||
@@ -131,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)
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -171,9 +171,62 @@ describe.skip('architecture diagram', () => {
 | 
			
		||||
            `
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render an architecture diagram with a resonable 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
 | 
			
		||||
      `
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe('architecture - external', () => {
 | 
			
		||||
// Skipped as the layout is not deterministic, and causes issues in E2E tests.
 | 
			
		||||
describe.skip('architecture - external', () => {
 | 
			
		||||
  it('should allow adding external icons', () => {
 | 
			
		||||
    urlSnapshotTest('http://localhost:9000/architecture-external.html');
 | 
			
		||||
  });
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1037
									
								
								cypress/integration/rendering/classDiagram-elk-v3.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1037
									
								
								cypress/integration/rendering/classDiagram-elk-v3.spec.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1041
									
								
								cypress/integration/rendering/classDiagram-handDrawn-v3.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1041
									
								
								cypress/integration/rendering/classDiagram-handDrawn-v3.spec.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -581,4 +581,63 @@ class C13["With Città foreign language"]
 | 
			
		||||
      { logLevel: 1, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('renders a class diagram with a generic class in a namespace', () => {
 | 
			
		||||
    const diagramDefinition = `
 | 
			
		||||
      classDiagram-v2
 | 
			
		||||
      namespace Company.Project.Module {
 | 
			
		||||
        class GenericClass~T~ {
 | 
			
		||||
          +addItem(item: T)
 | 
			
		||||
          +getItem() T
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    `;
 | 
			
		||||
 | 
			
		||||
    imgSnapshotTest(diagramDefinition);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('renders a class diagram with nested namespaces and relationships', () => {
 | 
			
		||||
    const diagramDefinition = `
 | 
			
		||||
      classDiagram-v2
 | 
			
		||||
      namespace Company.Project.Module.SubModule {
 | 
			
		||||
        class Report {
 | 
			
		||||
          +generatePDF(data: List)
 | 
			
		||||
          +generateCSV(data: List)
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      namespace Company.Project.Module {
 | 
			
		||||
        class Admin {
 | 
			
		||||
          +generateReport()
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      Admin --> Report : generates
 | 
			
		||||
    `;
 | 
			
		||||
 | 
			
		||||
    imgSnapshotTest(diagramDefinition);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('renders a class diagram with multiple classes and relationships in a namespace', () => {
 | 
			
		||||
    const diagramDefinition = `
 | 
			
		||||
      classDiagram-v2
 | 
			
		||||
      namespace Company.Project.Module {
 | 
			
		||||
        class User {
 | 
			
		||||
          +login(username: String, password: String)
 | 
			
		||||
          +logout()
 | 
			
		||||
        }
 | 
			
		||||
        class Admin {
 | 
			
		||||
          +addUser(user: User)
 | 
			
		||||
          +removeUser(user: User)
 | 
			
		||||
          +generateReport()
 | 
			
		||||
        }
 | 
			
		||||
        class Report {
 | 
			
		||||
          +generatePDF(reportData: List)
 | 
			
		||||
          +generateCSV(reportData: List)
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      Admin --> User : manages
 | 
			
		||||
      Admin --> Report : generates
 | 
			
		||||
    `;
 | 
			
		||||
 | 
			
		||||
    imgSnapshotTest(diagramDefinition);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1031
									
								
								cypress/integration/rendering/classDiagram-v3.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1031
									
								
								cypress/integration/rendering/classDiagram-v3.spec.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										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,6 +1,6 @@
 | 
			
		||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
 | 
			
		||||
import { imgSnapshotTest, renderGraph, verifyNumber } from '../../helpers/util.ts';
 | 
			
		||||
 | 
			
		||||
describe.skip('Flowchart ELK', () => {
 | 
			
		||||
describe('Flowchart ELK', () => {
 | 
			
		||||
  it('1-elk: should render a simple flowchart', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `flowchart-elk TD
 | 
			
		||||
@@ -109,7 +109,7 @@ describe.skip('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.skip('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');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
@@ -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:
 | 
			
		||||
@@ -857,6 +857,196 @@ flowchart LR
 | 
			
		||||
    D --> E
 | 
			
		||||
      A["A"]
 | 
			
		||||
 | 
			
		||||
`,
 | 
			
		||||
          { flowchart: { titleTopMargin: 0 } }
 | 
			
		||||
        );
 | 
			
		||||
      });
 | 
			
		||||
      it('6080: 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-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 } }
 | 
			
		||||
        );
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -30,7 +29,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -47,7 +45,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      C -->|Two| E[iPhone]
 | 
			
		||||
      C -->|Three| F[Car]
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -62,7 +60,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      C -->|Two| E[\\iPhone\\]
 | 
			
		||||
      C -->|Three| F[Car]
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -78,7 +76,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      classDef processHead fill:#888888,color:white,font-weight:bold,stroke-width:3px,stroke:#001f3f
 | 
			
		||||
      class 1A,1B,D,E processHead
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -107,7 +105,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      35(SAM.CommonFA.PopulationFME)-->39(SAM.CommonFA.ChargeDetails)
 | 
			
		||||
      36(SAM.CommonFA.PremetricCost)-->39(SAM.CommonFA.ChargeDetails)
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -178,7 +176,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      9a072290_1ec3_e711_8c5a_005056ad0002-->d6072290_1ec3_e711_8c5a_005056ad0002
 | 
			
		||||
      9a072290_1ec3_e711_8c5a_005056ad0002-->71082290_1ec3_e711_8c5a_005056ad0002
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -187,7 +185,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `
 | 
			
		||||
    graph TB;subgraph "number as labels";1;end;
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -199,7 +197,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
        a1-->a2
 | 
			
		||||
      end
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -211,7 +209,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
        a1-->a2
 | 
			
		||||
      end
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -246,7 +244,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      style foo fill:#F99,stroke-width:2px,stroke:#F0F,color:darkred
 | 
			
		||||
      style bar fill:#999,stroke-width:10px,stroke:#0F0,color:blue
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -348,7 +346,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4DA958A0-26D9-4D47-93A7-70F39FD7D51A;
 | 
			
		||||
      sid-7CE72B24-E0C1-46D3-8132-8BA66BE05AA7-->sid-4FC27B48-A6F9-460A-A675-021F5854FE22;
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -364,7 +362,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        listUrl: false,
 | 
			
		||||
        listId: 'color styling',
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
@@ -390,7 +387,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        listUrl: false,
 | 
			
		||||
        listId: 'color styling',
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
@@ -411,7 +407,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -435,7 +430,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -457,7 +451,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -471,7 +464,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -485,7 +477,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -500,7 +491,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -527,7 +517,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      class A someclass;`,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -544,7 +533,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      C -->|Two| E[iPhone]
 | 
			
		||||
      C -->|Three| F[fa:fa-car Car]
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, flowchart: { nodeSpacing: 50 }, fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', flowchart: { nodeSpacing: 50 }, fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -560,7 +549,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { rankSpacing: '100' },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -578,7 +566,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -603,7 +590,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      click E "notes://do-your-thing/id" "other protocol test"
 | 
			
		||||
      click F "javascript:alert('test')" "script test"
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, securityLevel: 'loose', fontFamily: 'courier' }
 | 
			
		||||
      { look: 'handDrawn', securityLevel: 'loose', fontFamily: 'courier' }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -623,7 +610,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      click B "index.html#link-clicked" "link test"
 | 
			
		||||
      click D testClick "click test"
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, flowchart: { htmlLabels: true } }
 | 
			
		||||
      { look: 'handDrawn', flowchart: { htmlLabels: true } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -645,7 +632,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -664,7 +650,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      class A myClass1
 | 
			
		||||
      class D myClass2
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, flowchart: { htmlLabels: true } }
 | 
			
		||||
      { look: 'handDrawn', flowchart: { htmlLabels: true } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -682,7 +668,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -711,7 +696,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -728,7 +712,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -752,7 +735,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: false },
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
      }
 | 
			
		||||
@@ -769,7 +751,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      C -->|Two| E[iPhone]
 | 
			
		||||
      C -->|Three| F[fa:fa-car Car]
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, flowchart: { diagramPadding: 0 } }
 | 
			
		||||
      { look: 'handDrawn', flowchart: { diagramPadding: 0 } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -804,7 +786,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `graph TD
 | 
			
		||||
        a["<strong>Haiya</strong>"]-->b
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, htmlLabels: false, flowchart: { htmlLabels: false } }
 | 
			
		||||
      { look: 'handDrawn', htmlLabels: false, flowchart: { htmlLabels: false } }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('FDH37: should render non-escaped with html labels', () => {
 | 
			
		||||
@@ -814,7 +796,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        htmlLabels: true,
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
@@ -830,7 +811,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      C -->|Two| E[iPhone]
 | 
			
		||||
      C -->|Three| F[fa:fa-car Car]
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, flowchart: { useMaxWidth: true } }
 | 
			
		||||
      { look: 'handDrawn', flowchart: { useMaxWidth: true } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      expect(svg).to.have.attr('width', '100%');
 | 
			
		||||
@@ -853,7 +834,7 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      C -->|Two| E[iPhone]
 | 
			
		||||
      C -->|Three| F[fa:fa-car Car]
 | 
			
		||||
      `,
 | 
			
		||||
      { look: 'handDrawn', handDrawnSeed: 1, flowchart: { useMaxWidth: false } }
 | 
			
		||||
      { look: 'handDrawn', flowchart: { useMaxWidth: false } }
 | 
			
		||||
    );
 | 
			
		||||
    cy.get('svg').should((svg) => {
 | 
			
		||||
      // const height = parseFloat(svg.attr('height'));
 | 
			
		||||
@@ -874,7 +855,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        htmlLabels: true,
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
@@ -904,7 +884,6 @@ describe('Flowchart HandDrawn', () => {
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        htmlLabels: true,
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
@@ -919,7 +898,6 @@ graph TD
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        htmlLabels: true,
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
@@ -937,7 +915,6 @@ graph TD
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        htmlLabels: true,
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
@@ -977,7 +954,6 @@ graph TD
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        htmlLabels: true,
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
@@ -999,7 +975,6 @@ graph TD
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        htmlLabels: true,
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
@@ -1016,7 +991,6 @@ graph TD
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        htmlLabels: true,
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
@@ -1032,7 +1006,6 @@ graph TD
 | 
			
		||||
      `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        htmlLabels: true,
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
@@ -1051,7 +1024,6 @@ graph TD
 | 
			
		||||
    `,
 | 
			
		||||
      {
 | 
			
		||||
        look: 'handDrawn',
 | 
			
		||||
        handDrawnSeed: 1,
 | 
			
		||||
        flowchart: { htmlLabels: true },
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										142
									
								
								cypress/integration/rendering/flowchart-shape-alias.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								cypress/integration/rendering/flowchart-shape-alias.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util.ts';
 | 
			
		||||
 | 
			
		||||
const aliasSet1 = ['process', 'rect', 'proc', 'rectangle'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet2 = ['event', 'rounded'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet3 = ['stadium', 'pill', 'terminal'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet4 = ['fr-rect', 'subproc', 'subprocess', 'framed-rectangle', 'subroutine'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet5 = ['db', 'database', 'cylinder', 'cyl'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet6 = ['diam', 'decision', 'diamond'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet7 = ['hex', 'hexagon', 'prepare'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet8 = ['lean-r', 'lean-right', 'in-out'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet9 = ['lean-l', 'lean-left', 'out-in'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet10 = ['trap-b', 'trapezoid-bottom', 'priority'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet11 = ['trap-t', 'trapezoid-top', 'manual'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet12 = ['dbl-circ', 'double-circle'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet13 = ['notched-rectangle', 'card', 'notch-rect'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet14 = [
 | 
			
		||||
  'lin-rect',
 | 
			
		||||
  'lined-rectangle',
 | 
			
		||||
  'lin-proc',
 | 
			
		||||
  'lined-process',
 | 
			
		||||
  'shaded-process',
 | 
			
		||||
] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet15 = ['sm-circ', 'small-circle', 'start'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet16 = ['fr-circ', 'framed-circle', 'stop'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet17 = ['fork', 'join'] as const;
 | 
			
		||||
// brace-r', 'braces'
 | 
			
		||||
const aliasSet18 = ['comment', 'brace-l'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet19 = ['bolt', 'com-link', 'lightning-bolt'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet20 = ['doc', 'document'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet21 = ['delay', 'half-rounded-rectangle'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet22 = ['h-cyl', 'das', 'horizontal-cylinder'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet23 = ['lin-cyl', 'disk', 'lined-cylinder'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet24 = ['curv-trap', 'display', 'curved-trapezoid'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet25 = ['div-rect', 'div-proc', 'divided-rectangle', 'divided-process'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet26 = ['extract', 'tri', 'triangle'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet27 = ['win-pane', 'internal-storage', 'window-pane'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet28 = ['f-circ', 'junction', 'filled-circle'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet29 = ['lin-doc', 'lined-document'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet30 = ['notch-pent', 'loop-limit', 'notched-pentagon'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet31 = ['flip-tri', 'manual-file', 'flipped-triangle'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet32 = ['sl-rect', 'manual-input', 'sloped-rectangle'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet33 = ['docs', 'documents', 'st-doc', 'stacked-document'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet34 = ['procs', 'processes', 'st-rect', 'stacked-rectangle'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet35 = ['flag', 'paper-tape'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet36 = ['bow-rect', 'stored-data', 'bow-tie-rectangle'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet37 = ['cross-circ', 'summary', 'crossed-circle'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet38 = ['tag-doc', 'tagged-document'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet39 = ['tag-rect', 'tag-proc', 'tagged-rectangle', 'tagged-process'] as const;
 | 
			
		||||
 | 
			
		||||
const aliasSet40 = ['collate', 'hourglass'] as const;
 | 
			
		||||
 | 
			
		||||
// Aggregate all alias sets into a single array
 | 
			
		||||
const aliasSets = [
 | 
			
		||||
  aliasSet1,
 | 
			
		||||
  aliasSet2,
 | 
			
		||||
  aliasSet3,
 | 
			
		||||
  aliasSet4,
 | 
			
		||||
  aliasSet5,
 | 
			
		||||
  aliasSet6,
 | 
			
		||||
  aliasSet7,
 | 
			
		||||
  aliasSet8,
 | 
			
		||||
  aliasSet9,
 | 
			
		||||
  aliasSet10,
 | 
			
		||||
  aliasSet11,
 | 
			
		||||
  aliasSet12,
 | 
			
		||||
  aliasSet13,
 | 
			
		||||
  aliasSet14,
 | 
			
		||||
  aliasSet15,
 | 
			
		||||
  aliasSet16,
 | 
			
		||||
  aliasSet17,
 | 
			
		||||
  aliasSet18,
 | 
			
		||||
  aliasSet19,
 | 
			
		||||
  aliasSet20,
 | 
			
		||||
  aliasSet21,
 | 
			
		||||
  aliasSet22,
 | 
			
		||||
  aliasSet23,
 | 
			
		||||
  aliasSet24,
 | 
			
		||||
  aliasSet25,
 | 
			
		||||
  aliasSet26,
 | 
			
		||||
  aliasSet27,
 | 
			
		||||
  aliasSet28,
 | 
			
		||||
  aliasSet29,
 | 
			
		||||
  aliasSet30,
 | 
			
		||||
  aliasSet31,
 | 
			
		||||
  aliasSet32,
 | 
			
		||||
  aliasSet33,
 | 
			
		||||
  aliasSet34,
 | 
			
		||||
  aliasSet35,
 | 
			
		||||
  aliasSet36,
 | 
			
		||||
  aliasSet37,
 | 
			
		||||
  aliasSet38,
 | 
			
		||||
  aliasSet39,
 | 
			
		||||
] as const;
 | 
			
		||||
 | 
			
		||||
aliasSets.forEach((aliasSet) => {
 | 
			
		||||
  describe(`Test ${aliasSet.join(',')} `, () => {
 | 
			
		||||
    it(`All ${aliasSet.join(',')} should render same shape`, () => {
 | 
			
		||||
      let flowchartCode = `flowchart \n`;
 | 
			
		||||
      aliasSet.forEach((alias, index) => {
 | 
			
		||||
        flowchartCode += ` n${index}@{ shape: ${alias}, label: "${alias}" }\n`;
 | 
			
		||||
      });
 | 
			
		||||
      imgSnapshotTest(flowchartCode);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@@ -1076,4 +1076,41 @@ end
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  describe('New @ sytax 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: "labe for n4"}   & n5@{ label: "labe 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: "labe for n4"}   & n5@{ label: "labe for n5"}   
 | 
			
		||||
        `,
 | 
			
		||||
        {}
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
    it('should be possible to use @  syntax to add labels with trail spaces', () => {
 | 
			
		||||
      imgSnapshotTest(
 | 
			
		||||
        `flowchart TB
 | 
			
		||||
       n2["label for n2"]
 | 
			
		||||
       n4@{ label: "labe for n4"}
 | 
			
		||||
       n5@{ label: "labe 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',
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										143
									
								
								cypress/integration/rendering/iconShape.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								cypress/integration/rendering/iconShape.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,143 @@
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
const looks = ['classic', 'handDrawn'] as const;
 | 
			
		||||
const directions = [
 | 
			
		||||
  'TB',
 | 
			
		||||
  //'BT',
 | 
			
		||||
  'LR',
 | 
			
		||||
  //  'RL'
 | 
			
		||||
] as const;
 | 
			
		||||
const forms = [undefined, 'square', 'circle', 'rounded'] as const;
 | 
			
		||||
const labelPos = [undefined, 't', 'b'] as const;
 | 
			
		||||
 | 
			
		||||
looks.forEach((look) => {
 | 
			
		||||
  directions.forEach((direction) => {
 | 
			
		||||
    forms.forEach((form) => {
 | 
			
		||||
      labelPos.forEach((pos) => {
 | 
			
		||||
        describe(`Test iconShape in ${form ? `${form} form,` : ''} ${look} look and dir ${direction} with label position ${pos ? pos : 'not defined'}`, () => {
 | 
			
		||||
          it(`without label`, () => {
 | 
			
		||||
            let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
            flowchartCode += `  nA --> nAA@{ icon: 'fa:bell'`;
 | 
			
		||||
            if (form) {
 | 
			
		||||
              flowchartCode += `, form: '${form}'`;
 | 
			
		||||
            }
 | 
			
		||||
            flowchartCode += ` }\n`;
 | 
			
		||||
            imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          it(`with label`, () => {
 | 
			
		||||
            let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
            flowchartCode += `  nA --> nAA@{ icon: 'fa:bell', label: 'This is a label for icon shape'`;
 | 
			
		||||
            if (form) {
 | 
			
		||||
              flowchartCode += `, form: '${form}'`;
 | 
			
		||||
            }
 | 
			
		||||
            if (pos) {
 | 
			
		||||
              flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
            }
 | 
			
		||||
            flowchartCode += ` }\n`;
 | 
			
		||||
            imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          it(`with very long label`, () => {
 | 
			
		||||
            let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
            flowchartCode += `  nA --> nAA@{ icon: 'fa:bell', label: 'This is a very very very very very long long long label for icon shape'`;
 | 
			
		||||
            if (form) {
 | 
			
		||||
              flowchartCode += `, form: '${form}'`;
 | 
			
		||||
            }
 | 
			
		||||
            if (pos) {
 | 
			
		||||
              flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
            }
 | 
			
		||||
            flowchartCode += ` }\n`;
 | 
			
		||||
            imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          it(`with markdown htmlLabels:true`, () => {
 | 
			
		||||
            let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
            flowchartCode += `  nA --> nAA@{ icon: 'fa:bell', label: 'This is **bold** </br>and <strong>strong</strong> for icon shape'`;
 | 
			
		||||
            if (form) {
 | 
			
		||||
              flowchartCode += `, form: '${form}'`;
 | 
			
		||||
            }
 | 
			
		||||
            if (pos) {
 | 
			
		||||
              flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
            }
 | 
			
		||||
            flowchartCode += ` }\n`;
 | 
			
		||||
            imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          it(`with markdown htmlLabels:false`, () => {
 | 
			
		||||
            let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
            flowchartCode += `  nA --> nAA@{ icon: 'fa:bell', label: 'This is **bold** </br>and <strong>strong</strong> for icon shape'`;
 | 
			
		||||
            if (form) {
 | 
			
		||||
              flowchartCode += `, form: '${form}'`;
 | 
			
		||||
            }
 | 
			
		||||
            if (pos) {
 | 
			
		||||
              flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
            }
 | 
			
		||||
            flowchartCode += ` }\n`;
 | 
			
		||||
            imgSnapshotTest(flowchartCode, {
 | 
			
		||||
              look,
 | 
			
		||||
              htmlLabels: false,
 | 
			
		||||
              flowchart: { htmlLabels: false },
 | 
			
		||||
            });
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          it(`with styles`, () => {
 | 
			
		||||
            let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
            flowchartCode += `  nA --> nAA@{ icon: 'fa:bell', label: 'new icon shape'`;
 | 
			
		||||
            if (form) {
 | 
			
		||||
              flowchartCode += `, form: '${form}'`;
 | 
			
		||||
            }
 | 
			
		||||
            if (pos) {
 | 
			
		||||
              flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
            }
 | 
			
		||||
            flowchartCode += ` }\n`;
 | 
			
		||||
            flowchartCode += `  style nAA fill:#f9f,stroke:#333,stroke-width:4px \n`;
 | 
			
		||||
            imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          it(`with classDef`, () => {
 | 
			
		||||
            let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
            flowchartCode += `  classDef customClazz fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5\n`;
 | 
			
		||||
            flowchartCode += `  nA --> nAA@{ icon: 'fa:bell', label: 'new icon shape'`;
 | 
			
		||||
            if (form) {
 | 
			
		||||
              flowchartCode += `, form: '${form}'`;
 | 
			
		||||
            }
 | 
			
		||||
            if (pos) {
 | 
			
		||||
              flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
            }
 | 
			
		||||
            flowchartCode += ` }\n`;
 | 
			
		||||
            flowchartCode += `  nAA:::customClazz\n`;
 | 
			
		||||
            imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe('Test iconShape with different h', () => {
 | 
			
		||||
  it('with different h', () => {
 | 
			
		||||
    let flowchartCode = `flowchart TB\n`;
 | 
			
		||||
    const icon = 'fa:bell';
 | 
			
		||||
    const iconHeight = 64;
 | 
			
		||||
    flowchartCode += `  nA --> nAA@{ icon: '${icon}', label: 'icon with different h', h: ${iconHeight} }\n`;
 | 
			
		||||
    imgSnapshotTest(flowchartCode);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe('Test colored iconShape', () => {
 | 
			
		||||
  it('with no styles', () => {
 | 
			
		||||
    let flowchartCode = `flowchart TB\n`;
 | 
			
		||||
    const icon = 'fluent-emoji:tropical-fish';
 | 
			
		||||
    flowchartCode += `  nA --> nAA@{ icon: '${icon}', form: 'square', label: 'icon with color' }\n`;
 | 
			
		||||
    imgSnapshotTest(flowchartCode);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('with styles', () => {
 | 
			
		||||
    let flowchartCode = `flowchart TB\n`;
 | 
			
		||||
    const icon = 'fluent-emoji:tropical-fish';
 | 
			
		||||
    flowchartCode += `  nA --> nAA@{ icon: '${icon}', form: 'square', label: 'icon with color' }\n`;
 | 
			
		||||
    flowchartCode += `  style nAA fill:#f9f,stroke:#333,stroke-width:4px \n`;
 | 
			
		||||
    imgSnapshotTest(flowchartCode);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										103
									
								
								cypress/integration/rendering/imageShape.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								cypress/integration/rendering/imageShape.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
const looks = ['classic', 'handDrawn'] as const;
 | 
			
		||||
const directions = [
 | 
			
		||||
  'TB',
 | 
			
		||||
  //'BT',
 | 
			
		||||
  'LR',
 | 
			
		||||
  //  'RL'
 | 
			
		||||
] as const;
 | 
			
		||||
const labelPos = [undefined, 't', 'b'] as const;
 | 
			
		||||
 | 
			
		||||
looks.forEach((look) => {
 | 
			
		||||
  directions.forEach((direction) => {
 | 
			
		||||
    labelPos.forEach((pos) => {
 | 
			
		||||
      describe(`Test imageShape in ${look} look and dir ${direction} with label position ${pos ? pos : 'not defined'}`, () => {
 | 
			
		||||
        it(`without label`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          flowchartCode += `  nA --> A@{ img: 'https://cdn.pixabay.com/photo/2020/02/22/18/49/paper-4871356_1280.jpg', w: '100', h: '100' }\n`;
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with label`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          flowchartCode += `  nA --> A@{ img: 'https://cdn.pixabay.com/photo/2020/02/22/18/49/paper-4871356_1280.jpg', label: 'This is a label for image shape'`;
 | 
			
		||||
 | 
			
		||||
          flowchartCode += `, w: '100', h: '200'`;
 | 
			
		||||
          if (pos) {
 | 
			
		||||
            flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
          }
 | 
			
		||||
          flowchartCode += ` }\n`;
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with very long label`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          flowchartCode += `  nA --> A@{ img: 'https://cdn.pixabay.com/photo/2020/02/22/18/49/paper-4871356_1280.jpg', label: 'This is a very very very very very long long long label for image shape'`;
 | 
			
		||||
 | 
			
		||||
          flowchartCode += `, w: '100', h: '250'`;
 | 
			
		||||
          if (pos) {
 | 
			
		||||
            flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
          }
 | 
			
		||||
          flowchartCode += ` }\n`;
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with markdown htmlLabels:true`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          flowchartCode += `  nA --> A@{ img: 'https://cdn.pixabay.com/photo/2020/02/22/18/49/paper-4871356_1280.jpg', label: 'This is **bold** </br>and <strong>strong</strong> for image shape'`;
 | 
			
		||||
 | 
			
		||||
          flowchartCode += `, w: '550', h: '200'`;
 | 
			
		||||
          if (pos) {
 | 
			
		||||
            flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
          }
 | 
			
		||||
          flowchartCode += ` }\n`;
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look, htmlLabels: true });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with markdown htmlLabels:false`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          flowchartCode += `  nA --> A@{ img: 'https://cdn.pixabay.com/photo/2020/02/22/18/49/paper-4871356_1280.jpg', label: 'This is **bold** </br>and <strong>strong</strong> for image shape'`;
 | 
			
		||||
          flowchartCode += `, w: '250', h: '200'`;
 | 
			
		||||
 | 
			
		||||
          if (pos) {
 | 
			
		||||
            flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
          }
 | 
			
		||||
          flowchartCode += ` }\n`;
 | 
			
		||||
          imgSnapshotTest(flowchartCode, {
 | 
			
		||||
            look,
 | 
			
		||||
            htmlLabels: false,
 | 
			
		||||
            flowchart: { htmlLabels: false },
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with styles`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          flowchartCode += `  nA --> A@{ img: 'https://cdn.pixabay.com/photo/2020/02/22/18/49/paper-4871356_1280.jpg', label: 'new image shape'`;
 | 
			
		||||
          flowchartCode += `, w: '550', h: '200'`;
 | 
			
		||||
 | 
			
		||||
          if (pos) {
 | 
			
		||||
            flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
          }
 | 
			
		||||
          flowchartCode += ` }\n`;
 | 
			
		||||
          flowchartCode += `  style A fill:#f9f,stroke:#333,stroke-width:4px \n`;
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with classDef`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          flowchartCode += `  classDef customClazz fill:#bbf,stroke:#f66,stroke-width:2px,color:#000000,stroke-dasharray: 5 5\n`;
 | 
			
		||||
          flowchartCode += `  nA --> A@{ img: 'https://cdn.pixabay.com/photo/2020/02/22/18/49/paper-4871356_1280.jpg', label: 'new image shape'`;
 | 
			
		||||
 | 
			
		||||
          flowchartCode += `, w: '500', h: '550'`;
 | 
			
		||||
          if (pos) {
 | 
			
		||||
            flowchartCode += `, pos: '${pos}'`;
 | 
			
		||||
          }
 | 
			
		||||
          flowchartCode += ` }\n`;
 | 
			
		||||
          flowchartCode += `  A:::customClazz\n`;
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										136
									
								
								cypress/integration/rendering/kanban.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								cypress/integration/rendering/kanban.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,136 @@
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util.ts';
 | 
			
		||||
 | 
			
		||||
describe('Kanban diagram', () => {
 | 
			
		||||
  it('1: should render a kanban with a single section', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `kanban
 | 
			
		||||
  id1[Todo]
 | 
			
		||||
    docs[Create Documentation]
 | 
			
		||||
    docs[Create Blog about the new diagram]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('2: should render a kanban with multiple sections', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `kanban
 | 
			
		||||
  id1[Todo]
 | 
			
		||||
    docs[Create Documentation]
 | 
			
		||||
  id2
 | 
			
		||||
    docs[Create Blog about the new diagram]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('3: should render a kanban with a single wrapping node', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `kanban
 | 
			
		||||
  id1[Todo]
 | 
			
		||||
    id2[Title of diagram is more than 100 chars when user duplicates diagram with 100 char, wrapping]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('4: should handle the height of a section with a wrapping node at the end', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `kanban
 | 
			
		||||
  id1[Todo]
 | 
			
		||||
    id2[One line]
 | 
			
		||||
    id3[Title of diagram is more than 100 chars when user duplicates diagram with 100 char, wrapping]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('5: should handle the height of a section with a wrapping node at the top', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `kanban
 | 
			
		||||
  id1[Todo]
 | 
			
		||||
    id2[Title of diagram is more than 100 chars when user duplicates diagram with 100 char, wrapping]
 | 
			
		||||
    id3[One line]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('6: should handle the height of a section with a wrapping node in the middle', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `kanban
 | 
			
		||||
  id1[Todo]
 | 
			
		||||
    id2[One line]
 | 
			
		||||
    id3[Title of diagram is more than 100 chars when user duplicates diagram with 100 char, wrapping]
 | 
			
		||||
    id4[One line]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('6: should handle assigments', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `kanban
 | 
			
		||||
  id1[Todo]
 | 
			
		||||
    docs[Create Documentation]
 | 
			
		||||
  id2[In progress]
 | 
			
		||||
    docs[Create Blog about the new diagram]@{ assigned: 'knsv' }
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('7: should handle prioritization', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `kanban
 | 
			
		||||
  id2[In progress]
 | 
			
		||||
    vh[Very High]@{ priority: 'Very High' }
 | 
			
		||||
    h[High]@{ priority: 'High' }
 | 
			
		||||
    m[Default priority]
 | 
			
		||||
    l[Low]@{ priority: 'Low' }
 | 
			
		||||
    vl[Very Low]@{ priority: 'Very Low' }
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('7: should handle external tickets', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `kanban
 | 
			
		||||
  id1[Todo]
 | 
			
		||||
    docs[Create Documentation]
 | 
			
		||||
  id2[In progress]
 | 
			
		||||
    docs[Create Blog about the new diagram]@{ ticket: MC-2037 }
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('8: should handle assignments, prioritization and tickets ids in the same item', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `kanban
 | 
			
		||||
  id2[In progress]
 | 
			
		||||
    docs[Create Blog about the new diagram]@{ priority: 'Very Low', ticket: MC-2037, assigned: 'knsv' }
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  it('10: Full example', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `---
 | 
			
		||||
config:
 | 
			
		||||
  kanban:
 | 
			
		||||
    ticketBaseUrl: 'https://abc123.atlassian.net/browse/#TICKET#'
 | 
			
		||||
---
 | 
			
		||||
kanban
 | 
			
		||||
  id1[Todo]
 | 
			
		||||
    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.]
 | 
			
		||||
    id8[Design grammar]@{ assigned: 'knsv' }
 | 
			
		||||
  id9[Ready for deploy]
 | 
			
		||||
  id10[Ready for test]
 | 
			
		||||
  id11[Done]
 | 
			
		||||
    id5[define getData]
 | 
			
		||||
    id2[Title of diagram is more than 100 chars when user duplicates diagram with 100 char]@{ ticket: MC-2036, priority: 'Very High'}
 | 
			
		||||
    id3[Update DB function]@{ ticket: MC-2037, assigned: knsv, priority: 'High' }
 | 
			
		||||
    id4[Create parsing tests]@{ ticket: MC-2038, assigned: 'K.Sveidqvist', priority: 'High' }
 | 
			
		||||
    id66[last item]@{ priority: 'Very Low', assigned: 'knsv' }
 | 
			
		||||
  id12[Can't reproduce]
 | 
			
		||||
      `,
 | 
			
		||||
      {}
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										146
									
								
								cypress/integration/rendering/newShapes.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								cypress/integration/rendering/newShapes.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,146 @@
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util.ts';
 | 
			
		||||
 | 
			
		||||
const looks = ['classic', 'handDrawn'] as const;
 | 
			
		||||
const directions = [
 | 
			
		||||
  'TB',
 | 
			
		||||
  //'BT',
 | 
			
		||||
  'LR',
 | 
			
		||||
  //'RL'
 | 
			
		||||
] as const;
 | 
			
		||||
const newShapesSet1 = [
 | 
			
		||||
  'triangle',
 | 
			
		||||
  'sloped-rectangle',
 | 
			
		||||
  'horizontal-cylinder',
 | 
			
		||||
  'flipped-triangle',
 | 
			
		||||
  'hourglass',
 | 
			
		||||
] as const;
 | 
			
		||||
const newShapesSet2 = [
 | 
			
		||||
  'tagged-rectangle',
 | 
			
		||||
  'documents',
 | 
			
		||||
  'lightning-bolt',
 | 
			
		||||
  'filled-circle',
 | 
			
		||||
  'window-pane',
 | 
			
		||||
] as const;
 | 
			
		||||
 | 
			
		||||
const newShapesSet3 = [
 | 
			
		||||
  'curved-trapezoid',
 | 
			
		||||
  'bow-rect',
 | 
			
		||||
  'tagged-document',
 | 
			
		||||
  'divided-rectangle',
 | 
			
		||||
  'crossed-circle',
 | 
			
		||||
] as const;
 | 
			
		||||
 | 
			
		||||
const newShapesSet4 = [
 | 
			
		||||
  'document',
 | 
			
		||||
  'notched-pentagon',
 | 
			
		||||
  'lined-cylinder',
 | 
			
		||||
  'stacked-document',
 | 
			
		||||
  'half-rounded-rectangle',
 | 
			
		||||
] as const;
 | 
			
		||||
 | 
			
		||||
const newShapesSet5 = [
 | 
			
		||||
  'lined-document',
 | 
			
		||||
  'tagged-document',
 | 
			
		||||
  'brace-l',
 | 
			
		||||
  'comment',
 | 
			
		||||
  'braces',
 | 
			
		||||
  'brace-r',
 | 
			
		||||
] as const;
 | 
			
		||||
 | 
			
		||||
const newShapesSet6 = ['brace-r', 'braces'] as const;
 | 
			
		||||
// Aggregate all shape sets into a single array
 | 
			
		||||
const newShapesSets = [
 | 
			
		||||
  newShapesSet1,
 | 
			
		||||
  newShapesSet2,
 | 
			
		||||
  newShapesSet3,
 | 
			
		||||
  newShapesSet4,
 | 
			
		||||
  newShapesSet5,
 | 
			
		||||
  newShapesSet6,
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
looks.forEach((look) => {
 | 
			
		||||
  directions.forEach((direction) => {
 | 
			
		||||
    newShapesSets.forEach((newShapesSet) => {
 | 
			
		||||
      describe(`Test ${newShapesSet.join(', ')} in ${look} look and dir ${direction}`, () => {
 | 
			
		||||
        it(`without label`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          newShapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape} }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with label`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          newShapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'This is a label for ${newShape} shape' }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`connect all shapes with each other`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          newShapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index}${index}@{ shape: ${newShape}, label: 'This is a label for ${newShape} shape' }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          for (let i = 0; i < newShapesSet.length; i++) {
 | 
			
		||||
            for (let j = i + 1; j < newShapesSet.length; j++) {
 | 
			
		||||
              flowchartCode += `  n${i}${i} --> n${j}${j}\n`;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          if (!(direction === 'TB' && look === 'handDrawn' && newShapesSet === newShapesSet1)) {
 | 
			
		||||
            //skip this test, works in real. Need to look
 | 
			
		||||
            imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with very long label`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          newShapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'This is a very very very very very long long long label for ${newShape} shape' }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with markdown htmlLabels:true`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          newShapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'This is **bold** </br>and <strong>strong</strong> for ${newShape} shape' }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with markdown htmlLabels:false`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          newShapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'This is **bold** </br>and <strong>strong</strong> for ${newShape} shape' }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, {
 | 
			
		||||
            look,
 | 
			
		||||
            htmlLabels: false,
 | 
			
		||||
            flowchart: { htmlLabels: false },
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with styles`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          newShapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'new ${newShape} shape' }\n`;
 | 
			
		||||
            flowchartCode += `  style n${index}${index} fill:#f9f,stroke:#333,stroke-width:4px \n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with classDef`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          flowchartCode += `  classDef customClazz fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5\n`;
 | 
			
		||||
          newShapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'new ${newShape} shape' }\n`;
 | 
			
		||||
            flowchartCode += `  n${index}${index}:::customClazz\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										107
									
								
								cypress/integration/rendering/oldShapes.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								cypress/integration/rendering/oldShapes.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
import { imgSnapshotTest } from '../../helpers/util';
 | 
			
		||||
 | 
			
		||||
const looks = ['classic', 'handDrawn'] as const;
 | 
			
		||||
const directions = [
 | 
			
		||||
  'TB',
 | 
			
		||||
  //'BT',
 | 
			
		||||
  'LR',
 | 
			
		||||
  //'RL'
 | 
			
		||||
] as const;
 | 
			
		||||
 | 
			
		||||
const shapesSet1 = ['text', 'card', 'lin-rect', 'diamond', 'hexagon'] as const;
 | 
			
		||||
 | 
			
		||||
// removing labelRect, need have alias for it
 | 
			
		||||
const shapesSet2 = ['rounded', 'rect', 'start', 'stop'] as const;
 | 
			
		||||
 | 
			
		||||
const shapesSet3 = ['fork', 'choice', 'note', 'stadium', 'odd'] as const;
 | 
			
		||||
 | 
			
		||||
const shapesSet4 = ['subroutine', 'cylinder', 'circle', 'doublecircle', 'odd'] as const;
 | 
			
		||||
 | 
			
		||||
const shapesSet5 = ['anchor', 'lean-r', 'lean-l', 'trap-t', 'trap-b'] as const;
 | 
			
		||||
 | 
			
		||||
// Aggregate all shape sets into a single array
 | 
			
		||||
const shapesSets = [shapesSet1, shapesSet2, shapesSet3, shapesSet4, shapesSet5] as const;
 | 
			
		||||
 | 
			
		||||
looks.forEach((look) => {
 | 
			
		||||
  directions.forEach((direction) => {
 | 
			
		||||
    shapesSets.forEach((shapesSet) => {
 | 
			
		||||
      describe(`Test ${shapesSet.join(', ')} in ${look} look and dir ${direction}`, () => {
 | 
			
		||||
        it(`without label`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          shapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape} }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with label`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          shapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'This is a label for ${newShape} shape' }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`connect all shapes with each other`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          shapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index}${index}@{ shape: ${newShape}, label: 'This is a label for ${newShape} shape' }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          for (let i = 0; i < shapesSet.length; i++) {
 | 
			
		||||
            for (let j = i + 1; j < shapesSet.length; j++) {
 | 
			
		||||
              flowchartCode += `  n${i}${i} --> n${j}${j}\n`;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with very long label`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          shapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'This is a very very very very very long long long label for ${newShape} shape' }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with markdown htmlLabels:true`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          shapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'This is **bold** </br>and <strong>strong</strong> for ${newShape} shape' }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with markdown htmlLabels:false`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          shapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'This is **bold** </br>and <strong>strong</strong> for ${newShape} shape' }\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, {
 | 
			
		||||
            look,
 | 
			
		||||
            htmlLabels: false,
 | 
			
		||||
            flowchart: { htmlLabels: false },
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with styles`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          shapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'new ${newShape} shape' }\n`;
 | 
			
		||||
            flowchartCode += `  style n${index}${index} fill:#f9f,stroke:#333,stroke-width:4px \n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it(`with classDef`, () => {
 | 
			
		||||
          let flowchartCode = `flowchart ${direction}\n`;
 | 
			
		||||
          flowchartCode += `  classDef customClazz fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5\n`;
 | 
			
		||||
          shapesSet.forEach((newShape, index) => {
 | 
			
		||||
            flowchartCode += `  n${index} --> n${index}${index}@{ shape: ${newShape}, label: 'new ${newShape} shape' }\n`;
 | 
			
		||||
            flowchartCode += `  n${index}${index}:::customClazz\n`;
 | 
			
		||||
          });
 | 
			
		||||
          imgSnapshotTest(flowchartCode, { look });
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
      );
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@@ -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,
 | 
			
		||||
 
 | 
			
		||||
@@ -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/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/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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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,12 +4,16 @@
 | 
			
		||||
    <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.7.2/css/all.min.css"
 | 
			
		||||
      rel="stylesheet"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
			
		||||
      rel="stylesheet"
 | 
			
		||||
@@ -34,6 +38,7 @@
 | 
			
		||||
        /* background: rgb(221, 208, 208); */
 | 
			
		||||
        /* background: #333; */
 | 
			
		||||
        font-family: 'Arial';
 | 
			
		||||
        /* color: white; */
 | 
			
		||||
        /* font-size: 18px !important; */
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -73,180 +78,355 @@
 | 
			
		||||
        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="diagram" class="mermaid">
 | 
			
		||||
    <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">
 | 
			
		||||
---
 | 
			
		||||
  title: hello2
 | 
			
		||||
  config:
 | 
			
		||||
    look: handDrawn
 | 
			
		||||
    layout: elk
 | 
			
		||||
    elk:
 | 
			
		||||
        <!-- nodePlacementStrategy: INTERACTIVE -->
 | 
			
		||||
        <!-- mergeEdges: true -->
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
stateDiagram-v2
 | 
			
		||||
    direction LR
 | 
			
		||||
    accTitle: An idealized Open Source supply-chain graph
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
    %%
 | 
			
		||||
    state "🟦 Importer" as author_importer
 | 
			
		||||
    state "🟥 Supplier, Owner" as author_owner
 | 
			
		||||
    state "🟨🟥 Maintainer, Author\n🟨 Custodian" as author
 | 
			
		||||
    state "🟩 Distributor" as repository_distributor
 | 
			
		||||
    state "🟦 Importer" as language_importer
 | 
			
		||||
    state "🟦🟨 Packager" as language_packager
 | 
			
		||||
    state "🟦🟨 OSS Steward" as language_steward
 | 
			
		||||
    state "🟨 Curator" as language_curator
 | 
			
		||||
    state "🟩 Distributor" as language_distributor
 | 
			
		||||
    state "🟦 Contributor" as contributor
 | 
			
		||||
    state "🟦 Importer" as package_importer
 | 
			
		||||
    state "🟨 Patcher" as package_patcher
 | 
			
		||||
    state "🟨🟦 Builder\n🟨🟦 Packager\n🟨🟦 Containerizer" as package_packager
 | 
			
		||||
    state "🟨 Curator" as package_curator
 | 
			
		||||
    state "🟩 Distributor" as package_distributor
 | 
			
		||||
    state "🟦 Importer" as integrator_importer
 | 
			
		||||
    state "🟥 Supplier, Manufacturer, Owner" as integrator_owner
 | 
			
		||||
    state "🟦🟨🟥 Integrator, Developer" as integrator_developer
 | 
			
		||||
    state "🟩🟨 SBOM Redactor\n🟩 Publisher" as integrator_publisher
 | 
			
		||||
    state "🟦🟨 Builder" as integrator_builder
 | 
			
		||||
    state "🟨 Deployer" as deployer
 | 
			
		||||
    state "🟦 Vuln. Checker" as integrator_checker
 | 
			
		||||
    state "🟩🟨 SBOM Redactor" as redactor
 | 
			
		||||
    state "🟦 Consumer\n🟦  User" as consumer
 | 
			
		||||
    state "🟦 Auditor" as auditor_internal
 | 
			
		||||
    state "🟦 Auditor" as auditor_external
 | 
			
		||||
      I{"X"}
 | 
			
		||||
      end
 | 
			
		||||
      end
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
      flowchart LR
 | 
			
		||||
      a
 | 
			
		||||
        D{"Use the editor"}
 | 
			
		||||
 | 
			
		||||
    %%
 | 
			
		||||
    classDef createsSBOM stroke:red,stroke-width:3px;
 | 
			
		||||
    classDef updatesSBOM stroke:yellow,stroke-width:3px;
 | 
			
		||||
    classDef assemblesSBOM stroke:yellow,stroke-width:3px;
 | 
			
		||||
    classDef distributesSBOM stroke:green,stroke-width:3px;
 | 
			
		||||
    classDef verifiesSBOM stroke:#07f,stroke-width:3px;
 | 
			
		||||
      D -- Mermaid js --> I{"fa:fa-code Text"}
 | 
			
		||||
      D-->I
 | 
			
		||||
      D-->I
 | 
			
		||||
    </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
 | 
			
		||||
 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}
 | 
			
		||||
 | 
			
		||||
    %%
 | 
			
		||||
    class author_importer verifiesSBOM
 | 
			
		||||
    class author_owner createsSBOM
 | 
			
		||||
    class manufacturer_owner createsSBOM
 | 
			
		||||
    class author assemblesSBOM
 | 
			
		||||
    class package_importer verifiesSBOM
 | 
			
		||||
    class package_patcher updatesSBOM
 | 
			
		||||
    class package_packager assemblesSBOM
 | 
			
		||||
    class package_curator distributesSBOM
 | 
			
		||||
    class package_distributor distributesSBOM
 | 
			
		||||
    class language_importer verifiesSBOM
 | 
			
		||||
    class language_packager assemblesSBOM
 | 
			
		||||
    class language_steward updatesSBOM
 | 
			
		||||
    class language_curator distributesSBOM
 | 
			
		||||
    class language_distributor distributesSBOM
 | 
			
		||||
    class repository_distributor distributesSBOM
 | 
			
		||||
    class integrator_importer verifiesSBOM
 | 
			
		||||
    class integrator_owner createsSBOM
 | 
			
		||||
    class integrator_developer assemblesSBOM
 | 
			
		||||
    class integrator_publisher distributesSBOM
 | 
			
		||||
    class integrator_builder assemblesSBOM
 | 
			
		||||
    class integrator_checker verifiesSBOM
 | 
			
		||||
    class deployer assemblesSBOM
 | 
			
		||||
    class redactor distributesSBOM
 | 
			
		||||
    class auditor_internal verifiesSBOM
 | 
			
		||||
    class auditor_external verifiesSBOM
 | 
			
		||||
 | 
			
		||||
    state "Maintainer Environment" as environment_maintainer {
 | 
			
		||||
        [*] --> author_importer
 | 
			
		||||
        [*] --> author
 | 
			
		||||
        author_importer --> author
 | 
			
		||||
        author_owner --> author
 | 
			
		||||
        author       --> language_packager
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [*] --> environment_maintainer
 | 
			
		||||
 | 
			
		||||
    state "Language Ecosystem" as ecosystem_lang {
 | 
			
		||||
        [*] --> language_importer
 | 
			
		||||
        [*] --> language_steward
 | 
			
		||||
        [*] --> language_curator
 | 
			
		||||
        [*] --> language_distributor
 | 
			
		||||
        language_importer --> language_distributor
 | 
			
		||||
        language_importer --> language_curator
 | 
			
		||||
        language_steward --> language_curator
 | 
			
		||||
        language_curator --> language_distributor
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    language_packager --> ecosystem_lang
 | 
			
		||||
    ecosystem_lang    --> ecosystem_lang
 | 
			
		||||
 | 
			
		||||
    state "Public Collaboration Ecosystem" as ecosystem_repo {
 | 
			
		||||
        [*] --> repository_distributor
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    author         --> ecosystem_repo
 | 
			
		||||
    ecosystem_repo --> author
 | 
			
		||||
 | 
			
		||||
    repository_distributor --> contributor
 | 
			
		||||
    contributor            --> repository_distributor
 | 
			
		||||
 | 
			
		||||
    state "Package Ecosystem" as ecosystem_package {
 | 
			
		||||
        [*] --> package_importer
 | 
			
		||||
        [*] --> package_packager
 | 
			
		||||
        [*] --> package_patcher
 | 
			
		||||
        package_importer --> package_patcher
 | 
			
		||||
        package_importer --> package_packager
 | 
			
		||||
        package_patcher  --> package_packager
 | 
			
		||||
        package_packager --> package_curator
 | 
			
		||||
        package_packager --> package_distributor
 | 
			
		||||
        package_curator  --> package_distributor
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    repository_distributor --> ecosystem_package
 | 
			
		||||
    language_distributor   --> ecosystem_package
 | 
			
		||||
    ecosystem_package      --> ecosystem_package
 | 
			
		||||
 | 
			
		||||
    state "Integrator Environment" as environment_integrator {
 | 
			
		||||
        [*] --> integrator_developer
 | 
			
		||||
        [*] --> integrator_importer
 | 
			
		||||
        integrator_importer  --> integrator_developer
 | 
			
		||||
        integrator_owner     --> integrator_developer
 | 
			
		||||
        integrator_builder   --> integrator_publisher
 | 
			
		||||
        integrator_developer --> integrator_checker
 | 
			
		||||
        integrator_checker   --> integrator_developer
 | 
			
		||||
        auditor_internal     --> integrator_developer
 | 
			
		||||
        integrator_developer --> integrator_builder
 | 
			
		||||
        integrator_developer --> auditor_internal
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    repository_distributor --> environment_integrator
 | 
			
		||||
    language_distributor   --> environment_integrator
 | 
			
		||||
    package_distributor    --> environment_integrator
 | 
			
		||||
 | 
			
		||||
    state "Production Environment" as environment_prod {
 | 
			
		||||
        [*] --> deployer
 | 
			
		||||
        deployer --> redactor
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    integrator_publisher --> [*]
 | 
			
		||||
    integrator_developer --> environment_prod
 | 
			
		||||
    integrator_builder   --> environment_prod
 | 
			
		||||
    integrator_publisher --> environment_prod
 | 
			
		||||
 | 
			
		||||
    deployer --> auditor_external
 | 
			
		||||
    deployer --> consumer
 | 
			
		||||
    redactor --> consumer
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
flowchart LR
 | 
			
		||||
 subgraph s1["Untitled subgraph"]
 | 
			
		||||
        n1["Evaluate"]
 | 
			
		||||
        n2["Option 1"]
 | 
			
		||||
  end
 | 
			
		||||
    n1 -- One --> n2
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      </pre>
 | 
			
		||||
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
---
 | 
			
		||||
config:
 | 
			
		||||
  layout: elk
 | 
			
		||||
---
 | 
			
		||||
flowchart LR
 | 
			
		||||
    A{A} --> B & C
 | 
			
		||||
</pre
 | 
			
		||||
    >
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
---
 | 
			
		||||
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}
 | 
			
		||||
    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"]
 | 
			
		||||
    %% C@{ shape: hexagon}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
---
 | 
			
		||||
config:
 | 
			
		||||
  kanban:
 | 
			
		||||
    ticketBaseUrl: 'https://github.com/your-repo/issues/#TICKET#'
 | 
			
		||||
---
 | 
			
		||||
kanban
 | 
			
		||||
  Backlog
 | 
			
		||||
    task1[📝 Define project requirements]@{ ticket: a101 }
 | 
			
		||||
  To Do
 | 
			
		||||
    task2[🔍 Research technologies]@{ ticket: a102 }
 | 
			
		||||
  Review
 | 
			
		||||
    task4[🔍 Code review for login feature]@{ ticket: a104 }
 | 
			
		||||
  Done
 | 
			
		||||
    task5[✅ Deploy initial version]@{ ticket: a105 }
 | 
			
		||||
  In Progress
 | 
			
		||||
    task3[💻 Develop login feature]@{ ticket: 103 }
 | 
			
		||||
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
nA[Default] --> A@{ icon: 'fa:bell', form: 'rounded' }
 | 
			
		||||
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
nA[Style] --> A@{ icon: 'fa:bell', form: 'rounded' }
 | 
			
		||||
style A fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
nA[Class] --> A@{ icon: 'fa:bell', form: 'rounded' }
 | 
			
		||||
A:::AClass
 | 
			
		||||
classDef AClass fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
  nA[Class] --> A@{ icon: 'logos:aws', form: 'rounded' }
 | 
			
		||||
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
nA[Default] --> A@{ icon: 'fa:bell', form: 'square' }
 | 
			
		||||
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
nA[Style] --> A@{ icon: 'fa:bell', form: 'square' }
 | 
			
		||||
style A fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
nA[Class] --> A@{ icon: 'fa:bell', form: 'square' }
 | 
			
		||||
A:::AClass
 | 
			
		||||
classDef AClass fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
  nA[Class] --> A@{ icon: 'logos:aws', form: 'square' }
 | 
			
		||||
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
nA[Default] --> A@{ icon: 'fa:bell', form: 'circle' }
 | 
			
		||||
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
nA[Style] --> A@{ icon: 'fa:bell', form: 'circle' }
 | 
			
		||||
style A fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
nA[Class] --> A@{ icon: 'fa:bell', form: 'circle' }
 | 
			
		||||
A:::AClass
 | 
			
		||||
classDef AClass fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
  nA[Class] --> A@{ icon: 'logos:aws', form: 'circle' }
 | 
			
		||||
  A:::AClass
 | 
			
		||||
  classDef AClass fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
flowchart LR
 | 
			
		||||
  nA[Style] --> A@{ icon: 'logos:aws', form: 'circle' }
 | 
			
		||||
  style A fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
kanban
 | 
			
		||||
  id2[In progress]
 | 
			
		||||
    docs[Create Blog about the new diagram]@{ priority: 'Very Low', ticket: MC-2037, assigned: 'knsv' }
 | 
			
		||||
    </pre>
 | 
			
		||||
    <pre id="diagram4" class="mermaid2">
 | 
			
		||||
---
 | 
			
		||||
config:
 | 
			
		||||
  kanban:
 | 
			
		||||
    ticketBaseUrl: 'https://mermaidchart.atlassian.net/browse/#TICKET#'
 | 
			
		||||
    # sectionWidth: 300
 | 
			
		||||
---
 | 
			
		||||
kanban
 | 
			
		||||
  Todo
 | 
			
		||||
    [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.]
 | 
			
		||||
  id9[Ready for deploy]
 | 
			
		||||
    id8[Design grammar]@{ assigned: 'knsv' }
 | 
			
		||||
  id10[Ready for test]
 | 
			
		||||
    id4[Create parsing tests]@{ ticket: MC-2038, assigned: 'K.Sveidqvist', priority: 'High' }
 | 
			
		||||
    id66[last item]@{ priority: 'Very Low', assigned: 'knsv' }
 | 
			
		||||
  id11[Done]
 | 
			
		||||
    id5[define getData]
 | 
			
		||||
    id2[Title of diagram is more than 100 chars when user duplicates diagram with 100 char]@{ ticket: MC-2036, priority: 'Very High'}
 | 
			
		||||
    id3[Update DB function]@{ ticket: MC-2037, assigned: knsv, priority: 'High' }
 | 
			
		||||
 | 
			
		||||
  id12[Can't reproduce]
 | 
			
		||||
    id3[Weird flickering in Firefox]
 | 
			
		||||
    </pre>
 | 
			
		||||
    <script type="module">
 | 
			
		||||
      import mermaid from './mermaid.esm.mjs';
 | 
			
		||||
      import layouts from './mermaid-layout-elk.esm.mjs';
 | 
			
		||||
 | 
			
		||||
      const staticBellIconPack = {
 | 
			
		||||
        prefix: 'fa6-regular',
 | 
			
		||||
        icons: {
 | 
			
		||||
          bell: {
 | 
			
		||||
            body: '<path fill="currentColor" d="M224 0c-17.7 0-32 14.3-32 32v19.2C119 66 64 130.6 64 208v25.4c0 45.4-15.5 89.5-43.8 124.9L5.3 377c-5.8 7.2-6.9 17.1-2.9 25.4S14.8 416 24 416h400c9.2 0 17.6-5.3 21.6-13.6s2.9-18.2-2.9-25.4l-14.9-18.6c-28.3-35.5-43.8-79.6-43.8-125V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32m0 96c61.9 0 112 50.1 112 112v25.4c0 47.9 13.9 94.6 39.7 134.6H72.3c25.8-40 39.7-86.7 39.7-134.6V208c0-61.9 50.1-112 112-112m64 352H160c0 17 6.7 33.3 18.7 45.3S207 512 224 512s33.3-6.7 45.3-18.7S288 465 288 448"/>',
 | 
			
		||||
            width: 448,
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        width: 512,
 | 
			
		||||
        height: 512,
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      mermaid.registerIconPacks([
 | 
			
		||||
        {
 | 
			
		||||
          name: 'logos',
 | 
			
		||||
          loader: () =>
 | 
			
		||||
            fetch('https://unpkg.com/@iconify-json/logos@1/icons.json').then((res) => res.json()),
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'fa',
 | 
			
		||||
          loader: () => staticBellIconPack,
 | 
			
		||||
        },
 | 
			
		||||
      ]);
 | 
			
		||||
      mermaid.registerLayoutLoaders(layouts);
 | 
			
		||||
      mermaid.parseError = function (err, hash) {
 | 
			
		||||
        console.error('Mermaid error: ', err);
 | 
			
		||||
@@ -254,8 +434,13 @@ stateDiagram-v2
 | 
			
		||||
      window.callback = function () {
 | 
			
		||||
        alert('A callback was triggered');
 | 
			
		||||
      };
 | 
			
		||||
      mermaid.initialize({
 | 
			
		||||
      function callback() {
 | 
			
		||||
        alert('It worked');
 | 
			
		||||
      }
 | 
			
		||||
      await mermaid.initialize({
 | 
			
		||||
        // theme: 'base',
 | 
			
		||||
        // theme: 'default',
 | 
			
		||||
        // theme: 'forest',
 | 
			
		||||
        // handDrawnSeed: 12,
 | 
			
		||||
        // look: 'handDrawn',
 | 
			
		||||
        // 'elk.nodePlacement.strategy': 'NETWORK_SIMPLEX',
 | 
			
		||||
@@ -264,21 +449,25 @@ stateDiagram-v2
 | 
			
		||||
        // layout: 'fixed',
 | 
			
		||||
        // htmlLabels: false,
 | 
			
		||||
        flowchart: { titleTopMargin: 10 },
 | 
			
		||||
 | 
			
		||||
        // fontFamily: 'Caveat',
 | 
			
		||||
        // fontFamily: 'Kalam',
 | 
			
		||||
        // fontFamily: 'courier',
 | 
			
		||||
        fontFamily: 'arial',
 | 
			
		||||
        sequence: {
 | 
			
		||||
          actorFontFamily: 'courier',
 | 
			
		||||
          noteFontFamily: 'courier',
 | 
			
		||||
          messageFontFamily: 'courier',
 | 
			
		||||
        },
 | 
			
		||||
        kanban: {
 | 
			
		||||
          htmlLabels: false,
 | 
			
		||||
        },
 | 
			
		||||
        fontSize: 12,
 | 
			
		||||
        logLevel: 3,
 | 
			
		||||
        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"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										141
									
								
								cypress/platform/saurabh.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								cypress/platform/saurabh.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,141 @@
 | 
			
		||||
<html>
 | 
			
		||||
  <head>
 | 
			
		||||
    <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
 | 
			
		||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
			
		||||
    <link
 | 
			
		||||
      rel="stylesheet"
 | 
			
		||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/font-awesome.min.css"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
			
		||||
      rel="stylesheet"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
			
		||||
      rel="stylesheet"
 | 
			
		||||
    />
 | 
			
		||||
    <link rel="preconnect" href="https://fonts.googleapis.com" />
 | 
			
		||||
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&display=swap"
 | 
			
		||||
      rel="stylesheet"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://fonts.googleapis.com/css2?family=Caveat:wght@400..700&family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap"
 | 
			
		||||
      rel="stylesheet"
 | 
			
		||||
    />
 | 
			
		||||
    <link
 | 
			
		||||
      href="https://fonts.googleapis.com/css2?family=Kalam:wght@300;400;700&family=Rubik+Mono+One&display=swap"
 | 
			
		||||
      rel="stylesheet"
 | 
			
		||||
    />
 | 
			
		||||
 | 
			
		||||
    <style>
 | 
			
		||||
      body {
 | 
			
		||||
        /* background: rgb(221, 208, 208); */
 | 
			
		||||
        /* background: #333; */
 | 
			
		||||
        font-family: 'Arial';
 | 
			
		||||
        /* font-size: 18px !important; */
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      h1 {
 | 
			
		||||
        color: grey;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .mermaid2 {
 | 
			
		||||
        display: none;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .mermaid svg {
 | 
			
		||||
        /* font-size: 18px !important; */
 | 
			
		||||
 | 
			
		||||
        /* background-color: #efefef;
 | 
			
		||||
        background-image: radial-gradient(#fff 51%, transparent 91%),
 | 
			
		||||
          radial-gradient(#fff 51%, transparent 91%);
 | 
			
		||||
        background-size: 20px 20px;
 | 
			
		||||
        background-position:
 | 
			
		||||
          0 0,
 | 
			
		||||
          10px 10px;
 | 
			
		||||
        background-repeat: repeat; */
 | 
			
		||||
      }
 | 
			
		||||
    </style>
 | 
			
		||||
  </head>
 | 
			
		||||
 | 
			
		||||
  <body style="display: flex; gap: 2rem; flex-direction: row">
 | 
			
		||||
    <pre id="diagram4" class="mermaid">
 | 
			
		||||
      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>
 | 
			
		||||
    <script type="module">
 | 
			
		||||
      import mermaid from './mermaid.esm.mjs';
 | 
			
		||||
      import layouts from './mermaid-layout-elk.esm.mjs';
 | 
			
		||||
      mermaid.registerLayoutLoaders(layouts);
 | 
			
		||||
      mermaid.registerIconPacks([
 | 
			
		||||
        {
 | 
			
		||||
          name: 'logos',
 | 
			
		||||
          loader: () =>
 | 
			
		||||
            fetch('https://unpkg.com/@iconify-json/logos/icons.json').then((res) => res.json()),
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'fa',
 | 
			
		||||
          loader: () =>
 | 
			
		||||
            fetch('https://unpkg.com/@iconify-json/fa6-solid/icons.json').then((res) => res.json()),
 | 
			
		||||
        },
 | 
			
		||||
      ]);
 | 
			
		||||
      mermaid.parseError = function (err, hash) {
 | 
			
		||||
        console.error('Mermaid error: ', err);
 | 
			
		||||
      };
 | 
			
		||||
      window.callback = function () {
 | 
			
		||||
        alert('A callback was triggered');
 | 
			
		||||
      };
 | 
			
		||||
      mermaid.initialize({
 | 
			
		||||
        // theme: 'base',
 | 
			
		||||
        // handdrawnSeed: 12,
 | 
			
		||||
        look: 'classic',
 | 
			
		||||
        // 'elk.nodePlacement.strategy': 'NETWORK_SIMPLEX',
 | 
			
		||||
        // 'elk.nodePlacement.strategy': 'SIMPLE',
 | 
			
		||||
        // 'elk.nodePlacement.strategy': 'LAYERED',
 | 
			
		||||
        // 'elk.mergeEdges': true,
 | 
			
		||||
        // layout: 'dagre',
 | 
			
		||||
        // layout: 'elk',
 | 
			
		||||
        // layout: 'fixed',
 | 
			
		||||
        // htmlLabels: false,
 | 
			
		||||
        flowchart: { titleTopMargin: 10, padding: 0, htmlLabels: true },
 | 
			
		||||
        // fontFamily: 'Caveat',
 | 
			
		||||
        // fontFamily: 'Kalam',
 | 
			
		||||
        fontFamily: 'courier',
 | 
			
		||||
        sequence: {
 | 
			
		||||
          actorFontFamily: 'courier',
 | 
			
		||||
          noteFontFamily: 'courier',
 | 
			
		||||
          messageFontFamily: 'courier',
 | 
			
		||||
        },
 | 
			
		||||
        themeVariables: {
 | 
			
		||||
          fontSize: 50,
 | 
			
		||||
          fontFamily: 'courier',
 | 
			
		||||
        },
 | 
			
		||||
        logLevel: 0,
 | 
			
		||||
        securityLevel: 'loose',
 | 
			
		||||
      });
 | 
			
		||||
      function callback() {
 | 
			
		||||
        alert('It worked');
 | 
			
		||||
      }
 | 
			
		||||
      mermaid.parseError = function (err, hash) {
 | 
			
		||||
        console.error('In parse error:');
 | 
			
		||||
        console.error(err);
 | 
			
		||||
      };
 | 
			
		||||
    </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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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" />
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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/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://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"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										663
									
								
								cypress/platform/yari.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										663
									
								
								cypress/platform/yari.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,663 @@
 | 
			
		||||
<html>
 | 
			
		||||
  <body>
 | 
			
		||||
    <h1 class="header">Class Nodes</h1>
 | 
			
		||||
    <div class="node-showcase">
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Basic Class</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
            config:
 | 
			
		||||
              htmlLabels: false
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class _Duck_ {
 | 
			
		||||
            +String beakColor
 | 
			
		||||
            _+_swim_()a_
 | 
			
		||||
            __+quack() test__
 | 
			
		||||
          }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Basic Class</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
          config:
 | 
			
		||||
            htmlLabels: false
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Class10:::exClass2 {
 | 
			
		||||
            int[] id
 | 
			
		||||
            List~int~ ids
 | 
			
		||||
            test(List~int~ ids) List~bool~
 | 
			
		||||
            testArray() bool[]
 | 
			
		||||
          }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Basic Class</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          flowchart TD
 | 
			
		||||
            Start --> Stop
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Complex Class</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
                classDiagram
 | 
			
		||||
                class Square~Shape~{
 | 
			
		||||
                  int id
 | 
			
		||||
                  List~int~ position
 | 
			
		||||
                  setPoints(List~int~ points)
 | 
			
		||||
                  getPoints() List~int~
 | 
			
		||||
                }
 | 
			
		||||
          
 | 
			
		||||
          Square : -List~string~ messages
 | 
			
		||||
          Square : +setMessages(List~string~ messages)
 | 
			
		||||
          Square : +getMessages() List~string~
 | 
			
		||||
          Square : +getDistanceMatrix() List~List~int~~
 | 
			
		||||
              </pre
 | 
			
		||||
        >
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>No Attributes</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Duck {
 | 
			
		||||
            +swim()
 | 
			
		||||
            +quack()
 | 
			
		||||
          }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>No Methods</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Duck {
 | 
			
		||||
            +String beakColor
 | 
			
		||||
          }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Only Class Name</h2>
 | 
			
		||||
        <p>Empty line as attribute</p>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
            config:
 | 
			
		||||
              class:
 | 
			
		||||
                hideEmptyMembersBox: false
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Duck {
 | 
			
		||||
            
 | 
			
		||||
          }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Visibility and Types</h2>
 | 
			
		||||
        <p>(Further tilde testing)</p>
 | 
			
		||||
        <div class="mermaid">
 | 
			
		||||
          classDiagram class Duck { ~interface~~~ +String beakColor #swim() ~quack()~~~
 | 
			
		||||
          -test()~~~~~~~ +deposit(amount) bool }
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Additional Classifiers</h2>
 | 
			
		||||
        <p>(* Abstract | $ Static)</p>
 | 
			
		||||
        <div class="mermaid">
 | 
			
		||||
          classDiagram class Square~Shape~ { int id* List~int~ position* setPoints(List~int~points)*
 | 
			
		||||
          getPoints()* List~int~ } Square : -List~string~ messages$ Square :
 | 
			
		||||
          +setMessages(List~string~ messages)* Square : +getMessages()$ List~string~ Square :
 | 
			
		||||
          +getDistanceMatrix() List~List~int~~$
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Label</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Animal~test~["Animal with a label"]
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Spacing</h2>
 | 
			
		||||
        <p>(Fix ensures consistent spacing rules)</p>
 | 
			
		||||
        <p>(No space or single space?)</p>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class ClassName {
 | 
			
		||||
          -attribute:type
 | 
			
		||||
          -            attribute : type
 | 
			
		||||
               test
 | 
			
		||||
          
 | 
			
		||||
          + GetAttribute() type                 
 | 
			
		||||
          +     GetAttribute() type
 | 
			
		||||
          }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Annotation</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Shape
 | 
			
		||||
          <<interface>> Shape
 | 
			
		||||
          Shape : noOfVertices
 | 
			
		||||
          Shape : draw()
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Long Class Name Text</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class ThisIsATestForALongClassName {
 | 
			
		||||
            <<interface>>
 | 
			
		||||
            noOfLetters
 | 
			
		||||
            delete()
 | 
			
		||||
          }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Long Annotation Text</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Shape
 | 
			
		||||
          <<superlongannotationtext>> Shape
 | 
			
		||||
          Shape : noOfVertices
 | 
			
		||||
          Shape : draw()
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Long Member Text</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Shape
 | 
			
		||||
          <<interface>> Shape
 | 
			
		||||
          Shape : noOfVertices
 | 
			
		||||
          Shape : longtexttestkeepgoingandgoing
 | 
			
		||||
          Shape : draw()
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Link</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Shape
 | 
			
		||||
          link Shape "https://www.github.com" "This is a tooltip for a link"
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Click</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Shape
 | 
			
		||||
          click Shape href "https://www.github.com" "This is a tooltip for a link"
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Hand Drawn</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
          config:
 | 
			
		||||
            look: handDrawn
 | 
			
		||||
            htmlLabels: true
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Hand {
 | 
			
		||||
            +String beakColor
 | 
			
		||||
            +swim()
 | 
			
		||||
            +quack()
 | 
			
		||||
          }
 | 
			
		||||
          style Hand fill:#f9f,stroke:#29f,stroke-width:2px
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Neutral Theme</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
          config:
 | 
			
		||||
            theme: neutral
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Duck {
 | 
			
		||||
            +String beakColor
 | 
			
		||||
            +swim()
 | 
			
		||||
            +quack()
 | 
			
		||||
          }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Dark Theme</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
          config:
 | 
			
		||||
            theme: dark
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Duck {
 | 
			
		||||
            +String beakColor
 | 
			
		||||
            +swim()
 | 
			
		||||
            +quack()
 | 
			
		||||
          }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Forest Theme</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
          config:
 | 
			
		||||
            theme: forest
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Duck {
 | 
			
		||||
            +String beakColor
 | 
			
		||||
            +swim()
 | 
			
		||||
            +quack()
 | 
			
		||||
          }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Base Theme</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
          config:
 | 
			
		||||
            theme: base
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Duck {
 | 
			
		||||
            +String beakColor
 | 
			
		||||
            +swim()
 | 
			
		||||
            +quack()
 | 
			
		||||
          }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Custom Theme</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          %%{
 | 
			
		||||
            init: {
 | 
			
		||||
              'theme': 'base',
 | 
			
		||||
              'themeVariables': {
 | 
			
		||||
                'primaryColor': '#BB2528',
 | 
			
		||||
                'primaryTextColor': '#fff',
 | 
			
		||||
                'primaryBorderColor': '#7C0000',
 | 
			
		||||
                'lineColor': '#F83d29',
 | 
			
		||||
                'secondaryColor': '#006100',
 | 
			
		||||
                'tertiaryColor': '#fff'
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }%%
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Duck {
 | 
			
		||||
            +String beakColor
 | 
			
		||||
            +swim()
 | 
			
		||||
            +quack()
 | 
			
		||||
          }
 | 
			
		||||
          Duck--Dog
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Styling within Diagram</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Duck {
 | 
			
		||||
            +String beakColor
 | 
			
		||||
            +swim()
 | 
			
		||||
            +quack()
 | 
			
		||||
          }
 | 
			
		||||
          style Duck fill:#f9f,stroke:#333,stroke-width:8px
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Styling with classDef Statement</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Duck:::bold {
 | 
			
		||||
            +String beakColor
 | 
			
		||||
            +swim()
 | 
			
		||||
            +quack()
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          class Dog {
 | 
			
		||||
            +int numTeeth
 | 
			
		||||
            +bark()
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          cssClass "Duck,Dog" pink
 | 
			
		||||
 | 
			
		||||
          classDef pink fill:#f9f
 | 
			
		||||
          classDef default color:#f1e
 | 
			
		||||
          classDef bold stroke:#333,stroke-width:6px,color:#fff
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Styling with Class in Stylesheet</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Duck {
 | 
			
		||||
            +String beakColor
 | 
			
		||||
            +swim()
 | 
			
		||||
            +quack()
 | 
			
		||||
          }
 | 
			
		||||
          class Duck:::styleClass
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <h1 class="header">Diagram Testing</h1>
 | 
			
		||||
    <div class="diagram-showcase">
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Class Nodes Only</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
          title: Animal example
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
              Animal : +int age
 | 
			
		||||
              Animal : +String gender
 | 
			
		||||
              Animal: +isMammal()
 | 
			
		||||
              Animal: +mate()
 | 
			
		||||
              class Duck{
 | 
			
		||||
                  +String beakColor
 | 
			
		||||
                  +swim()
 | 
			
		||||
                  +quack()
 | 
			
		||||
              }
 | 
			
		||||
              class Fish{
 | 
			
		||||
                  -int sizeInFeet
 | 
			
		||||
                  -canEat()
 | 
			
		||||
              }
 | 
			
		||||
              class Zebra{
 | 
			
		||||
                  +bool is_wild
 | 
			
		||||
                  +run()
 | 
			
		||||
              }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Class Nodes LR</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
          title: Animal example
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
              direction LR
 | 
			
		||||
              Animal : +int age
 | 
			
		||||
              Animal : +String gender
 | 
			
		||||
              Animal: +isMammal()
 | 
			
		||||
              Animal: +mate()
 | 
			
		||||
              class Duck{
 | 
			
		||||
                  +String beakColor
 | 
			
		||||
                  +swim()
 | 
			
		||||
                  +quack()
 | 
			
		||||
              }
 | 
			
		||||
              class Fish{
 | 
			
		||||
                  -int sizeInFeet
 | 
			
		||||
                  -canEat()
 | 
			
		||||
              }
 | 
			
		||||
              class Zebra{
 | 
			
		||||
                  +bool is_wild
 | 
			
		||||
                  +run()
 | 
			
		||||
              }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Relations</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
            classA <|-- classB
 | 
			
		||||
            classC *-- classD
 | 
			
		||||
            classE o-- classF
 | 
			
		||||
            classG <-- classH
 | 
			
		||||
            classI -- classJ
 | 
			
		||||
            classK <.. classL
 | 
			
		||||
            classM <|.. classN
 | 
			
		||||
            classO .. classP
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Two Way Relation</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
          class Animal {
 | 
			
		||||
            int size
 | 
			
		||||
            walk()
 | 
			
		||||
          }
 | 
			
		||||
          class Zebra {
 | 
			
		||||
            int size
 | 
			
		||||
            walk()
 | 
			
		||||
          }
 | 
			
		||||
            Animal o--|> Zebra
 | 
			
		||||
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Relations with Labels</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
            classA <|-- classB : implements
 | 
			
		||||
            classC *-- classD : composition
 | 
			
		||||
            classE o-- classF : aggregation
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Cardinality / Multiplicity</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
            Customer "1" --> "*" Ticket
 | 
			
		||||
            Student "1" --> "1..*" Course
 | 
			
		||||
            Galaxy --> "many" Star : Contains
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Complex Relations with Theme</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
          config:
 | 
			
		||||
            theme: forest
 | 
			
		||||
            look: handDrawns
 | 
			
		||||
            layout: elk
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
            direction RL
 | 
			
		||||
            class Student {
 | 
			
		||||
              -idCard : IdCard
 | 
			
		||||
            }
 | 
			
		||||
            class IdCard{
 | 
			
		||||
              -id : int
 | 
			
		||||
              -name : string
 | 
			
		||||
            }
 | 
			
		||||
            class Bike{
 | 
			
		||||
              -id : int
 | 
			
		||||
              -name : string
 | 
			
		||||
            }
 | 
			
		||||
            Student "1" o--o "1" IdCard : carries
 | 
			
		||||
            Student "1" o--o "1" Bike : rides
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Notes</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
            note "This is a general note"
 | 
			
		||||
            note for MyClass "This is a note for a class"
 | 
			
		||||
            class MyClass
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Namespaces</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
            namespace BaseShapes {
 | 
			
		||||
                class Triangle
 | 
			
		||||
                class Rectangle {
 | 
			
		||||
                  double width
 | 
			
		||||
                  double height
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Namespaces</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
            config:
 | 
			
		||||
              layout: elk
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
          namespace Namespace1 {
 | 
			
		||||
            class C1
 | 
			
		||||
            class C2
 | 
			
		||||
          }
 | 
			
		||||
          C1 --> C2
 | 
			
		||||
          class C3
 | 
			
		||||
          class C4
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Full Example</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
          title: Animal example
 | 
			
		||||
          config:
 | 
			
		||||
            layout: dagre
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
              note "From Duck till Zebra"
 | 
			
		||||
              Animal <|--|> Duck
 | 
			
		||||
              note for Duck "can fly<br>can swim<br>can dive<br>can help in debugging"
 | 
			
		||||
              Animal <|-- Fish
 | 
			
		||||
              Animal <|--|> Zebra
 | 
			
		||||
              Animal : +int age
 | 
			
		||||
              Animal : +String gender
 | 
			
		||||
              Animal: +isMammal()
 | 
			
		||||
              Animal: +mate()
 | 
			
		||||
              class Duck{
 | 
			
		||||
                  +String beakColor
 | 
			
		||||
                  +swim()
 | 
			
		||||
                  +quack()
 | 
			
		||||
              }
 | 
			
		||||
              class Fish{
 | 
			
		||||
                  -int sizeInFeet
 | 
			
		||||
                  -canEat()
 | 
			
		||||
              }
 | 
			
		||||
              class Zebra{
 | 
			
		||||
                  +bool is_wild
 | 
			
		||||
                  +run()
 | 
			
		||||
              }
 | 
			
		||||
              cssClass "Duck" test
 | 
			
		||||
              classDef test fill:#f71
 | 
			
		||||
              %%classDef default fill:#f93
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Full Example</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
            config:
 | 
			
		||||
              theme: forest
 | 
			
		||||
              look: handDrawn
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
          note for Outside "Note testing"
 | 
			
		||||
          namespace Test {
 | 
			
		||||
              class Outside
 | 
			
		||||
          }
 | 
			
		||||
          namespace BaseShapes {
 | 
			
		||||
              class Triangle
 | 
			
		||||
              class Rectangle {
 | 
			
		||||
                double width
 | 
			
		||||
                double height
 | 
			
		||||
              }
 | 
			
		||||
          }
 | 
			
		||||
          Outside <|--|> Rectangle
 | 
			
		||||
          style Triangle fill:#f9f,stroke:#333,stroke-width:4px
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
            config:
 | 
			
		||||
              look: handDrawn
 | 
			
		||||
              layout: elk
 | 
			
		||||
          ---
 | 
			
		||||
          classDiagram
 | 
			
		||||
            Class01 "1" <|--|> "*" AveryLongClass : Cool
 | 
			
		||||
            <<interface>> Class01
 | 
			
		||||
            Class03 "1" *-- "*" Class04
 | 
			
		||||
            Class05 "1" o-- "many" Class06
 | 
			
		||||
            Class07 "1" .. "*" Class08
 | 
			
		||||
            Class09 "1" --> "*" C2 : Where am i?
 | 
			
		||||
            Class09 "*" --* "*" C3
 | 
			
		||||
            Class09 "1" --|> "1" Class07
 | 
			
		||||
            NewClass ()--() Class04
 | 
			
		||||
            Class09 <|--|> AveryLongClass
 | 
			
		||||
            Class07  : equals()
 | 
			
		||||
            Class07  : Object[] elementData
 | 
			
		||||
            Class01  : size()
 | 
			
		||||
            Class01  : int chimp
 | 
			
		||||
            Class01  : int gorilla
 | 
			
		||||
            Class08 "1" <--> "*" C2: Cool label
 | 
			
		||||
            class Class10 {
 | 
			
		||||
              <<service>>
 | 
			
		||||
              int id
 | 
			
		||||
              test()
 | 
			
		||||
            }
 | 
			
		||||
            Class10 o--o AveryLongClass
 | 
			
		||||
            Class10 <--> Class07
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          classDiagram
 | 
			
		||||
            test ()--() test2
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <script type="module">
 | 
			
		||||
      import mermaid from './mermaid.esm.mjs';
 | 
			
		||||
      import layouts from './mermaid-layout-elk.esm.mjs';
 | 
			
		||||
      mermaid.registerLayoutLoaders(layouts);
 | 
			
		||||
      mermaid.parseError = function (err, hash) {
 | 
			
		||||
        console.error('Mermaid error: ', err);
 | 
			
		||||
      };
 | 
			
		||||
      mermaid.initialize();
 | 
			
		||||
      mermaid.parseError = function (err, hash) {
 | 
			
		||||
        console.error('In parse error:');
 | 
			
		||||
        console.error(err);
 | 
			
		||||
      };
 | 
			
		||||
    </script>
 | 
			
		||||
  </body>
 | 
			
		||||
  <style>
 | 
			
		||||
    .header {
 | 
			
		||||
      text-decoration: underline;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
    }
 | 
			
		||||
    .node-showcase {
 | 
			
		||||
      display: grid;
 | 
			
		||||
      grid-template-columns: 1fr 1fr;
 | 
			
		||||
    }
 | 
			
		||||
    .test {
 | 
			
		||||
      flex-grow: 1;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-direction: column;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      gap: 0.4rem;
 | 
			
		||||
    }
 | 
			
		||||
    .test > h2 {
 | 
			
		||||
      margin: 0;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
    }
 | 
			
		||||
    .test > p {
 | 
			
		||||
      margin-top: -6px;
 | 
			
		||||
      color: gray;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .diagram-showcase {
 | 
			
		||||
      display: grid;
 | 
			
		||||
      grid-template-columns: 1fr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .styleClass > * > path {
 | 
			
		||||
      fill: #ff0000 !important;
 | 
			
		||||
      stroke: #ffff00 !important;
 | 
			
		||||
      stroke-width: 4px !important;
 | 
			
		||||
      stroke-dasharray: 2 !important;
 | 
			
		||||
    }
 | 
			
		||||
  </style>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										337
									
								
								cypress/platform/yari2.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										337
									
								
								cypress/platform/yari2.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,337 @@
 | 
			
		||||
<html>
 | 
			
		||||
  <body>
 | 
			
		||||
    <h1 class="header">Nodes</h1>
 | 
			
		||||
    <div class="node-showcase">
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Basic ErNode</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
            config:
 | 
			
		||||
              htmlLabels: false
 | 
			
		||||
              look: handDrawn
 | 
			
		||||
              theme: forest
 | 
			
		||||
          ---
 | 
			
		||||
          erDiagram
 | 
			
		||||
            _**hiØ**_[*test*] {
 | 
			
		||||
              *__List~List~int~~sdfds__* __driversLicense__ PK "***The l😀icense #***"
 | 
			
		||||
              *string(99)~T~~~~~~* firstName "Only 99 <br>characters are a<br>llowed dsfsdfsdfsdfs"
 | 
			
		||||
              ~str ing~ lastName
 | 
			
		||||
              string phone UK
 | 
			
		||||
              int age
 | 
			
		||||
            }
 | 
			
		||||
            style PERSON color:red, stroke:blue,fill:#f9f
 | 
			
		||||
            classDef test,test2 stroke:red
 | 
			
		||||
            class PERSON test,test2
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Basic ErNode</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          erDiagram
 | 
			
		||||
            CAR {
 | 
			
		||||
                string registrationNumber
 | 
			
		||||
                string make
 | 
			
		||||
                string model
 | 
			
		||||
            }
 | 
			
		||||
            PERSON {
 | 
			
		||||
                string firstName
 | 
			
		||||
                string lastName
 | 
			
		||||
                int age
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            CAR:::someclass
 | 
			
		||||
            PERSON:::anotherclass,someclass
 | 
			
		||||
        
 | 
			
		||||
            classDef someclass fill:#f96
 | 
			
		||||
            classDef anotherclass color:blue
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <h1 class="header">Diagram Testing</h1>
 | 
			
		||||
    <div class="diagram-showcase">
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Basic Relationship</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
            config:
 | 
			
		||||
              htmlLabels: false
 | 
			
		||||
              layout: elk
 | 
			
		||||
              look: handDrawn
 | 
			
		||||
              theme: forest
 | 
			
		||||
          ---
 | 
			
		||||
          erDiagram
 | 
			
		||||
            "hi" }o..o{ ORDER : places
 | 
			
		||||
            style hi fill:lightblue
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Basic Relationship</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
            config:
 | 
			
		||||
              htmlLabels: false
 | 
			
		||||
              look: handDrawn
 | 
			
		||||
              layout: elk
 | 
			
		||||
          ---
 | 
			
		||||
          erDiagram
 | 
			
		||||
            CAR ||--|{ NAMED-DRIVER : allows
 | 
			
		||||
            PERSON ||..o{ NAMED-DRIVER : is
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Basic Relationship</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
            config:
 | 
			
		||||
              htmlLabels: true
 | 
			
		||||
              look: handDrawn
 | 
			
		||||
              theme: forest
 | 
			
		||||
          ---
 | 
			
		||||
          erDiagram
 | 
			
		||||
            CAR ||--o{ NAMED-DRIVER : allows
 | 
			
		||||
            CAR {
 | 
			
		||||
                test test PK "comment"
 | 
			
		||||
                string make
 | 
			
		||||
                string model
 | 
			
		||||
                string[] parts
 | 
			
		||||
            }
 | 
			
		||||
            PERSON ||--o{ NAMED-DRIVER : is
 | 
			
		||||
            PERSON ||--o{ CAR : is
 | 
			
		||||
            PERSON {
 | 
			
		||||
                string driversLicense PK "The license #"
 | 
			
		||||
                string(99) firstName "Only 99 characters are allowed"
 | 
			
		||||
                string lastName
 | 
			
		||||
                string phone UK
 | 
			
		||||
                int age
 | 
			
		||||
            }
 | 
			
		||||
            NAMED-DRIVER {
 | 
			
		||||
                string carRegistrationNumber PK, FK
 | 
			
		||||
                string driverLicence PK, FK
 | 
			
		||||
            }
 | 
			
		||||
            MANUFACTURER only one to zero or more CAR : makes      
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Basic Relationship</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
            title: simple ER diagram
 | 
			
		||||
            config:
 | 
			
		||||
              theme: forest
 | 
			
		||||
          ---
 | 
			
		||||
          erDiagram
 | 
			
		||||
          direction TB
 | 
			
		||||
          p[Pers😀on] {
 | 
			
		||||
              string firstName
 | 
			
		||||
              string lastName
 | 
			
		||||
          }
 | 
			
		||||
          a["Customer Account"] {
 | 
			
		||||
              string email
 | 
			
		||||
          }
 | 
			
		||||
          p ||--o| a : has
 | 
			
		||||
           
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Basic Relationship</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
          ---
 | 
			
		||||
            config:
 | 
			
		||||
              layout: elk
 | 
			
		||||
          ---
 | 
			
		||||
          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"
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="test">
 | 
			
		||||
        <h2>Basic Relationship</h2>
 | 
			
		||||
        <pre class="mermaid">
 | 
			
		||||
---
 | 
			
		||||
  config:
 | 
			
		||||
    layout: elk
 | 
			
		||||
---
 | 
			
		||||
          erDiagram
 | 
			
		||||
          rental{
 | 
			
		||||
                  ~timestamp with time zone~ rental_date "NN"
 | 
			
		||||
                  ~integer~ inventory_id "NN"
 | 
			
		||||
                  ~integer~ customer_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ return_date
 | 
			
		||||
                  ~integer~ staff_id "NN"
 | 
			
		||||
                  ~integer~ rental_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          film_actor{
 | 
			
		||||
                  ~integer~ actor_id "NN"
 | 
			
		||||
                  ~integer~ film_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          film{
 | 
			
		||||
                  ~text~ title "NN"
 | 
			
		||||
                  ~text~ description
 | 
			
		||||
                  ~public.year~ release_year
 | 
			
		||||
                  ~integer~ language_id "NN"
 | 
			
		||||
                  ~integer~ original_language_id
 | 
			
		||||
                  ~smallint~ length
 | 
			
		||||
                  ~text[]~ special_features
 | 
			
		||||
                  ~tsvector~ fulltext "NN"
 | 
			
		||||
                  ~integer~ film_id "NN"
 | 
			
		||||
                  ~smallint~ rental_duration "NN"
 | 
			
		||||
                  ~numeric(4,2)~ rental_rate "NN"
 | 
			
		||||
                  ~numeric(5,2)~ replacement_cost "NN"
 | 
			
		||||
                  ~public.mpaa_rating~ rating
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          customer{
 | 
			
		||||
                  ~integer~ store_id "NN"
 | 
			
		||||
                  ~text~ first_name "NN"
 | 
			
		||||
                  ~text~ last_name "NN"
 | 
			
		||||
                  ~text~ email
 | 
			
		||||
                  ~integer~ address_id "NN"
 | 
			
		||||
                  ~integer~ active
 | 
			
		||||
                  ~integer~ customer_id "NN"
 | 
			
		||||
                  ~boolean~ activebool "NN"
 | 
			
		||||
                  ~date~ create_date "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update
 | 
			
		||||
  }
 | 
			
		||||
          film_category{
 | 
			
		||||
                  ~integer~ film_id "NN"
 | 
			
		||||
                  ~integer~ category_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          actor{
 | 
			
		||||
                  ~text~ first_name "NN"
 | 
			
		||||
                  ~text~ last_name "NN"
 | 
			
		||||
                  ~integer~ actor_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          store{
 | 
			
		||||
                  ~integer~ manager_staff_id "NN"
 | 
			
		||||
                  ~integer~ address_id "NN"
 | 
			
		||||
                  ~integer~ store_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          city{
 | 
			
		||||
                  ~text~ city "NN"
 | 
			
		||||
                  ~integer~ country_id "NN"
 | 
			
		||||
                  ~integer~ city_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          language{
 | 
			
		||||
                  ~character(20)~ name "NN"
 | 
			
		||||
                  ~integer~ language_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          payment{
 | 
			
		||||
                  ~integer~ customer_id "NN"
 | 
			
		||||
                  ~integer~ staff_id "NN"
 | 
			
		||||
                  ~integer~ rental_id "NN"
 | 
			
		||||
                  ~numeric(5,2)~ amount "NN"
 | 
			
		||||
                  ~timestamp with time zone~ payment_date "NN"
 | 
			
		||||
                  ~integer~ payment_id "NN"
 | 
			
		||||
  }
 | 
			
		||||
          category{
 | 
			
		||||
                  ~text~ name "NN"
 | 
			
		||||
                  ~integer~ category_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          inventory{
 | 
			
		||||
                  ~integer~ film_id "NN"
 | 
			
		||||
                  ~integer~ store_id "NN"
 | 
			
		||||
                  ~integer~ inventory_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          address{
 | 
			
		||||
                  ~text~ address "NN"
 | 
			
		||||
                  ~text~ address2
 | 
			
		||||
                  ~text~ district "NN"
 | 
			
		||||
                  ~integer~ city_id "NN"
 | 
			
		||||
                  ~text~ postal_code
 | 
			
		||||
                  ~text~ phone "NN"
 | 
			
		||||
                  ~integer~ address_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          staff{
 | 
			
		||||
                  ~text~ first_name "NN"
 | 
			
		||||
                  ~text~ last_name "NN"
 | 
			
		||||
                  ~integer~ address_id "NN"
 | 
			
		||||
                  ~text~ email
 | 
			
		||||
                  ~integer~ store_id "NN"
 | 
			
		||||
                  ~text~ username "NN"
 | 
			
		||||
                  ~text~ password
 | 
			
		||||
                  ~bytea~ picture
 | 
			
		||||
                  ~integer~ staff_id "NN"
 | 
			
		||||
                  ~boolean~ active "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
          country{
 | 
			
		||||
                  ~text~ country "NN"
 | 
			
		||||
                  ~integer~ country_id "NN"
 | 
			
		||||
                  ~timestamp with time zone~ last_update "NN"
 | 
			
		||||
  }
 | 
			
		||||
  film_actor }|..|| film : film_actor_film_id_fkey
 | 
			
		||||
  film_actor }|..|| actor : film_actor_actor_id_fkey
 | 
			
		||||
  address }|..|| city : address_city_id_fkey
 | 
			
		||||
  city }|..|| country : city_country_id_fkey
 | 
			
		||||
  customer }|..|| store : customer_store_id_fkey
 | 
			
		||||
  customer }|..|| address : customer_address_id_fkey
 | 
			
		||||
  film }|..|| language : film_original_language_id_fkey
 | 
			
		||||
  film }|..|| language : film_language_id_fkey
 | 
			
		||||
  film_category }|..|| film : film_category_film_id_fkey
 | 
			
		||||
  film_category }|..|| category : film_category_category_id_fkey
 | 
			
		||||
  inventory }|..|| store : inventory_store_id_fkey
 | 
			
		||||
        </pre>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <script type="module">
 | 
			
		||||
      import mermaid from './mermaid.esm.mjs';
 | 
			
		||||
      import layouts from './mermaid-layout-elk.esm.mjs';
 | 
			
		||||
      mermaid.registerLayoutLoaders(layouts);
 | 
			
		||||
      mermaid.parseError = function (err, hash) {
 | 
			
		||||
        console.error('Mermaid error: ', err);
 | 
			
		||||
      };
 | 
			
		||||
      mermaid.initialize();
 | 
			
		||||
      mermaid.parseError = function (err, hash) {
 | 
			
		||||
        console.error('In parse error:');
 | 
			
		||||
        console.error(err);
 | 
			
		||||
      };
 | 
			
		||||
    </script>
 | 
			
		||||
  </body>
 | 
			
		||||
  <style>
 | 
			
		||||
    .header {
 | 
			
		||||
      text-decoration: underline;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
    }
 | 
			
		||||
    .node-showcase {
 | 
			
		||||
      display: grid;
 | 
			
		||||
      grid-template-columns: 1fr 1fr;
 | 
			
		||||
    }
 | 
			
		||||
    .test {
 | 
			
		||||
      flex-grow: 1;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-direction: column;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
      gap: 0.4rem;
 | 
			
		||||
    }
 | 
			
		||||
    .test > h2 {
 | 
			
		||||
      margin: 0;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
    }
 | 
			
		||||
    .test > p {
 | 
			
		||||
      margin-top: -6px;
 | 
			
		||||
      color: gray;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .diagram-showcase {
 | 
			
		||||
      display: grid;
 | 
			
		||||
      grid-template-columns: 1fr;
 | 
			
		||||
    }
 | 
			
		||||
  </style>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										152
									
								
								cypress/timings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								cypress/timings.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,152 @@
 | 
			
		||||
{
 | 
			
		||||
  "durations": [
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/other/configuration.spec.js",
 | 
			
		||||
      "duration": 4989
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/other/external-diagrams.spec.js",
 | 
			
		||||
      "duration": 1382
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/other/ghsa.spec.js",
 | 
			
		||||
      "duration": 3178
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/other/iife.spec.js",
 | 
			
		||||
      "duration": 1372
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/other/interaction.spec.js",
 | 
			
		||||
      "duration": 8998
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/other/rerender.spec.js",
 | 
			
		||||
      "duration": 1249
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/other/xss.spec.js",
 | 
			
		||||
      "duration": 25664
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/appli.spec.js",
 | 
			
		||||
      "duration": 1928
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/architecture.spec.ts",
 | 
			
		||||
      "duration": 2330
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/block.spec.js",
 | 
			
		||||
      "duration": 11156
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/c4.spec.js",
 | 
			
		||||
      "duration": 3418
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/classDiagram-v2.spec.js",
 | 
			
		||||
      "duration": 14866
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/classDiagram.spec.js",
 | 
			
		||||
      "duration": 9894
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/conf-and-directives.spec.js",
 | 
			
		||||
      "duration": 5778
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/current.spec.js",
 | 
			
		||||
      "duration": 1690
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/erDiagram.spec.js",
 | 
			
		||||
      "duration": 9144
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/errorDiagram.spec.js",
 | 
			
		||||
      "duration": 1951
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/flowchart-elk.spec.js",
 | 
			
		||||
      "duration": 2196
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/flowchart-handDrawn.spec.js",
 | 
			
		||||
      "duration": 21029
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/flowchart-shape-alias.spec.ts",
 | 
			
		||||
      "duration": 16087
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/flowchart-v2.spec.js",
 | 
			
		||||
      "duration": 27465
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/flowchart.spec.js",
 | 
			
		||||
      "duration": 20035
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/gantt.spec.js",
 | 
			
		||||
      "duration": 11366
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/gitGraph.spec.js",
 | 
			
		||||
      "duration": 34025
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/iconShape.spec.ts",
 | 
			
		||||
      "duration": 185902
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/imageShape.spec.ts",
 | 
			
		||||
      "duration": 41631
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/info.spec.ts",
 | 
			
		||||
      "duration": 1736
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/journey.spec.js",
 | 
			
		||||
      "duration": 2247
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/katex.spec.js",
 | 
			
		||||
      "duration": 2144
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/marker_unique_id.spec.js",
 | 
			
		||||
      "duration": 1646
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/mindmap.spec.ts",
 | 
			
		||||
      "duration": 6406
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/newShapes.spec.ts",
 | 
			
		||||
      "duration": 107219
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/stateDiagram.spec.js",
 | 
			
		||||
      "duration": 15834
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/theme.spec.js",
 | 
			
		||||
      "duration": 33240
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/timeline.spec.ts",
 | 
			
		||||
      "duration": 7122
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/xyChart.spec.js",
 | 
			
		||||
      "duration": 11127
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "spec": "cypress/integration/rendering/zenuml.spec.js",
 | 
			
		||||
      "duration": 2391
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user