refactor(layout): create header component
This commit is contained in:
parent
d6ab7840d7
commit
b3fe93a564
29
src/components/layout/Header.astro
Normal file
29
src/components/layout/Header.astro
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
import '@/styles/globals.css';
|
||||||
|
import { ModeToggle } from '@/components/ModeToggle';
|
||||||
|
---
|
||||||
|
|
||||||
|
<script is:inline>
|
||||||
|
const getThemePreference = () => {
|
||||||
|
if (typeof localStorage !== 'undefined' && localStorage.getItem('theme')) {
|
||||||
|
return localStorage.getItem('theme');
|
||||||
|
}
|
||||||
|
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||||
|
};
|
||||||
|
const isDark = getThemePreference() === 'dark';
|
||||||
|
document.documentElement.classList[isDark ? 'add' : 'remove']('dark');
|
||||||
|
|
||||||
|
if (typeof localStorage !== 'undefined') {
|
||||||
|
const observer = new MutationObserver(() => {
|
||||||
|
const isDark = document.documentElement.classList.contains('dark');
|
||||||
|
localStorage.setItem('theme', isDark ? 'dark' : 'light');
|
||||||
|
});
|
||||||
|
observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<header class="relative overflow-hidden bg-white dark:bg-gray-900 dark:text-gray-100">
|
||||||
|
<div class="flex items-center justify-center py-4 dark:text-white">
|
||||||
|
<ModeToggle client:load />
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
@ -1,29 +1,8 @@
|
|||||||
---
|
---
|
||||||
import '@/styles/globals.css';
|
import Header from '@/components/layout/Header.astro';
|
||||||
import { ModeToggle } from '@/components/ModeToggle';
|
|
||||||
|
|
||||||
const { title } = Astro.props;
|
const { title } = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
<script is:inline>
|
|
||||||
const getThemePreference = () => {
|
|
||||||
if (typeof localStorage !== 'undefined' && localStorage.getItem('theme')) {
|
|
||||||
return localStorage.getItem('theme');
|
|
||||||
}
|
|
||||||
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
||||||
};
|
|
||||||
const isDark = getThemePreference() === 'dark';
|
|
||||||
document.documentElement.classList[isDark ? 'add' : 'remove']('dark');
|
|
||||||
|
|
||||||
if (typeof localStorage !== 'undefined') {
|
|
||||||
const observer = new MutationObserver(() => {
|
|
||||||
const isDark = document.documentElement.classList.contains('dark');
|
|
||||||
localStorage.setItem('theme', isDark ? 'dark' : 'light');
|
|
||||||
});
|
|
||||||
observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
@ -35,9 +14,7 @@ const { title } = Astro.props;
|
|||||||
<title>{title}</title>
|
<title>{title}</title>
|
||||||
</head>
|
</head>
|
||||||
<body class="dark:bg-black">
|
<body class="dark:bg-black">
|
||||||
<div class="flex items-center justify-center pt-4 dark:text-white">
|
<Header />
|
||||||
<ModeToggle client:load />
|
|
||||||
</div>
|
|
||||||
<main>
|
<main>
|
||||||
<slot />
|
<slot />
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user