fix(mobile-menu): implement persistent viewport pattern and hx-preserve for mobile menu
All checks were successful
Deploy Theme / deploy (push) Successful in 14s
All checks were successful
Deploy Theme / deploy (push) Successful in 14s
This commit is contained in:
16
default.hbs
16
default.hbs
@@ -10,13 +10,6 @@
|
|||||||
});
|
});
|
||||||
document.documentElement.setAttribute('data-theme', this.theme);
|
document.documentElement.setAttribute('data-theme', this.theme);
|
||||||
document.documentElement.classList.remove('hidden');
|
document.documentElement.classList.remove('hidden');
|
||||||
|
|
||||||
document.addEventListener('htmx:beforeRequest', () => {
|
|
||||||
this.mobileMenuOpen = false;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
toggleMenu() {
|
|
||||||
this.mobileMenuOpen = !this.mobileMenuOpen;
|
|
||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
:data-theme="theme"
|
:data-theme="theme"
|
||||||
@@ -36,10 +29,15 @@
|
|||||||
{{ghost_head}}
|
{{ghost_head}}
|
||||||
</head>
|
</head>
|
||||||
<body class="{{body_class}} font-sans antialiased">
|
<body class="{{body_class}} font-sans antialiased">
|
||||||
{{!-- Mobile menu outside boosted area --}}
|
|
||||||
|
{{!-- The Mobile Menu is outside the HTMX swap container to keep state alive --}}
|
||||||
{{> mobile-menu}}
|
{{> mobile-menu}}
|
||||||
|
|
||||||
<div class="min-h-screen flex flex-col" hx-boost="true">
|
{{!--
|
||||||
|
We target only this container for HTMX page swaps.
|
||||||
|
This keeps root Alpine state (like mobileMenuOpen) persistent.
|
||||||
|
--}}
|
||||||
|
<div id="viewport" class="min-h-screen flex flex-col" hx-boost="true" hx-target="#viewport" hx-select="#viewport">
|
||||||
{{> header}}
|
{{> header}}
|
||||||
|
|
||||||
<main class="flex-grow">
|
<main class="flex-grow">
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<div id="mobile-menu"
|
<div id="mobile-menu"
|
||||||
|
hx-preserve
|
||||||
x-show="mobileMenuOpen"
|
x-show="mobileMenuOpen"
|
||||||
x-transition:enter="transition ease-out duration-300"
|
x-transition:enter="transition ease-out duration-300"
|
||||||
x-transition:enter-start="-translate-x-full"
|
x-transition:enter-start="-translate-x-full"
|
||||||
|
|||||||
Reference in New Issue
Block a user