add markdown rendering for descriptions
This commit is contained in:
		
							parent
							
								
									9a9ae0e127
								
							
						
					
					
						commit
						0ece318fd2
					
				
					 3 changed files with 111 additions and 2 deletions
				
			
		
							
								
								
									
										87
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										87
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -20,6 +20,7 @@
 | 
				
			||||||
				"debug": "^4.4.0",
 | 
									"debug": "^4.4.0",
 | 
				
			||||||
				"drizzle-orm": "^0.36.4",
 | 
									"drizzle-orm": "^0.36.4",
 | 
				
			||||||
				"layerchart": "^0.59.1",
 | 
									"layerchart": "^0.59.1",
 | 
				
			||||||
 | 
									"markdown-it": "^14.1.0",
 | 
				
			||||||
				"mysql2": "^3.11.4"
 | 
									"mysql2": "^3.11.4"
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			"devDependencies": {
 | 
								"devDependencies": {
 | 
				
			||||||
| 
						 | 
					@ -32,6 +33,7 @@
 | 
				
			||||||
				"@types/d3-shape": "^3.1.6",
 | 
									"@types/d3-shape": "^3.1.6",
 | 
				
			||||||
				"@types/debug": "^4.1.12",
 | 
									"@types/debug": "^4.1.12",
 | 
				
			||||||
				"@types/eslint": "^9.6.0",
 | 
									"@types/eslint": "^9.6.0",
 | 
				
			||||||
 | 
									"@types/markdown-it": "^14.1.2",
 | 
				
			||||||
				"autoprefixer": "^10.4.20",
 | 
									"autoprefixer": "^10.4.20",
 | 
				
			||||||
				"drizzle-kit": "^0.28.1",
 | 
									"drizzle-kit": "^0.28.1",
 | 
				
			||||||
				"eslint": "^9.7.0",
 | 
									"eslint": "^9.7.0",
 | 
				
			||||||
| 
						 | 
					@ -2400,6 +2402,31 @@
 | 
				
			||||||
			"dev": true,
 | 
								"dev": true,
 | 
				
			||||||
			"license": "MIT"
 | 
								"license": "MIT"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							"node_modules/@types/linkify-it": {
 | 
				
			||||||
 | 
								"version": "5.0.0",
 | 
				
			||||||
 | 
								"resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
 | 
				
			||||||
 | 
								"integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
 | 
				
			||||||
 | 
								"dev": true,
 | 
				
			||||||
 | 
								"license": "MIT"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							"node_modules/@types/markdown-it": {
 | 
				
			||||||
 | 
								"version": "14.1.2",
 | 
				
			||||||
 | 
								"resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
 | 
				
			||||||
 | 
								"integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
 | 
				
			||||||
 | 
								"dev": true,
 | 
				
			||||||
 | 
								"license": "MIT",
 | 
				
			||||||
 | 
								"dependencies": {
 | 
				
			||||||
 | 
									"@types/linkify-it": "^5",
 | 
				
			||||||
 | 
									"@types/mdurl": "^2"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							"node_modules/@types/mdurl": {
 | 
				
			||||||
 | 
								"version": "2.0.0",
 | 
				
			||||||
 | 
								"resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
 | 
				
			||||||
 | 
								"integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
 | 
				
			||||||
 | 
								"dev": true,
 | 
				
			||||||
 | 
								"license": "MIT"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		"node_modules/@types/ms": {
 | 
							"node_modules/@types/ms": {
 | 
				
			||||||
			"version": "0.7.34",
 | 
								"version": "0.7.34",
 | 
				
			||||||
			"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
 | 
								"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
 | 
				
			||||||
| 
						 | 
					@ -2777,7 +2804,6 @@
 | 
				
			||||||
			"version": "2.0.1",
 | 
								"version": "2.0.1",
 | 
				
			||||||
			"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
 | 
								"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
 | 
				
			||||||
			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
 | 
								"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
 | 
				
			||||||
			"dev": true,
 | 
					 | 
				
			||||||
			"license": "Python-2.0"
 | 
								"license": "Python-2.0"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		"node_modules/aria-query": {
 | 
							"node_modules/aria-query": {
 | 
				
			||||||
| 
						 | 
					@ -4113,6 +4139,18 @@
 | 
				
			||||||
			"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
 | 
								"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
 | 
				
			||||||
			"license": "MIT"
 | 
								"license": "MIT"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							"node_modules/entities": {
 | 
				
			||||||
 | 
								"version": "4.5.0",
 | 
				
			||||||
 | 
								"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
 | 
				
			||||||
 | 
								"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
 | 
				
			||||||
 | 
								"license": "BSD-2-Clause",
 | 
				
			||||||
 | 
								"engines": {
 | 
				
			||||||
 | 
									"node": ">=0.12"
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"funding": {
 | 
				
			||||||
 | 
									"url": "https://github.com/fb55/entities?sponsor=1"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		"node_modules/esbuild": {
 | 
							"node_modules/esbuild": {
 | 
				
			||||||
			"version": "0.21.5",
 | 
								"version": "0.21.5",
 | 
				
			||||||
			"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
 | 
								"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
 | 
				
			||||||
| 
						 | 
					@ -5194,6 +5232,15 @@
 | 
				
			||||||
			"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
 | 
								"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
 | 
				
			||||||
			"license": "MIT"
 | 
								"license": "MIT"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							"node_modules/linkify-it": {
 | 
				
			||||||
 | 
								"version": "5.0.0",
 | 
				
			||||||
 | 
								"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
 | 
				
			||||||
 | 
								"integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
 | 
				
			||||||
 | 
								"license": "MIT",
 | 
				
			||||||
 | 
								"dependencies": {
 | 
				
			||||||
 | 
									"uc.micro": "^2.0.0"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		"node_modules/locate-character": {
 | 
							"node_modules/locate-character": {
 | 
				
			||||||
			"version": "3.0.0",
 | 
								"version": "3.0.0",
 | 
				
			||||||
			"resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
 | 
								"resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
 | 
				
			||||||
| 
						 | 
					@ -5276,6 +5323,29 @@
 | 
				
			||||||
				"@jridgewell/sourcemap-codec": "^1.5.0"
 | 
									"@jridgewell/sourcemap-codec": "^1.5.0"
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							"node_modules/markdown-it": {
 | 
				
			||||||
 | 
								"version": "14.1.0",
 | 
				
			||||||
 | 
								"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
 | 
				
			||||||
 | 
								"integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
 | 
				
			||||||
 | 
								"license": "MIT",
 | 
				
			||||||
 | 
								"dependencies": {
 | 
				
			||||||
 | 
									"argparse": "^2.0.1",
 | 
				
			||||||
 | 
									"entities": "^4.4.0",
 | 
				
			||||||
 | 
									"linkify-it": "^5.0.0",
 | 
				
			||||||
 | 
									"mdurl": "^2.0.0",
 | 
				
			||||||
 | 
									"punycode.js": "^2.3.1",
 | 
				
			||||||
 | 
									"uc.micro": "^2.1.0"
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"bin": {
 | 
				
			||||||
 | 
									"markdown-it": "bin/markdown-it.mjs"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							"node_modules/mdurl": {
 | 
				
			||||||
 | 
								"version": "2.0.0",
 | 
				
			||||||
 | 
								"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
 | 
				
			||||||
 | 
								"integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
 | 
				
			||||||
 | 
								"license": "MIT"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		"node_modules/merge2": {
 | 
							"node_modules/merge2": {
 | 
				
			||||||
			"version": "1.4.1",
 | 
								"version": "1.4.1",
 | 
				
			||||||
			"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
 | 
								"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
 | 
				
			||||||
| 
						 | 
					@ -6031,6 +6101,15 @@
 | 
				
			||||||
				"node": ">=6"
 | 
									"node": ">=6"
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							"node_modules/punycode.js": {
 | 
				
			||||||
 | 
								"version": "2.3.1",
 | 
				
			||||||
 | 
								"resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
 | 
				
			||||||
 | 
								"integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
 | 
				
			||||||
 | 
								"license": "MIT",
 | 
				
			||||||
 | 
								"engines": {
 | 
				
			||||||
 | 
									"node": ">=6"
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		"node_modules/queue-microtask": {
 | 
							"node_modules/queue-microtask": {
 | 
				
			||||||
			"version": "1.2.3",
 | 
								"version": "1.2.3",
 | 
				
			||||||
			"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
 | 
								"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
 | 
				
			||||||
| 
						 | 
					@ -6977,6 +7056,12 @@
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							"node_modules/uc.micro": {
 | 
				
			||||||
 | 
								"version": "2.1.0",
 | 
				
			||||||
 | 
								"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
 | 
				
			||||||
 | 
								"integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
 | 
				
			||||||
 | 
								"license": "MIT"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		"node_modules/undici-types": {
 | 
							"node_modules/undici-types": {
 | 
				
			||||||
			"version": "6.19.8",
 | 
								"version": "6.19.8",
 | 
				
			||||||
			"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
 | 
								"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,7 @@
 | 
				
			||||||
		"@types/d3-shape": "^3.1.6",
 | 
							"@types/d3-shape": "^3.1.6",
 | 
				
			||||||
		"@types/debug": "^4.1.12",
 | 
							"@types/debug": "^4.1.12",
 | 
				
			||||||
		"@types/eslint": "^9.6.0",
 | 
							"@types/eslint": "^9.6.0",
 | 
				
			||||||
 | 
							"@types/markdown-it": "^14.1.2",
 | 
				
			||||||
		"autoprefixer": "^10.4.20",
 | 
							"autoprefixer": "^10.4.20",
 | 
				
			||||||
		"drizzle-kit": "^0.28.1",
 | 
							"drizzle-kit": "^0.28.1",
 | 
				
			||||||
		"eslint": "^9.7.0",
 | 
							"eslint": "^9.7.0",
 | 
				
			||||||
| 
						 | 
					@ -50,6 +51,7 @@
 | 
				
			||||||
		"debug": "^4.4.0",
 | 
							"debug": "^4.4.0",
 | 
				
			||||||
		"drizzle-orm": "^0.36.4",
 | 
							"drizzle-orm": "^0.36.4",
 | 
				
			||||||
		"layerchart": "^0.59.1",
 | 
							"layerchart": "^0.59.1",
 | 
				
			||||||
 | 
							"markdown-it": "^14.1.0",
 | 
				
			||||||
		"mysql2": "^3.11.4"
 | 
							"mysql2": "^3.11.4"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,6 @@
 | 
				
			||||||
<script lang="ts">
 | 
					<script lang="ts">
 | 
				
			||||||
 | 
						import markdownIt from 'markdown-it';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	import InfoIcon from './components/icons/InfoIcon.svelte';
 | 
						import InfoIcon from './components/icons/InfoIcon.svelte';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	export type SkillProps = {
 | 
						export type SkillProps = {
 | 
				
			||||||
| 
						 | 
					@ -11,6 +13,10 @@
 | 
				
			||||||
	type Props = { skill: SkillProps };
 | 
						type Props = { skill: SkillProps };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let { skill = $bindable() }: Props = $props();
 | 
						let { skill = $bindable() }: Props = $props();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const md = markdownIt();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						let description = $state(md.render(skill.description ?? ''));
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<label for={skill.id} class="justify-self-end"
 | 
					<label for={skill.id} class="justify-self-end"
 | 
				
			||||||
| 
						 | 
					@ -57,5 +63,21 @@
 | 
				
			||||||
	class="border border-slate-400 p-4 backdrop:bg-black/30 backdrop:backdrop-blur-sm"
 | 
						class="border border-slate-400 p-4 backdrop:bg-black/30 backdrop:backdrop-blur-sm"
 | 
				
			||||||
>
 | 
					>
 | 
				
			||||||
	<h2 class="mb-2 text-2xl">{skill.title}</h2>
 | 
						<h2 class="mb-2 text-2xl">{skill.title}</h2>
 | 
				
			||||||
	<p>{skill.description}</p>
 | 
						<p class="markdown text-left">{@html description}</p>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
						.markdown {
 | 
				
			||||||
 | 
							:global(ul) {
 | 
				
			||||||
 | 
								list-style-type: disc;
 | 
				
			||||||
 | 
								margin-left: 1rem;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							:global(ol) {
 | 
				
			||||||
 | 
								list-style-type: decimal;
 | 
				
			||||||
 | 
								margin-left: 1rem;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							:global(a) {
 | 
				
			||||||
 | 
								color: blue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue