Skip to content

Commit 96a2615

Browse files
authored
Merge pull request #413 from connorabbas/master
Catch up
2 parents 28e26b3 + 1613998 commit 96a2615

File tree

1 file changed

+36
-12
lines changed

1 file changed

+36
-12
lines changed

resources/js/layouts/app/SidebarLayout.vue

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
<script setup lang="ts">
22
import { usePage } from '@inertiajs/vue3'
3-
import { ChevronsUpDown, Menu as MenuIcon } from 'lucide-vue-next'
3+
import { useStorage } from '@vueuse/core'
4+
import {
5+
ChevronsUpDown,
6+
Menu as MenuIcon,
7+
PanelLeftClose,
8+
PanelLeftOpen
9+
} from 'lucide-vue-next'
410
import { useAppLayout } from '@/composables/useAppLayout'
511
import ClientOnly from '@/components/ClientOnly.vue'
612
import Container from '@/components/Container.vue'
@@ -24,13 +30,17 @@ const {
2430
expandedKeys,
2531
userMenuItems,
2632
} = useAppLayout()
33+
34+
const sidebarOpen = useStorage('desktop-sidebar-open', true)
35+
const toggleSidebar = () => {
36+
sidebarOpen.value = !sidebarOpen.value
37+
}
2738
</script>
2839

2940
<template>
3041
<div class="h-screen flex flex-col">
3142
<ClientOnly>
3243
<Teleport to="body">
33-
<!-- Mobile drawer menu -->
3444
<Drawer
3545
v-model:visible="mobileMenuOpen"
3646
position="right"
@@ -87,9 +97,9 @@ const {
8797
</header>
8898

8999
<div class="flex-1">
90-
<!-- Desktop Sidebar -->
91100
<aside
92-
class="w-[18rem] inset-0 hidden lg:block fixed overflow-y-auto overflow-x-hidden dynamic-bg border-r dynamic-border"
101+
class="w-[18rem] inset-0 hidden lg:block fixed overflow-y-auto overflow-x-hidden dynamic-bg border-r dynamic-border transition-transform duration-300 ease-in-out"
102+
:class="sidebarOpen ? 'translate-x-0' : '-translate-x-full'"
93103
>
94104
<div class="w-full h-full flex flex-col justify-between p-4">
95105
<div class="space-y-6">
@@ -119,20 +129,34 @@ const {
119129
</div>
120130
</aside>
121131

122-
<!-- Scrollable Content -->
123-
<main class="flex flex-col h-full lg:pl-[18rem]">
132+
<main
133+
class="flex flex-col h-full transition-[padding] duration-300 ease-in-out"
134+
:class="sidebarOpen ? 'lg:pl-[18rem]' : 'lg:pl-0'"
135+
>
124136
<Container
125137
vertical
126138
fluid
127139
>
128-
<!-- Session-based Flash Messages -->
129140
<FlashMessages />
130141

131-
<!-- Breadcrumbs -->
132-
<Breadcrumb
133-
v-if="props.breadcrumbs.length"
134-
:model="props.breadcrumbs"
135-
/>
142+
<div class="flex gap-4 items-center">
143+
<Button
144+
v-tooltip.right="`${sidebarOpen ? 'Collapse' : 'Expand'} Sidebar`"
145+
class="hidden lg:flex"
146+
severity="secondary"
147+
outlined
148+
@click="toggleSidebar()"
149+
>
150+
<template #icon>
151+
<PanelLeftClose v-if="sidebarOpen" />
152+
<PanelLeftOpen v-else />
153+
</template>
154+
</Button>
155+
<Breadcrumb
156+
v-if="props.breadcrumbs.length"
157+
:model="props.breadcrumbs"
158+
/>
159+
</div>
136160

137161
<!-- Page Content -->
138162
<slot />

0 commit comments

Comments
 (0)