11import { useState } from 'react' ;
2- import SideNav from '@/components/Navigation/SideNav' ;
32import Link from 'next/link' ;
4- import { MenuIcon , X } from 'lucide-react' ;
3+ import { Dialog , DialogBackdrop , DialogPanel , TransitionChild } from '@headlessui/react' ;
4+ import { Bars3Icon as MenuIcon , XMarkIcon as X } from '@heroicons/react/24/outline' ;
5+ import SideNav from '@/components/Navigation/SideNav' ;
56
67export default function Layout ( { children } ) {
78 const [ isSidebarOpen , setIsSidebarOpen ] = useState ( false ) ;
@@ -11,70 +12,83 @@ export default function Layout( { children } ) {
1112 } ;
1213
1314 return (
14- < div className = "w-full overflow-x-hidden bg-slate-950 text-white" >
15- < div className = "relative flex min-h-screen w-full flex-wrap text-white" >
16- { /* Sidebar */ }
17- < div className = { `fixed inset-y-0 left-0 z-50 w-auto max-w-xs transform transition-transform duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] lg:relative lg:translate-x-0 ${ isSidebarOpen ? 'translate-x-0' : '-translate-x-full lg:translate-x-0' } ` } >
18- < div className = "glass-strong h-full border-r border-white/20 shadow-xl" >
19- < div className = "flex items-center justify-between gap-4 border-b border-white/5 px-5 py-4 backdrop-blur" >
20- < Link
21- className = "group flex items-center gap-2 text-lg font-semibold tracking-wide"
22- href = "/"
23- passHref
24- >
25- < span className = "inline-flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-purple-500/10 to-indigo-500/10 text-sm font-bold uppercase shadow-ring" >
26- CPA
27- </ span >
28- < span className = "text-shadow transition-colors group-hover:text-indigo-100" >
29- CARD PRICE APP
30- </ span >
31- </ Link >
32- < button
33- className = "text-white/80 transition hover:text-white lg:hidden"
34- onClick = { toggleSidebar }
35- title = "Close"
36- >
37- < X size = { 26 } />
38- </ button >
15+ < div className = " w-full glass dark:bg-gray-900" >
16+ < Dialog open = { isSidebarOpen } onClose = { setIsSidebarOpen } className = "relative z-50 lg:hidden" >
17+ < DialogBackdrop
18+ transition
19+ className = "fixed inset-0 backdrop bg-black/20 transition-opacity duration-300 ease-linear data-closed:opacity-0"
20+ />
21+ < div className = "fixed inset-0 flex" >
22+ < DialogPanel
23+ transition
24+ className = "relative mr-16 flex w-fit max-w-xs flex-1 transform transition duration-300 ease-in-out data-closed:-translate-x-full"
25+ >
26+ < TransitionChild >
27+ < div className = "absolute top-0 left-full flex w-16 justify-center pt-5 duration-300 ease-in-out data-closed:opacity-0" >
28+ < button type = "button" onClick = { toggleSidebar } className = "-m-2.5 p-2.5" >
29+ < span className = "sr-only" > Close sidebar</ span >
30+ < X title = "Close" aria-hidden = "true" className = "size-7 text-red-600" />
31+ </ button >
32+ </ div >
33+ </ TransitionChild >
34+ < div className = "glass backdrop flex grow flex-col gap-y-5 overflow-y-auto pb-2 dark:bg-gray-900 dark:ring dark:ring-white/10 dark:before:pointer-events-none dark:before:absolute dark:before:inset-0 dark:before:bg-black/10" >
35+ < div className = "relative flex shrink-0 items-start" >
36+ < img
37+ alt = "Card Price App"
38+ src = "images/logo-with-name-side.jpg"
39+ className = "h-8 w-auto dark:hidden"
40+ />
41+ < img
42+ alt = "Card Price App"
43+ src = "images/logo-with-name-side.jpg"
44+ className = "hidden h-8 w-auto dark:block"
45+ />
46+ </ div >
47+ < nav className = "relative flex flex-1 flex-col" >
48+ < SideNav />
49+ </ nav >
3950 </ div >
40- < SideNav />
51+ </ DialogPanel >
52+ </ div >
53+ </ Dialog >
54+ < div className = "glass hidden lg:fixed lg:inset-y-0 lg:z-50 lg:flex lg:w-72 lg:flex-col dark:bg-gray-900" >
55+ < div className = "flex grow flex-col gap-y-5 overflow-y-auto border-r border-gray-200 px-6 dark:border-white/10 dark:bg-black/10" >
56+ < div className = "flex shrink-0 items-center" >
57+ < img
58+ alt = "Card Price App"
59+ src = "images/logo-with-name-side.jpg"
60+ className = "h-16 w-full object-cover rounded bg-fixed bg-clip-padding"
61+ />
4162 </ div >
63+ < nav className = "flex flex-1 flex-col" >
64+ < SideNav />
65+ </ nav >
4266 </ div >
43-
44- { /* Main Content */ }
45- < div className = "flex w-full flex-1 flex-col overflow-x-hidden" >
46- < header className = "sticky top-0 z-30 flex items-center justify-between border-b border-white/50 bg-slate-900/10 px-4 py-3 backdrop-blur lg:hidden" >
47- < Link href = "/" passHref className = "text-base font-semibold tracking-wide" >
48- < span className = "text-shadow backdrop font-semibold" > CARD PRICE APP</ span >
49- </ Link >
50- < button
51- className = "rounded-md border border-white/10 bg-white/5 p-2 text-white/90 transition hover:bg-white/10"
52- title = "Menu"
53- onClick = { toggleSidebar }
54- >
55- < MenuIcon size = { 30 } />
56- </ button >
57- </ header >
58-
59- < main className = "mx-auto w-full max-w-7xl" >
60- < div className = "w-full" >
61- < div className = "backdrop text-shadow relative p-2" >
62- { children }
63- </ div >
64- </ div >
65- </ main >
67+ </ div >
68+ < div className = "lg:pl-72 w-full" >
69+ < div className = "sticky top-0 z-40 flex items-center gap-x-6 glass backdrop px-4 py-4 shadow-xs sm:px-6 lg:hidden dark:bg-gray-900 dark:shadow-none dark:after:pointer-events-none dark:after:absolute dark:after:inset-0 dark:after:border-b dark:after:border-white/10 dark:after:bg-black/10" >
70+ < button
71+ type = "button"
72+ onClick = { toggleSidebar }
73+ className = " text-gray-700 hover:text-gray-900 lg:hidden dark:text-gray-400 dark:hover:text-white"
74+ title = "Open sidebar"
75+ >
76+ < span className = "sr-only" > Open sidebar</ span >
77+ < MenuIcon color = { "white" } aria-hidden = "true" className = "size-6" />
78+ </ button >
79+ < Link href = "/" className = "flex-1 text-sm font-semibold leading-6 text-shadow text-white" >
80+ CARD PRICE APP
81+ </ Link >
82+ < div className = " flex items-center" >
83+ < span className = "sr-only" > User profile placeholder</ span >
84+ </ div >
6685 </ div >
86+ < main className = "mx-auto" >
87+ < div className = " mx-1 my-2 " >
88+ { children }
89+ </ div >
90+ </ main >
6791 </ div >
68-
69- { isSidebarOpen && (
70- < button
71- type = "button"
72- className = "fixed inset-0 z-30 bg-black/85 lg:hidden"
73- onClick = { toggleSidebar }
74- aria-label = "Close sidebar overlay"
75- />
76- ) }
7792 </ div >
7893 ) ;
79- }
80-
94+ } ;
0 commit comments