/// import { useEffect, useState } from "react"; import { Moon, Sun } from "lucide-react"; import { highlightThemeHref } from "@/client/highlight-theme"; import { hydrateIsland } from "@/client/hydrate"; export type ThemeToggleProps = Record; function applyHighlightTheme(theme: "light" | "dark") { const stylesheet = document.getElementById("hljs-theme"); if (!(stylesheet instanceof HTMLLinkElement)) { return; } stylesheet.href = theme === "dark" ? highlightThemeHref.dark : highlightThemeHref.light; } function applyTheme(theme: "light" | "dark") { document.documentElement.dataset.theme = theme; document.documentElement.classList.toggle("dark", theme === "dark"); applyHighlightTheme(theme); } export function ThemeToggleIsland(_props: ThemeToggleProps) { const [theme, setTheme] = useState<"light" | "dark">("dark"); useEffect(() => { const initial = document.documentElement.classList.contains("dark") ? "dark" : "light"; setTheme(initial); applyTheme(initial); }, []); return ( ); } export function initThemeToggle() { hydrateIsland("theme-toggle", ThemeToggleIsland); }