new theme switching icon
This commit is contained in:
@@ -1,104 +1,28 @@
|
|||||||
<svg class="w-8" aria-hidden="true" viewBox="0 0 24 24">
|
<script lang="ts">
|
||||||
<mask class="moon" id="moon-mask">
|
import type { Theme } from '$types';
|
||||||
<rect x="0" y="0" width="100%" height="100%" fill="white" />
|
export let theme: Theme = 'dark';
|
||||||
<circle cx="24" cy="10" r="6" fill="black" />
|
</script>
|
||||||
</mask>
|
|
||||||
<circle
|
|
||||||
class="sun"
|
|
||||||
cx="12"
|
|
||||||
cy="12"
|
|
||||||
r="6"
|
|
||||||
mask="url(#moon-mask)"
|
|
||||||
fill="currentColor"
|
|
||||||
/>
|
|
||||||
<g class="sun-beams" stroke="currentColor" stroke-width="2px">
|
|
||||||
<line x1="12" y1="1" x2="12" y2="3" />
|
|
||||||
<line x1="12" y1="21" x2="12" y2="23" />
|
|
||||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64" />
|
|
||||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78" />
|
|
||||||
<line x1="1" y1="12" x2="3" y2="12" />
|
|
||||||
<line x1="21" y1="12" x2="23" y2="12" />
|
|
||||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36" />
|
|
||||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
|
||||||
<style>
|
<div
|
||||||
svg {
|
class="{`${
|
||||||
--transition-duration-short: 0.15s;
|
theme === 'dark' ? 'swap-active' : 'swap-off'
|
||||||
--transition-duration-long: 0.4s;
|
} swap swap-rotate`} h-8 w-8"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
class="swap-on fill-current h-full w-full"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
><path
|
||||||
|
d="M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
|
|
||||||
--ease-1: cubic-bezier(0.25, 0, 0.3, 1);
|
<svg
|
||||||
|
class="swap-off fill-current h-full w-full"
|
||||||
--ease-out-1: cubic-bezier(0, 0, 0, 1);
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
--ease-elastic-1: cubic-bezier(0.5, 1.25, 0.75, 1.25);
|
><path
|
||||||
--ease-elastic-2: cubic-bezier(0.5, 1.5, 0.75, 1.25);
|
d="M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z"
|
||||||
}
|
/></svg
|
||||||
|
>
|
||||||
svg .moon,
|
</div>
|
||||||
svg .sun,
|
|
||||||
svg .sun-beams {
|
|
||||||
transform-origin: center center;
|
|
||||||
}
|
|
||||||
|
|
||||||
:global(.light) svg .sun {
|
|
||||||
transform: scale(1.75);
|
|
||||||
}
|
|
||||||
|
|
||||||
:global(.light) svg .sun-beams {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
:global(.light) svg .moon > circle {
|
|
||||||
transform: translateX(-7px);
|
|
||||||
}
|
|
||||||
|
|
||||||
@supports (cx: 1) {
|
|
||||||
:global(.light) svg .moon > circle {
|
|
||||||
transform: translateX(0);
|
|
||||||
cx: 17;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
|
||||||
svg .sun {
|
|
||||||
transition: transform var(--transition-duration-long)
|
|
||||||
var(--ease-elastic-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
svg .sun-beams {
|
|
||||||
transition: transform var(--transition-duration-long)
|
|
||||||
var(--ease-elastic-2),
|
|
||||||
opacity var(--transition-duration-long) var(--ease-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
svg .moon > circle {
|
|
||||||
transition: transform calc(var(--transition-duration-long) / 2)
|
|
||||||
var(--ease-out-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@supports (cx: 1) {
|
|
||||||
svg .moon > circle {
|
|
||||||
transition: cx calc(var(--transition-duration-long) / 2)
|
|
||||||
var(--ease-out-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
:global(.light) svg .sun {
|
|
||||||
transform: scale(1.75);
|
|
||||||
transition-timing-function: var(--ease-1);
|
|
||||||
transition-duration: calc(var(--transition-duration-long) / 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
:global(.light) svg .sun-beams {
|
|
||||||
transform: rotateZ(-25deg);
|
|
||||||
transition-duration: calc(var(--transition-duration-long) / 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
:global(.light) svg .moon > circle {
|
|
||||||
transition-delay: calc(var(--transition-duration-long) / 2);
|
|
||||||
transition-duration: var(--transition-duration-long);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -13,11 +13,8 @@
|
|||||||
data-tauri-drag-region
|
data-tauri-drag-region
|
||||||
class="h-12 bg-base-100 shadow-lg items-center justify-between flex px-2"
|
class="h-12 bg-base-100 shadow-lg items-center justify-between flex px-2"
|
||||||
>
|
>
|
||||||
<button
|
<button on:click={theme.toggleTheme} class="hover:text-secondary ml-2 grid">
|
||||||
on:click={theme.toggleTheme}
|
<ThemeToggleIcon theme={$theme} />
|
||||||
class="hover:text-secondary ml-2 transition-all"
|
|
||||||
>
|
|
||||||
<ThemeToggleIcon class="w-8" />
|
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<HeaderNav {navLinks} />
|
<HeaderNav {navLinks} />
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import type { Theme } from '$types';
|
|||||||
const store = new Store('.settings.dat');
|
const store = new Store('.settings.dat');
|
||||||
|
|
||||||
const createThemeStore = () => {
|
const createThemeStore = () => {
|
||||||
const { subscribe, update, set } = writable('');
|
const { subscribe, update, set } = writable<Theme>();
|
||||||
|
|
||||||
return {
|
return {
|
||||||
subscribe,
|
subscribe,
|
||||||
|
|||||||
Reference in New Issue
Block a user