diff --git a/src/components/Icon.astro b/src/components/Icon.astro new file mode 100644 index 0000000..4e63cec --- /dev/null +++ b/src/components/Icon.astro @@ -0,0 +1,23 @@ +--- +export interface Props { + name: string, +}; + +const { name } = Astro.props; + +const icons = import.meta.glob<{string: string}>('@components/icons/*.svg', { query: '?raw', import: 'default' }); +const path = `/src/components/icons/${name}.svg`; +if (icons[path] === undefined) { + throw new Error(`Icon ${name} does not exist.`); +} +const icon = await icons[path](); +--- + + + + diff --git a/src/components/ThemeSwitcher.astro b/src/components/ThemeSwitcher.astro new file mode 100644 index 0000000..cc22c19 --- /dev/null +++ b/src/components/ThemeSwitcher.astro @@ -0,0 +1,73 @@ +--- +import Icon from '@components/Icon.astro'; +--- + + +
+ + +
+ + + + + diff --git a/src/components/icons/moon.svg b/src/components/icons/moon.svg new file mode 100644 index 0000000..4691de4 --- /dev/null +++ b/src/components/icons/moon.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/src/components/icons/sun.svg b/src/components/icons/sun.svg new file mode 100644 index 0000000..6c72f4c --- /dev/null +++ b/src/components/icons/sun.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 9f010af..25c24b8 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -2,6 +2,7 @@ import '@styles/main.css'; import '@fontsource-variable/baskervville'; import '@fontsource-variable/baskervville-sc'; +import ThemeSwitcher from '@components/ThemeSwitcher.astro'; --- @@ -11,9 +12,12 @@ import '@fontsource-variable/baskervville-sc'; @@ -55,12 +59,19 @@ import '@fontsource-variable/baskervville-sc'; } } } + + .switcher-container { + align-self: center; + }
diff --git a/src/styles/vars.css b/src/styles/vars.css index 83c178b..5a5fc55 100644 --- a/src/styles/vars.css +++ b/src/styles/vars.css @@ -51,6 +51,7 @@ &:not([data-theme="light"]) { @media(prefers-color-scheme: dark) { + color-scheme: dark; --bg-color: var(--dark-bg-color); --content-color: var(--dark-content-color); --content-color-faded: var(--dark-content-color-faded);