Skip to content

Commit eb88980

Browse files
committed
feat: Refactor MobileNav to use headlessui Dialog
1 parent 0c2c8ad commit eb88980

File tree

1 file changed

+65
-33
lines changed

1 file changed

+65
-33
lines changed

components/MobileNav.tsx

Lines changed: 65 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -36,41 +36,73 @@ const MobileNav = () => {
3636
/>
3737
</svg>
3838
</button>
39-
<div
40-
className={`fixed left-0 top-0 z-10 h-full w-full transform bg-white opacity-95 duration-300 ease-in-out dark:bg-gray-950 dark:opacity-[0.98] ${
41-
navShow ? 'translate-x-0' : 'hidden translate-x-full'
42-
}`}
43-
>
44-
<nav className="fixed mt-8 h-full">
45-
{headerNavLinks.map((link) => (
46-
<div key={link.title} className="px-12 py-4">
47-
<Link
48-
href={link.href}
49-
className="text-2xl font-bold tracking-widest text-gray-900 dark:text-gray-100"
50-
onClick={onToggleNav}
39+
40+
<Transition appear show={navShow} as={Fragment}>
41+
<Dialog as="div" className="relative z-10" onClose={onToggleNav}>
42+
<Transition.Child
43+
as={Fragment}
44+
enter="ease-out duration-300"
45+
enterFrom="opacity-0"
46+
enterTo="opacity-100"
47+
leave="ease-in duration-200"
48+
leaveFrom="opacity-100"
49+
leaveTo="opacity-0"
50+
>
51+
<div className="fixed inset-0 bg-black/25" />
52+
</Transition.Child>
53+
54+
<div className="fixed inset-0 overflow-y-auto">
55+
<div className="flex min-h-full items-center justify-center p-4 text-center">
56+
<Transition.Child
57+
as={Fragment}
58+
enter="transition ease-in-out duration-300 transform"
59+
enterFrom="translate-x-full opacity-0"
60+
enterTo="translate-x-0 opacity-95"
61+
leave="transition ease-in duration-200 transform"
62+
leaveFrom="translate-x-0 opacity-95"
63+
leaveTo="translate-x-full opacity-0"
5164
>
52-
{link.title}
53-
</Link>
65+
<Dialog.Panel className="fixed left-0 top-0 z-10 h-full w-full bg-white opacity-95 duration-300 dark:bg-gray-950 dark:opacity-[0.98]">
66+
<nav className="fixed mt-8 h-full text-left">
67+
{headerNavLinks.map((link) => (
68+
<div key={link.title} className="px-12 py-4">
69+
<Link
70+
href={link.href}
71+
className="text-2xl font-bold tracking-widest text-gray-900 dark:text-gray-100"
72+
onClick={onToggleNav}
73+
>
74+
{link.title}
75+
</Link>
76+
</div>
77+
))}
78+
</nav>
79+
80+
<div className="flex justify-end">
81+
<button
82+
className="mr-8 mt-11 h-8 w-8"
83+
aria-label="Toggle Menu"
84+
onClick={onToggleNav}
85+
>
86+
<svg
87+
xmlns="http://www.w3.org/2000/svg"
88+
viewBox="0 0 20 20"
89+
fill="currentColor"
90+
className="text-gray-900 dark:text-gray-100"
91+
>
92+
<path
93+
fillRule="evenodd"
94+
d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z"
95+
clipRule="evenodd"
96+
/>
97+
</svg>
98+
</button>
99+
</div>
100+
</Dialog.Panel>
101+
</Transition.Child>
54102
</div>
55-
))}
56-
</nav>
57-
<div className="flex justify-end">
58-
<button className="mr-8 mt-11 h-8 w-8" aria-label="Toggle Menu" onClick={onToggleNav}>
59-
<svg
60-
xmlns="http://www.w3.org/2000/svg"
61-
viewBox="0 0 20 20"
62-
fill="currentColor"
63-
className="text-gray-900 dark:text-gray-100"
64-
>
65-
<path
66-
fillRule="evenodd"
67-
d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z"
68-
clipRule="evenodd"
69-
/>
70-
</svg>
71-
</button>
72-
</div>
73-
</div>
103+
</div>
104+
</Dialog>
105+
</Transition>
74106
</>
75107
)
76108
}

0 commit comments

Comments
 (0)