Remove hamburger buttons and implement enhanced sidebar design across all layouts
Build And Push Image / docker (push) Successful in 2m6s Details

- Removed hamburger menu buttons from all layouts (member, admin, board, dashboard)
- Updated all sidebars to fixed 280px width (non-collapsible)
- Enhanced glass morphism effects with 30px blur
- Implemented vertical profile card with small avatar
- Added consistent animations and hover effects
- Updated design documentation with new specifications
This commit is contained in:
Matt 2025-08-31 15:38:19 +02:00
parent e74f12eaa0
commit 7685cd130f
5 changed files with 163 additions and 99 deletions

View File

@ -6,6 +6,9 @@ This document details the glass morphism design patterns implemented in the Mona
## Implementation Date ## Implementation Date
December 2024 December 2024
## Latest Update
January 2025 - Enhanced Sidebar Design with Fixed Width
## Key Changes ## Key Changes
### 1. Global SCSS Architecture ### 1. Global SCSS Architecture
@ -18,35 +21,53 @@ Created `assets/scss/main.scss` with comprehensive design system implementation:
### 2. Layout Transformations ### 2. Layout Transformations
#### Enhanced Sidebar Design (All Layouts)
- **Fixed Width**: 280px permanent sidebar (non-collapsible)
- **Enhanced Glass Effects**: 30px blur with improved opacity
- **No Hamburger Menu**: Removed collapse/expand functionality entirely
- **Vertical Profile Card**: Small avatar stacked above user info
- **Animated Navigation**: Hover effects with smooth transitions
- **Glass Badges**: Consistent styling across all access levels
- **Shimmer Animation**: Logo with subtle shimmer effect
#### Admin Layout (`layouts/admin.vue`) #### Admin Layout (`layouts/admin.vue`)
- **Glass Navigation Drawer**: Semi-transparent sidebar with backdrop blur - **Enhanced Glass Navigation**: Fixed 280px width with enhanced blur
- **Gradient App Bar**: Dark gradient from monaco-red-600 to monaco-red-900 - **Gradient App Bar**: Dark gradient from monaco-red-600 to monaco-red-900
- **Glass Icon Buttons**: Semi-transparent with hover effects - **Glass Icon Buttons**: Semi-transparent with hover effects
- **Floating Logo**: Subtle animation on MonacoUSA logo - **Profile Card**: Vertical layout with admin-specific menu options
- **Glass Cards**: Command palette and dropdowns with glass effects
#### Board Layout (`layouts/board.vue`) #### Board Layout (`layouts/board.vue`)
- **Glass Navigation Drawer**: Consistent with admin but lighter gradient - **Enhanced Glass Navigation**: Consistent 280px fixed width
- **Gradient App Bar**: Softer gradient from monaco-red to brown tones - **Gradient App Bar**: Softer gradient from monaco-red to brown tones
- **Glass Search Dialog**: Search overlay with glass card styling - **Glass Search Dialog**: Search overlay with glass card styling
- **Badge Enhancements**: Gradient badges with subtle shadows - **Profile Card**: Board member profile with vertical layout
#### Member Layout (`layouts/member.vue`) #### Member Layout (`layouts/member.vue`)
- **Glass Navigation Drawer**: Simplified navigation with glass effects - **Enhanced Glass Navigation**: Same 280px fixed width design
- **Gradient App Bar**: Lightest gradient for member access level - **Gradient App Bar**: Lightest gradient for member access level
- **Streamlined Navigation**: Fewer menu items with clear hierarchy - **Streamlined Navigation**: Fewer menu items with clear hierarchy
- **Profile Card**: Member profile with consistent vertical layout
## Glass Morphism Patterns ## Glass Morphism Patterns
### Core Mixins ### Core Mixins
```scss ```scss
@mixin glass-effect($bg-opacity: 0.7, $blur: 20px) { // Enhanced glass effect with stronger blur
background: rgba(255, 255, 255, $bg-opacity); @mixin enhanced-glass($opacity: 0.9, $blur: 30px) {
backdrop-filter: blur($blur); background: linear-gradient(
-webkit-backdrop-filter: blur($blur); 135deg,
border: 1px solid rgba(255, 255, 255, 0.3); rgba(255, 255, 255, $opacity * 0.95),
box-shadow: $shadow-glass; rgba(255, 255, 255, $opacity * 0.85),
rgba(255, 255, 255, $opacity * 0.75)
);
backdrop-filter: blur($blur) saturate(180%);
-webkit-backdrop-filter: blur($blur) saturate(180%);
border: 1px solid rgba(255, 255, 255, 0.25);
box-shadow:
0 8px 32px 0 rgba(31, 38, 135, 0.37),
inset 0 1px 2px rgba(255, 255, 255, 0.6),
inset 0 -1px 2px rgba(0, 0, 0, 0.05);
} }
``` ```
@ -75,10 +96,12 @@ Created `assets/scss/main.scss` with comprehensive design system implementation:
3. **Member**: Lightest gradients (monaco-red-500 range) 3. **Member**: Lightest gradients (monaco-red-500 range)
### Depth & Layering ### Depth & Layering
- Navigation drawer: 95% opacity, 30px blur - Navigation drawer: Fixed 280px width, 90% opacity, 30px blur
- Profile card: Vertical layout with small avatar
- Dropdowns: 95% opacity, 20px blur - Dropdowns: 95% opacity, 20px blur
- Cards: 80% opacity, 15px blur - Cards: 80% opacity, 15px blur
- Buttons: 10-20% opacity, 10px blur - Buttons: 10-20% opacity, 10px blur
- No collapsible functionality - permanent fixed sidebar
## Animation Patterns ## Animation Patterns

View File

@ -1,36 +1,36 @@
<template> <template>
<v-app> <v-app>
<v-navigation-drawer v-model="drawer" app width="300" class="glass-drawer"> <v-navigation-drawer v-model="drawer" app width="280" permanent class="enhanced-glass-drawer">
<!-- Logo Section with Glass Effect --> <!-- Enhanced Logo Section -->
<v-list-item class="pa-4 text-center glass-logo-section"> <v-list-item class="pa-4 text-center enhanced-glass-logo">
<v-img <v-img
src="/MONACOUSA-Flags_376x376.png" src="/MONACOUSA-Flags_376x376.png"
width="80" width="80"
height="80" height="80"
class="mx-auto mb-2 float-animation" class="mx-auto mb-2 shimmer-animation"
/> />
<div class="text-h6 font-weight-bold monaco-red-text"> <div class="text-h6 font-weight-bold text-gradient">
MonacoUSA Portal MonacoUSA Portal
</div> </div>
<v-chip <v-chip
size="x-small" size="x-small"
class="monaco-chip-gradient mt-1" class="glass-badge mt-1"
> >
ADMINISTRATOR ADMINISTRATOR
</v-chip> </v-chip>
</v-list-item> </v-list-item>
<v-divider class="glass-divider" /> <v-divider class="glass-divider mx-3" />
<!-- Navigation Menu with Glass Effects --> <!-- Enhanced Navigation Menu -->
<v-list nav density="comfortable" class="glass-nav-list"> <v-list nav density="comfortable" class="enhanced-glass-nav">
<!-- Admin Overview --> <!-- Admin Overview -->
<v-list-item <v-list-item
to="/admin/dashboard" to="/admin/dashboard"
prepend-icon="mdi-view-dashboard" prepend-icon="mdi-view-dashboard"
title="Admin Dashboard" title="Admin Dashboard"
value="dashboard" value="dashboard"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
<!-- User Management --> <!-- User Management -->
@ -40,7 +40,7 @@
v-bind="props" v-bind="props"
prepend-icon="mdi-account-cog" prepend-icon="mdi-account-cog"
title="User Management" title="User Management"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
</template> </template>
@ -75,7 +75,7 @@
v-bind="props" v-bind="props"
prepend-icon="mdi-account-group" prepend-icon="mdi-account-group"
title="Member Management" title="Member Management"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
</template> </template>
@ -106,7 +106,7 @@
v-bind="props" v-bind="props"
prepend-icon="mdi-currency-usd" prepend-icon="mdi-currency-usd"
title="Financial" title="Financial"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
</template> </template>
@ -137,7 +137,7 @@
v-bind="props" v-bind="props"
prepend-icon="mdi-cog" prepend-icon="mdi-cog"
title="System" title="System"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
</template> </template>
@ -179,7 +179,7 @@
prepend-icon="mdi-calendar" prepend-icon="mdi-calendar"
title="Events Management" title="Events Management"
value="events" value="events"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
<!-- Analytics --> <!-- Analytics -->
@ -188,7 +188,7 @@
prepend-icon="mdi-chart-line" prepend-icon="mdi-chart-line"
title="Analytics & Insights" title="Analytics & Insights"
value="analytics" value="analytics"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
<v-divider class="my-2 glass-divider" /> <v-divider class="my-2 glass-divider" />
@ -200,40 +200,68 @@
prepend-icon="mdi-shield-account" prepend-icon="mdi-shield-account"
title="Board Portal" title="Board Portal"
value="board-view" value="board-view"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
<v-list-item <v-list-item
to="/member/dashboard" to="/member/dashboard"
prepend-icon="mdi-account" prepend-icon="mdi-account"
title="Member Portal" title="Member Portal"
value="member-view" value="member-view"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
</v-list> </v-list>
<!-- Footer with Glass Card --> <!-- Enhanced Profile Card -->
<template v-slot:append> <template v-slot:append>
<div class="pa-4"> <div class="pa-3">
<v-card <v-card class="glass-profile-card pa-3">
class="glass-card glass-card--colored text-center pa-3" <div class="d-flex flex-column align-center">
> <v-avatar size="small" class="mb-2">
<v-icon size="small" class="mb-1" color="white">mdi-shield-crown</v-icon> <v-img src="https://randomuser.me/api/portraits/men/85.jpg" />
<div class="text-caption font-weight-bold text-white">FULL ACCESS</div> </v-avatar>
<div class="text-center">
<div class="text-subtitle-2 font-weight-bold">{{ user?.name || 'Administrator' }}</div>
<div class="text-caption text-medium-emphasis">{{ user?.email || 'admin@monacousa.org' }}</div>
</div>
<v-menu location="top">
<template v-slot:activator="{ props }">
<v-btn
v-bind="props"
icon="mdi-dots-vertical"
size="x-small"
variant="text"
class="mt-2"
/>
</template>
<v-list density="compact" class="glass-menu">
<v-list-item @click="() => {}">
<template v-slot:prepend>
<v-icon size="small">mdi-account</v-icon>
</template>
<v-list-item-title>Profile</v-list-item-title>
</v-list-item>
<v-list-item @click="() => {}">
<template v-slot:prepend>
<v-icon size="small">mdi-cog</v-icon>
</template>
<v-list-item-title>Settings</v-list-item-title>
</v-list-item>
<v-divider class="my-1" />
<v-list-item @click="logout">
<template v-slot:prepend>
<v-icon size="small">mdi-logout</v-icon>
</template>
<v-list-item-title>Logout</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</div>
</v-card> </v-card>
</div> </div>
</template> </template>
</v-navigation-drawer> </v-navigation-drawer>
<v-app-bar app elevation="0" flat class="glass-app-bar admin-bar"> <v-app-bar app elevation="0" flat class="glass-app-bar admin-bar">
<!-- Navigation Toggle -->
<v-btn
icon
@click="drawer = !drawer"
class="mr-2 glass-icon-btn"
>
<v-icon>mdi-menu</v-icon>
</v-btn>
<v-toolbar-title class="font-weight-bold d-flex align-center text-white"> <v-toolbar-title class="font-weight-bold d-flex align-center text-white">
Admin Portal Admin Portal
<v-chip <v-chip

View File

@ -1,36 +1,36 @@
<template> <template>
<v-app> <v-app>
<v-navigation-drawer v-model="drawer" app width="280" class="glass-drawer"> <v-navigation-drawer v-model="drawer" app width="280" permanent class="enhanced-glass-drawer">
<!-- Logo Section with Glass Effect --> <!-- Enhanced Logo Section -->
<v-list-item class="pa-4 text-center glass-logo-section"> <v-list-item class="pa-4 text-center enhanced-glass-logo">
<v-img <v-img
src="/MONACOUSA-Flags_376x376.png" src="/MONACOUSA-Flags_376x376.png"
width="80" width="80"
height="80" height="80"
class="mx-auto mb-2 float-animation" class="mx-auto mb-2 shimmer-animation"
/> />
<div class="text-h6 font-weight-bold monaco-red-text"> <div class="text-h6 font-weight-bold text-gradient">
MonacoUSA Portal MonacoUSA Portal
</div> </div>
<v-chip <v-chip
size="x-small" size="x-small"
class="monaco-chip-gradient mt-1" class="glass-badge mt-1"
> >
BOARD MEMBER BOARD MEMBER
</v-chip> </v-chip>
</v-list-item> </v-list-item>
<v-divider class="glass-divider" /> <v-divider class="glass-divider mx-3" />
<!-- Navigation Menu with Glass Effects --> <!-- Enhanced Navigation Menu -->
<v-list nav density="comfortable" class="glass-nav-list"> <v-list nav density="comfortable" class="enhanced-glass-nav">
<!-- Board Overview --> <!-- Board Overview -->
<v-list-item <v-list-item
to="/board/dashboard" to="/board/dashboard"
prepend-icon="mdi-view-dashboard" prepend-icon="mdi-view-dashboard"
title="Board Dashboard" title="Board Dashboard"
value="dashboard" value="dashboard"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
<!-- Member Management --> <!-- Member Management -->
@ -40,7 +40,7 @@
v-bind="props" v-bind="props"
prepend-icon="mdi-account-group" prepend-icon="mdi-account-group"
title="Members" title="Members"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
</template> </template>
@ -80,7 +80,7 @@
v-bind="props" v-bind="props"
prepend-icon="mdi-calendar" prepend-icon="mdi-calendar"
title="Events & Meetings" title="Events & Meetings"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
</template> </template>
@ -110,7 +110,7 @@
prepend-icon="mdi-chart-box" prepend-icon="mdi-chart-box"
title="Reports & Analytics" title="Reports & Analytics"
value="reports" value="reports"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
<!-- Governance --> <!-- Governance -->
@ -119,7 +119,7 @@
prepend-icon="mdi-gavel" prepend-icon="mdi-gavel"
title="Governance" title="Governance"
value="governance" value="governance"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
<!-- Communications --> <!-- Communications -->
@ -128,7 +128,7 @@
prepend-icon="mdi-email-newsletter" prepend-icon="mdi-email-newsletter"
title="Communications" title="Communications"
value="communications" value="communications"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
<v-divider class="my-2 glass-divider" /> <v-divider class="my-2 glass-divider" />
@ -140,33 +140,61 @@
prepend-icon="mdi-account" prepend-icon="mdi-account"
title="Member View" title="Member View"
value="member-view" value="member-view"
class="glass-nav-item" class="glass-nav-item animated-nav-item"
/> />
</v-list> </v-list>
<!-- Footer with Glass Card --> <!-- Enhanced Profile Card -->
<template v-slot:append> <template v-slot:append>
<div class="pa-4"> <div class="pa-3">
<v-card <v-card class="glass-profile-card pa-3">
class="glass-card glass-card--colored text-center pa-3" <div class="d-flex flex-column align-center">
> <v-avatar size="small" class="mb-2">
<v-icon size="small" class="mb-1" color="white">mdi-shield-account</v-icon> <v-img src="https://randomuser.me/api/portraits/men/85.jpg" />
<div class="text-caption font-weight-bold text-white">BOARD ACCESS</div> </v-avatar>
<div class="text-center">
<div class="text-subtitle-2 font-weight-bold">{{ user?.name || 'Board Member' }}</div>
<div class="text-caption text-medium-emphasis">{{ user?.email || 'board@monacousa.org' }}</div>
</div>
<v-menu location="top">
<template v-slot:activator="{ props }">
<v-btn
v-bind="props"
icon="mdi-dots-vertical"
size="x-small"
variant="text"
class="mt-2"
/>
</template>
<v-list density="compact" class="glass-menu">
<v-list-item @click="() => {}">
<template v-slot:prepend>
<v-icon size="small">mdi-account</v-icon>
</template>
<v-list-item-title>Profile</v-list-item-title>
</v-list-item>
<v-list-item @click="() => {}">
<template v-slot:prepend>
<v-icon size="small">mdi-cog</v-icon>
</template>
<v-list-item-title>Settings</v-list-item-title>
</v-list-item>
<v-divider class="my-1" />
<v-list-item @click="logout">
<template v-slot:prepend>
<v-icon size="small">mdi-logout</v-icon>
</template>
<v-list-item-title>Logout</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</div>
</v-card> </v-card>
</div> </div>
</template> </template>
</v-navigation-drawer> </v-navigation-drawer>
<v-app-bar app elevation="0" flat class="glass-app-bar board-bar"> <v-app-bar app elevation="0" flat class="glass-app-bar board-bar">
<!-- Navigation Toggle -->
<v-btn
icon
@click="drawer = !drawer"
class="mr-2 glass-icon-btn"
>
<v-icon>mdi-menu</v-icon>
</v-btn>
<v-toolbar-title class="font-weight-bold text-white"> <v-toolbar-title class="font-weight-bold text-white">
Board Portal Board Portal
</v-toolbar-title> </v-toolbar-title>

View File

@ -97,18 +97,12 @@
</v-navigation-drawer> </v-navigation-drawer>
<v-app-bar app color="primary" elevation="2"> <v-app-bar app color="primary" elevation="2">
<!-- MonacoUSA Logo as Navigation Toggle --> <!-- MonacoUSA Logo -->
<v-btn <MonacoUSALogo
variant="text" size="small"
@click="drawer = !drawer" variant="white"
class="mr-2" class="mr-2"
> />
<MonacoUSALogo
size="small"
variant="white"
clickable
/>
</v-btn>
<v-toolbar-title class="text-white font-weight-bold"> <v-toolbar-title class="text-white font-weight-bold">
MonacoUSA Portal MonacoUSA Portal

View File

@ -111,15 +111,6 @@
</v-navigation-drawer> </v-navigation-drawer>
<v-app-bar app elevation="0" flat class="glass-app-bar member-bar"> <v-app-bar app elevation="0" flat class="glass-app-bar member-bar">
<!-- Navigation Toggle -->
<v-btn
icon
@click="drawer = !drawer"
class="mr-2 glass-icon-btn"
>
<v-icon>mdi-menu</v-icon>
</v-btn>
<v-toolbar-title class="font-weight-bold text-white"> <v-toolbar-title class="font-weight-bold text-white">
Member Portal Member Portal
</v-toolbar-title> </v-toolbar-title>