11<script setup lang="ts">
2- import { useTemplateRef } from ' vue' ;
32import { useAppLayout } from ' @/composables/useAppLayout' ;
4- import { ChevronsUpDown , ChevronDown , Menu as MenuIcon } from ' lucide-vue-next' ;
3+ import { ChevronsUpDown , Menu as MenuIcon } from ' lucide-vue-next' ;
54import Container from ' @/components/Container.vue' ;
5+ import PopupMenuButton from ' @/components/PopupMenuButton.vue' ;
66import NavLogoLink from ' @/components/NavLogoLink.vue' ;
7- import Menu from ' @/components/primevue/menu/Menu.vue' ;
87import MenuBar from ' @/components/primevue/menu/MenuBar.vue' ;
98import PanelMenu from ' @/components/primevue/menu/PanelMenu.vue' ;
109import Breadcrumb from ' @/components/primevue/menu/Breadcrumb.vue' ;
10+ import { MenuItem } from ' @/types' ;
1111
12- const props = defineProps ({
13- breadcrumbs: {
14- type: Array ,
15- required: false ,
16- default : () => [],
17- },
12+ const props = withDefaults (defineProps <{
13+ breadcrumbs? : MenuItem [],
14+ }>(), {
15+ breadcrumbs : () => [],
1816});
1917
2018const {
@@ -24,16 +22,6 @@ const {
2422 menuItems,
2523 userMenuItems,
2624} = useAppLayout ();
27-
28- const userMenu = useTemplateRef (' user-menu' );
29- const toggleUserMenu = (event ) => {
30- userMenu .value .$el .toggle (event );
31- };
32-
33- const mobileUserMenu = useTemplateRef (' mobile-user-menu' );
34- const toggleMobileUserMenu = (event ) => {
35- mobileUserMenu .value .$el .toggle (event );
36- };
3725 </script >
3826
3927<template >
@@ -51,26 +39,15 @@ const toggleMobileUserMenu = (event) => {
5139 />
5240 </div >
5341 <template #footer >
54- <div class =" flex flex-col" >
55- <Button
56- id =" mobile-user-menu-btn"
57- :label =" userName"
58- severity =" secondary"
59- size =" large"
60- pt:root:class =" flex flex-row-reverse justify-between"
61- @click =" toggleMobileUserMenu($event)"
62- >
63- <template #icon >
64- <ChevronsUpDown />
65- </template >
66- </Button >
67- <Menu
68- ref =" mobile-user-menu"
69- :model =" userMenuItems"
70- pt:root:class =" z-[1200]"
71- popup
72- />
73- </div >
42+ <PopupMenuButton
43+ name =" mobile-user-menu-dd"
44+ :menu-items =" userMenuItems"
45+ :button-label =" userName"
46+ >
47+ <template #toggleIcon >
48+ <ChevronsUpDown />
49+ </template >
50+ </PopupMenuButton >
7451 </template >
7552 </Drawer >
7653 <ScrollTop
@@ -84,7 +61,7 @@ const toggleMobileUserMenu = (event) => {
8461 <MenuBar
8562 :key =" currentRoute"
8663 :model =" menuItems"
87- pt:root:class =" px-0 py-4 border-0 rounded-none dynamic-bg "
64+ pt:root:class =" px-0 py-0 border-0 rounded-none bg-transparent h-[var(--header-height)]! "
8865 pt:button:class =" hidden"
8966 >
9067 <template #start >
@@ -96,28 +73,12 @@ const toggleMobileUserMenu = (event) => {
9673 <!-- User Dropdown Menu -->
9774 <div class =" hidden lg:flex items-center ms-6 space-x-3" >
9875 <div class =" flex flex-col" >
99- <Button
100- id =" user-menu-btn"
101- :label =" userName"
102- pt:root:class =" flex flex-row-reverse justify-between"
103- severity =" secondary"
104- text
105- @click =" toggleUserMenu($event)"
106- >
107- <template #icon >
108- <ChevronDown />
109- </template >
110- </Button >
111- <div
112- id =" user-menu-append"
113- class =" relative"
114- />
115- <Menu
116- ref =" user-menu"
117- appendTo =" #user-menu-append"
118- :model =" userMenuItems"
119- pt:root:class =" left-auto! top-0! right-0 z-[1200]"
120- popup
76+ <PopupMenuButton
77+ name =" desktop-user-menu-dd"
78+ button-variant =" text"
79+ fixed-position =" right"
80+ :menu-items =" userMenuItems"
81+ :button-label =" userName"
12182 />
12283 </div >
12384 </div >
@@ -149,7 +110,6 @@ const toggleMobileUserMenu = (event) => {
149110 v-if =" props.breadcrumbs.length"
150111 :model =" props.breadcrumbs"
151112 />
152-
153113 <!-- Page Content -->
154114 <slot />
155115 </Container >
0 commit comments