diff --git a/.prettierignore b/.prettierignore index 4987e8b..582afc9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,6 +2,7 @@ build/ .svelte-kit/ dist/ src-tauri/target/ +src-tauri/gen/ node_modules/ .pnpm-store/ pnpm-lock.yaml diff --git a/package.json b/package.json index c4f867d..ebc72bf 100644 --- a/package.json +++ b/package.json @@ -25,11 +25,13 @@ "dependencies": { "@tauri-apps/api": "^2", "@tauri-apps/plugin-dialog": "^2", + "@tauri-apps/plugin-notification": "^2", "@tauri-apps/plugin-opener": "^2", + "@tauri-apps/plugin-os": "^2", "@tauri-apps/plugin-shell": "^2.3.4", "@tauri-apps/plugin-store": "^2", - "@tauri-apps/plugin-notification": "^2", - "@tauri-apps/plugin-os": "^2" + "highlight.js": "^11.11.1", + "marked": "^17.0.1" }, "devDependencies": { "@eslint/js": "^9.39.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1876ce3..95070cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,12 @@ importers: '@tauri-apps/plugin-store': specifier: ^2 version: 2.4.2 + highlight.js: + specifier: ^11.11.1 + version: 11.11.1 + marked: + specifier: ^17.0.1 + version: 17.0.1 devDependencies: '@eslint/js': specifier: ^9.39.2 @@ -1185,6 +1191,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + html-encoding-sniffer@6.0.0: resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -1372,6 +1382,11 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + marked@17.0.1: + resolution: {integrity: sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg==} + engines: {node: '>= 20'} + hasBin: true + mdn-data@2.12.2: resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} @@ -2780,6 +2795,8 @@ snapshots: has-flag@4.0.0: {} + highlight.js@11.11.1: {} + html-encoding-sniffer@6.0.0: dependencies: '@exodus/bytes': 1.8.0 @@ -2949,6 +2966,8 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + marked@17.0.1: {} + mdn-data@2.12.2: {} min-indent@1.0.1: {} diff --git a/src/app.css b/src/app.css index 5693b71..2339269 100644 --- a/src/app.css +++ b/src/app.css @@ -6,6 +6,7 @@ --bg-secondary: #16213e; --bg-terminal: #0f0f1a; --bg-hover: #2a2a4a; + --bg-code: #1e1e2e; --accent-primary: #e94560; --accent-secondary: #ff6b9d; --text-primary: #ffffff; @@ -18,6 +19,16 @@ --terminal-tool: #c084fc; --terminal-tool-name: #ddd6fe; --terminal-error: #f87171; + + /* Syntax highlighting colors (dark) */ + --hljs-keyword: #f472b6; + --hljs-string: #a3e635; + --hljs-number: #fbbf24; + --hljs-comment: #6b7280; + --hljs-function: #c084fc; + --hljs-type: #22d3ee; + --hljs-variable: #fb923c; + --hljs-meta: #94a3b8; } [data-theme="light"] { @@ -25,6 +36,7 @@ --bg-secondary: #ffffff; --bg-terminal: #f1f3f4; --bg-hover: #e8e8e8; + --bg-code: #f5f5f5; --accent-primary: #e94560; --accent-secondary: #ff6b9d; --text-primary: #1a1a2e; @@ -37,6 +49,16 @@ --terminal-tool: #7c3aed; --terminal-tool-name: #8b5cf6; --terminal-error: #dc2626; + + /* Syntax highlighting colors (light) */ + --hljs-keyword: #d946ef; + --hljs-string: #16a34a; + --hljs-number: #d97706; + --hljs-comment: #9ca3af; + --hljs-function: #7c3aed; + --hljs-type: #0891b2; + --hljs-variable: #ea580c; + --hljs-meta: #64748b; } html, diff --git a/src/lib/components/Markdown.svelte b/src/lib/components/Markdown.svelte new file mode 100644 index 0000000..21c2972 --- /dev/null +++ b/src/lib/components/Markdown.svelte @@ -0,0 +1,294 @@ + + +