set global theme variable theme: 'light'|'dark'
It is stored in document.documentElement.dataset and localStorage
pnpm i @holy-two/data-themeYou need to prevent FOUC yourself.
If you don't care:
// implicit call => (await import("@holy-two/data-theme/dist/init"))()importtogglefrom"@holy-two/data-theme"exportdefault()=><buttononclick={toggle}> toggle </button>In Astro it's easy:
---importiifefrom"@holy-two/data-theme/dist/iife?url"---
<scriptis:inlinefetchpriority="high"src={iife}></script>In Vite you need vite-plugin-insert-html :
// vite.config.tsimport{defineConfig}from"vite"import{insertHtmlasinsert,h}from"vite-plugin-insert-html"import{readFileSync}from"node:fs"import{fileURLToPath}from"node:url"exportdefaultdefineConfig({plugins: [insert({head: [h("script",{type: "text/javascript"},readFileSync(fileURLToPath(import.meta.resolve("@holy-two/data-theme/dist/iife/index.js")),"utf8")),],}),],})importtogglefrom"@holy-two/data-theme/dist/toggle"exportdefault()=><buttononclick={toggle}> toggle </button>