///
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);
}