--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.922 0 0);
--sidebar-ring: oklch(0.708 0 0);
- --code-background: oklch(0.225 0 0);
- --code-foreground: oklch(0.875 0 0);
+ --code-background: oklch(0.975 0 0);
+ --code-foreground: oklch(0.145 0 0);
--layer-popover: 1000000;
}
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(1 0 0 / 10%);
--sidebar-ring: oklch(0.556 0 0);
+ --code-background: oklch(0.225 0 0);
+ --code-foreground: oklch(0.875 0 0);
}
@theme inline {
import rehypeKatex from 'rehype-katex';
import rehypeStringify from 'rehype-stringify';
import { copyCodeToClipboard } from '$lib/utils/copy';
- import 'highlight.js/styles/github-dark.css';
+ import { browser } from '$app/environment';
import 'katex/dist/katex.min.css';
+ import githubDarkCss from 'highlight.js/styles/github-dark.css?inline';
+ import githubLightCss from 'highlight.js/styles/github.css?inline';
+ import { mode } from 'mode-watcher';
+
interface Props {
content: string;
class?: string;
let containerRef = $state<HTMLDivElement>();
let processedHtml = $state('');
+ function loadHighlightTheme(isDark: boolean) {
+ if (!browser) return;
+
+ const existingThemes = document.querySelectorAll('style[data-highlight-theme]');
+ existingThemes.forEach((style) => style.remove());
+
+ const style = document.createElement('style');
+ style.setAttribute('data-highlight-theme', 'true');
+ style.textContent = isDark ? githubDarkCss : githubLightCss;
+
+ document.head.appendChild(style);
+ }
+
+ $effect(() => {
+ const currentMode = mode.current;
+ const isDark = currentMode === 'dark';
+
+ loadHighlightTheme(isDark);
+ });
+
let processor = $derived(() => {
return remark()
.use(remarkGfm) // GitHub Flavored Markdown