fix(header): update header
This commit is contained in:
parent
7794b3f904
commit
10b42cd2ff
@ -10,17 +10,24 @@ const navLinks = [
|
|||||||
{ href: '/blog/', label: 'Blog' },
|
{ href: '/blog/', label: 'Blog' },
|
||||||
{ href: '/recipes/', label: 'Recipes' },
|
{ href: '/recipes/', label: 'Recipes' },
|
||||||
];
|
];
|
||||||
---
|
|
||||||
|
|
||||||
<script is:inline>
|
|
||||||
const getThemePreference = () => {
|
const getThemePreference = () => {
|
||||||
if (typeof localStorage !== 'undefined' && localStorage.getItem('theme')) {
|
if (typeof localStorage !== 'undefined' && localStorage.getItem('theme')) {
|
||||||
return localStorage.getItem('theme');
|
return localStorage.getItem('theme');
|
||||||
}
|
}
|
||||||
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const setTheme = (document: Document) => {
|
||||||
|
const theme = getThemePreference();
|
||||||
|
document.documentElement.setAttribute('data-theme', theme ?? '');
|
||||||
|
document.documentElement.classList.toggle('dark', theme === 'dark');
|
||||||
|
};
|
||||||
|
---
|
||||||
|
|
||||||
|
<script define:vars={{ setTheme }} is:inline>
|
||||||
const isDark = getThemePreference() === 'dark';
|
const isDark = getThemePreference() === 'dark';
|
||||||
document.documentElement.classList[isDark ? 'add' : 'remove']('dark');
|
document.documentElement.classList.toggle('dark', isDark);
|
||||||
|
|
||||||
if (typeof localStorage !== 'undefined') {
|
if (typeof localStorage !== 'undefined') {
|
||||||
const observer = new MutationObserver(() => {
|
const observer = new MutationObserver(() => {
|
||||||
@ -30,18 +37,6 @@ const navLinks = [
|
|||||||
observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
|
observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
|
||||||
}
|
}
|
||||||
|
|
||||||
function setTheme(document) {
|
|
||||||
const theme =
|
|
||||||
localStorage.getItem('theme') ||
|
|
||||||
(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
|
|
||||||
document.documentElement.setAttribute('data-theme', theme);
|
|
||||||
if (theme === 'dark') {
|
|
||||||
document.documentElement.classList.add('dark');
|
|
||||||
} else {
|
|
||||||
document.documentElement.classList.remove('dark');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setTheme(document);
|
setTheme(document);
|
||||||
|
|
||||||
document.addEventListener('astro:before-swap', (ev) => {
|
document.addEventListener('astro:before-swap', (ev) => {
|
||||||
@ -54,7 +49,7 @@ const navLinks = [
|
|||||||
open: false,
|
open: false,
|
||||||
windowWidth: window.innerWidth,
|
windowWidth: window.innerWidth,
|
||||||
init() {
|
init() {
|
||||||
this.$watch('windowWidth', value => {
|
this.$watch('windowWidth', () => {
|
||||||
this.open = false;
|
this.open = false;
|
||||||
});
|
});
|
||||||
window.addEventListener('resize', () => {
|
window.addEventListener('resize', () => {
|
||||||
@ -80,9 +75,8 @@ const navLinks = [
|
|||||||
Astro Deploy
|
Astro Deploy
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<div class="hidden sm:block">
|
|
||||||
<nav
|
<nav
|
||||||
class="mb-6 mt-4 flex min-w-60 flex-col gap-1 p-0 font-sans text-base font-normal text-zinc-700 dark:text-zinc-300 sm:mb-0 sm:mt-0 sm:flex-row sm:p-1">
|
class="mb-6 mt-4 hidden min-w-60 flex-col gap-1 p-0 font-sans text-base font-normal text-zinc-700 dark:text-zinc-300 sm:mb-0 sm:mt-0 sm:flex sm:flex-row sm:p-1">
|
||||||
{
|
{
|
||||||
navLinks.map(({ href, label }) => (
|
navLinks.map(({ href, label }) => (
|
||||||
<HeaderLink
|
<HeaderLink
|
||||||
@ -93,7 +87,6 @@ const navLinks = [
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<button
|
<button
|
||||||
class="relative h-10 w-10 text-gray-500 focus:outline-none sm:hidden"
|
class="relative h-10 w-10 text-gray-500 focus:outline-none sm:hidden"
|
||||||
@ -122,7 +115,6 @@ const navLinks = [
|
|||||||
<ModeToggle client:load />
|
<ModeToggle client:load />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="block w-full basis-full overflow-hidden sm:hidden">
|
|
||||||
<nav
|
<nav
|
||||||
id="menu"
|
id="menu"
|
||||||
:class="{'flex': open, 'hidden': !open}"
|
:class="{'flex': open, 'hidden': !open}"
|
||||||
@ -133,7 +125,7 @@ const navLinks = [
|
|||||||
x-transition:leave="transition ease-in duration-200"
|
x-transition:leave="transition ease-in duration-200"
|
||||||
x-transition:leave-start="opacity-100 transform scale-100"
|
x-transition:leave-start="opacity-100 transform scale-100"
|
||||||
x-transition:leave-end="opacity-0 transform scale-90"
|
x-transition:leave-end="opacity-0 transform scale-90"
|
||||||
class="mb-6 mt-4 hidden min-w-60 flex-col gap-1 p-0 font-sans text-base font-normal text-zinc-700 dark:text-zinc-300 sm:mb-0 sm:mt-0 sm:block sm:flex-row sm:p-1">
|
class="mb-6 mt-4 hidden min-w-60 flex-col gap-1 p-0 font-sans text-base font-normal text-zinc-700 dark:text-zinc-300 sm:mb-0 sm:mt-0 sm:hidden sm:flex-row sm:p-1">
|
||||||
{
|
{
|
||||||
navLinks.map(({ href, label }) => (
|
navLinks.map(({ href, label }) => (
|
||||||
<HeaderLink
|
<HeaderLink
|
||||||
@ -144,5 +136,4 @@ const navLinks = [
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
|
||||||
</header>
|
</header>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user