{"_id":"@bruneckel/vue-theme-transitions","_rev":"8-464ea731d0096514f1836154dffdf039","name":"@bruneckel/vue-theme-transitions","dist-tags":{"latest":"0.2.2"},"versions":{"0.1.0":{"name":"@bruneckel/vue-theme-transitions","version":"0.1.0","keywords":["vue","theme","dark-mode","view-transitions","spread","fade","transition","animation"],"author":{"name":"Bruno Neckel"},"license":"MIT","_id":"@bruneckel/vue-theme-transitions@0.1.0","maintainers":[{"name":"bncodes","email":"neckel.bw@gmail.com"}],"homepage":"https://github.com/bruneckel/theme-transitions#readme","bugs":{"url":"https://github.com/bruneckel/theme-transitions/issues"},"dist":{"shasum":"df6bb45630318a0315936b8e1952d28498c0e614","tarball":"https://registry.npmjs.org/@bruneckel/vue-theme-transitions/-/vue-theme-transitions-0.1.0.tgz","fileCount":10,"integrity":"sha512-pnwxKpp9MjDt71orfj5Kass+Jka9Zo0O/lvJymfClWdAtC00XJx3UTzZiVnSEaptASBlmnZMAA+5AnQsaus0qQ==","signatures":[{"sig":"MEQCIEQLmJQYOsPCi5m6aJw+m5RLsXR2KomuLyIN7HKkKtD4AiBu6jFvlQDogONmlzg6Hl6dMacn47CMSFcB35+c51bb+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8019},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./vite":{"types":"./dist/vite-plugin.d.mts","import":"./dist/vite-plugin.mjs"},"./style.css":"./dist/style.css"},"gitHead":"125ee68665fe0d6e9c1bc14e8023368e0dd62f85","scripts":{"build":"unbuild && node scripts/build-css.mjs","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"bncodes","email":"neckel.bw@gmail.com"},"repository":{"url":"git+https://github.com/bruneckel/theme-transitions.git","type":"git","directory":"packages/vue"},"_npmVersion":"11.16.0","description":"Vue 3 composable and Vite plugin for animated dark/light theme transitions using the View Transitions API","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@bruneckel/theme-transitions-core":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.40","vite":"^8.2.0","happy-dom":"^20.11.1","@vue/test-utils":"^2.4.11"},"peerDependencies":{"vue":"^3.5.0","vite":"^8.0.0"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/vue-theme-transitions_0.1.0_1785781451945_0.961614590755778","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.1.1":{"name":"@bruneckel/vue-theme-transitions","version":"0.1.1","keywords":["vue","theme","dark-mode","view-transitions","spread","fade","transition","animation"],"author":{"name":"Bruno Neckel"},"license":"MIT","_id":"@bruneckel/vue-theme-transitions@0.1.1","maintainers":[{"name":"bncodes","email":"neckel.bw@gmail.com"}],"homepage":"https://github.com/bruneckel/theme-transitions#readme","bugs":{"url":"https://github.com/bruneckel/theme-transitions/issues"},"dist":{"shasum":"66c2b0bc6fb213f43e973936e0cef5e41c413925","tarball":"https://registry.npmjs.org/@bruneckel/vue-theme-transitions/-/vue-theme-transitions-0.1.1.tgz","fileCount":10,"integrity":"sha512-gaCGzeghLn0ur266dlyk00/6ooIX8QfspABoKbxuSfByNT1wxd0FWbocFyhOzl2uhvd6uTg87W9AhAtEVVXFBA==","signatures":[{"sig":"MEYCIQCsi2uLkFSGYa9KE/yvRmw0zwLfw1clHbUXfakmHZ8GoQIhAOqUyp4DEF84mioxNIuof9JUJy7QVxc7tCjlPjVV6r0h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9571},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./vite":{"types":"./dist/vite-plugin.d.mts","import":"./dist/vite-plugin.mjs"},"./style.css":"./dist/style.css"},"gitHead":"e1047f7ec0b8d24add0bd35c105187855dd1dc46","scripts":{"build":"unbuild && node scripts/build-css.mjs","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"bncodes","email":"neckel.bw@gmail.com"},"repository":{"url":"git+https://github.com/bruneckel/theme-transitions.git","type":"git","directory":"packages/vue"},"_npmVersion":"11.16.0","description":"Vue 3 composable and Vite plugin for animated dark/light theme transitions using the View Transitions API","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@bruneckel/theme-transitions-core":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.40","vite":"^8.2.0","happy-dom":"^20.11.1","@vue/test-utils":"^2.4.11"},"peerDependencies":{"vue":"^3.5.0","vite":"^8.0.0"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/vue-theme-transitions_0.1.1_1785782685215_0.667197859871528","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.1.2":{"name":"@bruneckel/vue-theme-transitions","version":"0.1.2","keywords":["vue","theme","dark-mode","view-transitions","spread","fade","transition","animation"],"author":{"name":"Bruno Neckel"},"license":"MIT","_id":"@bruneckel/vue-theme-transitions@0.1.2","maintainers":[{"name":"bncodes","email":"neckel.bw@gmail.com"}],"homepage":"https://github.com/bruneckel/theme-transitions#readme","bugs":{"url":"https://github.com/bruneckel/theme-transitions/issues"},"dist":{"shasum":"3ac345a9ec3f2b480c1e22c69e994b2018436a79","tarball":"https://registry.npmjs.org/@bruneckel/vue-theme-transitions/-/vue-theme-transitions-0.1.2.tgz","fileCount":10,"integrity":"sha512-3bFP7Kf1unpb+qaZqsjVjJy+8ldV0yAypzbso/5I34E4F24ZjzYJG04lIMuZjVHeR5JY7Gyoq1bKGpORBVf6Zg==","signatures":[{"sig":"MEUCIQCBiForRXz3pWVFIdbKyqt6NnNEJikhs90dC7une7lKmgIgc3Jxck8/b1St5XVijhgQi3OUeu3EhEN9LCMNtX46MoQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10150},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./vite":{"types":"./dist/vite-plugin.d.mts","import":"./dist/vite-plugin.mjs"},"./style.css":"./dist/style.css"},"gitHead":"2ebe275038c056b7cf4a6f5dfaa1675ebdc0411f","scripts":{"build":"unbuild && node scripts/build-css.mjs","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"bncodes","email":"neckel.bw@gmail.com"},"repository":{"url":"git+https://github.com/bruneckel/theme-transitions.git","type":"git","directory":"packages/vue"},"_npmVersion":"11.16.0","description":"Vue 3 composable and Vite plugin for animated dark/light theme transitions using the View Transitions API","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@bruneckel/theme-transitions-core":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.40","vite":"^8.2.0","happy-dom":"^20.11.1","@vue/test-utils":"^2.4.11"},"peerDependencies":{"vue":"^3.5.0","vite":"^8.0.0"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/vue-theme-transitions_0.1.2_1785863226189_0.4720223184473187","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.1.3":{"name":"@bruneckel/vue-theme-transitions","version":"0.1.3","keywords":["vue","theme","dark-mode","view-transitions","spread","fade","transition","animation"],"author":{"name":"Bruno Neckel"},"license":"MIT","_id":"@bruneckel/vue-theme-transitions@0.1.3","maintainers":[{"name":"bncodes","email":"neckel.bw@gmail.com"}],"homepage":"https://github.com/bruneckel/theme-transitions#readme","bugs":{"url":"https://github.com/bruneckel/theme-transitions/issues"},"dist":{"shasum":"94d00251c980862664594a466c67a515b5cc05a5","tarball":"https://registry.npmjs.org/@bruneckel/vue-theme-transitions/-/vue-theme-transitions-0.1.3.tgz","fileCount":10,"integrity":"sha512-/lj0k6j8AGLDNJQVdryKuBx2Klb2ZF9u8h1xz8O1Sg5EPPgGnwDD3Tcfd5WyWPcH9t6GjZ4wNzEp9LALSg3oJg==","signatures":[{"sig":"MEMCH2uCqm3P11ilsZq21TGUdaMzGbDUmQnbJpLE2A8idDACICv9Uc25It7C3NdHmBhbxtGzzHqs1vcSmRvK/WsZV7+O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10168},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./vite":{"types":"./dist/vite-plugin.d.mts","import":"./dist/vite-plugin.mjs"},"./style.css":"./dist/style.css"},"gitHead":"e65052ce6da22b7eeeb3a13bb23c1cfc36a1f87d","scripts":{"build":"unbuild && node scripts/build-css.mjs","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"bncodes","email":"neckel.bw@gmail.com"},"repository":{"url":"git+https://github.com/bruneckel/theme-transitions.git","type":"git","directory":"packages/vue"},"_npmVersion":"11.16.0","description":"Vue 3 composable and Vite plugin for animated dark/light theme transitions using the View Transitions API","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@bruneckel/theme-transitions-core":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.40","vite":"^8.2.0","happy-dom":"^20.11.1","@vue/test-utils":"^2.4.11"},"peerDependencies":{"vue":"^3.5.0","vite":"^8.0.0"},"peerDependenciesMeta":{"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/vue-theme-transitions_0.1.3_1785863697469_0.6285674287550289","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.2.0":{"name":"@bruneckel/vue-theme-transitions","version":"0.2.0","keywords":["vue","vue3","composable","theme","theme-toggle","theme-switcher","dark-mode","dark-theme","view-transitions","view-transitions-api","spread","fade","transition","animation"],"author":{"name":"Bruno Neckel"},"license":"MIT","_id":"@bruneckel/vue-theme-transitions@0.2.0","maintainers":[{"name":"bncodes","email":"neckel.bw@gmail.com"}],"homepage":"https://github.com/bruneckel/theme-transitions#readme","bugs":{"url":"https://github.com/bruneckel/theme-transitions/issues"},"dist":{"shasum":"5ed212d4487330694a193149b7aa0b25c850e11a","tarball":"https://registry.npmjs.org/@bruneckel/vue-theme-transitions/-/vue-theme-transitions-0.2.0.tgz","fileCount":6,"integrity":"sha512-Zpi2Lf3hLxeVBsrVGh9CVJOm7nByCqdP+V0mbCHTR6iANv/6V3GMebVdQJg8yjgJEyq6n186eYeulXbGigjQGw==","signatures":[{"sig":"MEYCIQDMD32GQSDmwKHPq+4wy0SAnp4MkBTub8l7AVK0PTXC5gIhAME6pEPV2N+USSU3uOE+JlnV4vXrfo9GQ8Q7eI5sXndz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7566},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"1264d5e09667007c586e8f5fb6638bd94b0cc0de","scripts":{"build":"unbuild","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"bncodes","email":"neckel.bw@gmail.com"},"repository":{"url":"git+https://github.com/bruneckel/theme-transitions.git","type":"git","directory":"packages/vue"},"_npmVersion":"11.16.0","description":"Vue 3 composable for animated dark/light theme transitions using the View Transitions API","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@bruneckel/theme-transitions-core":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.40","happy-dom":"^20.11.1","@vue/test-utils":"^2.4.11"},"peerDependencies":{"vue":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-theme-transitions_0.2.0_1785920319911_0.6281176521736","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.2.1":{"name":"@bruneckel/vue-theme-transitions","version":"0.2.1","keywords":["vue","vue3","composable","theme","theme-toggle","theme-switcher","dark-mode","dark-theme","view-transitions","view-transitions-api","spread","fade","transition","animation"],"author":{"name":"Bruno Neckel"},"license":"MIT","_id":"@bruneckel/vue-theme-transitions@0.2.1","maintainers":[{"name":"bncodes","email":"neckel.bw@gmail.com"}],"homepage":"https://github.com/bruneckel/theme-transitions#readme","bugs":{"url":"https://github.com/bruneckel/theme-transitions/issues"},"dist":{"shasum":"0da0168faaea60894f121d50d27d6511bbfc8c2e","tarball":"https://registry.npmjs.org/@bruneckel/vue-theme-transitions/-/vue-theme-transitions-0.2.1.tgz","fileCount":6,"integrity":"sha512-kyKuhbSzO7fyqpKd50biTtqDQqXp0odiz8s4AMJJaPcvvFUWntH0n9qAnfsSFDMwfov4SQIv6MfnPcg7hppBQg==","signatures":[{"sig":"MEYCIQDJojYfJcvfXrvh0PlTqkSrDLtyRcdlnyyiV2R138CU/AIhAJctpuhYxsiUoI/qZFOGg2tfYKkyppTpZIb91MLKq4lu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7809},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"e8c57a623ff01fda281ba23ea0f713b01025196f","scripts":{"build":"unbuild","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"bncodes","email":"neckel.bw@gmail.com"},"repository":{"url":"git+https://github.com/bruneckel/theme-transitions.git","type":"git","directory":"packages/vue"},"_npmVersion":"11.16.0","description":"Vue 3 composable for animated dark/light theme transitions using the View Transitions API","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@bruneckel/theme-transitions-core":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.40","happy-dom":"^20.11.1","@vue/test-utils":"^2.4.11"},"peerDependencies":{"vue":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-theme-transitions_0.2.1_1785948702247_0.47880123059167823","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.2.2":{"name":"@bruneckel/vue-theme-transitions","version":"0.2.2","keywords":["vue","vue3","composable","theme","theme-toggle","theme-switcher","dark-mode","dark-theme","view-transitions","view-transitions-api","spread","fade","transition","animation"],"author":{"name":"Bruno Neckel"},"license":"MIT","_id":"@bruneckel/vue-theme-transitions@0.2.2","maintainers":[{"name":"bncodes","email":"neckel.bw@gmail.com"}],"homepage":"https://github.com/bruneckel/theme-transitions#readme","bugs":{"url":"https://github.com/bruneckel/theme-transitions/issues"},"dist":{"shasum":"8594f90ebb2ae3610e062fedd8f2865af66c9a1f","tarball":"https://registry.npmjs.org/@bruneckel/vue-theme-transitions/-/vue-theme-transitions-0.2.2.tgz","fileCount":6,"integrity":"sha512-xc6r3tm1zgh7Gpht1n2fvl+skuTDbZSA064DgOMcsO4LRx0j3GjNEPGHXeKBpHYpbhD62Qfm4R341KBBdYVqbg==","signatures":[{"sig":"MEUCIQD26l4J+5AEwbbBd32SUfUzSKMrqTvvh+RcqcxPWnWf0wIgJGchvXIm+PDcVmfn0rh+drK4oNHWcalee56ydoZbM7Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8031},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"b0ebd7632ab3d4aab84e20e139cd7e8d810f7d30","scripts":{"build":"unbuild","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"bncodes","email":"neckel.bw@gmail.com"},"repository":{"url":"git+https://github.com/bruneckel/theme-transitions.git","type":"git","directory":"packages/vue"},"_npmVersion":"11.16.0","description":"Vue 3 composable for animated dark/light theme transitions using the View Transitions API","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@bruneckel/theme-transitions-core":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.40","happy-dom":"^20.11.1","@vue/test-utils":"^2.4.11"},"peerDependencies":{"vue":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-theme-transitions_0.2.2_1785951912784_0.8541774272983786","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."}},"time":{"created":"2026-08-03T18:24:11.746Z","modified":"2026-08-08T04:22:52.620Z","0.1.0":"2026-08-03T18:24:12.079Z","0.1.1":"2026-08-03T18:44:45.362Z","0.1.2":"2026-08-04T17:07:06.319Z","0.1.3":"2026-08-04T17:14:57.608Z","0.2.0":"2026-08-05T08:58:40.047Z","0.2.1":"2026-08-05T16:51:42.383Z","0.2.2":"2026-08-05T17:45:12.950Z"},"bugs":{"url":"https://github.com/bruneckel/theme-transitions/issues"},"author":{"name":"Bruno Neckel"},"license":"MIT","homepage":"https://github.com/bruneckel/theme-transitions#readme","keywords":["vue","vue3","composable","theme","theme-toggle","theme-switcher","dark-mode","dark-theme","view-transitions","view-transitions-api","spread","fade","transition","animation"],"repository":{"url":"git+https://github.com/bruneckel/theme-transitions.git","type":"git","directory":"packages/vue"},"description":"Vue 3 composable for animated dark/light theme transitions using the View Transitions API","maintainers":[{"name":"bncodes","email":"neckel.bw@gmail.com"}],"readme":"# @bruneckel/vue-theme-transitions\n\n[![npm version](https://img.shields.io/npm/v/@bruneckel/vue-theme-transitions.svg)](https://www.npmjs.com/package/@bruneckel/vue-theme-transitions)\n[![license](https://img.shields.io/npm/l/@bruneckel/vue-theme-transitions.svg)](https://github.com/bruneckel/theme-transitions/blob/main/packages/vue/LICENSE)\n\nVue 3 composable for animated dark/light theme transitions using the View Transitions API.\n\n## Install\n\n```sh\nnpm install @bruneckel/vue-theme-transitions @bruneckel/theme-transitions-core\n# or\npnpm add @bruneckel/vue-theme-transitions @bruneckel/theme-transitions-core\n# or\nyarn add @bruneckel/vue-theme-transitions @bruneckel/theme-transitions-core\n```\n\n> [!IMPORTANT]\n> Using Tailwind? Set `darkMode: 'class'` in your Tailwind config. Tailwind's default (`'media'`) ignores the `dark`/`light` class this package applies to `<html>`, so the toggle will silently have no visual effect without it.\n\n## Usage\n\n```vue\n<script setup lang=\"ts\">\nimport { useThemeTransition } from '@bruneckel/vue-theme-transitions';\nimport '@bruneckel/theme-transitions-core/style.css';\n\nconst { theme, isAnimating, toggleTheme } = useThemeTransition({ variant: 'spread' });\n</script>\n\n<template>\n\t<button :disabled=\"isAnimating\" @click=\"toggleTheme\">\n\t\t{{ theme }}\n\t</button>\n</template>\n```\n\nBinding `toggleTheme` directly to `@click` works because it accepts the native `MouseEvent` and derives the spread effect's origin from the click position automatically. No import from the core package needed.\n\n## Options\n\n```ts\nuseThemeTransition(options?: {\n\tvariant?: 'spread' | 'fade' | 'none'; // default 'fade'\n\tduration?: string;                    // default '400ms' (fade) or '1.5s' (spread)\n\teasing?: string;                      // fade only, any CSS easing function, default 'ease'\n})\n```\n\n`'none'` skips the animation and ignores `duration`/`easing`. `spread` only accepts `duration`; its easing and clip-path radius are fixed and not configurable.\n\n`toggleTheme` and `setTheme(mode, ...)` accept a `MouseEvent` (as shown above) or an explicit options object, e.g. `{ origin, variant, duration }`. This overrides the composable's own options for that one call only. `setTheme('dark', event)` works the same way as `toggleTheme(event)`.\n\n`options` passed to `useThemeTransition` only takes effect on the composable's first call in the app, since it wraps a shared singleton. Per-call overrides on `toggleTheme`/`setTheme` are not affected by this and always apply. See [`@bruneckel/theme-transitions-core`](https://www.npmjs.com/package/@bruneckel/theme-transitions-core)'s README for the full singleton contract.\n\n## Vite plugin\n\nRegister the anti-flash init script in `vite.config.ts`:\n\n```ts\nimport { defineConfig } from 'vite';\nimport { themeTransitions } from '@bruneckel/theme-transitions-core/vite';\n\nexport default defineConfig({\n\tplugins: [themeTransitions()],\n});\n```\n\nOptionally, pass the same options as above so every `useThemeTransition()` call in the app picks them up without repeating them:\n\n```ts\nplugins: [themeTransitions({ variant: 'spread', duration: '1.5s' })],\n```\n\nThis only sets defaults. An explicit `useThemeTransition(options)` call, or a per-call override on `toggleTheme`/`setTheme`, still takes precedence.\n\nNot using Vite? See [`@bruneckel/theme-transitions-core`](https://www.npmjs.com/package/@bruneckel/theme-transitions-core)'s README for how to wire up the anti-flash script and stylesheet with webpack or another bundler.\n\n## Notes\n\n- This package has no SSR-specific handling. It targets plain client-side Vue 3 apps.\n\n## Known issues\n\n- The `spread` effect can render from the wrong position on Chrome 150 after moving the browser window between displays with different DPI. This is a known upstream Chrome bug, already fixed and pending release to the Stable channel. See [`@bruneckel/theme-transitions-core`](https://www.npmjs.com/package/@bruneckel/theme-transitions-core)'s README for details.\n","readmeFilename":"README.md"}