ModeWatcherDecorator.svelte 738 B

123456789101112131415161718192021222324252627282930313233343536
  1. <script lang="ts">
  2. import { ModeWatcher } from 'mode-watcher';
  3. import { onMount } from 'svelte';
  4. interface Props {
  5. children?: any;
  6. }
  7. let { children }: Props = $props();
  8. onMount(() => {
  9. const root = document.documentElement;
  10. const theme = localStorage.getItem('mode-watcher-mode') || 'system';
  11. if (theme === 'dark') {
  12. root.classList.add('dark');
  13. } else if (theme === 'light') {
  14. root.classList.remove('dark');
  15. } else {
  16. const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
  17. if (prefersDark) {
  18. root.classList.add('dark');
  19. } else {
  20. root.classList.remove('dark');
  21. }
  22. }
  23. });
  24. </script>
  25. <ModeWatcher />
  26. {#if children}
  27. {@const Component = children}
  28. <Component />
  29. {/if}