11<script setup lang="ts">
22import NavMain from ' @/components/NavMain.vue' ;
33import NavUser from ' @/components/NavUser.vue' ;
4+ import NavFooter from ' @/components/NavFooter.vue' ;
45import { Sidebar , SidebarContent , SidebarFooter , SidebarHeader , SidebarMenu , SidebarMenuButton , SidebarMenuItem } from ' @/components/ui/sidebar' ;
56import { type NavItem } from ' @/types' ;
67import { BookOpenText , FolderGit2 , LayoutDashboard } from ' lucide-vue-next' ;
78import ApplicationLogo from ' ./ApplicationLogo.vue' ;
9+ import { SidebarInset , SidebarProvider } from ' @/components/ui/sidebar' ;
10+ import { ref } from ' vue' ;
811
912const mainNavItems: NavItem [] = [
1013 {
@@ -26,36 +29,51 @@ const footerNavItems: NavItem[] = [
2629 icon: BookOpenText ,
2730 },
2831];
32+
33+ const isOpen = ref (typeof window !== ' undefined' ? localStorage .getItem (' sidebar' ) !== ' false' : true );
34+
35+ const handleSidebarChange = (open : boolean ) => {
36+ isOpen .value = open ;
37+ if (typeof window !== ' undefined' ) {
38+ localStorage .setItem (' sidebar' , String (open ));
39+ }
40+ };
2941 </script >
3042
3143<template >
32- <Sidebar variant =" sidebar" collapsible =" icon" >
33- <SidebarHeader >
34- <SidebarMenu >
35- <SidebarMenuItem >
36- <SidebarMenuButton size =" lg" as-child >
37- <a href =" #" class =" flex items-center gap-3" >
38- <div
39- class =" flex aspect-square size-8 items-center justify-center rounded-md bg-sidebar-primary text-sidebar-primary-foreground"
40- >
41- <ApplicationLogo class =" size-5 fill-current text-white" />
42- </div >
43- <div class =" grid flex-1 text-left text-sm leading-tight" >
44- <span class =" truncate font-semibold" >Laravel</span >
45- <span class =" truncate text-xs" >Starter Kit</span >
46- </div >
47- </a >
48- </SidebarMenuButton >
49- </SidebarMenuItem >
50- </SidebarMenu >
51- </SidebarHeader >
44+ <SidebarProvider :default-open =" isOpen" :open =" isOpen" @update:open =" handleSidebarChange" >
45+ <Sidebar variant =" sidebar" collapsible =" icon" >
46+ <SidebarHeader >
47+ <SidebarMenu >
48+ <SidebarMenuItem >
49+ <SidebarMenuButton size =" lg" as-child >
50+ <a href =" #" class =" flex items-center gap-3" >
51+ <div
52+ class =" flex aspect-square size-8 items-center justify-center rounded-md bg-sidebar-primary text-sidebar-primary-foreground"
53+ >
54+ <ApplicationLogo class =" size-5 fill-current text-white" />
55+ </div >
56+ <div class =" grid flex-1 text-left text-sm leading-tight" >
57+ <span class =" truncate font-semibold" >Laravel</span >
58+ <span class =" truncate text-xs" >Starter Kit</span >
59+ </div >
60+ </a >
61+ </SidebarMenuButton >
62+ </SidebarMenuItem >
63+ </SidebarMenu >
64+ </SidebarHeader >
5265
53- <SidebarContent >
54- <NavMain :items =" mainNavItems" />
55- </SidebarContent >
66+ <SidebarContent >
67+ <NavMain :items =" mainNavItems" />
68+ </SidebarContent >
5669
57- <SidebarFooter >
58- <NavUser />
59- </SidebarFooter >
60- </Sidebar >
70+ <SidebarFooter >
71+ <NavFooter :items =" footerNavItems" />
72+ <NavUser />
73+ </SidebarFooter >
74+ </Sidebar >
75+ <SidebarInset >
76+ <slot />
77+ </SidebarInset >
78+ </SidebarProvider >
6179</template >
0 commit comments