This commit is contained in:
		
							parent
							
								
									edde7d66cc
								
							
						
					
					
						commit
						4c6b0983dd
					
				
					 11 changed files with 371 additions and 441 deletions
				
			
		|  | @ -1,9 +1,38 @@ | ||||||
| import { defineMDSveXConfig as defineConfig } from 'mdsvex'; | import math from 'remark-math'; | ||||||
| import remarkMath from 'remark-math'; | import rehype_katex from 'rehype-katex'; | ||||||
| import rehypeKatex from 'rehype-katex-svelte'; | import katex from 'katex'; | ||||||
| import rehypeMermaid from 'rehype-mermaid'; // Import rehype-mermaid
 | import visit from 'unist-util-visit'; | ||||||
| 
 | 
 | ||||||
| const config = defineConfig({ | const correct_hast_tree = () => (tree) => { | ||||||
|  | 	visit(tree, 'text', (node) => { | ||||||
|  | 		if (node.value.trim().startsWith('<')) { | ||||||
|  | 			node.type = 'raw'; | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const katex_blocks = () => (tree) => { | ||||||
|  | 	visit(tree, 'code', (node) => { | ||||||
|  | 		if (node.lang === 'math') { | ||||||
|  | 			const str = katex.renderToString(node.value, { | ||||||
|  | 				displayMode: true, | ||||||
|  | 				leqno: false, | ||||||
|  | 				fleqn: false, | ||||||
|  | 				throwOnError: true, | ||||||
|  | 				errorColor: '#cc0000', | ||||||
|  | 				strict: 'warn', | ||||||
|  | 				output: 'htmlAndMathml', | ||||||
|  | 				trust: false, | ||||||
|  | 				macros: { '\\f': '#1f(#2)' } | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
|  | 			node.type = 'raw'; | ||||||
|  | 			node.value = '{@html `' + str + '`}'; | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export const mdsvex_config = { | ||||||
| 	extensions: ['.md', '.svx'], | 	extensions: ['.md', '.svx'], | ||||||
|     layout: "./src/routes/articles/Layout.svelte", |     layout: "./src/routes/articles/Layout.svelte", | ||||||
| 
 | 
 | ||||||
|  | @ -11,8 +40,6 @@ const config = defineConfig({ | ||||||
| 		dashes: 'oldschool' | 		dashes: 'oldschool' | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| 	remarkPlugins: [remarkMath], | 	remarkPlugins: [math, katex_blocks], | ||||||
| 	rehypePlugins: [rehypeKatex, rehypeMermaid] | 	rehypePlugins: [correct_hast_tree, rehype_katex] | ||||||
| }); | }; | ||||||
| 
 |  | ||||||
| export default config; |  | ||||||
|  |  | ||||||
|  | @ -53,9 +53,12 @@ | ||||||
| 		] | 		] | ||||||
| 	}, | 	}, | ||||||
| 	"dependencies": { | 	"dependencies": { | ||||||
|  | 		"katex": "^0.16.22", | ||||||
| 		"mermaid": "^11.6.0", | 		"mermaid": "^11.6.0", | ||||||
| 		"playwright": "^1.52.0", | 		"playwright": "^1.52.0", | ||||||
|  | 		"rehype-katex": "^5.0.0", | ||||||
| 		"rehype-katex-svelte": "^1.2.0", | 		"rehype-katex-svelte": "^1.2.0", | ||||||
| 		"remark-math": "^6.0.0" | 		"remark-math": "2", | ||||||
|  | 		"unist-util-visit": "^2.0.3" | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										523
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										523
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							|  | @ -8,18 +8,27 @@ importers: | ||||||
| 
 | 
 | ||||||
|   .: |   .: | ||||||
|     dependencies: |     dependencies: | ||||||
|  |       katex: | ||||||
|  |         specifier: ^0.16.22 | ||||||
|  |         version: 0.16.22 | ||||||
|       mermaid: |       mermaid: | ||||||
|         specifier: ^11.6.0 |         specifier: ^11.6.0 | ||||||
|         version: 11.6.0 |         version: 11.6.0 | ||||||
|       playwright: |       playwright: | ||||||
|         specifier: ^1.52.0 |         specifier: ^1.52.0 | ||||||
|         version: 1.52.0 |         version: 1.52.0 | ||||||
|  |       rehype-katex: | ||||||
|  |         specifier: ^5.0.0 | ||||||
|  |         version: 5.0.0 | ||||||
|       rehype-katex-svelte: |       rehype-katex-svelte: | ||||||
|         specifier: ^1.2.0 |         specifier: ^1.2.0 | ||||||
|         version: 1.2.0 |         version: 1.2.0 | ||||||
|       remark-math: |       remark-math: | ||||||
|         specifier: ^6.0.0 |         specifier: '2' | ||||||
|         version: 6.0.0 |         version: 2.0.1 | ||||||
|  |       unist-util-visit: | ||||||
|  |         specifier: ^2.0.3 | ||||||
|  |         version: 2.0.3 | ||||||
|     devDependencies: |     devDependencies: | ||||||
|       '@eslint/compat': |       '@eslint/compat': | ||||||
|         specifier: ^1.2.8 |         specifier: ^1.2.8 | ||||||
|  | @ -873,15 +882,15 @@ packages: | ||||||
|   '@types/json-schema@7.0.15': |   '@types/json-schema@7.0.15': | ||||||
|     resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} |     resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} | ||||||
| 
 | 
 | ||||||
|   '@types/katex@0.16.7': |   '@types/katex@0.11.1': | ||||||
|     resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} |     resolution: {integrity: sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==} | ||||||
| 
 |  | ||||||
|   '@types/mdast@4.0.4': |  | ||||||
|     resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} |  | ||||||
| 
 | 
 | ||||||
|   '@types/ms@2.1.0': |   '@types/ms@2.1.0': | ||||||
|     resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} |     resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} | ||||||
| 
 | 
 | ||||||
|  |   '@types/parse5@5.0.3': | ||||||
|  |     resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} | ||||||
|  | 
 | ||||||
|   '@types/resolve@1.20.2': |   '@types/resolve@1.20.2': | ||||||
|     resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} |     resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} | ||||||
| 
 | 
 | ||||||
|  | @ -1017,6 +1026,9 @@ packages: | ||||||
|     resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} |     resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} | ||||||
|     engines: {node: '>= 0.4'} |     engines: {node: '>= 0.4'} | ||||||
| 
 | 
 | ||||||
|  |   bail@1.0.5: | ||||||
|  |     resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} | ||||||
|  | 
 | ||||||
|   bail@2.0.2: |   bail@2.0.2: | ||||||
|     resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} |     resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} | ||||||
| 
 | 
 | ||||||
|  | @ -1059,9 +1071,6 @@ packages: | ||||||
|     resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} |     resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} | ||||||
|     engines: {node: '>=10'} |     engines: {node: '>=10'} | ||||||
| 
 | 
 | ||||||
|   character-entities@2.0.2: |  | ||||||
|     resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} |  | ||||||
| 
 |  | ||||||
|   check-error@2.1.1: |   check-error@2.1.1: | ||||||
|     resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} |     resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} | ||||||
|     engines: {node: '>= 16'} |     engines: {node: '>= 16'} | ||||||
|  | @ -1089,6 +1098,9 @@ packages: | ||||||
|   color-name@1.1.4: |   color-name@1.1.4: | ||||||
|     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} |     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} | ||||||
| 
 | 
 | ||||||
|  |   comma-separated-tokens@1.0.8: | ||||||
|  |     resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} | ||||||
|  | 
 | ||||||
|   comma-separated-tokens@2.0.3: |   comma-separated-tokens@2.0.3: | ||||||
|     resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} |     resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} | ||||||
| 
 | 
 | ||||||
|  | @ -1316,9 +1328,6 @@ packages: | ||||||
|   decimal.js@10.5.0: |   decimal.js@10.5.0: | ||||||
|     resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} |     resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} | ||||||
| 
 | 
 | ||||||
|   decode-named-character-reference@1.1.0: |  | ||||||
|     resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} |  | ||||||
| 
 |  | ||||||
|   deep-eql@5.0.2: |   deep-eql@5.0.2: | ||||||
|     resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} |     resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} | ||||||
|     engines: {node: '>=6'} |     engines: {node: '>=6'} | ||||||
|  | @ -1579,6 +1588,9 @@ packages: | ||||||
|   hast-util-from-html@2.0.3: |   hast-util-from-html@2.0.3: | ||||||
|     resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} |     resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} | ||||||
| 
 | 
 | ||||||
|  |   hast-util-from-parse5@6.0.1: | ||||||
|  |     resolution: {integrity: sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==} | ||||||
|  | 
 | ||||||
|   hast-util-from-parse5@8.0.3: |   hast-util-from-parse5@8.0.3: | ||||||
|     resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} |     resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} | ||||||
| 
 | 
 | ||||||
|  | @ -1588,9 +1600,15 @@ packages: | ||||||
|   hast-util-has-property@2.0.1: |   hast-util-has-property@2.0.1: | ||||||
|     resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==} |     resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==} | ||||||
| 
 | 
 | ||||||
|  |   hast-util-is-element@1.1.0: | ||||||
|  |     resolution: {integrity: sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==} | ||||||
|  | 
 | ||||||
|   hast-util-is-element@3.0.0: |   hast-util-is-element@3.0.0: | ||||||
|     resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} |     resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} | ||||||
| 
 | 
 | ||||||
|  |   hast-util-parse-selector@2.2.5: | ||||||
|  |     resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} | ||||||
|  | 
 | ||||||
|   hast-util-parse-selector@4.0.0: |   hast-util-parse-selector@4.0.0: | ||||||
|     resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} |     resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} | ||||||
| 
 | 
 | ||||||
|  | @ -1600,12 +1618,18 @@ packages: | ||||||
|   hast-util-to-string@2.0.0: |   hast-util-to-string@2.0.0: | ||||||
|     resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} |     resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} | ||||||
| 
 | 
 | ||||||
|  |   hast-util-to-text@2.0.1: | ||||||
|  |     resolution: {integrity: sha512-8nsgCARfs6VkwH2jJU9b8LNTuR4700na+0h3PqCaEk4MAnMDeu5P0tP8mjk9LLNGxIeQRLbiDbZVw6rku+pYsQ==} | ||||||
|  | 
 | ||||||
|   hast-util-to-text@4.0.2: |   hast-util-to-text@4.0.2: | ||||||
|     resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} |     resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} | ||||||
| 
 | 
 | ||||||
|   hast-util-whitespace@2.0.1: |   hast-util-whitespace@2.0.1: | ||||||
|     resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} |     resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} | ||||||
| 
 | 
 | ||||||
|  |   hastscript@6.0.0: | ||||||
|  |     resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} | ||||||
|  | 
 | ||||||
|   hastscript@9.0.1: |   hastscript@9.0.1: | ||||||
|     resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} |     resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} | ||||||
| 
 | 
 | ||||||
|  | @ -1651,6 +1675,10 @@ packages: | ||||||
|     resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} |     resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} | ||||||
|     engines: {node: '>=12'} |     engines: {node: '>=12'} | ||||||
| 
 | 
 | ||||||
|  |   is-buffer@2.0.5: | ||||||
|  |     resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} | ||||||
|  |     engines: {node: '>=4'} | ||||||
|  | 
 | ||||||
|   is-core-module@2.16.1: |   is-core-module@2.16.1: | ||||||
|     resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} |     resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} | ||||||
|     engines: {node: '>= 0.4'} |     engines: {node: '>= 0.4'} | ||||||
|  | @ -1670,6 +1698,10 @@ packages: | ||||||
|     resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} |     resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} | ||||||
|     engines: {node: '>=0.12.0'} |     engines: {node: '>=0.12.0'} | ||||||
| 
 | 
 | ||||||
|  |   is-plain-obj@2.1.0: | ||||||
|  |     resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} | ||||||
|  |     engines: {node: '>=8'} | ||||||
|  | 
 | ||||||
|   is-plain-obj@4.1.0: |   is-plain-obj@4.1.0: | ||||||
|     resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} |     resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} | ||||||
|     engines: {node: '>=12'} |     engines: {node: '>=12'} | ||||||
|  | @ -1715,6 +1747,10 @@ packages: | ||||||
|   json-stable-stringify-without-jsonify@1.0.1: |   json-stable-stringify-without-jsonify@1.0.1: | ||||||
|     resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} |     resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} | ||||||
| 
 | 
 | ||||||
|  |   katex@0.13.24: | ||||||
|  |     resolution: {integrity: sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==} | ||||||
|  |     hasBin: true | ||||||
|  | 
 | ||||||
|   katex@0.16.22: |   katex@0.16.22: | ||||||
|     resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} |     resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} | ||||||
|     hasBin: true |     hasBin: true | ||||||
|  | @ -1843,9 +1879,6 @@ packages: | ||||||
|   lodash@4.17.21: |   lodash@4.17.21: | ||||||
|     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} |     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} | ||||||
| 
 | 
 | ||||||
|   longest-streak@3.1.0: |  | ||||||
|     resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} |  | ||||||
| 
 |  | ||||||
|   loupe@3.1.3: |   loupe@3.1.3: | ||||||
|     resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} |     resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} | ||||||
| 
 | 
 | ||||||
|  | @ -1864,21 +1897,6 @@ packages: | ||||||
|     engines: {node: '>= 18'} |     engines: {node: '>= 18'} | ||||||
|     hasBin: true |     hasBin: true | ||||||
| 
 | 
 | ||||||
|   mdast-util-from-markdown@2.0.2: |  | ||||||
|     resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} |  | ||||||
| 
 |  | ||||||
|   mdast-util-math@3.0.0: |  | ||||||
|     resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} |  | ||||||
| 
 |  | ||||||
|   mdast-util-phrasing@4.1.0: |  | ||||||
|     resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} |  | ||||||
| 
 |  | ||||||
|   mdast-util-to-markdown@2.1.2: |  | ||||||
|     resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} |  | ||||||
| 
 |  | ||||||
|   mdast-util-to-string@4.0.0: |  | ||||||
|     resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} |  | ||||||
| 
 |  | ||||||
|   mdsvex@0.11.2: |   mdsvex@0.11.2: | ||||||
|     resolution: {integrity: sha512-Y4ab+vLvTJS88196Scb/RFNaHMHVSWw6CwfsgWIQP8f42D57iDII0/qABSu530V4pkv8s6T2nx3ds0MC1VwFLA==} |     resolution: {integrity: sha512-Y4ab+vLvTJS88196Scb/RFNaHMHVSWw6CwfsgWIQP8f42D57iDII0/qABSu530V4pkv8s6T2nx3ds0MC1VwFLA==} | ||||||
|     peerDependencies: |     peerDependencies: | ||||||
|  | @ -1899,72 +1917,6 @@ packages: | ||||||
|   mermaid@11.6.0: |   mermaid@11.6.0: | ||||||
|     resolution: {integrity: sha512-PE8hGUy1LDlWIHWBP05SFdqUHGmRcCcK4IzpOKPE35eOw+G9zZgcnMpyunJVUEOgb//KBORPjysKndw8bFLuRg==} |     resolution: {integrity: sha512-PE8hGUy1LDlWIHWBP05SFdqUHGmRcCcK4IzpOKPE35eOw+G9zZgcnMpyunJVUEOgb//KBORPjysKndw8bFLuRg==} | ||||||
| 
 | 
 | ||||||
|   micromark-core-commonmark@2.0.3: |  | ||||||
|     resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} |  | ||||||
| 
 |  | ||||||
|   micromark-extension-math@3.1.0: |  | ||||||
|     resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} |  | ||||||
| 
 |  | ||||||
|   micromark-factory-destination@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} |  | ||||||
| 
 |  | ||||||
|   micromark-factory-label@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} |  | ||||||
| 
 |  | ||||||
|   micromark-factory-space@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} |  | ||||||
| 
 |  | ||||||
|   micromark-factory-title@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} |  | ||||||
| 
 |  | ||||||
|   micromark-factory-whitespace@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-character@2.1.1: |  | ||||||
|     resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-chunked@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-classify-character@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-combine-extensions@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-decode-numeric-character-reference@2.0.2: |  | ||||||
|     resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-decode-string@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-encode@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-html-tag-name@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-normalize-identifier@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-resolve-all@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-sanitize-uri@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-subtokenize@2.1.0: |  | ||||||
|     resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-symbol@2.0.1: |  | ||||||
|     resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} |  | ||||||
| 
 |  | ||||||
|   micromark-util-types@2.0.2: |  | ||||||
|     resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} |  | ||||||
| 
 |  | ||||||
|   micromark@4.0.2: |  | ||||||
|     resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} |  | ||||||
| 
 |  | ||||||
|   micromatch@4.0.8: |   micromatch@4.0.8: | ||||||
|     resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} |     resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} | ||||||
|     engines: {node: '>=8.6'} |     engines: {node: '>=8.6'} | ||||||
|  | @ -2034,6 +1986,9 @@ packages: | ||||||
|     resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} |     resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} | ||||||
|     engines: {node: '>=6'} |     engines: {node: '>=6'} | ||||||
| 
 | 
 | ||||||
|  |   parse5@6.0.1: | ||||||
|  |     resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} | ||||||
|  | 
 | ||||||
|   parse5@7.3.0: |   parse5@7.3.0: | ||||||
|     resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} |     resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} | ||||||
| 
 | 
 | ||||||
|  | @ -2212,6 +2167,9 @@ packages: | ||||||
|     resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} |     resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} | ||||||
|     engines: {node: '>=6'} |     engines: {node: '>=6'} | ||||||
| 
 | 
 | ||||||
|  |   property-information@5.6.0: | ||||||
|  |     resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} | ||||||
|  | 
 | ||||||
|   property-information@6.5.0: |   property-information@6.5.0: | ||||||
|     resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} |     resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} | ||||||
| 
 | 
 | ||||||
|  | @ -2245,6 +2203,9 @@ packages: | ||||||
|   rehype-katex-svelte@1.2.0: |   rehype-katex-svelte@1.2.0: | ||||||
|     resolution: {integrity: sha512-3mAa0J7LgMfaoU3oj9XLBIn5H/MyvWcOQcItoWhww/sABkcLpY73WsAs5mwH0c6cwYDYwJKaVVl2vNuL3wokeA==} |     resolution: {integrity: sha512-3mAa0J7LgMfaoU3oj9XLBIn5H/MyvWcOQcItoWhww/sABkcLpY73WsAs5mwH0c6cwYDYwJKaVVl2vNuL3wokeA==} | ||||||
| 
 | 
 | ||||||
|  |   rehype-katex@5.0.0: | ||||||
|  |     resolution: {integrity: sha512-ksSuEKCql/IiIadOHiKRMjypva9BLhuwQNascMqaoGLDVd0k2NlE2wMvgZ3rpItzRKCd6vs8s7MFbb8pcR0AEg==} | ||||||
|  | 
 | ||||||
|   rehype-mermaid@3.0.0: |   rehype-mermaid@3.0.0: | ||||||
|     resolution: {integrity: sha512-fxrD5E4Fa1WXUjmjNDvLOMT4XB1WaxcfycFIWiYU0yEMQhcTDElc9aDFnbDFRLxG1Cfo1I3mfD5kg4sjlWaB+Q==} |     resolution: {integrity: sha512-fxrD5E4Fa1WXUjmjNDvLOMT4XB1WaxcfycFIWiYU0yEMQhcTDElc9aDFnbDFRLxG1Cfo1I3mfD5kg4sjlWaB+Q==} | ||||||
|     peerDependencies: |     peerDependencies: | ||||||
|  | @ -2253,8 +2214,15 @@ packages: | ||||||
|       playwright: |       playwright: | ||||||
|         optional: true |         optional: true | ||||||
| 
 | 
 | ||||||
|   remark-math@6.0.0: |   rehype-parse@7.0.1: | ||||||
|     resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} |     resolution: {integrity: sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==} | ||||||
|  | 
 | ||||||
|  |   remark-math@2.0.1: | ||||||
|  |     resolution: {integrity: sha512-FokDg5BmlPbKaAdD4IfSVuRgYH6FBPeIn0zxZA6oZ6epc4qOSjoSJPyhsH0H/WKABuaCVMJuF5O2STti6UmBQw==} | ||||||
|  | 
 | ||||||
|  |   repeat-string@1.6.1: | ||||||
|  |     resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} | ||||||
|  |     engines: {node: '>=0.10'} | ||||||
| 
 | 
 | ||||||
|   resolve-from@4.0.0: |   resolve-from@4.0.0: | ||||||
|     resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} |     resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} | ||||||
|  | @ -2327,6 +2295,9 @@ packages: | ||||||
|     resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} |     resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
| 
 | 
 | ||||||
|  |   space-separated-tokens@1.1.5: | ||||||
|  |     resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} | ||||||
|  | 
 | ||||||
|   space-separated-tokens@2.0.2: |   space-separated-tokens@2.0.2: | ||||||
|     resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} |     resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} | ||||||
| 
 | 
 | ||||||
|  | @ -2435,6 +2406,9 @@ packages: | ||||||
|     resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} |     resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
| 
 | 
 | ||||||
|  |   trough@1.0.5: | ||||||
|  |     resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} | ||||||
|  | 
 | ||||||
|   trough@2.2.0: |   trough@2.2.0: | ||||||
|     resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} |     resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} | ||||||
| 
 | 
 | ||||||
|  | @ -2473,9 +2447,18 @@ packages: | ||||||
|   unified@11.0.5: |   unified@11.0.5: | ||||||
|     resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} |     resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} | ||||||
| 
 | 
 | ||||||
|  |   unified@9.2.2: | ||||||
|  |     resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} | ||||||
|  | 
 | ||||||
|  |   unist-util-find-after@3.0.0: | ||||||
|  |     resolution: {integrity: sha512-ojlBqfsBftYXExNu3+hHLfJQ/X1jYY/9vdm4yZWjIbf0VuWF6CRufci1ZyoD/wV2TYMKxXUoNuoqwy+CkgzAiQ==} | ||||||
|  | 
 | ||||||
|   unist-util-find-after@5.0.0: |   unist-util-find-after@5.0.0: | ||||||
|     resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} |     resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} | ||||||
| 
 | 
 | ||||||
|  |   unist-util-is@4.1.0: | ||||||
|  |     resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} | ||||||
|  | 
 | ||||||
|   unist-util-is@5.2.1: |   unist-util-is@5.2.1: | ||||||
|     resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} |     resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} | ||||||
| 
 | 
 | ||||||
|  | @ -2491,12 +2474,18 @@ packages: | ||||||
|   unist-util-stringify-position@4.0.0: |   unist-util-stringify-position@4.0.0: | ||||||
|     resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} |     resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} | ||||||
| 
 | 
 | ||||||
|  |   unist-util-visit-parents@3.1.1: | ||||||
|  |     resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} | ||||||
|  | 
 | ||||||
|   unist-util-visit-parents@5.1.3: |   unist-util-visit-parents@5.1.3: | ||||||
|     resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} |     resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} | ||||||
| 
 | 
 | ||||||
|   unist-util-visit-parents@6.0.1: |   unist-util-visit-parents@6.0.1: | ||||||
|     resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} |     resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} | ||||||
| 
 | 
 | ||||||
|  |   unist-util-visit@2.0.3: | ||||||
|  |     resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} | ||||||
|  | 
 | ||||||
|   unist-util-visit@4.1.2: |   unist-util-visit@4.1.2: | ||||||
|     resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} |     resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} | ||||||
| 
 | 
 | ||||||
|  | @ -2513,6 +2502,9 @@ packages: | ||||||
|     resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} |     resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} | ||||||
|     hasBin: true |     hasBin: true | ||||||
| 
 | 
 | ||||||
|  |   vfile-location@3.2.0: | ||||||
|  |     resolution: {integrity: sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==} | ||||||
|  | 
 | ||||||
|   vfile-location@5.0.3: |   vfile-location@5.0.3: | ||||||
|     resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} |     resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} | ||||||
| 
 | 
 | ||||||
|  | @ -2522,6 +2514,9 @@ packages: | ||||||
|   vfile-message@4.0.2: |   vfile-message@4.0.2: | ||||||
|     resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} |     resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} | ||||||
| 
 | 
 | ||||||
|  |   vfile@4.2.1: | ||||||
|  |     resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} | ||||||
|  | 
 | ||||||
|   vfile@6.0.3: |   vfile@6.0.3: | ||||||
|     resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} |     resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} | ||||||
| 
 | 
 | ||||||
|  | @ -2630,6 +2625,9 @@ packages: | ||||||
|     resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} |     resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} | ||||||
|     engines: {node: '>=18'} |     engines: {node: '>=18'} | ||||||
| 
 | 
 | ||||||
|  |   web-namespaces@1.1.4: | ||||||
|  |     resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} | ||||||
|  | 
 | ||||||
|   web-namespaces@2.0.1: |   web-namespaces@2.0.1: | ||||||
|     resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} |     resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} | ||||||
| 
 | 
 | ||||||
|  | @ -2682,6 +2680,10 @@ packages: | ||||||
|   xmlchars@2.2.0: |   xmlchars@2.2.0: | ||||||
|     resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} |     resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} | ||||||
| 
 | 
 | ||||||
|  |   xtend@4.0.2: | ||||||
|  |     resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} | ||||||
|  |     engines: {node: '>=0.4'} | ||||||
|  | 
 | ||||||
|   yaml@1.10.2: |   yaml@1.10.2: | ||||||
|     resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} |     resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} | ||||||
|     engines: {node: '>= 6'} |     engines: {node: '>= 6'} | ||||||
|  | @ -3348,6 +3350,7 @@ snapshots: | ||||||
|   '@types/debug@4.1.12': |   '@types/debug@4.1.12': | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/ms': 2.1.0 |       '@types/ms': 2.1.0 | ||||||
|  |     optional: true | ||||||
| 
 | 
 | ||||||
|   '@types/estree@1.0.7': {} |   '@types/estree@1.0.7': {} | ||||||
| 
 | 
 | ||||||
|  | @ -3363,13 +3366,12 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   '@types/json-schema@7.0.15': {} |   '@types/json-schema@7.0.15': {} | ||||||
| 
 | 
 | ||||||
|   '@types/katex@0.16.7': {} |   '@types/katex@0.11.1': {} | ||||||
| 
 | 
 | ||||||
|   '@types/mdast@4.0.4': |   '@types/ms@2.1.0': | ||||||
|     dependencies: |     optional: true | ||||||
|       '@types/unist': 3.0.3 |  | ||||||
| 
 | 
 | ||||||
|   '@types/ms@2.1.0': {} |   '@types/parse5@5.0.3': {} | ||||||
| 
 | 
 | ||||||
|   '@types/resolve@1.20.2': {} |   '@types/resolve@1.20.2': {} | ||||||
| 
 | 
 | ||||||
|  | @ -3532,6 +3534,8 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   axobject-query@4.1.0: {} |   axobject-query@4.1.0: {} | ||||||
| 
 | 
 | ||||||
|  |   bail@1.0.5: {} | ||||||
|  | 
 | ||||||
|   bail@2.0.2: {} |   bail@2.0.2: {} | ||||||
| 
 | 
 | ||||||
|   balanced-match@1.0.2: {} |   balanced-match@1.0.2: {} | ||||||
|  | @ -3575,8 +3579,6 @@ snapshots: | ||||||
|       ansi-styles: 4.3.0 |       ansi-styles: 4.3.0 | ||||||
|       supports-color: 7.2.0 |       supports-color: 7.2.0 | ||||||
| 
 | 
 | ||||||
|   character-entities@2.0.2: {} |  | ||||||
| 
 |  | ||||||
|   check-error@2.1.1: {} |   check-error@2.1.1: {} | ||||||
| 
 | 
 | ||||||
|   chevrotain-allstar@0.3.1(chevrotain@11.0.3): |   chevrotain-allstar@0.3.1(chevrotain@11.0.3): | ||||||
|  | @ -3605,6 +3607,8 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   color-name@1.1.4: {} |   color-name@1.1.4: {} | ||||||
| 
 | 
 | ||||||
|  |   comma-separated-tokens@1.0.8: {} | ||||||
|  | 
 | ||||||
|   comma-separated-tokens@2.0.3: {} |   comma-separated-tokens@2.0.3: {} | ||||||
| 
 | 
 | ||||||
|   commander@7.2.0: {} |   commander@7.2.0: {} | ||||||
|  | @ -3843,10 +3847,6 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   decimal.js@10.5.0: {} |   decimal.js@10.5.0: {} | ||||||
| 
 | 
 | ||||||
|   decode-named-character-reference@1.1.0: |  | ||||||
|     dependencies: |  | ||||||
|       character-entities: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   deep-eql@5.0.2: {} |   deep-eql@5.0.2: {} | ||||||
| 
 | 
 | ||||||
|   deep-is@0.1.4: {} |   deep-is@0.1.4: {} | ||||||
|  | @ -4133,6 +4133,15 @@ snapshots: | ||||||
|       vfile: 6.0.3 |       vfile: 6.0.3 | ||||||
|       vfile-message: 4.0.2 |       vfile-message: 4.0.2 | ||||||
| 
 | 
 | ||||||
|  |   hast-util-from-parse5@6.0.1: | ||||||
|  |     dependencies: | ||||||
|  |       '@types/parse5': 5.0.3 | ||||||
|  |       hastscript: 6.0.0 | ||||||
|  |       property-information: 5.6.0 | ||||||
|  |       vfile: 4.2.1 | ||||||
|  |       vfile-location: 3.2.0 | ||||||
|  |       web-namespaces: 1.1.4 | ||||||
|  | 
 | ||||||
|   hast-util-from-parse5@8.0.3: |   hast-util-from-parse5@8.0.3: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/hast': 3.0.4 |       '@types/hast': 3.0.4 | ||||||
|  | @ -4150,10 +4159,14 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   hast-util-has-property@2.0.1: {} |   hast-util-has-property@2.0.1: {} | ||||||
| 
 | 
 | ||||||
|  |   hast-util-is-element@1.1.0: {} | ||||||
|  | 
 | ||||||
|   hast-util-is-element@3.0.0: |   hast-util-is-element@3.0.0: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/hast': 3.0.4 |       '@types/hast': 3.0.4 | ||||||
| 
 | 
 | ||||||
|  |   hast-util-parse-selector@2.2.5: {} | ||||||
|  | 
 | ||||||
|   hast-util-parse-selector@4.0.0: |   hast-util-parse-selector@4.0.0: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/hast': 3.0.4 |       '@types/hast': 3.0.4 | ||||||
|  | @ -4180,6 +4193,12 @@ snapshots: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/hast': 2.3.10 |       '@types/hast': 2.3.10 | ||||||
| 
 | 
 | ||||||
|  |   hast-util-to-text@2.0.1: | ||||||
|  |     dependencies: | ||||||
|  |       hast-util-is-element: 1.1.0 | ||||||
|  |       repeat-string: 1.6.1 | ||||||
|  |       unist-util-find-after: 3.0.0 | ||||||
|  | 
 | ||||||
|   hast-util-to-text@4.0.2: |   hast-util-to-text@4.0.2: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/hast': 3.0.4 |       '@types/hast': 3.0.4 | ||||||
|  | @ -4189,6 +4208,14 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   hast-util-whitespace@2.0.1: {} |   hast-util-whitespace@2.0.1: {} | ||||||
| 
 | 
 | ||||||
|  |   hastscript@6.0.0: | ||||||
|  |     dependencies: | ||||||
|  |       '@types/hast': 2.3.10 | ||||||
|  |       comma-separated-tokens: 1.0.8 | ||||||
|  |       hast-util-parse-selector: 2.2.5 | ||||||
|  |       property-information: 5.6.0 | ||||||
|  |       space-separated-tokens: 1.1.5 | ||||||
|  | 
 | ||||||
|   hastscript@9.0.1: |   hastscript@9.0.1: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/hast': 3.0.4 |       '@types/hast': 3.0.4 | ||||||
|  | @ -4236,6 +4263,8 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   internmap@2.0.3: {} |   internmap@2.0.3: {} | ||||||
| 
 | 
 | ||||||
|  |   is-buffer@2.0.5: {} | ||||||
|  | 
 | ||||||
|   is-core-module@2.16.1: |   is-core-module@2.16.1: | ||||||
|     dependencies: |     dependencies: | ||||||
|       hasown: 2.0.2 |       hasown: 2.0.2 | ||||||
|  | @ -4250,6 +4279,8 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   is-number@7.0.0: {} |   is-number@7.0.0: {} | ||||||
| 
 | 
 | ||||||
|  |   is-plain-obj@2.1.0: {} | ||||||
|  | 
 | ||||||
|   is-plain-obj@4.1.0: {} |   is-plain-obj@4.1.0: {} | ||||||
| 
 | 
 | ||||||
|   is-potential-custom-element-name@1.0.1: {} |   is-potential-custom-element-name@1.0.1: {} | ||||||
|  | @ -4305,6 +4336,10 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   json-stable-stringify-without-jsonify@1.0.1: {} |   json-stable-stringify-without-jsonify@1.0.1: {} | ||||||
| 
 | 
 | ||||||
|  |   katex@0.13.24: | ||||||
|  |     dependencies: | ||||||
|  |       commander: 8.3.0 | ||||||
|  | 
 | ||||||
|   katex@0.16.22: |   katex@0.16.22: | ||||||
|     dependencies: |     dependencies: | ||||||
|       commander: 8.3.0 |       commander: 8.3.0 | ||||||
|  | @ -4407,8 +4442,6 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   lodash@4.17.21: {} |   lodash@4.17.21: {} | ||||||
| 
 | 
 | ||||||
|   longest-streak@3.1.0: {} |  | ||||||
| 
 |  | ||||||
|   loupe@3.1.3: {} |   loupe@3.1.3: {} | ||||||
| 
 | 
 | ||||||
|   lru-cache@10.4.3: {} |   lru-cache@10.4.3: {} | ||||||
|  | @ -4421,56 +4454,6 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   marked@15.0.11: {} |   marked@15.0.11: {} | ||||||
| 
 | 
 | ||||||
|   mdast-util-from-markdown@2.0.2: |  | ||||||
|     dependencies: |  | ||||||
|       '@types/mdast': 4.0.4 |  | ||||||
|       '@types/unist': 3.0.3 |  | ||||||
|       decode-named-character-reference: 1.1.0 |  | ||||||
|       devlop: 1.1.0 |  | ||||||
|       mdast-util-to-string: 4.0.0 |  | ||||||
|       micromark: 4.0.2 |  | ||||||
|       micromark-util-decode-numeric-character-reference: 2.0.2 |  | ||||||
|       micromark-util-decode-string: 2.0.1 |  | ||||||
|       micromark-util-normalize-identifier: 2.0.1 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
|       unist-util-stringify-position: 4.0.0 |  | ||||||
|     transitivePeerDependencies: |  | ||||||
|       - supports-color |  | ||||||
| 
 |  | ||||||
|   mdast-util-math@3.0.0: |  | ||||||
|     dependencies: |  | ||||||
|       '@types/hast': 3.0.4 |  | ||||||
|       '@types/mdast': 4.0.4 |  | ||||||
|       devlop: 1.1.0 |  | ||||||
|       longest-streak: 3.1.0 |  | ||||||
|       mdast-util-from-markdown: 2.0.2 |  | ||||||
|       mdast-util-to-markdown: 2.1.2 |  | ||||||
|       unist-util-remove-position: 5.0.0 |  | ||||||
|     transitivePeerDependencies: |  | ||||||
|       - supports-color |  | ||||||
| 
 |  | ||||||
|   mdast-util-phrasing@4.1.0: |  | ||||||
|     dependencies: |  | ||||||
|       '@types/mdast': 4.0.4 |  | ||||||
|       unist-util-is: 6.0.0 |  | ||||||
| 
 |  | ||||||
|   mdast-util-to-markdown@2.1.2: |  | ||||||
|     dependencies: |  | ||||||
|       '@types/mdast': 4.0.4 |  | ||||||
|       '@types/unist': 3.0.3 |  | ||||||
|       longest-streak: 3.1.0 |  | ||||||
|       mdast-util-phrasing: 4.1.0 |  | ||||||
|       mdast-util-to-string: 4.0.0 |  | ||||||
|       micromark-util-classify-character: 2.0.1 |  | ||||||
|       micromark-util-decode-string: 2.0.1 |  | ||||||
|       unist-util-visit: 5.0.0 |  | ||||||
|       zwitch: 2.0.4 |  | ||||||
| 
 |  | ||||||
|   mdast-util-to-string@4.0.0: |  | ||||||
|     dependencies: |  | ||||||
|       '@types/mdast': 4.0.4 |  | ||||||
| 
 |  | ||||||
|   mdsvex@0.11.2(svelte@5.28.2): |   mdsvex@0.11.2(svelte@5.28.2): | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/unist': 2.0.11 |       '@types/unist': 2.0.11 | ||||||
|  | @ -4515,149 +4498,6 @@ snapshots: | ||||||
|     transitivePeerDependencies: |     transitivePeerDependencies: | ||||||
|       - supports-color |       - supports-color | ||||||
| 
 | 
 | ||||||
|   micromark-core-commonmark@2.0.3: |  | ||||||
|     dependencies: |  | ||||||
|       decode-named-character-reference: 1.1.0 |  | ||||||
|       devlop: 1.1.0 |  | ||||||
|       micromark-factory-destination: 2.0.1 |  | ||||||
|       micromark-factory-label: 2.0.1 |  | ||||||
|       micromark-factory-space: 2.0.1 |  | ||||||
|       micromark-factory-title: 2.0.1 |  | ||||||
|       micromark-factory-whitespace: 2.0.1 |  | ||||||
|       micromark-util-character: 2.1.1 |  | ||||||
|       micromark-util-chunked: 2.0.1 |  | ||||||
|       micromark-util-classify-character: 2.0.1 |  | ||||||
|       micromark-util-html-tag-name: 2.0.1 |  | ||||||
|       micromark-util-normalize-identifier: 2.0.1 |  | ||||||
|       micromark-util-resolve-all: 2.0.1 |  | ||||||
|       micromark-util-subtokenize: 2.1.0 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-extension-math@3.1.0: |  | ||||||
|     dependencies: |  | ||||||
|       '@types/katex': 0.16.7 |  | ||||||
|       devlop: 1.1.0 |  | ||||||
|       katex: 0.16.22 |  | ||||||
|       micromark-factory-space: 2.0.1 |  | ||||||
|       micromark-util-character: 2.1.1 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-factory-destination@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-util-character: 2.1.1 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-factory-label@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       devlop: 1.1.0 |  | ||||||
|       micromark-util-character: 2.1.1 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-factory-space@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-util-character: 2.1.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-factory-title@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-factory-space: 2.0.1 |  | ||||||
|       micromark-util-character: 2.1.1 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-factory-whitespace@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-factory-space: 2.0.1 |  | ||||||
|       micromark-util-character: 2.1.1 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-util-character@2.1.1: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-util-chunked@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
| 
 |  | ||||||
|   micromark-util-classify-character@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-util-character: 2.1.1 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-util-combine-extensions@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-util-chunked: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-util-decode-numeric-character-reference@2.0.2: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
| 
 |  | ||||||
|   micromark-util-decode-string@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       decode-named-character-reference: 1.1.0 |  | ||||||
|       micromark-util-character: 2.1.1 |  | ||||||
|       micromark-util-decode-numeric-character-reference: 2.0.2 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
| 
 |  | ||||||
|   micromark-util-encode@2.0.1: {} |  | ||||||
| 
 |  | ||||||
|   micromark-util-html-tag-name@2.0.1: {} |  | ||||||
| 
 |  | ||||||
|   micromark-util-normalize-identifier@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
| 
 |  | ||||||
|   micromark-util-resolve-all@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-util-sanitize-uri@2.0.1: |  | ||||||
|     dependencies: |  | ||||||
|       micromark-util-character: 2.1.1 |  | ||||||
|       micromark-util-encode: 2.0.1 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
| 
 |  | ||||||
|   micromark-util-subtokenize@2.1.0: |  | ||||||
|     dependencies: |  | ||||||
|       devlop: 1.1.0 |  | ||||||
|       micromark-util-chunked: 2.0.1 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
| 
 |  | ||||||
|   micromark-util-symbol@2.0.1: {} |  | ||||||
| 
 |  | ||||||
|   micromark-util-types@2.0.2: {} |  | ||||||
| 
 |  | ||||||
|   micromark@4.0.2: |  | ||||||
|     dependencies: |  | ||||||
|       '@types/debug': 4.1.12 |  | ||||||
|       debug: 4.4.0 |  | ||||||
|       decode-named-character-reference: 1.1.0 |  | ||||||
|       devlop: 1.1.0 |  | ||||||
|       micromark-core-commonmark: 2.0.3 |  | ||||||
|       micromark-factory-space: 2.0.1 |  | ||||||
|       micromark-util-character: 2.1.1 |  | ||||||
|       micromark-util-chunked: 2.0.1 |  | ||||||
|       micromark-util-combine-extensions: 2.0.1 |  | ||||||
|       micromark-util-decode-numeric-character-reference: 2.0.2 |  | ||||||
|       micromark-util-encode: 2.0.1 |  | ||||||
|       micromark-util-normalize-identifier: 2.0.1 |  | ||||||
|       micromark-util-resolve-all: 2.0.1 |  | ||||||
|       micromark-util-sanitize-uri: 2.0.1 |  | ||||||
|       micromark-util-subtokenize: 2.1.0 |  | ||||||
|       micromark-util-symbol: 2.0.1 |  | ||||||
|       micromark-util-types: 2.0.2 |  | ||||||
|     transitivePeerDependencies: |  | ||||||
|       - supports-color |  | ||||||
| 
 |  | ||||||
|   micromatch@4.0.8: |   micromatch@4.0.8: | ||||||
|     dependencies: |     dependencies: | ||||||
|       braces: 3.0.3 |       braces: 3.0.3 | ||||||
|  | @ -4725,6 +4565,8 @@ snapshots: | ||||||
|     dependencies: |     dependencies: | ||||||
|       callsites: 3.1.0 |       callsites: 3.1.0 | ||||||
| 
 | 
 | ||||||
|  |   parse5@6.0.1: {} | ||||||
|  | 
 | ||||||
|   parse5@7.3.0: |   parse5@7.3.0: | ||||||
|     dependencies: |     dependencies: | ||||||
|       entities: 6.0.0 |       entities: 6.0.0 | ||||||
|  | @ -4834,6 +4676,10 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   prismjs@1.30.0: {} |   prismjs@1.30.0: {} | ||||||
| 
 | 
 | ||||||
|  |   property-information@5.6.0: | ||||||
|  |     dependencies: | ||||||
|  |       xtend: 4.0.2 | ||||||
|  | 
 | ||||||
|   property-information@6.5.0: {} |   property-information@6.5.0: {} | ||||||
| 
 | 
 | ||||||
|   property-information@7.0.0: {} |   property-information@7.0.0: {} | ||||||
|  | @ -4862,6 +4708,15 @@ snapshots: | ||||||
|       hast-util-to-string: 2.0.0 |       hast-util-to-string: 2.0.0 | ||||||
|       katex: 0.16.22 |       katex: 0.16.22 | ||||||
| 
 | 
 | ||||||
|  |   rehype-katex@5.0.0: | ||||||
|  |     dependencies: | ||||||
|  |       '@types/katex': 0.11.1 | ||||||
|  |       hast-util-to-text: 2.0.1 | ||||||
|  |       katex: 0.13.24 | ||||||
|  |       rehype-parse: 7.0.1 | ||||||
|  |       unified: 9.2.2 | ||||||
|  |       unist-util-visit: 2.0.3 | ||||||
|  | 
 | ||||||
|   rehype-mermaid@3.0.0(playwright@1.52.0): |   rehype-mermaid@3.0.0(playwright@1.52.0): | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/hast': 3.0.4 |       '@types/hast': 3.0.4 | ||||||
|  | @ -4878,14 +4733,14 @@ snapshots: | ||||||
|     transitivePeerDependencies: |     transitivePeerDependencies: | ||||||
|       - supports-color |       - supports-color | ||||||
| 
 | 
 | ||||||
|   remark-math@6.0.0: |   rehype-parse@7.0.1: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/mdast': 4.0.4 |       hast-util-from-parse5: 6.0.1 | ||||||
|       mdast-util-math: 3.0.0 |       parse5: 6.0.1 | ||||||
|       micromark-extension-math: 3.1.0 | 
 | ||||||
|       unified: 11.0.5 |   remark-math@2.0.1: {} | ||||||
|     transitivePeerDependencies: | 
 | ||||||
|       - supports-color |   repeat-string@1.6.1: {} | ||||||
| 
 | 
 | ||||||
|   resolve-from@4.0.0: {} |   resolve-from@4.0.0: {} | ||||||
| 
 | 
 | ||||||
|  | @ -4970,6 +4825,8 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   source-map-js@1.2.1: {} |   source-map-js@1.2.1: {} | ||||||
| 
 | 
 | ||||||
|  |   space-separated-tokens@1.1.5: {} | ||||||
|  | 
 | ||||||
|   space-separated-tokens@2.0.2: {} |   space-separated-tokens@2.0.2: {} | ||||||
| 
 | 
 | ||||||
|   stackback@0.0.2: {} |   stackback@0.0.2: {} | ||||||
|  | @ -5076,6 +4933,8 @@ snapshots: | ||||||
|     dependencies: |     dependencies: | ||||||
|       punycode: 2.3.1 |       punycode: 2.3.1 | ||||||
| 
 | 
 | ||||||
|  |   trough@1.0.5: {} | ||||||
|  | 
 | ||||||
|   trough@2.2.0: {} |   trough@2.2.0: {} | ||||||
| 
 | 
 | ||||||
|   ts-api-utils@2.1.0(typescript@5.8.3): |   ts-api-utils@2.1.0(typescript@5.8.3): | ||||||
|  | @ -5114,11 +4973,27 @@ snapshots: | ||||||
|       trough: 2.2.0 |       trough: 2.2.0 | ||||||
|       vfile: 6.0.3 |       vfile: 6.0.3 | ||||||
| 
 | 
 | ||||||
|  |   unified@9.2.2: | ||||||
|  |     dependencies: | ||||||
|  |       '@types/unist': 2.0.11 | ||||||
|  |       bail: 1.0.5 | ||||||
|  |       extend: 3.0.2 | ||||||
|  |       is-buffer: 2.0.5 | ||||||
|  |       is-plain-obj: 2.1.0 | ||||||
|  |       trough: 1.0.5 | ||||||
|  |       vfile: 4.2.1 | ||||||
|  | 
 | ||||||
|  |   unist-util-find-after@3.0.0: | ||||||
|  |     dependencies: | ||||||
|  |       unist-util-is: 4.1.0 | ||||||
|  | 
 | ||||||
|   unist-util-find-after@5.0.0: |   unist-util-find-after@5.0.0: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/unist': 3.0.3 |       '@types/unist': 3.0.3 | ||||||
|       unist-util-is: 6.0.0 |       unist-util-is: 6.0.0 | ||||||
| 
 | 
 | ||||||
|  |   unist-util-is@4.1.0: {} | ||||||
|  | 
 | ||||||
|   unist-util-is@5.2.1: |   unist-util-is@5.2.1: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/unist': 2.0.11 |       '@types/unist': 2.0.11 | ||||||
|  | @ -5140,6 +5015,11 @@ snapshots: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/unist': 3.0.3 |       '@types/unist': 3.0.3 | ||||||
| 
 | 
 | ||||||
|  |   unist-util-visit-parents@3.1.1: | ||||||
|  |     dependencies: | ||||||
|  |       '@types/unist': 2.0.11 | ||||||
|  |       unist-util-is: 4.1.0 | ||||||
|  | 
 | ||||||
|   unist-util-visit-parents@5.1.3: |   unist-util-visit-parents@5.1.3: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/unist': 2.0.11 |       '@types/unist': 2.0.11 | ||||||
|  | @ -5150,6 +5030,12 @@ snapshots: | ||||||
|       '@types/unist': 3.0.3 |       '@types/unist': 3.0.3 | ||||||
|       unist-util-is: 6.0.0 |       unist-util-is: 6.0.0 | ||||||
| 
 | 
 | ||||||
|  |   unist-util-visit@2.0.3: | ||||||
|  |     dependencies: | ||||||
|  |       '@types/unist': 2.0.11 | ||||||
|  |       unist-util-is: 4.1.0 | ||||||
|  |       unist-util-visit-parents: 3.1.1 | ||||||
|  | 
 | ||||||
|   unist-util-visit@4.1.2: |   unist-util-visit@4.1.2: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/unist': 2.0.11 |       '@types/unist': 2.0.11 | ||||||
|  | @ -5170,6 +5056,8 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   uuid@11.1.0: {} |   uuid@11.1.0: {} | ||||||
| 
 | 
 | ||||||
|  |   vfile-location@3.2.0: {} | ||||||
|  | 
 | ||||||
|   vfile-location@5.0.3: |   vfile-location@5.0.3: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/unist': 3.0.3 |       '@types/unist': 3.0.3 | ||||||
|  | @ -5185,6 +5073,13 @@ snapshots: | ||||||
|       '@types/unist': 3.0.3 |       '@types/unist': 3.0.3 | ||||||
|       unist-util-stringify-position: 4.0.0 |       unist-util-stringify-position: 4.0.0 | ||||||
| 
 | 
 | ||||||
|  |   vfile@4.2.1: | ||||||
|  |     dependencies: | ||||||
|  |       '@types/unist': 2.0.11 | ||||||
|  |       is-buffer: 2.0.5 | ||||||
|  |       unist-util-stringify-position: 2.0.3 | ||||||
|  |       vfile-message: 2.0.4 | ||||||
|  | 
 | ||||||
|   vfile@6.0.3: |   vfile@6.0.3: | ||||||
|     dependencies: |     dependencies: | ||||||
|       '@types/unist': 3.0.3 |       '@types/unist': 3.0.3 | ||||||
|  | @ -5289,6 +5184,8 @@ snapshots: | ||||||
|     dependencies: |     dependencies: | ||||||
|       xml-name-validator: 5.0.0 |       xml-name-validator: 5.0.0 | ||||||
| 
 | 
 | ||||||
|  |   web-namespaces@1.1.4: {} | ||||||
|  | 
 | ||||||
|   web-namespaces@2.0.1: {} |   web-namespaces@2.0.1: {} | ||||||
| 
 | 
 | ||||||
|   webidl-conversions@7.0.0: {} |   webidl-conversions@7.0.0: {} | ||||||
|  | @ -5321,6 +5218,8 @@ snapshots: | ||||||
| 
 | 
 | ||||||
|   xmlchars@2.2.0: {} |   xmlchars@2.2.0: {} | ||||||
| 
 | 
 | ||||||
|  |   xtend@4.0.2: {} | ||||||
|  | 
 | ||||||
|   yaml@1.10.2: {} |   yaml@1.10.2: {} | ||||||
| 
 | 
 | ||||||
|   yocto-queue@0.1.0: {} |   yocto-queue@0.1.0: {} | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								src/app.css
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								src/app.css
									
										
									
									
									
								
							|  | @ -1,12 +1,12 @@ | ||||||
| body { | body { | ||||||
|     margin: 0; | 	margin: 0; | ||||||
|     padding: 0; | 	padding: 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| * { | * { | ||||||
|     color: #ebdbb2; | 	color: #ebdbb2; | ||||||
|     font-family: 'Inter'; | 	font-family: 'Inter'; | ||||||
|     font-optical-sizing: auto; | 	font-optical-sizing: auto; | ||||||
|     font-weight: 400; | 	font-weight: 400; | ||||||
|     font-style: normal; | 	font-style: normal; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,25 +1,27 @@ | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| 	import './article.css'; | 	import './article.css'; | ||||||
|  | 	import HorizontalBreak from './HorizontalBreak.svelte'; | ||||||
| 
 | 
 | ||||||
| 	export let title; | 	export let title; | ||||||
| 	export let date; | 	export let date; | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <div> | <div class="heading"> | ||||||
| 	<h1>{title}</h1> | 	<h1>{title}</h1> | ||||||
| 	<p>{date}</p> | 	<p>{date}</p> | ||||||
| </div> | </div> | ||||||
|  | <HorizontalBreak /> | ||||||
| 
 | 
 | ||||||
| <style> | <style> | ||||||
| 	div { | 	.heading { | ||||||
| 		width: 100%; | 		width: 100%; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	h1 { | 	.heading > h1 { | ||||||
| 		display: inline-block; | 		display: inline-block; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	p { | 	.heading > p { | ||||||
| 		float: right; | 		float: right; | ||||||
| 		padding-left: auto; | 		padding-left: auto; | ||||||
| 		padding-right: auto; | 		padding-right: auto; | ||||||
|  |  | ||||||
|  | @ -1,13 +1,12 @@ | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <div> | <div class="horizontal_break"></div> | ||||||
| </div> |  | ||||||
| 
 | 
 | ||||||
| <style> | <style> | ||||||
|     div { | 	.horizontal_break { | ||||||
|         margin-top: 1em; | 		margin-top: 1em; | ||||||
|         background-color: #928374; | 		background-color: #928374; | ||||||
|         height: 1px; | 		height: 1px; | ||||||
|     } | 	} | ||||||
| </style> | </style> | ||||||
|  |  | ||||||
|  | @ -4,7 +4,6 @@ | ||||||
| 
 | 
 | ||||||
| 	export let title; | 	export let title; | ||||||
| 	export let date; | 	export let date; | ||||||
| 
 |  | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <div class="container"> | <div class="container"> | ||||||
|  | @ -19,31 +18,29 @@ | ||||||
| </div> | </div> | ||||||
| 
 | 
 | ||||||
| <style> | <style> | ||||||
| @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); | 	@import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); | ||||||
| 
 | 
 | ||||||
| .container { | 	.container { | ||||||
|     background-color: #1d2021; | 		background-color: #1d2021; | ||||||
|     display: flex; | 		display: flex; | ||||||
| } | 	} | ||||||
| 
 | 
 | ||||||
| .body { | 	.body { | ||||||
|     flex: 3; | 		flex: 3; | ||||||
|     padding: 1em; | 		padding: 1em; | ||||||
|     background-color: #282828; | 		background-color: #282828; | ||||||
|     text-wrap-mode: wrap; | 		text-wrap-mode: wrap; | ||||||
| 
 | 
 | ||||||
|     min-width: 80ch; | 		min-width: 80ch; | ||||||
|     max-width: 80ch; | 		max-width: 80ch; | ||||||
| 
 | 
 | ||||||
|     border-left: 1px solid #928374; | 		border-left: 1px solid #928374; | ||||||
|     border-right: 1px solid #928374; | 		border-right: 1px solid #928374; | ||||||
| 
 | 
 | ||||||
|     text-align: justify; | 		text-align: justify; | ||||||
| 
 | 	} | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .padding { |  | ||||||
|     flex: 1; |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
|  | 	.padding { | ||||||
|  | 		flex: 1; | ||||||
|  | 	} | ||||||
| </style> | </style> | ||||||
|  |  | ||||||
|  | @ -1,13 +0,0 @@ | ||||||
| <script lang="ts"> |  | ||||||
| 	let { children } = $props(); |  | ||||||
| </script> |  | ||||||
| 
 |  | ||||||
| <div> |  | ||||||
| 	{@render children()} |  | ||||||
| </div> |  | ||||||
| 
 |  | ||||||
| <style> |  | ||||||
| 	div { |  | ||||||
| 		margin-top: 1em; |  | ||||||
| 	} |  | ||||||
| </style> |  | ||||||
|  | @ -31,3 +31,13 @@ h2 { | ||||||
|     margin-right: 0; |     margin-right: 0; | ||||||
|     font-weight: bold; |     font-weight: bold; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | .katex { | ||||||
|  |     background-color: #1d2021; | ||||||
|  |     padding: 1em; | ||||||
|  |     border: 1px solid #928374; | ||||||
|  |     border-radius: 2px; | ||||||
|  |     width: max-content; | ||||||
|  |     margin-left: auto; | ||||||
|  |     margin-right: auto; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -3,100 +3,104 @@ title: The Graphics Pipeline | ||||||
| date: "April 20 - 2025" | date: "April 20 - 2025" | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| <script> | Ever wondered how games put all that gore on your display? All that beauty is brought into life by | ||||||
| import Paragraph from '../Paragraph.svelte'; | a process called **rendering**, and at the heart of it, is the **graphics pipeline**. | ||||||
| import HorizontalBreak from '../HorizontalBreak.svelte'; | In this article we'll dive deep into  the intricate details of this beast. | ||||||
| </script> |  | ||||||
| 
 | 
 | ||||||
| <HorizontalBreak/> | Like any pipeline, the **graphics pipeline** is comprised  | ||||||
| 
 |  | ||||||
| <Paragraph> |  | ||||||
| 
 |  | ||||||
| Ever wondered how games put all that gore on your display? Well you're about to find out :) |  | ||||||
| 
 |  | ||||||
| At the heart of rendering, is the **Graphics Pipeline**. And like any pipeline, it's comprised  |  | ||||||
| of several **stages**, each of which can be a pipeline in itself or even parallelized. | of several **stages**, each of which can be a pipeline in itself or even parallelized. | ||||||
| Each stage takes some input data (and configuration), to generate some output for the next stage. | Each stage takes some input (data and configuration) to generate some output data for the next stage. | ||||||
| </Paragraph> | We can coarsely divide the pipeline into **4 stages**:  | ||||||
| 
 | 
 | ||||||
| <Paragraph> | ```math | ||||||
|  | \texttt{Application} \rightarrow \color{#fabd2f}{\texttt{GeometryProcessing}}\color{none} \rightarrow \texttt{Rasterization} \rightarrow \texttt{PixelProcessing} | ||||||
|  | ``` | ||||||
| 
 | 
 | ||||||
| We can coarsely divide the **Graphics Pipeline** into 4 stages:  | The pipeline will then serve the output of the **pixel processing** stage, which is a **rendered image**, | ||||||
| 
 |  | ||||||
| **Application -> Geometry Processing -> Rasterization -> Pixel Processing** |  | ||||||
| 
 |  | ||||||
| The pipeline will then serve the output of the **Pixel Processing** stage, which is a **rendered image**, |  | ||||||
| to your pretty eyes using your display. | to your pretty eyes using your display. | ||||||
| </Paragraph> | But to avoid drowning you in overviews, let's jump right into the gory details of the **geometry processing** | ||||||
| 
 |  | ||||||
| <Paragraph> |  | ||||||
| But to avoid drowning you in overviews, let's jump right into the details of the "Geometry Processing" |  | ||||||
| stage and have a recap afterwards to demystify this 4-stage division. | stage and have a recap afterwards to demystify this 4-stage division. | ||||||
| </Paragraph> |  | ||||||
| 
 |  | ||||||
| <Paragraph> |  | ||||||
| 
 | 
 | ||||||
| ## Surfaces | ## Surfaces | ||||||
| In order to display a murder scene, we need to have a way of **representing** the deceased in computer memory. | 
 | ||||||
|  | Ever been jump-scared by this sight in an FPS? Why are things rendered like that? | ||||||
|  | 
 | ||||||
|  | In order to display a scene (like a murder scene),  | ||||||
|  | we need to have a way of **representing** the **surface** of the composing objects (like corpses) in computer-memory. | ||||||
| We only care about the **surface** since we won't be seeing the insides anyways---Not that we want to. | We only care about the **surface** since we won't be seeing the insides anyways---Not that we want to. | ||||||
| At this stage, we only care about the **shape** or the **geometry** of the **surface**. | At this stage, we only care about the **shape** or the **geometry** of the **surface**. | ||||||
| Texturing, lighting and all the sweet gory details comes at a much later stage once all the **geometry** has been processed. | Texturing, lighting and all the sweet gory details comes at a much later stage once all the **geometry** have been processed. | ||||||
| 
 | 
 | ||||||
| But how should we represent surfaces in memory? | But how do we represent surfaces in computer-memory? | ||||||
| </Paragraph> |  | ||||||
| 
 | 
 | ||||||
| ## Vertices | ## Vertices | ||||||
| <Paragraph> |  | ||||||
| 
 | 
 | ||||||
| There are several ways to **represent 3d objects** for a computer to understand. | There are several ways to **represent** the surfaces of 3d objects for a computer to understand. | ||||||
| For instance, **NURB surfaces** are great for representing **curves** | For instance, **NURB surfaces** are great for representing **curves** | ||||||
| and it's all about the **high-precision** needed to do **CAD**. | and it's all about the **high-precision** needed to do **CAD**. | ||||||
| We could also do **ray-tracing** using fancy equations for rendering **photo-realistic** images. | We could also do **ray-tracing** using fancy equations for rendering **photo-realistic** images. | ||||||
| </Paragraph> |  | ||||||
| 
 | 
 | ||||||
| <Paragraph> |  | ||||||
| 
 | 
 | ||||||
| These are all great--ignoring the fact that they would take "an eternity" to process. | These are all great--ignoring the fact that they would take an eternity to process... | ||||||
| But what we need is a **hardware-friendly** approach that can do this for an entire scene with | But what we need is a **performant** approach that can do this for an entire scene with | ||||||
| hundereds of thousands of objects for at least **60 times undr a second**. What we need is **polygonal modeling**. | hundereds of thousands of objects (like a lot of corpses) in under a small fraction of a second. What we need is **polygonal modeling**. | ||||||
| </Paragraph> |  | ||||||
| 
 | 
 | ||||||
| <Paragraph> |  | ||||||
| 
 | 
 | ||||||
| **Polygonal modeling** allows us to do **real-time rendering**. The idea is that we only need an | **Polygonal modeling** enables us to do an exciting thing called **real-time rendering**. The idea is that we only need an | ||||||
| **approximation** of a surface to render it **realisticly-enough** for us to have some fun killing time! | **approximation** of a surface to render it **realisticly-enough** for us to have some fun killing time! | ||||||
| We can achieve this approximation using a collection of **triangles**, **lines** and **dots** (primitives), | We can achieve this approximation using a collection of **triangles**, **lines** and **dots** (primitives), | ||||||
| which themselves are composed of a series of **vertices** (points in space). | which themselves are composed of a series of **vertices** (points in space). | ||||||
| </Paragraph> |  | ||||||
| 
 | 
 | ||||||
| <Paragraph> |  | ||||||
| 
 | 
 | ||||||
| A **vertex** is simply a point in space. | A **vertex** is simply a point in space. | ||||||
| Once we get enough of these **points**, we can conncet them to form **primitives** such as **triangles**, **lines** and **dots**. | Once we get enough of these **points**, we can conncet them to form **primitives** such as **triangles**, **lines** and **dots**. | ||||||
| And once we have enough **primitives** together, they form a **model** or a **mesh** (that we need for our corpse). | And once we connect enough of these **primitives** together, they form a **model** or a **mesh** (that we need for our corpse). | ||||||
| With some interesting models, we can compose a **scene**. | With some interesting models put together, we can compose a **scene** (like a murder scene :D). | ||||||
| </Paragraph> |  | ||||||
| 
 | 
 | ||||||
| <Paragraph> |  | ||||||
| 
 | 
 | ||||||
| But let's not get ahead of ourselves. The primary type of **primitive** we care about during **polygonal modeling** | But let's not get ahead of ourselves. The primary type of **primitive** that we care about during **polygonal modeling** | ||||||
| is a **triangle**. But why not squares or polygons with variable number of edges? | is a **triangle**. But why not squares or polygons with variable number of edges? | ||||||
| </Paragraph> |  | ||||||
| 
 | 
 | ||||||
| ## Why Triangles? | ## Why Triangles? | ||||||
| "Always Planar": | 
 | ||||||
| <Paragraph> | In **Euclidean geometry**, triangles are always **planar** (they exist only in one plane),  | ||||||
| Triangles can never be __non-planar__(reside in more than 1 plane)! In Euclidean geometry, any  | any polygon composed of more than 3 points may break this rule, but why does polygons residing in one plane so important  | ||||||
| </Paragraph> | to us? | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| "Normal surface:" | Being non-planar makes it rather difficult to determine  | ||||||
| 
 | 
 | ||||||
| "Algorithm Simplicity:" |  | ||||||
| 
 | 
 | ||||||
| "Predictable Winding Order:" | When a polygon exists only in one plane, we can safely imply that **only one face** of it can be visible | ||||||
|  | at any one time, this enables us to utilize a huge optimization technique called **back-face culling**. | ||||||
|  | Which means we avoid wasting a ton of **precious processing time** on the polygons that  | ||||||
|  | we know won't be visible to us. We can safely **cull** the **back-faces** since we won't | ||||||
|  | be seeing the **back** of a polygon when it's in the context of a closed off model.  | ||||||
|  | We figure this by simply using the **winding-order** of the triangle to determine whether we're looking at the | ||||||
|  | back of the triangle or the front of it. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Normal surface | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Triangles also have very small **memory footprint**, for instance when using the **triangle-strip** topology (more on this very soon), for each additional triangle after the first one, only **one extra vertex** is needed. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | The most important attribute however (in my opinion) is the **algorithmic simplicity**. | ||||||
|  | Any polygon or shape can be composed from a **set of triangle**, for instance a rectangle is  | ||||||
|  | simply **two co-planar triangles**. | ||||||
|  | It is becoming an increasingly more common practice in computer science to break down | ||||||
|  | hard problems into simpler, smaller problems. This will be more convincing when we cover the **rasterization** stage :) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Bonus point: present day **hardwares** and **algorithms** have become **extremely efficient** at processing  | ||||||
|  | triangles (sorting, rendering, etc) after eons of evolving around them. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Primitive Topology | ||||||
|  | So, we got our set of triangles, but how do we make a model out of them? | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| ## Primitive Topologies |  | ||||||
| 
 | 
 | ||||||
| ## Indices | ## Indices | ||||||
| 
 | 
 | ||||||
|  | @ -116,6 +120,8 @@ Triangles can never be __non-planar__(reside in more than 1 plane)! In Euclidean | ||||||
| 
 | 
 | ||||||
| ## Tessellation & Geometry Shaders | ## Tessellation & Geometry Shaders | ||||||
| 
 | 
 | ||||||
|  | ## Let's Recap! | ||||||
|  | 
 | ||||||
| ## Rasterizer | ## Rasterizer | ||||||
| 
 | 
 | ||||||
| ## Pixel Shader | ## Pixel Shader | ||||||
|  |  | ||||||
|  | @ -1,18 +1,11 @@ | ||||||
| import { mdsvex } from 'mdsvex'; | import { mdsvex } from 'mdsvex'; | ||||||
| import mdsvexConfig from './mdsvex.config.js'; | import { mdsvex_config }  from './mdsvex.config.js'; | ||||||
| 
 | 
 | ||||||
| import adapter from '@sveltejs/adapter-static'; | import adapter from '@sveltejs/adapter-static'; | ||||||
| import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; | ||||||
| 
 | 
 | ||||||
| /** @type {import('@sveltejs/kit').Config} */ | /** @type {import('@sveltejs/kit').Config} */ | ||||||
| const config = { | const config = { | ||||||
| 	// Consult https://svelte.dev/docs/kit/integrations
 |  | ||||||
| 	// for more information about preprocessors
 |  | ||||||
| 	preprocess: [ |  | ||||||
|         vitePreprocess(), |  | ||||||
|         mdsvex(mdsvexConfig) |  | ||||||
|     ], |  | ||||||
| 
 |  | ||||||
| 	kit: { | 	kit: { | ||||||
| 		// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
 | 		// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
 | ||||||
| 		// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
 | 		// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
 | ||||||
|  | @ -20,7 +13,14 @@ const config = { | ||||||
| 		adapter: adapter() | 		adapter: adapter() | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| 	extensions: ['.svelte', '.svx', '.md'] | 	extensions: ['.svelte', '.svx', '.md'], | ||||||
|  | 
 | ||||||
|  | 	// Consult https://svelte.dev/docs/kit/integrations
 | ||||||
|  | 	// for more information about preprocessors
 | ||||||
|  | 	preprocess: [ | ||||||
|  |         vitePreprocess(), | ||||||
|  |         mdsvex(mdsvex_config) | ||||||
|  |     ], | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export default config; | export default config; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue