|
1 | 1 | <svelte:window on:resize={setMiniWindow} />
|
| 2 | + |
| 3 | +<svelte:head> |
| 4 | + {#if lightTheme === true} |
| 5 | + <!-- SMUI Styles --> |
| 6 | + <link rel="stylesheet" href="{assets}/smui.css" /> |
| 7 | + |
| 8 | + <!-- Site Styles --> |
| 9 | + <link rel="stylesheet" href="{assets}/site.css" /> |
| 10 | + {:else if lightTheme === false} |
| 11 | + <!-- SMUI Styles --> |
| 12 | + <link rel="stylesheet" href="{assets}/smui.css" /> |
| 13 | + <link rel="stylesheet" href="{assets}/smui-dark.css" media="screen" /> |
| 14 | + |
| 15 | + <!-- Site Styles --> |
| 16 | + <link rel="stylesheet" href="{assets}/site.css" /> |
| 17 | + <link rel="stylesheet" href="{assets}/site-dark.css" media="screen" /> |
| 18 | + {:else} |
| 19 | + <!-- SMUI Styles --> |
| 20 | + <link |
| 21 | + rel="stylesheet" |
| 22 | + href="{assets}/smui.css" |
| 23 | + media="(prefers-color-scheme: light)" |
| 24 | + /> |
| 25 | + <link |
| 26 | + rel="stylesheet" |
| 27 | + href="{assets}/smui-dark.css" |
| 28 | + media="screen and (prefers-color-scheme: dark)" |
| 29 | + /> |
| 30 | + |
| 31 | + <!-- Site Styles --> |
| 32 | + <link |
| 33 | + rel="stylesheet" |
| 34 | + href="{assets}/site.css" |
| 35 | + media="(prefers-color-scheme: light)" |
| 36 | + /> |
| 37 | + <link |
| 38 | + rel="stylesheet" |
| 39 | + href="{assets}/site-dark.css" |
| 40 | + media="screen and (prefers-color-scheme: dark)" |
| 41 | + /> |
| 42 | + {/if} |
| 43 | +</svelte:head> |
| 44 | + |
2 | 45 | {#if iframe}
|
3 | 46 | <slot />
|
4 | 47 | {:else}
|
|
62 | 105 | <IconButton
|
63 | 106 | toggle
|
64 | 107 | pressed={lightTheme}
|
65 |
| - on:SMUIIconButtonToggle:change={switchTheme} |
| 108 | + on:SMUIIconButtonToggle:change={() => (lightTheme = !lightTheme)} |
66 | 109 | >
|
67 | 110 | <Icon component={Svg} viewBox="0 0 24 24" on>
|
68 | 111 | <path fill="currentColor" d={mdiWeatherNight} />
|
|
134 | 177 | mdiWeatherNight,
|
135 | 178 | } from '@mdi/js';
|
136 | 179 | import TinyGesture from 'tinygesture';
|
| 180 | + import { assets } from '$app/paths'; |
137 | 181 | import { page } from '$app/stores';
|
138 | 182 |
|
139 | 183 | import TopAppBar, { Row, Section, Title } from '@smui/top-app-bar';
|
|
155 | 199 | let drawerGesture: TinyGesture;
|
156 | 200 | let mainContentGesture: TinyGesture;
|
157 | 201 |
|
158 |
| - let lightTheme = |
159 |
| - typeof window === 'undefined' || |
160 |
| - window.matchMedia('(prefers-color-scheme: light)').matches; |
161 |
| - function switchTheme() { |
162 |
| - lightTheme = !lightTheme; |
163 |
| -
|
164 |
| - let themeLink = document.head.querySelector<HTMLLinkElement>('#theme'); |
165 |
| - if (!themeLink) { |
166 |
| - themeLink = document.createElement('link'); |
167 |
| - themeLink.rel = 'stylesheet'; |
168 |
| - themeLink.id = 'theme'; |
169 |
| - } |
170 |
| - themeLink.href = `/smui${lightTheme ? '' : '-dark'}.css`; |
171 |
| - document.head |
172 |
| - .querySelector<HTMLLinkElement>('link[href="/smui-dark.css"]') |
173 |
| - ?.insertAdjacentElement('afterend', themeLink); |
174 |
| -
|
175 |
| - let siteLink = document.head.querySelector<HTMLLinkElement>('#site'); |
176 |
| - if (!siteLink) { |
177 |
| - siteLink = document.createElement('link'); |
178 |
| - siteLink.rel = 'stylesheet'; |
179 |
| - siteLink.id = 'site'; |
180 |
| - } |
181 |
| - siteLink.href = `/site${lightTheme ? '' : '-dark'}.css`; |
182 |
| - document.head |
183 |
| - .querySelector<HTMLLinkElement>('link[href="/site-dark.css"]') |
184 |
| - ?.insertAdjacentElement('afterend', siteLink); |
185 |
| - } |
| 202 | + let lightTheme: boolean; |
186 | 203 |
|
187 | 204 | type DemoSection = {
|
188 | 205 | component?: ItemComponentDev;
|
|
570 | 587 | drawerOpen = false;
|
571 | 588 | });
|
572 | 589 | }
|
| 590 | +
|
| 591 | + lightTheme = window.matchMedia('(prefers-color-scheme: light)').matches; |
573 | 592 | });
|
574 | 593 |
|
575 | 594 | onDestroy(() => {
|
|
0 commit comments