sgh-navbar 0.0.55 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +197 -15
- package/fesm2022/sgh-navbar.mjs +13 -11
- package/fesm2022/sgh-navbar.mjs.map +1 -1
- package/package.json +32 -1
package/README.md
CHANGED
|
@@ -22,16 +22,21 @@ A comprehensive Angular navigation library that provides a responsive sidebar na
|
|
|
22
22
|
## Features
|
|
23
23
|
|
|
24
24
|
✨ **Rich Feature Set**
|
|
25
|
-
- 🎨 **Multiple Themes** - Built-in theme switching
|
|
26
|
-
- 🔧 **Highly Configurable** - Extensive customization options
|
|
27
|
-
- 📱 **Responsive Design** - Mobile-
|
|
28
|
-
- 🧭 **Navigation Management** - Multi-level menu support with animations
|
|
29
|
-
- 👥 **Client Management** -
|
|
25
|
+
- 🎨 **Multiple Themes** - Built-in theme switching with modern radio button design
|
|
26
|
+
- 🔧 **Highly Configurable** - Extensive customization options with CSS variables
|
|
27
|
+
- 📱 **Responsive Design** - Mobile-first design with adaptive layouts
|
|
28
|
+
- 🧭 **Navigation Management** - Multi-level menu support with smooth animations
|
|
29
|
+
- 👥 **Client Management** - Enhanced client/sub-client selection with search
|
|
30
30
|
- 🍞 **Breadcrumbs** - Automatic breadcrumb generation
|
|
31
|
-
- 🔔 **Notifications** -
|
|
32
|
-
- 👤 **User Profile** -
|
|
33
|
-
- ⚡ **Performance Optimized** -
|
|
31
|
+
- 🔔 **Notifications** - Modern notification panel with badges and animations
|
|
32
|
+
- 👤 **User Profile** - Redesigned profile dropdown integration
|
|
33
|
+
- ⚡ **Performance Optimized** - Hardware-accelerated animations and transitions
|
|
34
34
|
- 🎯 **Type Safe** - Full TypeScript support
|
|
35
|
+
- ♿ **Accessible** - WCAG compliant with ARIA labels and keyboard navigation
|
|
36
|
+
- 🌓 **Dark Mode** - Automatic dark mode support
|
|
37
|
+
- 🎭 **Modern UI** - Glassmorphism effects with backdrop blur
|
|
38
|
+
- 🔍 **Enhanced Search** - Redesigned search bar with submit button
|
|
39
|
+
- 🎬 **Smooth Animations** - Professional transitions and micro-interactions
|
|
35
40
|
|
|
36
41
|
## Installation
|
|
37
42
|
|
|
@@ -157,6 +162,123 @@ body {
|
|
|
157
162
|
}
|
|
158
163
|
```
|
|
159
164
|
|
|
165
|
+
## Modern Toolbar Redesign ✨
|
|
166
|
+
|
|
167
|
+
The toolbar component has been completely redesigned with a modern, professional look and enhanced user experience.
|
|
168
|
+
|
|
169
|
+
### 🎨 Design Improvements
|
|
170
|
+
|
|
171
|
+
#### **Layout Structure**
|
|
172
|
+
```
|
|
173
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
174
|
+
│ [Logo] [☰] [🔍 Search.................→] [🔔³] [⚙] [👤] │
|
|
175
|
+
│ ↑ ↑ ↑ ↑ ↑ ↑ │
|
|
176
|
+
│ Fixed Menu Flexible Center Notifications │
|
|
177
|
+
│ Left Toggle (grows to fill) Settings │
|
|
178
|
+
│ Profile │
|
|
179
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
#### **Key Visual Enhancements**
|
|
183
|
+
- **Glassmorphism**: Backdrop blur effects on toolbar and dropdowns
|
|
184
|
+
- **Modern Shadows**: Multiple shadow levels for depth hierarchy
|
|
185
|
+
- **Smooth Transitions**: 150ms fast and 300ms base transitions
|
|
186
|
+
- **Hover Effects**: Subtle lift animations with color changes
|
|
187
|
+
- **Active States**: Button press feedback with scale effects
|
|
188
|
+
- **Rounded Corners**: 12px-16px border radius for modern look
|
|
189
|
+
- **Notification Badge**: Animated pulsing badge with count display
|
|
190
|
+
- **Focus States**: Clear keyboard navigation indicators
|
|
191
|
+
|
|
192
|
+
#### **Component Redesign**
|
|
193
|
+
|
|
194
|
+
**🔤 Logo**
|
|
195
|
+
- Adaptive sizing: 42px (desktop), 36px (mobile), 48px (large screens)
|
|
196
|
+
- Hover scale effect with drop shadow
|
|
197
|
+
- Positioned at far left with proper constraints
|
|
198
|
+
|
|
199
|
+
**🍔 Menu Toggle**
|
|
200
|
+
- 42x42px button with 12px border radius
|
|
201
|
+
- Hover effects with background and icon scale
|
|
202
|
+
- Positioned next to logo for easy access
|
|
203
|
+
|
|
204
|
+
**🔍 Search Bar**
|
|
205
|
+
- Modern rounded design with icon-first layout
|
|
206
|
+
- Hover: Background change with border highlight
|
|
207
|
+
- Focus: Primary color border with glow effect
|
|
208
|
+
- Submit button with arrow icon and slide animation
|
|
209
|
+
- Adaptive sizing: 600px max (desktop), 400px (tablet), hidden (mobile)
|
|
210
|
+
|
|
211
|
+
**🔔 Notification Button**
|
|
212
|
+
- Animated notification badge showing count
|
|
213
|
+
- Pulsing animation to attract attention
|
|
214
|
+
- Modern dropdown with smooth slide-in animation
|
|
215
|
+
|
|
216
|
+
**⚙️ Settings Menu**
|
|
217
|
+
- Icons added to menu items for visual clarity
|
|
218
|
+
- Enhanced theme selector with custom radio buttons
|
|
219
|
+
- Improved client selector with search functionality
|
|
220
|
+
|
|
221
|
+
**👤 Profile Button**
|
|
222
|
+
- Larger icon for better visibility
|
|
223
|
+
- Redesigned dropdown card with modern styling
|
|
224
|
+
|
|
225
|
+
### 📱 Responsive Breakpoints
|
|
226
|
+
|
|
227
|
+
| Screen Size | Toolbar Height | Logo Size | Search | Special Features |
|
|
228
|
+
|-------------|---------------|-----------|---------|------------------|
|
|
229
|
+
| **Mobile** (≤768px) | 56px | 36px × 140px | Hidden | Tighter spacing, overlay mode |
|
|
230
|
+
| **Tablet** (≤1024px) | 64px | 42px × 200px | 400px max | Optimized spacing |
|
|
231
|
+
| **Desktop** (default) | 64px | 42px × 200px | 600px max | Full features |
|
|
232
|
+
| **Large** (≥1920px) | 64px | 48px × 240px | 700px max | Enhanced sizing |
|
|
233
|
+
|
|
234
|
+
### ♿ Accessibility Features
|
|
235
|
+
|
|
236
|
+
- **ARIA Labels**: All interactive elements have descriptive labels
|
|
237
|
+
- **Keyboard Navigation**: Full keyboard support with visible focus indicators
|
|
238
|
+
- **Screen Reader**: Semantic HTML with proper roles and labels
|
|
239
|
+
- **High Contrast**: Special styles for high contrast mode
|
|
240
|
+
- **Reduced Motion**: Respects user's motion preferences
|
|
241
|
+
- **Focus Management**: Proper focus trapping in dropdowns
|
|
242
|
+
|
|
243
|
+
### 🌓 Dark Mode Support
|
|
244
|
+
|
|
245
|
+
Automatic dark mode detection with proper color adjustments:
|
|
246
|
+
```scss
|
|
247
|
+
// Dark mode colors
|
|
248
|
+
--sgh-toolbar-bg: rgba(15, 23, 42, 0.95)
|
|
249
|
+
--sgh-surface-color: #1e293b
|
|
250
|
+
--sgh-text-primary: #f1f5f9
|
|
251
|
+
--sgh-border-color: #334155
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### 🎬 Animations & Transitions
|
|
255
|
+
|
|
256
|
+
- **Dropdown Slide-In**: 250ms cubic-bezier animation
|
|
257
|
+
- **Button Hover**: 150ms fast transition
|
|
258
|
+
- **Badge Pulse**: 2s infinite subtle pulse
|
|
259
|
+
- **Icon Scale**: Smooth scale on hover
|
|
260
|
+
- **Submit Arrow**: Slide animation on hover
|
|
261
|
+
|
|
262
|
+
### 🎨 Customization with CSS Variables
|
|
263
|
+
|
|
264
|
+
```scss
|
|
265
|
+
// Primary customizable variables
|
|
266
|
+
--sgh-primary-color: #3b82f6
|
|
267
|
+
--sgh-toolbar-bg: rgba(255, 255, 255, 0.95)
|
|
268
|
+
--sgh-text-primary: #1e293b
|
|
269
|
+
--sgh-text-secondary: #64748b
|
|
270
|
+
--sgh-border-color: #e2e8f0
|
|
271
|
+
--sgh-hover-bg: rgba(59, 130, 246, 0.08)
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### 🚀 Performance Optimizations
|
|
275
|
+
|
|
276
|
+
- Hardware-accelerated transforms
|
|
277
|
+
- Optimized animations using `transform` and `opacity`
|
|
278
|
+
- Efficient CSS with proper specificity
|
|
279
|
+
- Minimal repaints and reflows
|
|
280
|
+
- Debounced search input handling
|
|
281
|
+
|
|
160
282
|
## Components
|
|
161
283
|
|
|
162
284
|
### Main Component: `<lib-sgh-navbar>`
|
|
@@ -550,13 +672,68 @@ npm publish
|
|
|
550
672
|
|
|
551
673
|
| Angular Version | Library Version | Description |
|
|
552
674
|
|----------------|-----------------|-------------|
|
|
553
|
-
| 15 | 0.0.43
|
|
554
|
-
| 16 | 0.0.50
|
|
555
|
-
| 17 | 0.0.51
|
|
556
|
-
| 18 | 0.0.52
|
|
557
|
-
| 19 | 0.0.54
|
|
558
|
-
|
|
559
|
-
|
|
675
|
+
| 15 | 0.0.43 | Initial release |
|
|
676
|
+
| 16 | 0.0.50 | Angular 16 support |
|
|
677
|
+
| 17 | 0.0.51 | Angular 17 support |
|
|
678
|
+
| 18 | 0.0.52 | Angular 18 support |
|
|
679
|
+
| 19 | 0.0.54 | Angular 19 support, Major fixes and improvements |
|
|
680
|
+
| 19 | 0.0.57 | Enhanced layout behavior, responsive design improvements |
|
|
681
|
+
| 19 | 0.0.58 | **Modern Toolbar Redesign** - Complete UI overhaul with glassmorphism, accessibility, and performance improvements |
|
|
682
|
+
|
|
683
|
+
### Latest Changes (v0.0.58) - Modern Toolbar Redesign 🎨
|
|
684
|
+
|
|
685
|
+
#### **Complete Toolbar Overhaul**
|
|
686
|
+
- ✅ **Modern UI Design**: Complete redesign with glassmorphism and modern aesthetics
|
|
687
|
+
- ✅ **Enhanced Layout**: Logo at far left, hamburger menu next to logo, responsive search bar, action buttons on right
|
|
688
|
+
- ✅ **Semantic HTML**: Changed to `<header>` tag with proper ARIA roles and labels
|
|
689
|
+
- ✅ **Improved Search**: New search bar design with icon-first layout and submit button
|
|
690
|
+
- ✅ **Notification Badge**: Animated badge showing notification count with pulse effect
|
|
691
|
+
- ✅ **Better Icons**: Updated FontAwesome icons (fa-cog, fa-user-circle) for better clarity
|
|
692
|
+
|
|
693
|
+
#### **Visual Enhancements**
|
|
694
|
+
- ✅ **Glassmorphism**: Backdrop blur effects on toolbar and all dropdowns
|
|
695
|
+
- ✅ **Modern Shadows**: 4-level shadow system (sm, md, lg, xl) for proper depth
|
|
696
|
+
- ✅ **Smooth Animations**: Professional transitions (150ms fast, 300ms base)
|
|
697
|
+
- ✅ **Hover Effects**: Subtle lift animations with color changes on all interactive elements
|
|
698
|
+
- ✅ **Active States**: Button press feedback with scale effects
|
|
699
|
+
- ✅ **Rounded Corners**: Consistent 12-16px border radius throughout
|
|
700
|
+
- ✅ **Focus States**: Clear keyboard navigation indicators for accessibility
|
|
701
|
+
|
|
702
|
+
#### **Enhanced Components**
|
|
703
|
+
- ✅ **Settings Menu**: Added icons to menu items, modern theme selector with custom radio buttons
|
|
704
|
+
- ✅ **Client Menu**: Enhanced with search icon, check icon for selected items, "no results" state
|
|
705
|
+
- ✅ **Notification List**: Redesigned with modern card styling and smooth animations
|
|
706
|
+
- ✅ **Profile Dropdown**: New card-based design with proper spacing
|
|
707
|
+
|
|
708
|
+
#### **Responsive Design**
|
|
709
|
+
- ✅ **Mobile (≤768px)**: 56px height, 36px logo, hidden search, tighter spacing
|
|
710
|
+
- ✅ **Tablet (≤1024px)**: Optimized spacing with 400px search max-width
|
|
711
|
+
- ✅ **Desktop**: Full features with 600px search max-width
|
|
712
|
+
- ✅ **Large Screens (≥1920px)**: Enhanced sizing with 700px search and 48px logo
|
|
713
|
+
|
|
714
|
+
#### **Accessibility Improvements**
|
|
715
|
+
- ✅ **ARIA Labels**: Complete aria-label coverage on all buttons and interactive elements
|
|
716
|
+
- ✅ **Keyboard Navigation**: Full keyboard support with visible focus indicators
|
|
717
|
+
- ✅ **Screen Readers**: Proper semantic HTML with roles and labels
|
|
718
|
+
- ✅ **High Contrast Mode**: Special styling for high contrast display
|
|
719
|
+
- ✅ **Reduced Motion**: Respects `prefers-reduced-motion` user preference
|
|
720
|
+
- ✅ **Tooltips**: Title attributes on all action buttons
|
|
721
|
+
|
|
722
|
+
#### **Performance & Technical**
|
|
723
|
+
- ✅ **CSS Variables**: Complete design system with customizable CSS custom properties
|
|
724
|
+
- ✅ **Hardware Acceleration**: Optimized animations using transform and opacity
|
|
725
|
+
- ✅ **Efficient CSS**: Proper specificity and minimal repaints
|
|
726
|
+
- ✅ **Dark Mode**: Automatic dark mode detection with proper color adjustments
|
|
727
|
+
- ✅ **Print Styles**: Toolbar hidden in print mode
|
|
728
|
+
- ✅ **Cross-browser**: Fallbacks for backdrop-filter and other modern CSS
|
|
729
|
+
|
|
730
|
+
#### **Code Quality**
|
|
731
|
+
- ✅ **Better Structure**: Organized SCSS with clear sections and comments
|
|
732
|
+
- ✅ **Maintainability**: Variables-based design system for easy customization
|
|
733
|
+
- ✅ **Documentation**: Comprehensive inline comments explaining each section
|
|
734
|
+
- ✅ **Best Practices**: Following Angular and SCSS best practices
|
|
735
|
+
|
|
736
|
+
### Previous Changes (v0.0.55-57)
|
|
560
737
|
- ✅ Fixed notification component typo
|
|
561
738
|
- ✅ Added proper TypeScript types throughout
|
|
562
739
|
- ✅ Updated component selectors to use sgh- prefix
|
|
@@ -564,6 +741,11 @@ npm publish
|
|
|
564
741
|
- ✅ Added proper error handling and null checks
|
|
565
742
|
- ✅ Improved performance and memory management
|
|
566
743
|
- ✅ Added comprehensive documentation
|
|
744
|
+
- ✅ **Enhanced Layout Behavior**: Content area now properly moves right and adjusts width when sidebar is open
|
|
745
|
+
- ✅ **Responsive Design**: Smart layout adjustments for desktop (content shifts), tablet (content shifts), and mobile (overlay mode)
|
|
746
|
+
- ✅ **Smooth Animations**: Added smooth transitions for layout changes and content positioning
|
|
747
|
+
- ✅ **Visual Enhancements**: Added subtle shadows and overlay effects for better depth perception
|
|
748
|
+
- ✅ **Fixed Toggle Logic**: Resolved double-click toggle issue - sidebar now toggles correctly with single click
|
|
567
749
|
|
|
568
750
|
## Browser Support
|
|
569
751
|
|
package/fesm2022/sgh-navbar.mjs
CHANGED
|
@@ -253,7 +253,7 @@ class SidenavComponent {
|
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
255
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SidenavComponent, deps: [{ token: i1.Router }, { token: SghNavbarService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
256
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: SidenavComponent, isStandalone: false, selector: "sgh-sidenav", inputs: { expanded: "expanded", sidenavData: "sidenavData" }, outputs: { onToggleSideNav: "onToggleSideNav" }, ngImport: i0, template: "<div class=\"close sidenav-overlay\" *ngIf=\"expanded\"></div>\r\n<aside class=\"sgh-sidebar\" *ngIf=\"expanded\" [@slideInOut]>\r\n <div class=\"menu-wrapper\">\r\n <div class=\"sidebar_div \" *ngFor=\"let data of sidenavData.navData\">\r\n <a (click)=\"onItemSelected(data)\" class=\"{{data.customLinkCSS}}\"\r\n [routerLink]=\"[data.routeLink]\" routerLinkActive=\"item-active\" *ngIf=\"data.visible\">\r\n <div class=\"text-wrap\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"fa-size fa fa-{{data.icon}}\"></i>\r\n </div>\r\n <div>\r\n {{data.label}}\r\n </div>\r\n </div>\r\n <i class=\"fa-size fa fa-angle-down\" *ngIf=\"!(data.items == undefined)\"\r\n [@indicatorRotate]=\"data.expanded ? 'expanded': 'collapsed'\"></i>\r\n </a>\r\n <div class=\"sub-link-wrapper\" *ngIf=\"data.expanded\" [@inOutAnimation]>\r\n <sgh-menu-list-item [items]=\"data.items || []\">\r\n </sgh-menu-list-item>\r\n </div>\r\n </div>\r\n <div class=\"auth-info-wrp\" *ngIf=\"hasClients\">\r\n <div *ngIf=\"client && subclient\" class=\"client-info-wrp\">\r\n <div>{{client
|
|
256
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: SidenavComponent, isStandalone: false, selector: "sgh-sidenav", inputs: { expanded: "expanded", sidenavData: "sidenavData" }, outputs: { onToggleSideNav: "onToggleSideNav" }, ngImport: i0, template: "<div class=\"close sidenav-overlay\" *ngIf=\"expanded\"></div>\r\n<aside class=\"sgh-sidebar\" *ngIf=\"expanded\" [@slideInOut]>\r\n <div class=\"menu-wrapper\">\r\n <div class=\"sidebar_div \" *ngFor=\"let data of sidenavData.navData\">\r\n <a (click)=\"onItemSelected(data)\" class=\"{{data.customLinkCSS}}\"\r\n [routerLink]=\"[data.routeLink]\" routerLinkActive=\"item-active\" *ngIf=\"data.visible\">\r\n <div class=\"text-wrap\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"fa-size fa fa-{{data.icon}}\"></i>\r\n </div>\r\n <div>\r\n {{data.label}}\r\n </div>\r\n </div>\r\n <i class=\"fa-size fa fa-angle-down\" *ngIf=\"!(data.items == undefined)\"\r\n [@indicatorRotate]=\"data.expanded ? 'expanded': 'collapsed'\"></i>\r\n </a>\r\n <div class=\"sub-link-wrapper\" *ngIf=\"data.expanded\" [@inOutAnimation]>\r\n <sgh-menu-list-item [items]=\"data.items || []\">\r\n </sgh-menu-list-item>\r\n </div>\r\n </div>\r\n <div class=\"auth-info-wrp\" *ngIf=\"hasClients\">\r\n <div *ngIf=\"client && subclient\" class=\"client-info-wrp\">\r\n <div>{{client.text}}</div>\r\n <i class=\"fa fa-angle-right\"></i>\r\n <div>{{subclient.text}}</div>\r\n </div>\r\n <div *ngIf=\"sidenavData.activeRole\" class=\"role-info-wrp\">\r\n <span class=\"role-info-text\">Logged in as </span>\r\n <span class=\"role-info-text role\">{{sidenavData.activeRole}}</span></div>\r\n </div>\r\n </div>\r\n</aside>\r\n", styles: [".sidebar_div a>div>i{padding-right:10px}.menu-wrapper{height:100%;display:flex;flex-direction:column;position:relative}.menu-wrapper .auth-info-wrp{margin-top:auto;padding:1.5rem 1rem 1rem;border-top:1px solid var(--sgh-border-color, #e2e8f0);color:var(--sgh-text-secondary, #64748b);background:var(--sgh-surface-color, rgba(248, 250, 252, .5));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.menu-wrapper .auth-info-wrp .client-info-wrp{display:flex;align-items:center;gap:.5rem;font-size:.75rem;font-weight:600;padding:.5rem;background:var(--sgh-primary-color, #3b82f6);color:#fff;border-radius:8px;margin-bottom:.75rem}.menu-wrapper .auth-info-wrp .client-info-wrp i{font-size:.75rem;opacity:.8}.menu-wrapper .auth-info-wrp .role-info-wrp{font-size:.75rem;padding:.25rem .5rem}.menu-wrapper .auth-info-wrp .role-info-wrp .role-info-text{font-weight:400}.menu-wrapper .auth-info-wrp .role-info-wrp .role-info-text.role{font-weight:600;color:var(--sgh-primary-color, #3b82f6)}.fa-size{font-size:1.6em;line-height:.75em;vertical-align:-15%}.sgh-sidebar{height:100%;background:var(--sgh-sidebar-bg, rgba(255, 255, 255, .95));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-right:1px solid var(--sgh-border-color, #e2e8f0);overflow-y:auto;padding:65px 0 1.5rem;font-size:.875rem;width:280px;display:flex;flex-direction:column;z-index:999;transition:all .3s cubic-bezier(.4,0,.2,1);position:fixed;top:64px;left:0;bottom:0}.sgh-sidebar::-webkit-scrollbar{width:6px}.sgh-sidebar::-webkit-scrollbar-track{background:transparent}.sgh-sidebar::-webkit-scrollbar-thumb{background:var(--sgh-border-color, #e2e8f0);border-radius:3px}.sgh-sidebar::-webkit-scrollbar-thumb:hover{background:var(--sgh-text-muted, #94a3b8)}.sidebar_div{margin:0;padding:0 1rem;overflow:hidden}.sidebar_div a{color:var(--sgh-text-secondary, #64748b);padding:.75rem 1rem;text-decoration:none;margin:.25rem 0;display:flex;align-items:center;justify-content:space-between;border-radius:12px;font-weight:500;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative}.sidebar_div a:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--sgh-primary-color, #3b82f6);border-radius:0 2px 2px 0;transform:scaleY(0);transition:transform .2s ease}.sidebar_div a:hover:not(.active):not(.item-active){background:var(--sgh-hover-bg, rgba(59, 130, 246, .05));color:var(--sgh-text-primary, #1e293b);transform:translate(4px)}.sidebar_div a.active,.sidebar_div a.item-active{background:var(--sgh-primary-color, #3b82f6);color:#fff;transform:translate(4px);box-shadow:var(--sgh-shadow, 0 4px 12px rgba(59, 130, 246, .25))}.sidebar_div a.active:before,.sidebar_div a.item-active:before{transform:scaleY(1);background:#aaa;padding:3px}.sidebar_div a.active .text-wrap,.sidebar_div a.active .text-wrapper,.sidebar_div a.item-active .text-wrap,.sidebar_div a.item-active .text-wrapper,.sidebar_div a.active i,.sidebar_div a.item-active i{color:#fff}.text-wrap{display:flex;align-items:center;width:100%;gap:.75rem}.text-wrap .icon-wrapper{display:flex;align-items:center;justify-content:center;width:20px}.text-wrap .icon-wrapper i{font-size:1.125rem;transition:color .2s ease}div.content{margin-left:200px;padding:1px 16px;height:1000px}@media screen and (max-width: 700px){.sidebar_div{height:auto;position:relative}div.content{margin-left:0}}@media screen and (max-width: 400px){.sidebar_div a{text-align:center;float:none}}.nav-list li a{text-decoration:none;display:block;padding:10px;cursor:pointer;border-bottom:1px solid #515151;color:#9d9d9d}.nav-list>li>a{color:#c4c4c4;font-size:14px;padding-left:15px;border-bottom:1px solid #585858}.nav-list>li>a:hover{background-color:#444}.sidenav-overlay{position:fixed;width:100%;height:100%;top:0;z-index:998;cursor:pointer;transition:opacity .3s ease}@media screen and (max-width: 1024px){.sgh-sidebar{transform:translate(-100%);box-shadow:var(--sgh-shadow-lg, 0 10px 25px rgba(0, 0, 0, .15))}.sgh-sidebar.expanded{transform:translate(0)}}@media screen and (max-width: 768px){.sgh-sidebar{width:280px}.sgh-sidebar .sidebar_div{padding:0 .75rem}.sgh-sidebar .auth-info-wrp{padding:1rem .75rem}}@media screen and (max-width: 480px){.sgh-sidebar{width:100%;max-width:320px}}:host-context(.sgh-dark-theme) .sgh-sidebar{--sgh-sidebar-bg: rgba(30, 41, 59, .95);--sgh-border-color: #334155}:host-context(.sgh-dark-theme) .auth-info-wrp{--sgh-surface-color: rgba(15, 23, 42, .5)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: MenuListItemComponent, selector: "sgh-menu-list-item", inputs: ["items"] }], animations: [
|
|
257
257
|
trigger('inOutAnimation', [
|
|
258
258
|
transition(':enter', [
|
|
259
259
|
style({ height: 0, opacity: 0 }),
|
|
@@ -319,7 +319,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
319
319
|
animate('.5s ease-out', style({ transform: 'translateX(-100%)' }))
|
|
320
320
|
])
|
|
321
321
|
])
|
|
322
|
-
], standalone: false, template: "<div class=\"close sidenav-overlay\" *ngIf=\"expanded\"></div>\r\n<aside class=\"sgh-sidebar\" *ngIf=\"expanded\" [@slideInOut]>\r\n <div class=\"menu-wrapper\">\r\n <div class=\"sidebar_div \" *ngFor=\"let data of sidenavData.navData\">\r\n <a (click)=\"onItemSelected(data)\" class=\"{{data.customLinkCSS}}\"\r\n [routerLink]=\"[data.routeLink]\" routerLinkActive=\"item-active\" *ngIf=\"data.visible\">\r\n <div class=\"text-wrap\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"fa-size fa fa-{{data.icon}}\"></i>\r\n </div>\r\n <div>\r\n {{data.label}}\r\n </div>\r\n </div>\r\n <i class=\"fa-size fa fa-angle-down\" *ngIf=\"!(data.items == undefined)\"\r\n [@indicatorRotate]=\"data.expanded ? 'expanded': 'collapsed'\"></i>\r\n </a>\r\n <div class=\"sub-link-wrapper\" *ngIf=\"data.expanded\" [@inOutAnimation]>\r\n <sgh-menu-list-item [items]=\"data.items || []\">\r\n </sgh-menu-list-item>\r\n </div>\r\n </div>\r\n <div class=\"auth-info-wrp\" *ngIf=\"hasClients\">\r\n <div *ngIf=\"client && subclient\" class=\"client-info-wrp\">\r\n <div>{{client
|
|
322
|
+
], standalone: false, template: "<div class=\"close sidenav-overlay\" *ngIf=\"expanded\"></div>\r\n<aside class=\"sgh-sidebar\" *ngIf=\"expanded\" [@slideInOut]>\r\n <div class=\"menu-wrapper\">\r\n <div class=\"sidebar_div \" *ngFor=\"let data of sidenavData.navData\">\r\n <a (click)=\"onItemSelected(data)\" class=\"{{data.customLinkCSS}}\"\r\n [routerLink]=\"[data.routeLink]\" routerLinkActive=\"item-active\" *ngIf=\"data.visible\">\r\n <div class=\"text-wrap\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"fa-size fa fa-{{data.icon}}\"></i>\r\n </div>\r\n <div>\r\n {{data.label}}\r\n </div>\r\n </div>\r\n <i class=\"fa-size fa fa-angle-down\" *ngIf=\"!(data.items == undefined)\"\r\n [@indicatorRotate]=\"data.expanded ? 'expanded': 'collapsed'\"></i>\r\n </a>\r\n <div class=\"sub-link-wrapper\" *ngIf=\"data.expanded\" [@inOutAnimation]>\r\n <sgh-menu-list-item [items]=\"data.items || []\">\r\n </sgh-menu-list-item>\r\n </div>\r\n </div>\r\n <div class=\"auth-info-wrp\" *ngIf=\"hasClients\">\r\n <div *ngIf=\"client && subclient\" class=\"client-info-wrp\">\r\n <div>{{client.text}}</div>\r\n <i class=\"fa fa-angle-right\"></i>\r\n <div>{{subclient.text}}</div>\r\n </div>\r\n <div *ngIf=\"sidenavData.activeRole\" class=\"role-info-wrp\">\r\n <span class=\"role-info-text\">Logged in as </span>\r\n <span class=\"role-info-text role\">{{sidenavData.activeRole}}</span></div>\r\n </div>\r\n </div>\r\n</aside>\r\n", styles: [".sidebar_div a>div>i{padding-right:10px}.menu-wrapper{height:100%;display:flex;flex-direction:column;position:relative}.menu-wrapper .auth-info-wrp{margin-top:auto;padding:1.5rem 1rem 1rem;border-top:1px solid var(--sgh-border-color, #e2e8f0);color:var(--sgh-text-secondary, #64748b);background:var(--sgh-surface-color, rgba(248, 250, 252, .5));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.menu-wrapper .auth-info-wrp .client-info-wrp{display:flex;align-items:center;gap:.5rem;font-size:.75rem;font-weight:600;padding:.5rem;background:var(--sgh-primary-color, #3b82f6);color:#fff;border-radius:8px;margin-bottom:.75rem}.menu-wrapper .auth-info-wrp .client-info-wrp i{font-size:.75rem;opacity:.8}.menu-wrapper .auth-info-wrp .role-info-wrp{font-size:.75rem;padding:.25rem .5rem}.menu-wrapper .auth-info-wrp .role-info-wrp .role-info-text{font-weight:400}.menu-wrapper .auth-info-wrp .role-info-wrp .role-info-text.role{font-weight:600;color:var(--sgh-primary-color, #3b82f6)}.fa-size{font-size:1.6em;line-height:.75em;vertical-align:-15%}.sgh-sidebar{height:100%;background:var(--sgh-sidebar-bg, rgba(255, 255, 255, .95));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-right:1px solid var(--sgh-border-color, #e2e8f0);overflow-y:auto;padding:65px 0 1.5rem;font-size:.875rem;width:280px;display:flex;flex-direction:column;z-index:999;transition:all .3s cubic-bezier(.4,0,.2,1);position:fixed;top:64px;left:0;bottom:0}.sgh-sidebar::-webkit-scrollbar{width:6px}.sgh-sidebar::-webkit-scrollbar-track{background:transparent}.sgh-sidebar::-webkit-scrollbar-thumb{background:var(--sgh-border-color, #e2e8f0);border-radius:3px}.sgh-sidebar::-webkit-scrollbar-thumb:hover{background:var(--sgh-text-muted, #94a3b8)}.sidebar_div{margin:0;padding:0 1rem;overflow:hidden}.sidebar_div a{color:var(--sgh-text-secondary, #64748b);padding:.75rem 1rem;text-decoration:none;margin:.25rem 0;display:flex;align-items:center;justify-content:space-between;border-radius:12px;font-weight:500;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative}.sidebar_div a:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--sgh-primary-color, #3b82f6);border-radius:0 2px 2px 0;transform:scaleY(0);transition:transform .2s ease}.sidebar_div a:hover:not(.active):not(.item-active){background:var(--sgh-hover-bg, rgba(59, 130, 246, .05));color:var(--sgh-text-primary, #1e293b);transform:translate(4px)}.sidebar_div a.active,.sidebar_div a.item-active{background:var(--sgh-primary-color, #3b82f6);color:#fff;transform:translate(4px);box-shadow:var(--sgh-shadow, 0 4px 12px rgba(59, 130, 246, .25))}.sidebar_div a.active:before,.sidebar_div a.item-active:before{transform:scaleY(1);background:#aaa;padding:3px}.sidebar_div a.active .text-wrap,.sidebar_div a.active .text-wrapper,.sidebar_div a.item-active .text-wrap,.sidebar_div a.item-active .text-wrapper,.sidebar_div a.active i,.sidebar_div a.item-active i{color:#fff}.text-wrap{display:flex;align-items:center;width:100%;gap:.75rem}.text-wrap .icon-wrapper{display:flex;align-items:center;justify-content:center;width:20px}.text-wrap .icon-wrapper i{font-size:1.125rem;transition:color .2s ease}div.content{margin-left:200px;padding:1px 16px;height:1000px}@media screen and (max-width: 700px){.sidebar_div{height:auto;position:relative}div.content{margin-left:0}}@media screen and (max-width: 400px){.sidebar_div a{text-align:center;float:none}}.nav-list li a{text-decoration:none;display:block;padding:10px;cursor:pointer;border-bottom:1px solid #515151;color:#9d9d9d}.nav-list>li>a{color:#c4c4c4;font-size:14px;padding-left:15px;border-bottom:1px solid #585858}.nav-list>li>a:hover{background-color:#444}.sidenav-overlay{position:fixed;width:100%;height:100%;top:0;z-index:998;cursor:pointer;transition:opacity .3s ease}@media screen and (max-width: 1024px){.sgh-sidebar{transform:translate(-100%);box-shadow:var(--sgh-shadow-lg, 0 10px 25px rgba(0, 0, 0, .15))}.sgh-sidebar.expanded{transform:translate(0)}}@media screen and (max-width: 768px){.sgh-sidebar{width:280px}.sgh-sidebar .sidebar_div{padding:0 .75rem}.sgh-sidebar .auth-info-wrp{padding:1rem .75rem}}@media screen and (max-width: 480px){.sgh-sidebar{width:100%;max-width:320px}}:host-context(.sgh-dark-theme) .sgh-sidebar{--sgh-sidebar-bg: rgba(30, 41, 59, .95);--sgh-border-color: #334155}:host-context(.sgh-dark-theme) .auth-info-wrp{--sgh-surface-color: rgba(15, 23, 42, .5)}\n"] }]
|
|
323
323
|
}], ctorParameters: () => [{ type: i1.Router }, { type: SghNavbarService }], propDecorators: { onToggleSideNav: [{
|
|
324
324
|
type: Output
|
|
325
325
|
}], expanded: [{
|
|
@@ -441,11 +441,11 @@ class NotificationListComponent {
|
|
|
441
441
|
ngOnInit() {
|
|
442
442
|
}
|
|
443
443
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NotificationListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
444
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: NotificationListComponent, isStandalone: false, selector: "sgh-notification-list", ngImport: i0, template: "<div class=\"notifications-list-wrapper\">\r\n <div class=\"notifications-list\">\r\n <div class=\"notifications-title\">\r\n <span class=\"title mat-h3\">Notifications</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-title\">\r\n <span class=\"see-all mat-h4\">See all</span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".notifications-list-wrapper{
|
|
444
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: NotificationListComponent, isStandalone: false, selector: "sgh-notification-list", ngImport: i0, template: "<div class=\"notifications-list-wrapper\">\r\n <div class=\"notifications-list\">\r\n <div class=\"notifications-title\">\r\n <span class=\"title mat-h3\">Notifications</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-title\">\r\n <span class=\"see-all mat-h4\">See all</span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".notifications-list-wrapper{position:absolute;top:72px;right:1.5rem;z-index:1001;width:420px;max-width:calc(100vw - 2rem);animation:dropdownSlideIn .25s cubic-bezier(.4,0,.2,1)}@media (max-width: 768px){.notifications-list-wrapper{top:64px;right:1rem;left:1rem;width:auto}}.notifications-list{background:var(--sgh-surface-color, #ffffff);border-radius:16px;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;border:1px solid var(--sgh-border-color, #e2e8f0);overflow:hidden}@supports (backdrop-filter: blur(10px)){.notifications-list{background:var(--sgh-surface-color, rgba(255, 255, 255, .95));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}.notifications-title{display:flex;align-items:center;justify-content:center;padding:1rem 1.25rem;background:var(--sgh-surface-color, #f8fafc);border-bottom:1px solid var(--sgh-border-color, #e2e8f0)}.notifications-title .title{color:var(--sgh-text-primary, #1e293b);font-size:1rem;font-weight:600;margin:0}.notifications-title .see-all{color:var(--sgh-primary-color, #3b82f6);font-size:.9375rem;font-weight:500;margin:0;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1)}.notifications-title .see-all:hover{opacity:.8;text-decoration:underline}.notifications-list-item{display:flex;flex-direction:column;gap:.5rem;padding:1rem 1.25rem;background:var(--sgh-surface-color, #ffffff);border-bottom:1px solid var(--sgh-border-color, #e2e8f0);cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);position:relative}.notifications-list-item:last-of-type{border-bottom:none}.notifications-list-item:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:transparent;transition:all .15s cubic-bezier(.4,0,.2,1)}.notifications-list-item:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08))}.notifications-list-item:hover:before{background:var(--sgh-primary-color, #3b82f6)}.notifications-list-item .item-title{color:var(--sgh-text-primary, #1e293b);font-size:.9375rem;font-weight:600;margin:0;line-height:1.4}.notifications-list-item .item-description{color:var(--sgh-text-secondary, #64748b);font-size:.875rem;font-weight:400;margin:0;line-height:1.5;opacity:.8}.notifications-list-item.unread{background:#3b82f60d}.notifications-list-item.unread:before{background:var(--sgh-primary-color, #3b82f6)}.notifications-list-item.unread .item-title{color:var(--sgh-primary-color, #3b82f6)}.empty-notifications{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 2rem;text-align:center}.empty-notifications i{font-size:3rem;color:var(--sgh-text-muted, #94a3b8);opacity:.5;margin-bottom:1rem}.empty-notifications .empty-title{color:var(--sgh-text-primary, #1e293b);font-size:1rem;font-weight:600;margin-bottom:.5rem}.empty-notifications .empty-message{color:var(--sgh-text-secondary, #64748b);font-size:.875rem}@keyframes dropdownSlideIn{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.notifications-list-item-container{max-height:400px;overflow-y:auto}.notifications-list-item-container::-webkit-scrollbar{width:6px}.notifications-list-item-container::-webkit-scrollbar-track{background:transparent}.notifications-list-item-container::-webkit-scrollbar-thumb{background:#0000001a;border-radius:3px}.notifications-list-item-container::-webkit-scrollbar-thumb:hover{background:#0003}@media (prefers-color-scheme: dark){.notifications-list-wrapper .notifications-list{--sgh-surface-color: #1e293b;--sgh-text-primary: #f1f5f9;--sgh-text-secondary: #94a3b8;--sgh-border-color: #334155;--sgh-hover-bg: rgba(59, 130, 246, .15)}}@media (max-width: 599px){.notifications-list-wrapper{width:auto}.notifications-list-item{padding:.875rem 1rem}.notifications-list-item .item-title{font-size:.875rem}.notifications-list-item .item-description{font-size:.8125rem}}\n"] }); }
|
|
445
445
|
}
|
|
446
446
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NotificationListComponent, decorators: [{
|
|
447
447
|
type: Component,
|
|
448
|
-
args: [{ selector: 'sgh-notification-list', standalone: false, template: "<div class=\"notifications-list-wrapper\">\r\n <div class=\"notifications-list\">\r\n <div class=\"notifications-title\">\r\n <span class=\"title mat-h3\">Notifications</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-title\">\r\n <span class=\"see-all mat-h4\">See all</span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".notifications-list-wrapper{
|
|
448
|
+
args: [{ selector: 'sgh-notification-list', standalone: false, template: "<div class=\"notifications-list-wrapper\">\r\n <div class=\"notifications-list\">\r\n <div class=\"notifications-title\">\r\n <span class=\"title mat-h3\">Notifications</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-title\">\r\n <span class=\"see-all mat-h4\">See all</span>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".notifications-list-wrapper{position:absolute;top:72px;right:1.5rem;z-index:1001;width:420px;max-width:calc(100vw - 2rem);animation:dropdownSlideIn .25s cubic-bezier(.4,0,.2,1)}@media (max-width: 768px){.notifications-list-wrapper{top:64px;right:1rem;left:1rem;width:auto}}.notifications-list{background:var(--sgh-surface-color, #ffffff);border-radius:16px;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;border:1px solid var(--sgh-border-color, #e2e8f0);overflow:hidden}@supports (backdrop-filter: blur(10px)){.notifications-list{background:var(--sgh-surface-color, rgba(255, 255, 255, .95));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}.notifications-title{display:flex;align-items:center;justify-content:center;padding:1rem 1.25rem;background:var(--sgh-surface-color, #f8fafc);border-bottom:1px solid var(--sgh-border-color, #e2e8f0)}.notifications-title .title{color:var(--sgh-text-primary, #1e293b);font-size:1rem;font-weight:600;margin:0}.notifications-title .see-all{color:var(--sgh-primary-color, #3b82f6);font-size:.9375rem;font-weight:500;margin:0;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1)}.notifications-title .see-all:hover{opacity:.8;text-decoration:underline}.notifications-list-item{display:flex;flex-direction:column;gap:.5rem;padding:1rem 1.25rem;background:var(--sgh-surface-color, #ffffff);border-bottom:1px solid var(--sgh-border-color, #e2e8f0);cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);position:relative}.notifications-list-item:last-of-type{border-bottom:none}.notifications-list-item:before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:3px;background:transparent;transition:all .15s cubic-bezier(.4,0,.2,1)}.notifications-list-item:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08))}.notifications-list-item:hover:before{background:var(--sgh-primary-color, #3b82f6)}.notifications-list-item .item-title{color:var(--sgh-text-primary, #1e293b);font-size:.9375rem;font-weight:600;margin:0;line-height:1.4}.notifications-list-item .item-description{color:var(--sgh-text-secondary, #64748b);font-size:.875rem;font-weight:400;margin:0;line-height:1.5;opacity:.8}.notifications-list-item.unread{background:#3b82f60d}.notifications-list-item.unread:before{background:var(--sgh-primary-color, #3b82f6)}.notifications-list-item.unread .item-title{color:var(--sgh-primary-color, #3b82f6)}.empty-notifications{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 2rem;text-align:center}.empty-notifications i{font-size:3rem;color:var(--sgh-text-muted, #94a3b8);opacity:.5;margin-bottom:1rem}.empty-notifications .empty-title{color:var(--sgh-text-primary, #1e293b);font-size:1rem;font-weight:600;margin-bottom:.5rem}.empty-notifications .empty-message{color:var(--sgh-text-secondary, #64748b);font-size:.875rem}@keyframes dropdownSlideIn{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.notifications-list-item-container{max-height:400px;overflow-y:auto}.notifications-list-item-container::-webkit-scrollbar{width:6px}.notifications-list-item-container::-webkit-scrollbar-track{background:transparent}.notifications-list-item-container::-webkit-scrollbar-thumb{background:#0000001a;border-radius:3px}.notifications-list-item-container::-webkit-scrollbar-thumb:hover{background:#0003}@media (prefers-color-scheme: dark){.notifications-list-wrapper .notifications-list{--sgh-surface-color: #1e293b;--sgh-text-primary: #f1f5f9;--sgh-text-secondary: #94a3b8;--sgh-border-color: #334155;--sgh-hover-bg: rgba(59, 130, 246, .15)}}@media (max-width: 599px){.notifications-list-wrapper{width:auto}.notifications-list-item{padding:.875rem 1rem}.notifications-list-item .item-title{font-size:.875rem}.notifications-list-item .item-description{font-size:.8125rem}}\n"] }]
|
|
449
449
|
}], ctorParameters: () => [] });
|
|
450
450
|
|
|
451
451
|
class SearchPipe {
|
|
@@ -497,8 +497,10 @@ class ToolbarComponent {
|
|
|
497
497
|
this.searchText = '';
|
|
498
498
|
}
|
|
499
499
|
toggleSidebar() {
|
|
500
|
-
|
|
501
|
-
|
|
500
|
+
// Toggle the expanded state and emit the new value
|
|
501
|
+
const newExpandedState = !this.expanded;
|
|
502
|
+
this.toggleSidebarEvent.emit(newExpandedState);
|
|
503
|
+
return newExpandedState;
|
|
502
504
|
}
|
|
503
505
|
toggleNotificationList() {
|
|
504
506
|
this.toolbarData.isNotifNavCollapsed = !this.toolbarData.isNotifNavCollapsed;
|
|
@@ -608,7 +610,7 @@ class ToolbarComponent {
|
|
|
608
610
|
});
|
|
609
611
|
}
|
|
610
612
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ToolbarComponent, deps: [{ token: i1$1.MatDialog }, { token: SghNavbarService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
611
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ToolbarComponent, isStandalone: false, selector: "sgh-toolbar", inputs: { expanded: "expanded", toolbarData: "toolbarData" }, outputs: { toggleSidebarEvent: "toggleSidebarEvent", searchInputEvent: "searchInputEvent", client: "client", subClient: "subClient" }, host: { listeners: { "click": "clickInside()", "document:click": "clickOut()" } }, viewQueries: [{ propertyName: "clientMenuTrigger", first: true, predicate: ["clientMenuTrigger"], descendants: true }], ngImport: i0, template: "<nav class=\"toolbar-main-wrapper\" [style.background-color]=\"toolbarData.bgColor\" id=\"toolBarWrapper\">\r\n <div class=\"logo-wrapper\">\r\n <img class=\"logo\" [src]=\"toolbarData.img\"/>\r\n </div>\r\n <div>\r\n <button class=\"toggle-button\" (click)=\"toggleSidebar()\">\r\n <i class=\"fa fa-bars fa-fade\"></i>\r\n </button>\r\n </div>\r\n <div class=\"search\">\r\n <div class=\"form\" *ngIf=\"toolbarData.searchEnable\">\r\n <input type=\"text\" name=\"text\" autocomplete=\"off\" required/>\r\n <label class=\"label-name\">\r\n <span class=\"content-name\">\r\n Search\r\n </span>\r\n </label>\r\n <button class=\"search-wrapper\">\r\n <i class=\"fa fa-search\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"toolbarData.notificationEnable\" class=\"icon\" id=\"bell\" (click)=\"toggleNotificationList()\">\r\n <i class=\"fa fa-bell\"></i>\r\n </div>\r\n <div *ngIf=\"toolbarData.profileEnable\" class=\"icon\" id=\"bell3\" (click)=\"clickProfile()\">\r\n <i class=\"fa fa-user\"></i>\r\n </div>\r\n <div *ngIf=\"toolbarData.settingsEnable\" class=\"icon\" id=\"bell2\" [matMenuTriggerFor]=\"settingsMenu\">\r\n <i class=\"fa fa-gear\"></i>\r\n </div>\r\n</nav>\r\n\r\n<div *ngIf=\"toolbarData.profileView\" class=\"notifications\">\r\n <div class=\"notifications-list-wrapper profile-list-wrapper\">\r\n <div class=\"notifications-list\">\r\n <div class=\"notifications-list-item\">\r\n <div [innerHTML]=\"toolbarData.profileContent\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--Settings related menus start-->\r\n<mat-menu #settingsMenu=\"matMenu\" xPosition=\"before\">\r\n <button mat-menu-item [matMenuTriggerFor]=\"appConfig\" *ngIf=\"toolbarData.applicationConfigurationEnable\">Application Settings</button>\r\n <button mat-menu-item [matMenuTriggerFor]=\"clientConfig\" *ngIf=\"toolbarData.clientConfigurationEnable\" #clientMenuTrigger>Client Settings</button>\r\n</mat-menu>\r\n<mat-menu #appConfig=\"matMenu\" xPosition=\"after\">\r\n <div *ngFor=\"let themeoption of toolbarData.themeOptions\">\r\n <button mat-menu-item class=\"radio\" (click)=\"onRadioClick(themeoption.value)\">\r\n <input value=\"{{themeoption.value}}\" name=\"radio\" type=\"radio\" checked [ngModel]=\"selected\"\r\n (ngModelChange)=\"setClass($event)\">\r\n <span>{{themeoption.name}}</span>\r\n </button>\r\n </div>\r\n</mat-menu>\r\n<mat-menu #clientConfig=\"matMenu\" xPosition=\"after\">\r\n <div style=\"width: 250px\" class=\"client-menu-wrapper\">\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-12\" (click)=\"$event.stopPropagation();\">\r\n <input type=\"text\" class=\"search-input\" placeholder=\"Search Client\" [(ngModel)]=\"searchText\"/>\r\n </div>\r\n <div class=\"col-sm-12\">\r\n <div class=\"mt-2 list-item-container\">\r\n <div class=\"list-item text-truncate\" *ngFor=\"let item of toolbarData.clientList | search : searchText;let i = index\"\r\n [ngClass]=\"{'client-selected': item.selected}\"\r\n (click)=\"toggleSelect($event, item);\" mat-ripple>{{item.text}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n<!--Settings related menus end-->\r\n\r\n<sgh-notification-list *ngIf=\"toolbarData.isNotifNavCollapsed\"></sgh-notification-list>\r\n", styles: [".toolbar-main-wrapper{position:relative;box-shadow:var(--sgh-shadow, 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px 0 rgba(0, 0, 0, .06));z-index:1000;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--sgh-border-color, rgba(255, 255, 255, .1))}nav{display:flex;align-items:center;background:var(--sgh-toolbar-bg, rgba(255, 255, 255, .95));height:64px;position:relative;padding:0 1.5rem;transition:all .3s cubic-bezier(.4,0,.2,1)}@supports (backdrop-filter: blur(10px)){nav{background:var(--sgh-toolbar-bg, rgba(255, 255, 255, .8));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}.logo-wrapper{display:flex;align-items:center;flex-shrink:0;margin-right:2rem}.logo{height:32px;width:auto;object-fit:contain;transition:transform .2s ease}.logo:hover{transform:scale(1.05)}.icon{cursor:pointer;margin-left:.75rem;width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;background:transparent;border:none}.icon i{color:var(--sgh-text-secondary, #64748b);font-size:1.125rem;transition:color .2s ease}.icon:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .1));transform:translateY(-1px);box-shadow:var(--sgh-shadow, 0 4px 12px rgba(0, 0, 0, .15))}.icon:hover i{color:var(--sgh-primary-color, #3b82f6)}.icon:active{transform:translateY(0);box-shadow:var(--sgh-shadow, 0 2px 4px rgba(0, 0, 0, .1))}.icon span{background:var(--sgh-error-color, #ef4444);padding:2px 6px;border-radius:10px;color:#fff;font-size:.75rem;font-weight:500;position:absolute;top:-2px;right:-2px;min-width:16px;height:16px;display:flex;align-items:center;justify-content:center;border:2px solid var(--sgh-surface-color, white)}.icon img{width:20px;height:20px;border-radius:50%}.search{flex:1;max-width:400px;margin:0 2rem}.notifications h2{font-size:14px;padding:10px;border-bottom:1px solid #eee;color:#999}.notifications h2 span{color:red}.notifications-item{display:flex;border-bottom:1px solid #eee;padding:6px 9px;margin-bottom:0;cursor:pointer}.notifications-item:hover{background-color:#eee}.notifications-item img{display:block;width:50px;height:50px;margin-right:9px;border-radius:50%;margin-top:2px}.notifications-item .text h4{color:#777;font-size:16px;margin-top:3px}.notifications-item .text p{color:#aaa;font-size:12px}.box{width:280px;height:auto;background-color:#fff;border-radius:0;display:flex;align-items:center;padding:0;border-bottom:2px solid #005860}.box>i{font-size:20px;color:#777}.box>input{flex:1;height:35px;border:none;outline:none;font-size:14px;padding-left:10px}.box>button{background:transparent;border:none;cursor:pointer}.toggle-button{background:transparent;border:none;cursor:pointer;width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;transition:all .2s cubic-bezier(.4,0,.2,1);margin-right:1rem}.toggle-button i{color:var(--sgh-text-secondary, #64748b);font-size:1.125rem;transition:color .2s ease}.toggle-button:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .1));transform:translateY(-1px)}.toggle-button:hover i{color:var(--sgh-primary-color, #3b82f6)}.toggle-button:active{transform:translateY(0)}.search-wrapper{border-radius:20px;padding:13px;border:none;background:transparent;cursor:pointer}.search-wrapper i{color:#005860!important}.search-wrapper:hover{background:#0000000a!important}.logo{width:49%!important;padding:0 19px}.theme-list-wrapper,.profile-list-wrapper{width:300px!important}.notifications-list-wrapper{padding:10px;position:absolute;right:10px;top:45px;z-index:2;color:#000000de;width:450px}.notifications-list-wrapper .notifications-list{box-shadow:0 2px 10px #00000026;position:relative}.notifications-list-wrapper .notifications-list .notifications-title{background-color:#fff;text-align:center;padding:20px 10px;border-bottom:1px solid #f1f1f3}.notifications-list-wrapper .notifications-list .notifications-list-item{padding:10px;background-color:#fff;border-bottom:1px solid #f1f1f3;font-size:14px}.notifications-list-wrapper .notifications-list .notifications-list-item .item-title{margin:0;white-space:normal}.notifications-list-wrapper .notifications-list .notifications-list-item .item-description{margin:0;color:#000000de;opacity:.5;white-space:normal}.notifications-list-wrapper .notifications-list .see-all{background-color:#fff;color:#006068;font-weight:500}@media screen and (max-width: 599px){.notifications-list-wrapper{width:auto}}.notifications-list-wrapper{-webkit-animation:cardAnim 1s cubic-bezier(.33,1,.68,1) 0s 1 normal none;animation:cardAnim 1s cubic-bezier(.33,1,.68,1) 0s 1 normal none}@keyframes cardAnim{0%{opacity:0;transform:rotateX(-100deg);transform-origin:top}to{opacity:1;transform:rotateX(0);transform-origin:top}}select{padding:10px 20px;border-radius:5px;width:100%;margin:3% 10%;border:1px solid #005860}select:focus{outline:none}.form{width:100%;position:relative;height:40px;display:flex;align-items:center;background:var(--sgh-search-bg, rgba(248, 250, 252, .8));border:1px solid var(--sgh-border-color, #e2e8f0);border-radius:12px;transition:all .3s cubic-bezier(.4,0,.2,1);overflow:hidden}.form:hover{border-color:var(--sgh-primary-color, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.form:focus-within{border-color:var(--sgh-primary-color, #3b82f6);box-shadow:0 0 0 3px #3b82f61a;background:var(--sgh-surface-color, white)}.form input{width:100%;height:100%;color:var(--sgh-text-primary, #1e293b);padding:0 12px;border:none;background:transparent;font-size:.875rem;outline:none}.form input::placeholder{color:var(--sgh-text-muted, #94a3b8);transition:opacity .3s ease}.form input:focus::placeholder{opacity:.7}.form label{position:absolute;top:50%;left:12px;transform:translateY(-50%);pointer-events:none;transition:all .3s cubic-bezier(.4,0,.2,1);color:var(--sgh-text-muted, #94a3b8);font-size:.875rem;background:transparent;padding:0 4px}.content-name{transition:all .3s cubic-bezier(.4,0,.2,1)}.form input:focus+.label-name .content-name,.form input:valid+.label-name .content-name{transform:translateY(-120%);font-size:.75rem;color:var(--sgh-primary-color, #3b82f6);background:var(--sgh-surface-color, white);padding:0 4px}.search-wrapper{background:transparent;border:none;cursor:pointer;padding:8px 12px;display:flex;align-items:center;justify-content:center;transition:all .2s ease;border-radius:8px;margin-right:4px}.search-wrapper i{color:var(--sgh-text-muted, #94a3b8);font-size:1rem;transition:color .2s ease}.search-wrapper:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .1))}.search-wrapper:hover i{color:var(--sgh-primary-color, #3b82f6)}.radio{display:block;cursor:pointer;-webkit-user-select:none;user-select:none;text-align:left}.radio+.radio{margin-top:12px}.radio input{display:none}.radio input+span{display:inline-block;position:relative;padding-left:30px}.radio input+span:before{content:\"\";display:block;position:absolute;top:0;left:0;border-radius:50%;margin-right:5px;width:16px;height:16px;border:1px solid #ccc;background:#fff}.radio input+span:after{content:\"\";display:block;width:11px;height:11px;background:#005860;position:absolute;border-radius:50%;top:3px;left:3px;opacity:0;transform:scale(0);transition:all .2s cubic-bezier(.64,.57,.67,1.53)}.radio input:checked+span:after{opacity:1;transform:scale(1)}.client-menu-wrapper .container-fluid{padding-right:15px;padding-left:15px;margin:10px}.client-menu-wrapper .container-fluid .row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px;flex-direction:column}.client-menu-wrapper .container-fluid .row .search-input{width:100%;box-sizing:border-box;display:block;padding:.375rem .75rem;font-size:12px;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.client-menu-wrapper .container-fluid .row .search-input:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem #007bff40}.client-menu-wrapper .container-fluid .row .list-item-container{border:.5px rgba(0,0,0,.12) solid;margin-top:5px;border-radius:5px;overflow:hidden}.client-menu-wrapper .container-fluid .row .list-item-container .mat-ripple{padding:8px;font-size:12px}.client-menu-wrapper .container-fluid .row .list-item-container .mat-ripple:hover{background:#76767642;cursor:pointer;transition:all .3s ease 0s}.client-menu-wrapper .container-fluid .row .list-item-container .client-selected{color:#fff;background-color:#005860}@media screen and (max-width: 600px){.search{display:none}.logo-wrapper{width:30%}.logo-wrapper .logo{width:78%!important;padding:9px}.sgh-sidebar{z-index:1!important;position:absolute!important;background:#fff!important}.icon{cursor:pointer;margin-right:0;margin-left:34px}.toggle-button{order:-1}.logo-wrapper,.icon{order:1}#toolBarWrapper{padding:0 15px;justify-content:space-between}}@media screen and (min-width: 1900px){.logo{width:29%!important;padding:0 35px}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i6.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: NotificationListComponent, selector: "sgh-notification-list" }, { kind: "pipe", type: SearchPipe, name: "search" }], animations: [
|
|
613
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ToolbarComponent, isStandalone: false, selector: "sgh-toolbar", inputs: { expanded: "expanded", toolbarData: "toolbarData" }, outputs: { toggleSidebarEvent: "toggleSidebarEvent", searchInputEvent: "searchInputEvent", client: "client", subClient: "subClient" }, host: { listeners: { "click": "clickInside()", "document:click": "clickOut()" } }, viewQueries: [{ propertyName: "clientMenuTrigger", first: true, predicate: ["clientMenuTrigger"], descendants: true }], ngImport: i0, template: "<header class=\"sgh-toolbar\" [style.background-color]=\"toolbarData.bgColor\" id=\"toolBarWrapper\" role=\"banner\">\r\n <nav class=\"toolbar-main-wrapper\">\r\n <!-- Left Section -->\r\n <div class=\"toolbar-left-section\">\r\n <!-- Logo -->\r\n <div class=\"toolbar-logo\">\r\n <img class=\"logo-image\" [src]=\"toolbarData.img\" alt=\"Application Logo\"/>\r\n </div>\r\n\r\n <!-- Menu Toggle -->\r\n <button class=\"toolbar-menu-toggle\"\r\n (click)=\"toggleSidebar()\"\r\n aria-label=\"Toggle navigation menu\"\r\n title=\"Toggle Menu\">\r\n <i class=\"fa fa-bars\"></i>\r\n </button>\r\n\r\n <!-- Search Bar -->\r\n <div class=\"toolbar-search\" *ngIf=\"toolbarData.searchEnable\">\r\n <form class=\"search-form\" (submit)=\"$event.preventDefault()\">\r\n <div class=\"search-input-wrapper\">\r\n <i class=\"fa fa-search search-icon\"></i>\r\n <input type=\"search\"\r\n class=\"search-input\"\r\n placeholder=\"Search...\"\r\n autocomplete=\"off\"\r\n aria-label=\"Search\"/>\r\n <button type=\"submit\" class=\"search-submit\" aria-label=\"Submit search\">\r\n <i class=\"fa fa-arrow-right\"></i>\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Section -->\r\n <div class=\"toolbar-right-section\">\r\n <!-- Notification Button -->\r\n <button *ngIf=\"toolbarData.notificationEnable\"\r\n class=\"toolbar-action-btn notification-btn\"\r\n (click)=\"toggleNotificationList()\"\r\n aria-label=\"View notifications\"\r\n title=\"Notifications\">\r\n <i class=\"fa fa-bell\"></i>\r\n <span class=\"notification-badge\" *ngIf=\"true\">3</span>\r\n </button>\r\n\r\n <!-- Settings Button -->\r\n <button *ngIf=\"toolbarData.settingsEnable\"\r\n class=\"toolbar-action-btn settings-btn\"\r\n [matMenuTriggerFor]=\"settingsMenu\"\r\n aria-label=\"Open settings\"\r\n title=\"Settings\">\r\n <i class=\"fa fa-cog\"></i>\r\n </button>\r\n\r\n <!-- User Profile Button -->\r\n <button *ngIf=\"toolbarData.profileEnable\"\r\n class=\"toolbar-action-btn profile-btn\"\r\n (click)=\"clickProfile()\"\r\n aria-label=\"View profile\"\r\n title=\"Profile\">\r\n <i class=\"fa fa-user-circle\"></i>\r\n </button>\r\n </div>\r\n </nav>\r\n</header>\r\n\r\n<!-- Profile Dropdown -->\r\n<div *ngIf=\"toolbarData.profileView\" class=\"toolbar-dropdown profile-dropdown\" @fadeInOut>\r\n <div class=\"dropdown-card\">\r\n <div class=\"dropdown-content\">\r\n <div [innerHTML]=\"toolbarData.profileContent\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Settings Menu -->\r\n<mat-menu #settingsMenu=\"matMenu\" xPosition=\"before\" class=\"sgh-settings-menu\">\r\n <button mat-menu-item\r\n [matMenuTriggerFor]=\"appConfig\"\r\n *ngIf=\"toolbarData.applicationConfigurationEnable\"\r\n class=\"menu-item-with-icon\">\r\n <i class=\"fa fa-paint-brush menu-icon\"></i>\r\n <span>Application Settings</span>\r\n </button>\r\n <button mat-menu-item\r\n [matMenuTriggerFor]=\"clientConfig\"\r\n *ngIf=\"toolbarData.clientConfigurationEnable\"\r\n #clientMenuTrigger\r\n class=\"menu-item-with-icon\">\r\n <i class=\"fa fa-building menu-icon\"></i>\r\n <span>Client Settings</span>\r\n </button>\r\n</mat-menu>\r\n\r\n<!-- Application Configuration Menu -->\r\n<mat-menu #appConfig=\"matMenu\" xPosition=\"after\" class=\"sgh-app-config-menu\">\r\n <div class=\"theme-menu-header\">\r\n <i class=\"fa fa-palette\"></i>\r\n <span>Choose Theme</span>\r\n </div>\r\n <div *ngFor=\"let themeoption of toolbarData.themeOptions\" class=\"theme-option-wrapper\">\r\n <button mat-menu-item class=\"theme-radio-option\" (click)=\"onRadioClick(themeoption.value)\">\r\n <div class=\"radio-button\">\r\n <input value=\"{{themeoption.value}}\"\r\n name=\"radio\"\r\n type=\"radio\"\r\n [checked]=\"selected === themeoption.value\"\r\n [ngModel]=\"selected\"\r\n (ngModelChange)=\"setClass($event)\">\r\n <span class=\"radio-label\">{{themeoption.name}}</span>\r\n </div>\r\n </button>\r\n </div>\r\n</mat-menu>\r\n\r\n<!-- Client Configuration Menu -->\r\n<mat-menu #clientConfig=\"matMenu\" xPosition=\"after\" class=\"sgh-client-config-menu\">\r\n <div class=\"client-menu-container\">\r\n <div class=\"client-menu-header\">\r\n <i class=\"fa fa-building\"></i>\r\n <span>Select Client</span>\r\n </div>\r\n <div class=\"client-search-wrapper\" (click)=\"$event.stopPropagation();\">\r\n <i class=\"fa fa-search search-icon\"></i>\r\n <input type=\"text\"\r\n class=\"client-search-input\"\r\n placeholder=\"Search clients...\"\r\n [(ngModel)]=\"searchText\"\r\n autocomplete=\"off\"/>\r\n </div>\r\n <div class=\"client-list-container\">\r\n <div class=\"client-list-item\"\r\n *ngFor=\"let item of toolbarData.clientList | search : searchText; let i = index\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"toggleSelect($event, item);\"\r\n mat-ripple>\r\n <i class=\"fa fa-check-circle check-icon\" *ngIf=\"item.selected\"></i>\r\n <span class=\"client-name\">{{item.text}}</span>\r\n </div>\r\n <div class=\"no-results\" *ngIf=\"(toolbarData.clientList | search : searchText)?.length === 0\">\r\n <i class=\"fa fa-search\"></i>\r\n <span>No clients found</span>\r\n </div>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n<sgh-notification-list *ngIf=\"toolbarData.isNotifNavCollapsed\"></sgh-notification-list>\r\n", styles: [".sgh-toolbar{position:sticky;top:0;z-index:1000;box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f;background:var(--sgh-toolbar-bg, rgba(255, 255, 255, .95));border-bottom:1px solid var(--sgh-border-color, #e2e8f0)}@supports (backdrop-filter: blur(10px)){.sgh-toolbar{background:var(--sgh-toolbar-bg, rgba(255, 255, 255, .85));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}.toolbar-main-wrapper{display:flex;align-items:center;justify-content:space-between;height:64px;padding:0 1.5rem;max-width:100%;margin:0 auto;transition:all .3s cubic-bezier(.4,0,.2,1)}@media (max-width: 768px){.toolbar-main-wrapper{height:56px;padding:0 1rem}}.toolbar-left-section{display:flex;align-items:center;gap:5rem;flex:1;min-width:0}.toolbar-logo{display:flex;align-items:center;flex-shrink:0}.toolbar-logo .logo-image{height:42px;width:auto;max-width:200px;object-fit:contain;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);filter:drop-shadow(0 1px 2px rgba(0,0,0,.05))}.toolbar-logo .logo-image:hover{transform:scale(1.02);filter:drop-shadow(0 2px 4px rgba(0,0,0,.1))}.toolbar-logo .logo-image:active{transform:scale(.98)}.toolbar-menu-toggle{display:flex;align-items:center;justify-content:center;width:42px;height:42px;padding:0;border:none;border-radius:12px;background:transparent;color:var(--sgh-text-secondary, #64748b);cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);flex-shrink:0}.toolbar-menu-toggle i{font-size:1.25rem;transition:all .15s cubic-bezier(.4,0,.2,1)}.toolbar-menu-toggle:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08));color:var(--sgh-primary-color, #3b82f6);transform:translateY(-1px)}.toolbar-menu-toggle:hover i{transform:scale(1.1)}.toolbar-menu-toggle:active{transform:translateY(0) scale(.95)}.toolbar-menu-toggle:focus-visible{outline:2px solid var(--sgh-primary-color, #3b82f6);outline-offset:2px}.toolbar-search{flex:1;max-width:600px;margin:0 1rem}@media (max-width: 1024px){.toolbar-search{max-width:400px}}.search-form{width:100%}.search-input-wrapper{position:relative;display:flex;align-items:center;height:42px;background:var(--sgh-search-bg, #f8fafc);border:1.5px solid transparent;border-radius:12px;transition:all .15s cubic-bezier(.4,0,.2,1);overflow:hidden}.search-input-wrapper:hover{background:var(--sgh-surface-color, #ffffff);border-color:#3b82f633;box-shadow:0 0 0 3px #3b82f60d}.search-input-wrapper:focus-within{background:var(--sgh-surface-color, #ffffff);border-color:var(--sgh-primary-color, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.search-input-wrapper .search-icon{position:absolute;left:14px;color:var(--sgh-text-muted, #94a3b8);font-size:1rem;transition:all .15s cubic-bezier(.4,0,.2,1);pointer-events:none}.search-input-wrapper .search-input{flex:1;height:100%;padding:0 12px 0 42px;border:none;background:transparent;color:var(--sgh-text-primary, #1e293b);font-size:.9375rem;font-weight:400;outline:none}.search-input-wrapper .search-input::placeholder{color:var(--sgh-text-muted, #94a3b8);font-weight:400}.search-input-wrapper .search-input:focus::placeholder{opacity:.6}.search-input-wrapper .search-input:focus~.search-icon{color:var(--sgh-primary-color, #3b82f6)}.search-input-wrapper .search-submit{display:flex;align-items:center;justify-content:center;width:36px;height:36px;margin-right:3px;padding:0;border:none;border-radius:8px;background:transparent;color:var(--sgh-text-muted, #94a3b8);cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1)}.search-input-wrapper .search-submit i{font-size:.875rem;transition:all .15s cubic-bezier(.4,0,.2,1)}.search-input-wrapper .search-submit:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08));color:var(--sgh-primary-color, #3b82f6)}.search-input-wrapper .search-submit:hover i{transform:translate(2px)}.search-input-wrapper .search-submit:active{transform:scale(.95)}.toolbar-right-section{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.toolbar-action-btn{position:relative;display:flex;align-items:center;justify-content:center;width:42px;height:42px;padding:0;border:none;border-radius:12px;background:transparent;color:var(--sgh-text-secondary, #64748b);cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);flex-shrink:0}.toolbar-action-btn i{font-size:1.125rem;transition:all .15s cubic-bezier(.4,0,.2,1)}.toolbar-action-btn:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08));color:var(--sgh-primary-color, #3b82f6);transform:translateY(-1px);box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f}.toolbar-action-btn:hover i{transform:scale(1.1)}.toolbar-action-btn:active{transform:translateY(0) scale(.95);box-shadow:none}.toolbar-action-btn:focus-visible{outline:2px solid var(--sgh-primary-color, #3b82f6);outline-offset:2px}.toolbar-action-btn .notification-badge{position:absolute;top:6px;right:6px;display:flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;background:linear-gradient(135deg,#ef4444,#dc2626);border:2px solid var(--sgh-surface-color, #ffffff);border-radius:10px;color:#fff;font-size:.625rem;font-weight:700;line-height:1;box-shadow:0 2px 4px #00000026;animation:pulse 2s infinite}.toolbar-action-btn.notification-btn:hover .notification-badge{animation:none;transform:scale(1.1)}.toolbar-action-btn.profile-btn i{font-size:1.3rem}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.9;transform:scale(1.05)}}.toolbar-dropdown{position:absolute;top:72px;right:1.5rem;z-index:1001;min-width:320px;max-width:400px;animation:dropdownSlideIn .25s cubic-bezier(.4,0,.2,1)}@media (max-width: 768px){.toolbar-dropdown{top:64px;right:1rem;left:1rem;max-width:none}}.dropdown-card{background:var(--sgh-surface-color, #ffffff);border-radius:16px;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;border:1px solid var(--sgh-border-color, #e2e8f0);overflow:hidden}@supports (backdrop-filter: blur(10px)){.dropdown-card{background:var(--sgh-surface-color, rgba(255, 255, 255, .95));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}.dropdown-content{padding:1rem}@keyframes dropdownSlideIn{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}::ng-deep .sgh-settings-menu .mat-mdc-menu-panel,::ng-deep .sgh-app-config-menu .mat-mdc-menu-panel,::ng-deep .sgh-client-config-menu .mat-mdc-menu-panel{min-width:240px;border-radius:12px;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;border:1px solid var(--sgh-border-color, #e2e8f0);overflow:hidden}::ng-deep .sgh-settings-menu .mat-mdc-menu-content,::ng-deep .sgh-app-config-menu .mat-mdc-menu-content,::ng-deep .sgh-client-config-menu .mat-mdc-menu-content{padding:.5rem}::ng-deep .sgh-settings-menu .mat-mdc-menu-item,::ng-deep .sgh-app-config-menu .mat-mdc-menu-item,::ng-deep .sgh-client-config-menu .mat-mdc-menu-item{border-radius:8px;margin-bottom:2px;min-height:42px;padding:0 12px;transition:all .15s cubic-bezier(.4,0,.2,1)}::ng-deep .sgh-settings-menu .mat-mdc-menu-item:hover,::ng-deep .sgh-app-config-menu .mat-mdc-menu-item:hover,::ng-deep .sgh-client-config-menu .mat-mdc-menu-item:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08))}::ng-deep .sgh-settings-menu .mat-mdc-menu-item.menu-item-with-icon,::ng-deep .sgh-app-config-menu .mat-mdc-menu-item.menu-item-with-icon,::ng-deep .sgh-client-config-menu .mat-mdc-menu-item.menu-item-with-icon{display:flex;align-items:center;gap:12px}::ng-deep .sgh-settings-menu .mat-mdc-menu-item.menu-item-with-icon .menu-icon,::ng-deep .sgh-app-config-menu .mat-mdc-menu-item.menu-item-with-icon .menu-icon,::ng-deep .sgh-client-config-menu .mat-mdc-menu-item.menu-item-with-icon .menu-icon{color:var(--sgh-text-secondary, #64748b);font-size:1rem;width:20px;text-align:center}.theme-menu-header{display:flex;align-items:center;gap:8px;padding:12px 16px 8px;color:var(--sgh-text-primary, #1e293b);font-weight:600;font-size:.9375rem;border-bottom:1px solid var(--sgh-border-color, #e2e8f0);margin-bottom:8px}.theme-menu-header i{color:var(--sgh-primary-color, #3b82f6);font-size:1rem}.theme-option-wrapper{padding:0 8px}.theme-radio-option{width:100%;border-radius:8px;padding:8px 12px!important}.theme-radio-option .radio-button{display:flex;align-items:center;gap:12px;width:100%}.theme-radio-option .radio-button input[type=radio]{appearance:none;width:18px;height:18px;border:2px solid var(--sgh-border-color, #e2e8f0);border-radius:50%;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);position:relative;flex-shrink:0}.theme-radio-option .radio-button input[type=radio]:checked{border-color:var(--sgh-primary-color, #3b82f6)}.theme-radio-option .radio-button input[type=radio]:checked:before{content:\"\";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:10px;height:10px;background:var(--sgh-primary-color, #3b82f6);border-radius:50%}.theme-radio-option .radio-button input[type=radio]:hover{border-color:var(--sgh-primary-color, #3b82f6)}.theme-radio-option .radio-button .radio-label{flex:1;color:var(--sgh-text-primary, #1e293b);font-size:.9375rem;-webkit-user-select:none;user-select:none}.client-menu-container{width:320px;max-width:calc(100vw - 2rem)}.client-menu-header{display:flex;align-items:center;gap:8px;padding:12px 16px;color:var(--sgh-text-primary, #1e293b);font-weight:600;font-size:.9375rem;border-bottom:1px solid var(--sgh-border-color, #e2e8f0);background:var(--sgh-surface-color, #f8fafc)}.client-menu-header i{color:var(--sgh-primary-color, #3b82f6);font-size:1rem}.client-search-wrapper{position:relative;padding:12px 16px;border-bottom:1px solid var(--sgh-border-color, #e2e8f0)}.client-search-wrapper .search-icon{position:absolute;left:28px;top:50%;transform:translateY(-50%);color:var(--sgh-text-muted, #94a3b8);font-size:.875rem;pointer-events:none}.client-search-wrapper .client-search-input{width:100%;height:36px;padding:0 12px 0 32px;border:1.5px solid var(--sgh-border-color, #e2e8f0);border-radius:8px;background:var(--sgh-surface-color, #ffffff);color:var(--sgh-text-primary, #1e293b);font-size:.875rem;outline:none;transition:all .15s cubic-bezier(.4,0,.2,1)}.client-search-wrapper .client-search-input::placeholder{color:var(--sgh-text-muted, #94a3b8)}.client-search-wrapper .client-search-input:focus{border-color:var(--sgh-primary-color, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.client-list-container{max-height:320px;overflow-y:auto;padding:8px}.client-list-container::-webkit-scrollbar{width:6px}.client-list-container::-webkit-scrollbar-track{background:transparent}.client-list-container::-webkit-scrollbar-thumb{background:#0000001a;border-radius:3px}.client-list-container::-webkit-scrollbar-thumb:hover{background:#0003}.client-list-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:8px;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);position:relative}.client-list-item .check-icon{color:var(--sgh-primary-color, #3b82f6);font-size:1rem;flex-shrink:0}.client-list-item .client-name{flex:1;color:var(--sgh-text-primary, #1e293b);font-size:.9375rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.client-list-item:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08))}.client-list-item.selected{background:#3b82f61a}.client-list-item.selected .client-name{color:var(--sgh-primary-color, #3b82f6);font-weight:500}.no-results{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem 1rem;color:var(--sgh-text-muted, #94a3b8);text-align:center}.no-results i{font-size:2rem;margin-bottom:.5rem;opacity:.5}.no-results span{font-size:.875rem}@media (max-width: 1024px){.toolbar-search{max-width:300px}}@media (max-width: 768px){.toolbar-search{display:none}.toolbar-left-section{gap:.5rem}.toolbar-logo .logo-image{height:36px;max-width:140px}.toolbar-menu-toggle,.toolbar-action-btn{width:40px;height:40px}.toolbar-menu-toggle i,.toolbar-action-btn i{font-size:1.125rem}.toolbar-action-btn .notification-badge{top:4px;right:4px}.toolbar-right-section{gap:.25rem}}@media (min-width: 1440px){.toolbar-main-wrapper{max-width:1400px}}@media (min-width: 1920px){.toolbar-main-wrapper{max-width:100%}.toolbar-logo .logo-image{height:48px;max-width:240px}.toolbar-search{max-width:700px}}@media (prefers-color-scheme: dark){.sgh-toolbar{--sgh-toolbar-bg: rgba(15, 23, 42, .95);--sgh-surface-color: #1e293b;--sgh-text-primary: #f1f5f9;--sgh-text-secondary: #94a3b8;--sgh-text-muted: #64748b;--sgh-border-color: #334155;--sgh-search-bg: #0f172a;--sgh-hover-bg: rgba(59, 130, 246, .15)}}@media print{.sgh-toolbar{display:none}}@media (prefers-reduced-motion: reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media (prefers-contrast: high){.toolbar-action-btn,.toolbar-menu-toggle{border:1px solid currentColor}}:focus-visible{outline:2px solid var(--sgh-primary-color, #3b82f6);outline-offset:2px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i6.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: NotificationListComponent, selector: "sgh-notification-list" }, { kind: "pipe", type: SearchPipe, name: "search" }], animations: [
|
|
612
614
|
fadeInOut
|
|
613
615
|
] }); }
|
|
614
616
|
}
|
|
@@ -616,7 +618,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
616
618
|
type: Component,
|
|
617
619
|
args: [{ selector: 'sgh-toolbar', animations: [
|
|
618
620
|
fadeInOut
|
|
619
|
-
], standalone: false, template: "<nav class=\"toolbar-main-wrapper\" [style.background-color]=\"toolbarData.bgColor\" id=\"toolBarWrapper\">\r\n <div class=\"logo-wrapper\">\r\n <img class=\"logo\" [src]=\"toolbarData.img\"/>\r\n </div>\r\n <div>\r\n <button class=\"toggle-button\" (click)=\"toggleSidebar()\">\r\n <i class=\"fa fa-bars fa-fade\"></i>\r\n </button>\r\n </div>\r\n <div class=\"search\">\r\n <div class=\"form\" *ngIf=\"toolbarData.searchEnable\">\r\n <input type=\"text\" name=\"text\" autocomplete=\"off\" required/>\r\n <label class=\"label-name\">\r\n <span class=\"content-name\">\r\n Search\r\n </span>\r\n </label>\r\n <button class=\"search-wrapper\">\r\n <i class=\"fa fa-search\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"toolbarData.notificationEnable\" class=\"icon\" id=\"bell\" (click)=\"toggleNotificationList()\">\r\n <i class=\"fa fa-bell\"></i>\r\n </div>\r\n <div *ngIf=\"toolbarData.profileEnable\" class=\"icon\" id=\"bell3\" (click)=\"clickProfile()\">\r\n <i class=\"fa fa-user\"></i>\r\n </div>\r\n <div *ngIf=\"toolbarData.settingsEnable\" class=\"icon\" id=\"bell2\" [matMenuTriggerFor]=\"settingsMenu\">\r\n <i class=\"fa fa-gear\"></i>\r\n </div>\r\n</nav>\r\n\r\n<div *ngIf=\"toolbarData.profileView\" class=\"notifications\">\r\n <div class=\"notifications-list-wrapper profile-list-wrapper\">\r\n <div class=\"notifications-list\">\r\n <div class=\"notifications-list-item\">\r\n <div [innerHTML]=\"toolbarData.profileContent\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--Settings related menus start-->\r\n<mat-menu #settingsMenu=\"matMenu\" xPosition=\"before\">\r\n <button mat-menu-item [matMenuTriggerFor]=\"appConfig\" *ngIf=\"toolbarData.applicationConfigurationEnable\">Application Settings</button>\r\n <button mat-menu-item [matMenuTriggerFor]=\"clientConfig\" *ngIf=\"toolbarData.clientConfigurationEnable\" #clientMenuTrigger>Client Settings</button>\r\n</mat-menu>\r\n<mat-menu #appConfig=\"matMenu\" xPosition=\"after\">\r\n <div *ngFor=\"let themeoption of toolbarData.themeOptions\">\r\n <button mat-menu-item class=\"radio\" (click)=\"onRadioClick(themeoption.value)\">\r\n <input value=\"{{themeoption.value}}\" name=\"radio\" type=\"radio\" checked [ngModel]=\"selected\"\r\n (ngModelChange)=\"setClass($event)\">\r\n <span>{{themeoption.name}}</span>\r\n </button>\r\n </div>\r\n</mat-menu>\r\n<mat-menu #clientConfig=\"matMenu\" xPosition=\"after\">\r\n <div style=\"width: 250px\" class=\"client-menu-wrapper\">\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-12\" (click)=\"$event.stopPropagation();\">\r\n <input type=\"text\" class=\"search-input\" placeholder=\"Search Client\" [(ngModel)]=\"searchText\"/>\r\n </div>\r\n <div class=\"col-sm-12\">\r\n <div class=\"mt-2 list-item-container\">\r\n <div class=\"list-item text-truncate\" *ngFor=\"let item of toolbarData.clientList | search : searchText;let i = index\"\r\n [ngClass]=\"{'client-selected': item.selected}\"\r\n (click)=\"toggleSelect($event, item);\" mat-ripple>{{item.text}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n<!--Settings related menus end-->\r\n\r\n<sgh-notification-list *ngIf=\"toolbarData.isNotifNavCollapsed\"></sgh-notification-list>\r\n", styles: [".toolbar-main-wrapper{position:relative;box-shadow:var(--sgh-shadow, 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px 0 rgba(0, 0, 0, .06));z-index:1000;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--sgh-border-color, rgba(255, 255, 255, .1))}nav{display:flex;align-items:center;background:var(--sgh-toolbar-bg, rgba(255, 255, 255, .95));height:64px;position:relative;padding:0 1.5rem;transition:all .3s cubic-bezier(.4,0,.2,1)}@supports (backdrop-filter: blur(10px)){nav{background:var(--sgh-toolbar-bg, rgba(255, 255, 255, .8));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}.logo-wrapper{display:flex;align-items:center;flex-shrink:0;margin-right:2rem}.logo{height:32px;width:auto;object-fit:contain;transition:transform .2s ease}.logo:hover{transform:scale(1.05)}.icon{cursor:pointer;margin-left:.75rem;width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;background:transparent;border:none}.icon i{color:var(--sgh-text-secondary, #64748b);font-size:1.125rem;transition:color .2s ease}.icon:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .1));transform:translateY(-1px);box-shadow:var(--sgh-shadow, 0 4px 12px rgba(0, 0, 0, .15))}.icon:hover i{color:var(--sgh-primary-color, #3b82f6)}.icon:active{transform:translateY(0);box-shadow:var(--sgh-shadow, 0 2px 4px rgba(0, 0, 0, .1))}.icon span{background:var(--sgh-error-color, #ef4444);padding:2px 6px;border-radius:10px;color:#fff;font-size:.75rem;font-weight:500;position:absolute;top:-2px;right:-2px;min-width:16px;height:16px;display:flex;align-items:center;justify-content:center;border:2px solid var(--sgh-surface-color, white)}.icon img{width:20px;height:20px;border-radius:50%}.search{flex:1;max-width:400px;margin:0 2rem}.notifications h2{font-size:14px;padding:10px;border-bottom:1px solid #eee;color:#999}.notifications h2 span{color:red}.notifications-item{display:flex;border-bottom:1px solid #eee;padding:6px 9px;margin-bottom:0;cursor:pointer}.notifications-item:hover{background-color:#eee}.notifications-item img{display:block;width:50px;height:50px;margin-right:9px;border-radius:50%;margin-top:2px}.notifications-item .text h4{color:#777;font-size:16px;margin-top:3px}.notifications-item .text p{color:#aaa;font-size:12px}.box{width:280px;height:auto;background-color:#fff;border-radius:0;display:flex;align-items:center;padding:0;border-bottom:2px solid #005860}.box>i{font-size:20px;color:#777}.box>input{flex:1;height:35px;border:none;outline:none;font-size:14px;padding-left:10px}.box>button{background:transparent;border:none;cursor:pointer}.toggle-button{background:transparent;border:none;cursor:pointer;width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;transition:all .2s cubic-bezier(.4,0,.2,1);margin-right:1rem}.toggle-button i{color:var(--sgh-text-secondary, #64748b);font-size:1.125rem;transition:color .2s ease}.toggle-button:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .1));transform:translateY(-1px)}.toggle-button:hover i{color:var(--sgh-primary-color, #3b82f6)}.toggle-button:active{transform:translateY(0)}.search-wrapper{border-radius:20px;padding:13px;border:none;background:transparent;cursor:pointer}.search-wrapper i{color:#005860!important}.search-wrapper:hover{background:#0000000a!important}.logo{width:49%!important;padding:0 19px}.theme-list-wrapper,.profile-list-wrapper{width:300px!important}.notifications-list-wrapper{padding:10px;position:absolute;right:10px;top:45px;z-index:2;color:#000000de;width:450px}.notifications-list-wrapper .notifications-list{box-shadow:0 2px 10px #00000026;position:relative}.notifications-list-wrapper .notifications-list .notifications-title{background-color:#fff;text-align:center;padding:20px 10px;border-bottom:1px solid #f1f1f3}.notifications-list-wrapper .notifications-list .notifications-list-item{padding:10px;background-color:#fff;border-bottom:1px solid #f1f1f3;font-size:14px}.notifications-list-wrapper .notifications-list .notifications-list-item .item-title{margin:0;white-space:normal}.notifications-list-wrapper .notifications-list .notifications-list-item .item-description{margin:0;color:#000000de;opacity:.5;white-space:normal}.notifications-list-wrapper .notifications-list .see-all{background-color:#fff;color:#006068;font-weight:500}@media screen and (max-width: 599px){.notifications-list-wrapper{width:auto}}.notifications-list-wrapper{-webkit-animation:cardAnim 1s cubic-bezier(.33,1,.68,1) 0s 1 normal none;animation:cardAnim 1s cubic-bezier(.33,1,.68,1) 0s 1 normal none}@keyframes cardAnim{0%{opacity:0;transform:rotateX(-100deg);transform-origin:top}to{opacity:1;transform:rotateX(0);transform-origin:top}}select{padding:10px 20px;border-radius:5px;width:100%;margin:3% 10%;border:1px solid #005860}select:focus{outline:none}.form{width:100%;position:relative;height:40px;display:flex;align-items:center;background:var(--sgh-search-bg, rgba(248, 250, 252, .8));border:1px solid var(--sgh-border-color, #e2e8f0);border-radius:12px;transition:all .3s cubic-bezier(.4,0,.2,1);overflow:hidden}.form:hover{border-color:var(--sgh-primary-color, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.form:focus-within{border-color:var(--sgh-primary-color, #3b82f6);box-shadow:0 0 0 3px #3b82f61a;background:var(--sgh-surface-color, white)}.form input{width:100%;height:100%;color:var(--sgh-text-primary, #1e293b);padding:0 12px;border:none;background:transparent;font-size:.875rem;outline:none}.form input::placeholder{color:var(--sgh-text-muted, #94a3b8);transition:opacity .3s ease}.form input:focus::placeholder{opacity:.7}.form label{position:absolute;top:50%;left:12px;transform:translateY(-50%);pointer-events:none;transition:all .3s cubic-bezier(.4,0,.2,1);color:var(--sgh-text-muted, #94a3b8);font-size:.875rem;background:transparent;padding:0 4px}.content-name{transition:all .3s cubic-bezier(.4,0,.2,1)}.form input:focus+.label-name .content-name,.form input:valid+.label-name .content-name{transform:translateY(-120%);font-size:.75rem;color:var(--sgh-primary-color, #3b82f6);background:var(--sgh-surface-color, white);padding:0 4px}.search-wrapper{background:transparent;border:none;cursor:pointer;padding:8px 12px;display:flex;align-items:center;justify-content:center;transition:all .2s ease;border-radius:8px;margin-right:4px}.search-wrapper i{color:var(--sgh-text-muted, #94a3b8);font-size:1rem;transition:color .2s ease}.search-wrapper:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .1))}.search-wrapper:hover i{color:var(--sgh-primary-color, #3b82f6)}.radio{display:block;cursor:pointer;-webkit-user-select:none;user-select:none;text-align:left}.radio+.radio{margin-top:12px}.radio input{display:none}.radio input+span{display:inline-block;position:relative;padding-left:30px}.radio input+span:before{content:\"\";display:block;position:absolute;top:0;left:0;border-radius:50%;margin-right:5px;width:16px;height:16px;border:1px solid #ccc;background:#fff}.radio input+span:after{content:\"\";display:block;width:11px;height:11px;background:#005860;position:absolute;border-radius:50%;top:3px;left:3px;opacity:0;transform:scale(0);transition:all .2s cubic-bezier(.64,.57,.67,1.53)}.radio input:checked+span:after{opacity:1;transform:scale(1)}.client-menu-wrapper .container-fluid{padding-right:15px;padding-left:15px;margin:10px}.client-menu-wrapper .container-fluid .row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px;flex-direction:column}.client-menu-wrapper .container-fluid .row .search-input{width:100%;box-sizing:border-box;display:block;padding:.375rem .75rem;font-size:12px;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.client-menu-wrapper .container-fluid .row .search-input:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem #007bff40}.client-menu-wrapper .container-fluid .row .list-item-container{border:.5px rgba(0,0,0,.12) solid;margin-top:5px;border-radius:5px;overflow:hidden}.client-menu-wrapper .container-fluid .row .list-item-container .mat-ripple{padding:8px;font-size:12px}.client-menu-wrapper .container-fluid .row .list-item-container .mat-ripple:hover{background:#76767642;cursor:pointer;transition:all .3s ease 0s}.client-menu-wrapper .container-fluid .row .list-item-container .client-selected{color:#fff;background-color:#005860}@media screen and (max-width: 600px){.search{display:none}.logo-wrapper{width:30%}.logo-wrapper .logo{width:78%!important;padding:9px}.sgh-sidebar{z-index:1!important;position:absolute!important;background:#fff!important}.icon{cursor:pointer;margin-right:0;margin-left:34px}.toggle-button{order:-1}.logo-wrapper,.icon{order:1}#toolBarWrapper{padding:0 15px;justify-content:space-between}}@media screen and (min-width: 1900px){.logo{width:29%!important;padding:0 35px}}\n"] }]
|
|
621
|
+
], standalone: false, template: "<header class=\"sgh-toolbar\" [style.background-color]=\"toolbarData.bgColor\" id=\"toolBarWrapper\" role=\"banner\">\r\n <nav class=\"toolbar-main-wrapper\">\r\n <!-- Left Section -->\r\n <div class=\"toolbar-left-section\">\r\n <!-- Logo -->\r\n <div class=\"toolbar-logo\">\r\n <img class=\"logo-image\" [src]=\"toolbarData.img\" alt=\"Application Logo\"/>\r\n </div>\r\n\r\n <!-- Menu Toggle -->\r\n <button class=\"toolbar-menu-toggle\"\r\n (click)=\"toggleSidebar()\"\r\n aria-label=\"Toggle navigation menu\"\r\n title=\"Toggle Menu\">\r\n <i class=\"fa fa-bars\"></i>\r\n </button>\r\n\r\n <!-- Search Bar -->\r\n <div class=\"toolbar-search\" *ngIf=\"toolbarData.searchEnable\">\r\n <form class=\"search-form\" (submit)=\"$event.preventDefault()\">\r\n <div class=\"search-input-wrapper\">\r\n <i class=\"fa fa-search search-icon\"></i>\r\n <input type=\"search\"\r\n class=\"search-input\"\r\n placeholder=\"Search...\"\r\n autocomplete=\"off\"\r\n aria-label=\"Search\"/>\r\n <button type=\"submit\" class=\"search-submit\" aria-label=\"Submit search\">\r\n <i class=\"fa fa-arrow-right\"></i>\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Section -->\r\n <div class=\"toolbar-right-section\">\r\n <!-- Notification Button -->\r\n <button *ngIf=\"toolbarData.notificationEnable\"\r\n class=\"toolbar-action-btn notification-btn\"\r\n (click)=\"toggleNotificationList()\"\r\n aria-label=\"View notifications\"\r\n title=\"Notifications\">\r\n <i class=\"fa fa-bell\"></i>\r\n <span class=\"notification-badge\" *ngIf=\"true\">3</span>\r\n </button>\r\n\r\n <!-- Settings Button -->\r\n <button *ngIf=\"toolbarData.settingsEnable\"\r\n class=\"toolbar-action-btn settings-btn\"\r\n [matMenuTriggerFor]=\"settingsMenu\"\r\n aria-label=\"Open settings\"\r\n title=\"Settings\">\r\n <i class=\"fa fa-cog\"></i>\r\n </button>\r\n\r\n <!-- User Profile Button -->\r\n <button *ngIf=\"toolbarData.profileEnable\"\r\n class=\"toolbar-action-btn profile-btn\"\r\n (click)=\"clickProfile()\"\r\n aria-label=\"View profile\"\r\n title=\"Profile\">\r\n <i class=\"fa fa-user-circle\"></i>\r\n </button>\r\n </div>\r\n </nav>\r\n</header>\r\n\r\n<!-- Profile Dropdown -->\r\n<div *ngIf=\"toolbarData.profileView\" class=\"toolbar-dropdown profile-dropdown\" @fadeInOut>\r\n <div class=\"dropdown-card\">\r\n <div class=\"dropdown-content\">\r\n <div [innerHTML]=\"toolbarData.profileContent\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Settings Menu -->\r\n<mat-menu #settingsMenu=\"matMenu\" xPosition=\"before\" class=\"sgh-settings-menu\">\r\n <button mat-menu-item\r\n [matMenuTriggerFor]=\"appConfig\"\r\n *ngIf=\"toolbarData.applicationConfigurationEnable\"\r\n class=\"menu-item-with-icon\">\r\n <i class=\"fa fa-paint-brush menu-icon\"></i>\r\n <span>Application Settings</span>\r\n </button>\r\n <button mat-menu-item\r\n [matMenuTriggerFor]=\"clientConfig\"\r\n *ngIf=\"toolbarData.clientConfigurationEnable\"\r\n #clientMenuTrigger\r\n class=\"menu-item-with-icon\">\r\n <i class=\"fa fa-building menu-icon\"></i>\r\n <span>Client Settings</span>\r\n </button>\r\n</mat-menu>\r\n\r\n<!-- Application Configuration Menu -->\r\n<mat-menu #appConfig=\"matMenu\" xPosition=\"after\" class=\"sgh-app-config-menu\">\r\n <div class=\"theme-menu-header\">\r\n <i class=\"fa fa-palette\"></i>\r\n <span>Choose Theme</span>\r\n </div>\r\n <div *ngFor=\"let themeoption of toolbarData.themeOptions\" class=\"theme-option-wrapper\">\r\n <button mat-menu-item class=\"theme-radio-option\" (click)=\"onRadioClick(themeoption.value)\">\r\n <div class=\"radio-button\">\r\n <input value=\"{{themeoption.value}}\"\r\n name=\"radio\"\r\n type=\"radio\"\r\n [checked]=\"selected === themeoption.value\"\r\n [ngModel]=\"selected\"\r\n (ngModelChange)=\"setClass($event)\">\r\n <span class=\"radio-label\">{{themeoption.name}}</span>\r\n </div>\r\n </button>\r\n </div>\r\n</mat-menu>\r\n\r\n<!-- Client Configuration Menu -->\r\n<mat-menu #clientConfig=\"matMenu\" xPosition=\"after\" class=\"sgh-client-config-menu\">\r\n <div class=\"client-menu-container\">\r\n <div class=\"client-menu-header\">\r\n <i class=\"fa fa-building\"></i>\r\n <span>Select Client</span>\r\n </div>\r\n <div class=\"client-search-wrapper\" (click)=\"$event.stopPropagation();\">\r\n <i class=\"fa fa-search search-icon\"></i>\r\n <input type=\"text\"\r\n class=\"client-search-input\"\r\n placeholder=\"Search clients...\"\r\n [(ngModel)]=\"searchText\"\r\n autocomplete=\"off\"/>\r\n </div>\r\n <div class=\"client-list-container\">\r\n <div class=\"client-list-item\"\r\n *ngFor=\"let item of toolbarData.clientList | search : searchText; let i = index\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"toggleSelect($event, item);\"\r\n mat-ripple>\r\n <i class=\"fa fa-check-circle check-icon\" *ngIf=\"item.selected\"></i>\r\n <span class=\"client-name\">{{item.text}}</span>\r\n </div>\r\n <div class=\"no-results\" *ngIf=\"(toolbarData.clientList | search : searchText)?.length === 0\">\r\n <i class=\"fa fa-search\"></i>\r\n <span>No clients found</span>\r\n </div>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n<sgh-notification-list *ngIf=\"toolbarData.isNotifNavCollapsed\"></sgh-notification-list>\r\n", styles: [".sgh-toolbar{position:sticky;top:0;z-index:1000;box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f;background:var(--sgh-toolbar-bg, rgba(255, 255, 255, .95));border-bottom:1px solid var(--sgh-border-color, #e2e8f0)}@supports (backdrop-filter: blur(10px)){.sgh-toolbar{background:var(--sgh-toolbar-bg, rgba(255, 255, 255, .85));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}.toolbar-main-wrapper{display:flex;align-items:center;justify-content:space-between;height:64px;padding:0 1.5rem;max-width:100%;margin:0 auto;transition:all .3s cubic-bezier(.4,0,.2,1)}@media (max-width: 768px){.toolbar-main-wrapper{height:56px;padding:0 1rem}}.toolbar-left-section{display:flex;align-items:center;gap:5rem;flex:1;min-width:0}.toolbar-logo{display:flex;align-items:center;flex-shrink:0}.toolbar-logo .logo-image{height:42px;width:auto;max-width:200px;object-fit:contain;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);filter:drop-shadow(0 1px 2px rgba(0,0,0,.05))}.toolbar-logo .logo-image:hover{transform:scale(1.02);filter:drop-shadow(0 2px 4px rgba(0,0,0,.1))}.toolbar-logo .logo-image:active{transform:scale(.98)}.toolbar-menu-toggle{display:flex;align-items:center;justify-content:center;width:42px;height:42px;padding:0;border:none;border-radius:12px;background:transparent;color:var(--sgh-text-secondary, #64748b);cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);flex-shrink:0}.toolbar-menu-toggle i{font-size:1.25rem;transition:all .15s cubic-bezier(.4,0,.2,1)}.toolbar-menu-toggle:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08));color:var(--sgh-primary-color, #3b82f6);transform:translateY(-1px)}.toolbar-menu-toggle:hover i{transform:scale(1.1)}.toolbar-menu-toggle:active{transform:translateY(0) scale(.95)}.toolbar-menu-toggle:focus-visible{outline:2px solid var(--sgh-primary-color, #3b82f6);outline-offset:2px}.toolbar-search{flex:1;max-width:600px;margin:0 1rem}@media (max-width: 1024px){.toolbar-search{max-width:400px}}.search-form{width:100%}.search-input-wrapper{position:relative;display:flex;align-items:center;height:42px;background:var(--sgh-search-bg, #f8fafc);border:1.5px solid transparent;border-radius:12px;transition:all .15s cubic-bezier(.4,0,.2,1);overflow:hidden}.search-input-wrapper:hover{background:var(--sgh-surface-color, #ffffff);border-color:#3b82f633;box-shadow:0 0 0 3px #3b82f60d}.search-input-wrapper:focus-within{background:var(--sgh-surface-color, #ffffff);border-color:var(--sgh-primary-color, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.search-input-wrapper .search-icon{position:absolute;left:14px;color:var(--sgh-text-muted, #94a3b8);font-size:1rem;transition:all .15s cubic-bezier(.4,0,.2,1);pointer-events:none}.search-input-wrapper .search-input{flex:1;height:100%;padding:0 12px 0 42px;border:none;background:transparent;color:var(--sgh-text-primary, #1e293b);font-size:.9375rem;font-weight:400;outline:none}.search-input-wrapper .search-input::placeholder{color:var(--sgh-text-muted, #94a3b8);font-weight:400}.search-input-wrapper .search-input:focus::placeholder{opacity:.6}.search-input-wrapper .search-input:focus~.search-icon{color:var(--sgh-primary-color, #3b82f6)}.search-input-wrapper .search-submit{display:flex;align-items:center;justify-content:center;width:36px;height:36px;margin-right:3px;padding:0;border:none;border-radius:8px;background:transparent;color:var(--sgh-text-muted, #94a3b8);cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1)}.search-input-wrapper .search-submit i{font-size:.875rem;transition:all .15s cubic-bezier(.4,0,.2,1)}.search-input-wrapper .search-submit:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08));color:var(--sgh-primary-color, #3b82f6)}.search-input-wrapper .search-submit:hover i{transform:translate(2px)}.search-input-wrapper .search-submit:active{transform:scale(.95)}.toolbar-right-section{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.toolbar-action-btn{position:relative;display:flex;align-items:center;justify-content:center;width:42px;height:42px;padding:0;border:none;border-radius:12px;background:transparent;color:var(--sgh-text-secondary, #64748b);cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);flex-shrink:0}.toolbar-action-btn i{font-size:1.125rem;transition:all .15s cubic-bezier(.4,0,.2,1)}.toolbar-action-btn:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08));color:var(--sgh-primary-color, #3b82f6);transform:translateY(-1px);box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f}.toolbar-action-btn:hover i{transform:scale(1.1)}.toolbar-action-btn:active{transform:translateY(0) scale(.95);box-shadow:none}.toolbar-action-btn:focus-visible{outline:2px solid var(--sgh-primary-color, #3b82f6);outline-offset:2px}.toolbar-action-btn .notification-badge{position:absolute;top:6px;right:6px;display:flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;background:linear-gradient(135deg,#ef4444,#dc2626);border:2px solid var(--sgh-surface-color, #ffffff);border-radius:10px;color:#fff;font-size:.625rem;font-weight:700;line-height:1;box-shadow:0 2px 4px #00000026;animation:pulse 2s infinite}.toolbar-action-btn.notification-btn:hover .notification-badge{animation:none;transform:scale(1.1)}.toolbar-action-btn.profile-btn i{font-size:1.3rem}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.9;transform:scale(1.05)}}.toolbar-dropdown{position:absolute;top:72px;right:1.5rem;z-index:1001;min-width:320px;max-width:400px;animation:dropdownSlideIn .25s cubic-bezier(.4,0,.2,1)}@media (max-width: 768px){.toolbar-dropdown{top:64px;right:1rem;left:1rem;max-width:none}}.dropdown-card{background:var(--sgh-surface-color, #ffffff);border-radius:16px;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;border:1px solid var(--sgh-border-color, #e2e8f0);overflow:hidden}@supports (backdrop-filter: blur(10px)){.dropdown-card{background:var(--sgh-surface-color, rgba(255, 255, 255, .95));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}}.dropdown-content{padding:1rem}@keyframes dropdownSlideIn{0%{opacity:0;transform:translateY(-10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}::ng-deep .sgh-settings-menu .mat-mdc-menu-panel,::ng-deep .sgh-app-config-menu .mat-mdc-menu-panel,::ng-deep .sgh-client-config-menu .mat-mdc-menu-panel{min-width:240px;border-radius:12px;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;border:1px solid var(--sgh-border-color, #e2e8f0);overflow:hidden}::ng-deep .sgh-settings-menu .mat-mdc-menu-content,::ng-deep .sgh-app-config-menu .mat-mdc-menu-content,::ng-deep .sgh-client-config-menu .mat-mdc-menu-content{padding:.5rem}::ng-deep .sgh-settings-menu .mat-mdc-menu-item,::ng-deep .sgh-app-config-menu .mat-mdc-menu-item,::ng-deep .sgh-client-config-menu .mat-mdc-menu-item{border-radius:8px;margin-bottom:2px;min-height:42px;padding:0 12px;transition:all .15s cubic-bezier(.4,0,.2,1)}::ng-deep .sgh-settings-menu .mat-mdc-menu-item:hover,::ng-deep .sgh-app-config-menu .mat-mdc-menu-item:hover,::ng-deep .sgh-client-config-menu .mat-mdc-menu-item:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08))}::ng-deep .sgh-settings-menu .mat-mdc-menu-item.menu-item-with-icon,::ng-deep .sgh-app-config-menu .mat-mdc-menu-item.menu-item-with-icon,::ng-deep .sgh-client-config-menu .mat-mdc-menu-item.menu-item-with-icon{display:flex;align-items:center;gap:12px}::ng-deep .sgh-settings-menu .mat-mdc-menu-item.menu-item-with-icon .menu-icon,::ng-deep .sgh-app-config-menu .mat-mdc-menu-item.menu-item-with-icon .menu-icon,::ng-deep .sgh-client-config-menu .mat-mdc-menu-item.menu-item-with-icon .menu-icon{color:var(--sgh-text-secondary, #64748b);font-size:1rem;width:20px;text-align:center}.theme-menu-header{display:flex;align-items:center;gap:8px;padding:12px 16px 8px;color:var(--sgh-text-primary, #1e293b);font-weight:600;font-size:.9375rem;border-bottom:1px solid var(--sgh-border-color, #e2e8f0);margin-bottom:8px}.theme-menu-header i{color:var(--sgh-primary-color, #3b82f6);font-size:1rem}.theme-option-wrapper{padding:0 8px}.theme-radio-option{width:100%;border-radius:8px;padding:8px 12px!important}.theme-radio-option .radio-button{display:flex;align-items:center;gap:12px;width:100%}.theme-radio-option .radio-button input[type=radio]{appearance:none;width:18px;height:18px;border:2px solid var(--sgh-border-color, #e2e8f0);border-radius:50%;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);position:relative;flex-shrink:0}.theme-radio-option .radio-button input[type=radio]:checked{border-color:var(--sgh-primary-color, #3b82f6)}.theme-radio-option .radio-button input[type=radio]:checked:before{content:\"\";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:10px;height:10px;background:var(--sgh-primary-color, #3b82f6);border-radius:50%}.theme-radio-option .radio-button input[type=radio]:hover{border-color:var(--sgh-primary-color, #3b82f6)}.theme-radio-option .radio-button .radio-label{flex:1;color:var(--sgh-text-primary, #1e293b);font-size:.9375rem;-webkit-user-select:none;user-select:none}.client-menu-container{width:320px;max-width:calc(100vw - 2rem)}.client-menu-header{display:flex;align-items:center;gap:8px;padding:12px 16px;color:var(--sgh-text-primary, #1e293b);font-weight:600;font-size:.9375rem;border-bottom:1px solid var(--sgh-border-color, #e2e8f0);background:var(--sgh-surface-color, #f8fafc)}.client-menu-header i{color:var(--sgh-primary-color, #3b82f6);font-size:1rem}.client-search-wrapper{position:relative;padding:12px 16px;border-bottom:1px solid var(--sgh-border-color, #e2e8f0)}.client-search-wrapper .search-icon{position:absolute;left:28px;top:50%;transform:translateY(-50%);color:var(--sgh-text-muted, #94a3b8);font-size:.875rem;pointer-events:none}.client-search-wrapper .client-search-input{width:100%;height:36px;padding:0 12px 0 32px;border:1.5px solid var(--sgh-border-color, #e2e8f0);border-radius:8px;background:var(--sgh-surface-color, #ffffff);color:var(--sgh-text-primary, #1e293b);font-size:.875rem;outline:none;transition:all .15s cubic-bezier(.4,0,.2,1)}.client-search-wrapper .client-search-input::placeholder{color:var(--sgh-text-muted, #94a3b8)}.client-search-wrapper .client-search-input:focus{border-color:var(--sgh-primary-color, #3b82f6);box-shadow:0 0 0 3px #3b82f61a}.client-list-container{max-height:320px;overflow-y:auto;padding:8px}.client-list-container::-webkit-scrollbar{width:6px}.client-list-container::-webkit-scrollbar-track{background:transparent}.client-list-container::-webkit-scrollbar-thumb{background:#0000001a;border-radius:3px}.client-list-container::-webkit-scrollbar-thumb:hover{background:#0003}.client-list-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:8px;cursor:pointer;transition:all .15s cubic-bezier(.4,0,.2,1);position:relative}.client-list-item .check-icon{color:var(--sgh-primary-color, #3b82f6);font-size:1rem;flex-shrink:0}.client-list-item .client-name{flex:1;color:var(--sgh-text-primary, #1e293b);font-size:.9375rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.client-list-item:hover{background:var(--sgh-hover-bg, rgba(59, 130, 246, .08))}.client-list-item.selected{background:#3b82f61a}.client-list-item.selected .client-name{color:var(--sgh-primary-color, #3b82f6);font-weight:500}.no-results{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem 1rem;color:var(--sgh-text-muted, #94a3b8);text-align:center}.no-results i{font-size:2rem;margin-bottom:.5rem;opacity:.5}.no-results span{font-size:.875rem}@media (max-width: 1024px){.toolbar-search{max-width:300px}}@media (max-width: 768px){.toolbar-search{display:none}.toolbar-left-section{gap:.5rem}.toolbar-logo .logo-image{height:36px;max-width:140px}.toolbar-menu-toggle,.toolbar-action-btn{width:40px;height:40px}.toolbar-menu-toggle i,.toolbar-action-btn i{font-size:1.125rem}.toolbar-action-btn .notification-badge{top:4px;right:4px}.toolbar-right-section{gap:.25rem}}@media (min-width: 1440px){.toolbar-main-wrapper{max-width:1400px}}@media (min-width: 1920px){.toolbar-main-wrapper{max-width:100%}.toolbar-logo .logo-image{height:48px;max-width:240px}.toolbar-search{max-width:700px}}@media (prefers-color-scheme: dark){.sgh-toolbar{--sgh-toolbar-bg: rgba(15, 23, 42, .95);--sgh-surface-color: #1e293b;--sgh-text-primary: #f1f5f9;--sgh-text-secondary: #94a3b8;--sgh-text-muted: #64748b;--sgh-border-color: #334155;--sgh-search-bg: #0f172a;--sgh-hover-bg: rgba(59, 130, 246, .15)}}@media print{.sgh-toolbar{display:none}}@media (prefers-reduced-motion: reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media (prefers-contrast: high){.toolbar-action-btn,.toolbar-menu-toggle{border:1px solid currentColor}}:focus-visible{outline:2px solid var(--sgh-primary-color, #3b82f6);outline-offset:2px}\n"] }]
|
|
620
622
|
}], ctorParameters: () => [{ type: i1$1.MatDialog }, { type: SghNavbarService }], propDecorators: { expanded: [{
|
|
621
623
|
type: Input
|
|
622
624
|
}], toggleSidebarEvent: [{
|
|
@@ -654,7 +656,7 @@ class SghNavbarComponent {
|
|
|
654
656
|
ngOnInit() {
|
|
655
657
|
}
|
|
656
658
|
onToggleSidebar(expanded) {
|
|
657
|
-
this.expanded =
|
|
659
|
+
this.expanded = expanded;
|
|
658
660
|
this.toggleSidebarEvent.emit(this.expanded);
|
|
659
661
|
}
|
|
660
662
|
onSearchInput(searchText) {
|
|
@@ -707,7 +709,7 @@ class SghNavbarComponent {
|
|
|
707
709
|
</div>
|
|
708
710
|
</div>
|
|
709
711
|
</div>
|
|
710
|
-
`, isInline: true, styles: [".sgh-navbar-container{display:flex;flex-direction:column;min-height:100vh;background:var(--sgh-background-color, #f8fafc)}.sgh-navbar-layout{display:flex;flex:1;position:relative;overflow:hidden}.sgh-navbar-content{flex:1;display:flex;flex-direction:column;transition:
|
|
712
|
+
`, isInline: true, styles: [".sgh-navbar-container{display:flex;flex-direction:column;min-height:100vh;background:var(--sgh-background-color, #f8fafc)}.sgh-navbar-layout{display:flex;flex:1;position:relative;overflow:hidden;transition:all .3s cubic-bezier(.4,0,.2,1)}.sgh-navbar-content{flex:1;display:flex;flex-direction:column;transition:all .3s cubic-bezier(.4,0,.2,1);margin-left:0;background:var(--sgh-background-color, #f8fafc)}@media (min-width: 1025px){.sgh-navbar-content.expanded{margin-left:280px;box-shadow:-2px 0 8px #0000000d}}@media (min-width: 769px) and (max-width: 1024px){.sgh-navbar-content.expanded{margin-left:280px;box-shadow:-2px 0 8px #0000000d}}@media (max-width: 768px){.sgh-navbar-content.expanded{margin-left:0}.sgh-navbar-content.expanded:before{content:\"\";position:fixed;inset:64px 0 0;background:#0003;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:900;pointer-events:auto}}.sgh-breadcrumb-container{background:var(--sgh-breadcrumb-bg, #ffffff);border-bottom:1px solid var(--sgh-border-color, #e2e8f0);padding:.75rem 1.5rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.sgh-breadcrumb-container .breadcrumb{margin:0;padding:0;background:transparent;display:flex;align-items:center;list-style:none;font-size:.875rem;color:var(--sgh-text-secondary, #64748b)}.sgh-breadcrumb-container .breadcrumb .breadcrumb-item{display:flex;align-items:center}.sgh-breadcrumb-container .breadcrumb .breadcrumb-item:not(:last-child):after{content:\"/\";margin:0 .5rem;color:var(--sgh-text-muted, #94a3b8)}.sgh-breadcrumb-container .breadcrumb .breadcrumb-item a{color:var(--sgh-primary-color, #3b82f6);text-decoration:none;transition:color .2s ease}.sgh-breadcrumb-container .breadcrumb .breadcrumb-item a:hover{color:var(--sgh-primary-hover, #2563eb);text-decoration:underline}.sgh-breadcrumb-container .breadcrumb .breadcrumb-item.active{color:var(--sgh-text-primary, #1e293b);font-weight:500}.sgh-navbar-main-content{flex:1;padding:1rem;overflow-y:auto;position:relative;z-index:1;scroll-behavior:smooth}@media (max-width: 768px){.sgh-navbar-main-content{padding:1rem}}@media (min-width: 1440px){.sgh-navbar-main-content{padding:1rem;margin:0}}:host{--sgh-primary-color: #3b82f6;--sgh-primary-hover: #2563eb;--sgh-background-color: #f8fafc;--sgh-surface-color: #ffffff;--sgh-text-primary: #1e293b;--sgh-text-secondary: #64748b;--sgh-text-muted: #94a3b8;--sgh-border-color: #e2e8f0;--sgh-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px 0 rgba(0, 0, 0, .06);--sgh-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05)}:host-context(.sgh-dark-theme){--sgh-primary-color: #60a5fa;--sgh-primary-hover: #3b82f6;--sgh-background-color: #0f172a;--sgh-surface-color: #1e293b;--sgh-text-primary: #f1f5f9;--sgh-text-secondary: #cbd5e1;--sgh-text-muted: #64748b;--sgh-border-color: #334155}@media (max-width: 768px){.sgh-breadcrumb-container{padding:.5rem 1rem}.sgh-navbar-main-content{padding:1rem}}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: SidenavComponent, selector: "sgh-sidenav", inputs: ["expanded", "sidenavData"], outputs: ["onToggleSideNav"] }, { kind: "component", type: ToolbarComponent, selector: "sgh-toolbar", inputs: ["expanded", "toolbarData"], outputs: ["toggleSidebarEvent", "searchInputEvent", "client", "subClient"] }] }); }
|
|
711
713
|
}
|
|
712
714
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SghNavbarComponent, decorators: [{
|
|
713
715
|
type: Component,
|
|
@@ -748,7 +750,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
748
750
|
</div>
|
|
749
751
|
</div>
|
|
750
752
|
</div>
|
|
751
|
-
`, standalone: false, styles: [".sgh-navbar-container{display:flex;flex-direction:column;min-height:100vh;background:var(--sgh-background-color, #f8fafc)}.sgh-navbar-layout{display:flex;flex:1;position:relative;overflow:hidden}.sgh-navbar-content{flex:1;display:flex;flex-direction:column;transition:
|
|
753
|
+
`, standalone: false, styles: [".sgh-navbar-container{display:flex;flex-direction:column;min-height:100vh;background:var(--sgh-background-color, #f8fafc)}.sgh-navbar-layout{display:flex;flex:1;position:relative;overflow:hidden;transition:all .3s cubic-bezier(.4,0,.2,1)}.sgh-navbar-content{flex:1;display:flex;flex-direction:column;transition:all .3s cubic-bezier(.4,0,.2,1);margin-left:0;background:var(--sgh-background-color, #f8fafc)}@media (min-width: 1025px){.sgh-navbar-content.expanded{margin-left:280px;box-shadow:-2px 0 8px #0000000d}}@media (min-width: 769px) and (max-width: 1024px){.sgh-navbar-content.expanded{margin-left:280px;box-shadow:-2px 0 8px #0000000d}}@media (max-width: 768px){.sgh-navbar-content.expanded{margin-left:0}.sgh-navbar-content.expanded:before{content:\"\";position:fixed;inset:64px 0 0;background:#0003;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:900;pointer-events:auto}}.sgh-breadcrumb-container{background:var(--sgh-breadcrumb-bg, #ffffff);border-bottom:1px solid var(--sgh-border-color, #e2e8f0);padding:.75rem 1.5rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.sgh-breadcrumb-container .breadcrumb{margin:0;padding:0;background:transparent;display:flex;align-items:center;list-style:none;font-size:.875rem;color:var(--sgh-text-secondary, #64748b)}.sgh-breadcrumb-container .breadcrumb .breadcrumb-item{display:flex;align-items:center}.sgh-breadcrumb-container .breadcrumb .breadcrumb-item:not(:last-child):after{content:\"/\";margin:0 .5rem;color:var(--sgh-text-muted, #94a3b8)}.sgh-breadcrumb-container .breadcrumb .breadcrumb-item a{color:var(--sgh-primary-color, #3b82f6);text-decoration:none;transition:color .2s ease}.sgh-breadcrumb-container .breadcrumb .breadcrumb-item a:hover{color:var(--sgh-primary-hover, #2563eb);text-decoration:underline}.sgh-breadcrumb-container .breadcrumb .breadcrumb-item.active{color:var(--sgh-text-primary, #1e293b);font-weight:500}.sgh-navbar-main-content{flex:1;padding:1rem;overflow-y:auto;position:relative;z-index:1;scroll-behavior:smooth}@media (max-width: 768px){.sgh-navbar-main-content{padding:1rem}}@media (min-width: 1440px){.sgh-navbar-main-content{padding:1rem;margin:0}}:host{--sgh-primary-color: #3b82f6;--sgh-primary-hover: #2563eb;--sgh-background-color: #f8fafc;--sgh-surface-color: #ffffff;--sgh-text-primary: #1e293b;--sgh-text-secondary: #64748b;--sgh-text-muted: #94a3b8;--sgh-border-color: #e2e8f0;--sgh-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px 0 rgba(0, 0, 0, .06);--sgh-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05)}:host-context(.sgh-dark-theme){--sgh-primary-color: #60a5fa;--sgh-primary-hover: #3b82f6;--sgh-background-color: #0f172a;--sgh-surface-color: #1e293b;--sgh-text-primary: #f1f5f9;--sgh-text-secondary: #cbd5e1;--sgh-text-muted: #64748b;--sgh-border-color: #334155}@media (max-width: 768px){.sgh-breadcrumb-container{padding:.5rem 1rem}.sgh-navbar-main-content{padding:1rem}}\n"] }]
|
|
752
754
|
}], ctorParameters: () => [], propDecorators: { sidenavData: [{
|
|
753
755
|
type: Input
|
|
754
756
|
}], toolbarData: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sgh-navbar.mjs","sources":["../../../projects/sgh-navbar/src/lib/sgh-navbar.service.ts","../../../projects/sgh-navbar/src/lib/sidenav/nav-data.ts","../../../projects/sgh-navbar/src/lib/configs/default-sidenav.config.ts","../../../projects/sgh-navbar/src/lib/sidenav/menu-list-item/menu-list-item.component.ts","../../../projects/sgh-navbar/src/lib/sidenav/menu-list-item/menu-list-item.component.html","../../../projects/sgh-navbar/src/lib/sidenav/sidenav.component.ts","../../../projects/sgh-navbar/src/lib/sidenav/sidenav.component.html","../../../projects/sgh-navbar/src/lib/sidenav/helper.ts","../../../projects/sgh-navbar/src/lib/toolbar/sub-client-dialog/sub-client-dialog.component.ts","../../../projects/sgh-navbar/src/lib/toolbar/sub-client-dialog/sub-client-dialog.component.html","../../../projects/sgh-navbar/src/lib/configs/default-toolbar.config.ts","../../../projects/sgh-navbar/src/lib/toolbar/notification-list/notification-list.component.ts","../../../projects/sgh-navbar/src/lib/toolbar/notification-list/notification-list.component.html","../../../projects/sgh-navbar/src/lib/toolbar/search.pipe.ts","../../../projects/sgh-navbar/src/lib/toolbar/toolbar.component.ts","../../../projects/sgh-navbar/src/lib/toolbar/toolbar.component.html","../../../projects/sgh-navbar/src/lib/sgh-navbar.component.ts","../../../projects/sgh-navbar/src/lib/sidenav/sublevel-menu.component.ts","../../../projects/sgh-navbar/src/lib/breadcrumb/breadcrumb.service.ts","../../../projects/sgh-navbar/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/sgh-navbar/src/lib/sgh-navbar.module.ts","../../../projects/sgh-navbar/src/public-api.ts","../../../projects/sgh-navbar/src/sgh-navbar.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { ClientListItem, SubClientListItem } from './toolbar/toolbar-data';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SghNavbarService {\r\n expanded: boolean = false;\r\n client = new BehaviorSubject<ClientListItem | null>(null);\r\n subClient = new BehaviorSubject<SubClientListItem | null>(null);\r\n setExpanded(value: boolean) {\r\n this.expanded = value;\r\n }\r\n\r\n getExpanded(): boolean {\r\n return this.expanded;\r\n }\r\n\r\n setClient(client: ClientListItem): void {\r\n this.client.next(client);\r\n }\r\n\r\n getClient(): Observable<ClientListItem | null> {\r\n return this.client.asObservable();\r\n }\r\n\r\n setSubclient(subclient: SubClientListItem): void {\r\n this.subClient.next(subclient);\r\n }\r\n\r\n getSubclient(): Observable<SubClientListItem | null> {\r\n return this.subClient.asObservable();\r\n }\r\n}\r\n","import { INavbarData } from \"./helper\";\r\n\r\nexport const navbarData: INavbarData[] = [\r\n {\r\n \"label\": \"Dashboard\",\r\n \"icon\": \"home\",\r\n \"routeLink\": \"dashboard\",\r\n \"visible\": true,\r\n \"items\": [\r\n {\r\n \"label\": \"Cards\",\r\n \"icon\": \"home\",\r\n \"routeLink\": \"dashboard/cards\",\r\n \"visible\": true,\r\n },\r\n {\r\n \"label\": \"Charts\",\r\n \"icon\": \"home\",\r\n \"routeLink\": \"dashboard/charts\",\r\n \"visible\": true,\r\n \"items\": [\r\n {\r\n \"label\": \"Vertical bar chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/vertical-bar-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Horizontal bar chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/horizontal-bar-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Grouped horizontal bar chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/grouped-horizontal-bar-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Grouped vertical bar chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/grouped-vertical-bar-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Pie chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/pie-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Advanced pie chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/advanced-pie-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Pie grid chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/pie-grid-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Line chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/line-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Number card chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/number-card-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Linear gauge chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/linear-gauge-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Combo chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/combo-chart\",\r\n \"visible\": true\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Form elements\",\r\n \"icon\": \"home\",\r\n \"routeLink\": \"main\",\r\n \"visible\": true,\r\n },\r\n];\r\n","import { SidenavData } from '../sidenav/sidenav-data';\r\nimport { navbarData } from '../sidenav/nav-data';\r\n\r\nexport const DEFAULT_SIDENAV_CONFIG: SidenavData = {\r\n navData: navbarData,\r\n bgColor: '#fff',\r\n imgSm: '',\r\n imgLg: ''\r\n};","import {Component, HostBinding, Input, OnInit, ViewEncapsulation} from '@angular/core';\r\nimport {INavbarData} from '../helper';\r\nimport {Router} from '@angular/router';\r\nimport {animate, state, style, transition, trigger} from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'sgh-menu-list-item',\r\n templateUrl: './menu-list-item.component.html',\r\n styleUrls: ['./menu-list-item.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [\r\n trigger('indicatorRotate', [\r\n state('collapsed', style({ transform: 'rotate(0deg)' })),\r\n state('expanded', style({ transform: 'rotate(180deg)' })),\r\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),\r\n ])\r\n ],\r\n standalone: false\r\n})\r\nexport class MenuListItemComponent implements OnInit {\r\n expanded: boolean = false;\r\n @HostBinding('attr.aria-expanded') ariaExpanded = this.expanded;\r\n @Input() items: INavbarData[] = [];\r\n\r\n constructor(public router: Router) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n onItemSelected(item: INavbarData): void {\r\n if (!item.items || !item.items.length) {\r\n if (item.routeLink) {\r\n this.router.navigate([item.routeLink]).catch(error => {\r\n console.error('Navigation error:', error);\r\n });\r\n }\r\n }\r\n if (item.items && item.items.length) {\r\n item.expanded = !item.expanded;\r\n }\r\n }\r\n\r\n}\r\n","<div class=\"sidebar_div\" *ngFor=\"let data of items\">\r\n <a (click)=\"onItemSelected(data)\" class=\"sub-link {{data.customLinkCSS}}\"\r\n [routerLink]=\"[data.routeLink]\" routerLinkActive=\"item-active\" *ngIf=\"data.visible\">\r\n <div class=\"text-wrapper\">\r\n <i class=\"fa-size fa fa-{{data.icon}} {{data.icon ? '' : 'padding-10'}}\"></i>\r\n <div class=\"text-div\">\r\n {{data.label}}\r\n </div>\r\n </div>\r\n <i class=\"fa-size fa fa-angle-down\" *ngIf=\"!(data.items == undefined)\"\r\n [@indicatorRotate]=\"data.expanded ? 'expanded': 'collapsed'\"></i>\r\n </a>\r\n <div class=\"sub-link-wrapper\" *ngIf=\"data.expanded\">\r\n <sgh-menu-list-item [items]=\"data.items || []\">\r\n </sgh-menu-list-item>\r\n </div>\r\n</div>\r\n","import {animate, keyframes, state, style, transition, trigger} from '@angular/animations';\r\nimport {\r\n Component,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n Input,\r\n} from '@angular/core';\r\nimport {Router} from '@angular/router';\r\nimport {navbarData} from './nav-data';\r\nimport {SghNavbarService} from \"../sgh-navbar.service\";\r\nimport {SidenavData} from \"./sidenav-data\";\r\nimport {ClientListItem, SubClientListItem} from \"../toolbar/toolbar-data\";\r\nimport {INavbarData} from \"./helper\";\r\nimport {DEFAULT_SIDENAV_CONFIG} from \"../configs/default-sidenav.config\";\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\ninterface SideNavToggle {\r\n screenWidth: number;\r\n collapsed: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'sgh-sidenav',\r\n templateUrl: './sidenav.component.html',\r\n styleUrls: ['./sidenav.component.scss'],\r\n animations: [\r\n trigger('inOutAnimation', [\r\n transition(':enter', [\r\n style({ height: 0, opacity: 0 }),\r\n animate('500ms ease-out', style({ height: '*', opacity: 1 }))\r\n ]),\r\n transition(':leave', [\r\n style({ height: '*', opacity: 1 }),\r\n animate('500ms ease-in', style({ height: 0, opacity: 0 }))\r\n ])\r\n ]),\r\n trigger('rotate', [\r\n transition(':enter', [\r\n animate('1000ms', keyframes([\r\n style({ transform: 'rotate(0deg)', offset: '0' }),\r\n style({ transform: 'rotate(2turn)', offset: '1' })\r\n ]))\r\n ])\r\n ]),\r\n trigger('indicatorRotate', [\r\n state('collapsed', style({ transform: 'rotate(0deg)' })),\r\n state('expanded', style({ transform: 'rotate(180deg)' })),\r\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),\r\n ]),\r\n trigger('slideInOut', [\r\n transition(':enter', [style({ transform: 'translateX(-100px)' }), animate('.5s ease-out', style({ transform: 'translateX(0%)' }))]),\r\n transition(':leave', [\r\n style({ transform: 'translateX(0%)' }),\r\n animate('.5s ease-out', style({ transform: 'translateX(-100%)' }))\r\n ])\r\n ])\r\n ],\r\n standalone: false\r\n})\r\nexport class SidenavComponent implements OnInit, OnDestroy {\r\n private destroy$ = new Subject<void>();\r\n\r\n @Output() onToggleSideNav: EventEmitter<SideNavToggle> = new EventEmitter();\r\n @Input() expanded: boolean = false;\r\n @Input() sidenavData: SidenavData = DEFAULT_SIDENAV_CONFIG;\r\n client: ClientListItem | null = null;\r\n subclient: SubClientListItem | null = null;\r\n hasClients: boolean = false;\r\n\r\n constructor(public router: Router, private sidebarService: SghNavbarService) {\r\n this.sidebarService.getClient()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (client) => {\r\n this.client = client;\r\n },\r\n error: (error) => {\r\n console.error('Error getting client:', error);\r\n }\r\n });\r\n \r\n this.sidebarService.getSubclient()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (subclient) => {\r\n this.subclient = subclient;\r\n },\r\n error: (error) => {\r\n console.error('Error getting subclient:', error);\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n\r\n onItemSelected(item: INavbarData): void {\r\n if (!item.items || !item.items.length) {\r\n if (item.routeLink) {\r\n this.router.navigate([item.routeLink]).catch(error => {\r\n console.error('Navigation error:', error);\r\n });\r\n }\r\n }\r\n if (item.items && item.items.length) {\r\n item.expanded = !item.expanded;\r\n }\r\n }\r\n}\r\n","<div class=\"close sidenav-overlay\" *ngIf=\"expanded\"></div>\r\n<aside class=\"sgh-sidebar\" *ngIf=\"expanded\" [@slideInOut]>\r\n <div class=\"menu-wrapper\">\r\n <div class=\"sidebar_div \" *ngFor=\"let data of sidenavData.navData\">\r\n <a (click)=\"onItemSelected(data)\" class=\"{{data.customLinkCSS}}\"\r\n [routerLink]=\"[data.routeLink]\" routerLinkActive=\"item-active\" *ngIf=\"data.visible\">\r\n <div class=\"text-wrap\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"fa-size fa fa-{{data.icon}}\"></i>\r\n </div>\r\n <div>\r\n {{data.label}}\r\n </div>\r\n </div>\r\n <i class=\"fa-size fa fa-angle-down\" *ngIf=\"!(data.items == undefined)\"\r\n [@indicatorRotate]=\"data.expanded ? 'expanded': 'collapsed'\"></i>\r\n </a>\r\n <div class=\"sub-link-wrapper\" *ngIf=\"data.expanded\" [@inOutAnimation]>\r\n <sgh-menu-list-item [items]=\"data.items || []\">\r\n </sgh-menu-list-item>\r\n </div>\r\n </div>\r\n <div class=\"auth-info-wrp\" *ngIf=\"hasClients\">\r\n <div *ngIf=\"client && subclient\" class=\"client-info-wrp\">\r\n <div>{{client?.text}}</div>\r\n <i class=\"fa fa-angle-right\"></i>\r\n <div>{{subclient?.text}}</div>\r\n </div>\r\n <div *ngIf=\"sidenavData.activeRole\" class=\"role-info-wrp\">\r\n <span class=\"role-info-text\">Logged in as </span>\r\n <span class=\"role-info-text role\">{{sidenavData.activeRole}}</span></div>\r\n </div>\r\n </div>\r\n</aside>\r\n","import { animate, style, transition, trigger } from \"@angular/animations\";\r\n\r\nexport interface INavbarData {\r\n routeLink: string;\r\n icon?: string;\r\n customLinkCSS?: string;\r\n label: string;\r\n expanded?: boolean;\r\n visible: boolean;\r\n items?: INavbarData[];\r\n}\r\n\r\nexport const fadeInOut = trigger('fadeInOut', [\r\n transition(':enter', [\r\n style({opacity: 0}),\r\n animate('350ms',\r\n style({opacity: 1})\r\n )\r\n ]),\r\n transition(':leave', [\r\n style({opacity: 1}),\r\n animate('350ms',\r\n style({opacity: 0})\r\n )\r\n ])\r\n ])\r\n","import {Component, EventEmitter, Inject, Output} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from \"@angular/material/dialog\";\r\nimport {ClientListItem, SubClientListItem} from \"../toolbar-data\";\r\nimport {SghNavbarService} from \"../../sgh-navbar.service\";\r\n\r\n@Component({\r\n selector: 'lib-subclient-dialog',\r\n templateUrl: './sub-client-dialog.component.html',\r\n styleUrls: ['./sub-client-dialog.component.scss'],\r\n standalone: false\r\n})\r\nexport class SubClientDialogComponent {\r\n client: ClientListItem;\r\n subClientList: SubClientListItem[];\r\n @Output() subClient = new EventEmitter<any>();\r\n selectedSubClient: SubClientListItem;\r\n\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any, private dialogRef: MatDialogRef<SubClientDialogComponent>, private sghNavbarService: SghNavbarService) {\r\n this.client = data.client;\r\n this.subClientList = data.client.subClientList;\r\n // find the selected sub client\r\n let selectedSubClientIndex = this.subClientList.findIndex((subClient) => subClient.checked == true);\r\n this.selectedSubClient = this.subClientList[selectedSubClientIndex];\r\n }\r\n\r\n onSubClientSelect(item: SubClientListItem) {\r\n\r\n // update the sub client list with newly selected values\r\n this.subClientList.forEach((subClient) => {\r\n if (subClient == item) {\r\n subClient.checked = true\r\n } else {\r\n subClient.checked = false;\r\n }\r\n });\r\n this.selectedSubClient = item;\r\n }\r\n\r\n onSelectBtnClick() {\r\n this.dialogRef.close({data: {selectedSubClient: this.selectedSubClient}});\r\n }\r\n}\r\n","<div class=\"subclientlist-wrapper dialog-wrapper\">\r\n <h4 class=\"subclientlist-header\">Select Sub Client</h4>\r\n <div class=\"subclientlist-body\">\r\n <div>\r\n <mat-radio-group class=\"subclientlist-radiogrp\" aria-label=\"Select an option\">\r\n <mat-radio-button [value]=\"item.value\" *ngFor=\"let item of subClientList;index as i\" (click)=\"onSubClientSelect(item)\" [checked]=\"item.checked\">{{item.text}}</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n </div>\r\n <div class=\"subclientlist-btns\">\r\n <button class=\"sgh-btn-primary\" (click)=\"onSelectBtnClick()\">Select</button>\r\n </div>\r\n</div>\r\n\r\n","import { ToolbarData } from '../toolbar/toolbar-data';\r\n\r\nexport const DEFAULT_TOOLBAR_CONFIG: ToolbarData = {\r\n themeOptions: [\r\n {\r\n name: 'Sgh-default-theme',\r\n value: 'sgh-default-theme',\r\n checked: true\r\n },\r\n {\r\n name: 'Sgh-light-theme',\r\n value: 'sgh-light-theme',\r\n checked: false\r\n },\r\n {\r\n name: 'Sgh-blue-theme',\r\n value: 'sgh-blue-theme',\r\n checked: false\r\n }\r\n ],\r\n bgColor: '#fff',\r\n img: '../assets/images/Synergen_Logo-new.svg',\r\n profileView: false,\r\n isNotifNavCollapsed: false,\r\n searchEnable: true,\r\n notificationEnable: true,\r\n profileEnable: true,\r\n settingsEnable: true,\r\n clientList: [\r\n {\r\n text: 'Client 1',\r\n value: 'CLIENT_1',\r\n selected: true,\r\n subClientList: [\r\n { text: 'Sub Client 1', value: 'SUB_CLIENT_1', checked: true },\r\n { text: 'Sub Client 2', value: 'SUB_CLIENT_2', checked: false },\r\n { text: 'Sub Client 3', value: 'SUB_CLIENT_3', checked: false }\r\n ]\r\n },\r\n {\r\n text: 'Client 2',\r\n value: 'CLIENT_2',\r\n selected: false,\r\n subClientList: [\r\n { text: 'Sub Client 1', value: 'SUB_CLIENT_1', checked: true },\r\n { text: 'Sub Client 2', value: 'SUB_CLIENT_2', checked: false }\r\n ]\r\n },\r\n {\r\n text: 'Client 3',\r\n value: 'CLIENT_3',\r\n selected: false\r\n }\r\n ],\r\n profileContent: '<div>profile content</div>',\r\n clientConfigurationEnable: true,\r\n applicationConfigurationEnable: true,\r\n};","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sgh-notification-list',\r\n templateUrl: './notification-list.component.html',\r\n styleUrls: ['./notification-list.component.scss'],\r\n standalone: false\r\n})\r\nexport class NotificationListComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n}\r\n","<div class=\"notifications-list-wrapper\">\r\n <div class=\"notifications-list\">\r\n <div class=\"notifications-title\">\r\n <span class=\"title mat-h3\">Notifications</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-title\">\r\n <span class=\"see-all mat-h4\">See all</span>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'search',\r\n standalone: false\r\n})\r\nexport class SearchPipe implements PipeTransform {\r\n\r\n transform(values: any, args?: any): any {\r\n if (args === undefined) {\r\n return values;\r\n }\r\n\r\n return values.filter(value => {\r\n return value.text.toLowerCase().includes(args.toLowerCase());\r\n });\r\n }\r\n\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {fadeInOut} from '../sidenav/helper';\r\nimport {MatDialog} from \"@angular/material/dialog\";\r\nimport {MatMenuTrigger} from \"@angular/material/menu\";\r\nimport {ClientListItem, SubClientListItem, ToolbarData} from \"./toolbar-data\";\r\nimport {SubClientDialogComponent} from \"./sub-client-dialog/sub-client-dialog.component\";\r\nimport {SghNavbarService} from \"../sgh-navbar.service\";\r\nimport {DEFAULT_TOOLBAR_CONFIG} from \"../configs/default-toolbar.config\";\r\n\r\n@Component({\r\n selector: 'sgh-toolbar',\r\n templateUrl: './toolbar.component.html',\r\n styleUrls: ['./toolbar.component.scss'],\r\n animations: [\r\n fadeInOut\r\n ],\r\n standalone: false\r\n})\r\nexport class ToolbarComponent implements AfterViewInit {\r\n @Input() expanded: boolean = false;\r\n @Output() toggleSidebarEvent = new EventEmitter<boolean>();\r\n @Input() toolbarData: ToolbarData = DEFAULT_TOOLBAR_CONFIG;\r\n @Output() searchInputEvent = new EventEmitter<string>();\r\n @Output() client = new EventEmitter<ClientListItem>();\r\n @Output() subClient = new EventEmitter<SubClientListItem>();\r\n\r\n searchInput: string = \"\";\r\n private prev: string = '';\r\n selected: string = 'sgh-default-theme';\r\n private wasInside: boolean = false;\r\n selectedClient: ClientListItem | null = null;\r\n\r\n @ViewChild('clientMenuTrigger') clientMenuTrigger!: MatMenuTrigger;\r\n\r\n\r\n @HostListener('click')\r\n clickInside() {\r\n this.wasInside = true;\r\n }\r\n\r\n @HostListener('document:click')\r\n clickOut() {\r\n if (!this.wasInside) {\r\n this.toolbarData.profileView = false;\r\n this.toolbarData.isThemeCollapsed = false;\r\n this.toolbarData.isNotifNavCollapsed = false;\r\n }\r\n this.wasInside = false;\r\n }\r\n\r\n constructor(private dialog: MatDialog, private sghNavbarSvc: SghNavbarService) {\r\n }\r\n\r\n\r\n toggleSidebar(): boolean {\r\n this.toggleSidebarEvent.emit(this.expanded);\r\n return this.expanded;\r\n }\r\n\r\n toggleNotificationList() {\r\n this.toolbarData.isNotifNavCollapsed = !this.toolbarData.isNotifNavCollapsed\r\n }\r\n\r\n clickProfile() {\r\n this.toolbarData.profileView = !this.toolbarData.profileView\r\n }\r\n\r\n onSearchInput() {\r\n this.searchInputEvent.emit(this.searchInput);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // initially set client and subclients\r\n // Use Promise-based timeout for better error handling\r\n Promise.resolve().then(() => {\r\n try {\r\n this.toolbarData.clientList?.forEach((client: ClientListItem, index: number) => {\r\n // select the first client\r\n if (index === 0) {\r\n client.selected = true;\r\n this.sghNavbarSvc.setClient(client);\r\n this.selectedClient = client;\r\n } else {\r\n client.selected = false;\r\n }\r\n this.initSelectedSubClient(client);\r\n });\r\n } catch (error) {\r\n console.error('Error initializing clients:', error);\r\n }\r\n });\r\n }\r\n\r\n setClass(selected: string): void {\r\n this.selected = selected;\r\n window.document.body.classList.remove(this.prev);\r\n window.document.body.classList.add(selected);\r\n this.prev = selected;\r\n }\r\n\r\n searchText: string = '';\r\n\r\n onRadioClick(themeValue: string): void {\r\n this.selected = themeValue;\r\n this.setClass(themeValue);\r\n }\r\n\r\n toggleSelect(event: Event, clientItem: ClientListItem): void {\r\n this.selectedClient = clientItem;\r\n // unselect current selected client\r\n this.unselectClientItems();\r\n // select current client\r\n clientItem.selected = true;\r\n this.sghNavbarSvc.setClient(clientItem);\r\n // at least one subclient should exist\r\n if (clientItem.subClientList && clientItem.subClientList.length > 0) { // if sub clients exist open sub client dialog\r\n const subClientDialogRef = this.dialog.open(SubClientDialogComponent, {\r\n data: {\r\n client: clientItem\r\n },\r\n minWidth: 400,\r\n disableClose: true\r\n });\r\n // select first item of each subclient\r\n this.selectFirstSubclient();\r\n\r\n subClientDialogRef.afterClosed().subscribe({\r\n next: (result) => {\r\n if (result && result.data && result.data.selectedSubClient) {\r\n this.clientMenuTrigger.focus();\r\n this.sghNavbarSvc.setSubclient(result.data.selectedSubClient);\r\n\r\n // set the selected subclient item as checked, search by name comparison\r\n const selectedObj = clientItem.subClientList?.find((scItem) => \r\n scItem.text === result.data.selectedSubClient.text\r\n );\r\n if (selectedObj) {\r\n selectedObj.checked = true;\r\n }\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Error in subclient dialog:', error);\r\n }\r\n });\r\n }\r\n }\r\n\r\n initSelectedSubClient(client: ClientListItem): void {\r\n client.subClientList?.forEach((subclient: SubClientListItem, index: number) => {\r\n if (index === 0) {\r\n subclient.checked = true;\r\n if (client.selected) { // set the first subclient of the first client as selected\r\n this.sghNavbarSvc.setSubclient(subclient);\r\n }\r\n } else { subclient.checked = false; }\r\n\r\n });\r\n }\r\n\r\n unselectClientItems(): void {\r\n this.toolbarData.clientList?.forEach((client: ClientListItem) => {\r\n if (client.selected) {\r\n client.selected = false;\r\n }\r\n });\r\n }\r\n\r\n selectFirstSubclient(): void {\r\n this.toolbarData.clientList?.forEach((client) => {\r\n if (client !== this.selectedClient) {\r\n client.subClientList?.forEach((scItem, index: number) => {\r\n scItem.checked = index === 0;\r\n });\r\n }\r\n })\r\n }\r\n}\r\n","<nav class=\"toolbar-main-wrapper\" [style.background-color]=\"toolbarData.bgColor\" id=\"toolBarWrapper\">\r\n <div class=\"logo-wrapper\">\r\n <img class=\"logo\" [src]=\"toolbarData.img\"/>\r\n </div>\r\n <div>\r\n <button class=\"toggle-button\" (click)=\"toggleSidebar()\">\r\n <i class=\"fa fa-bars fa-fade\"></i>\r\n </button>\r\n </div>\r\n <div class=\"search\">\r\n <div class=\"form\" *ngIf=\"toolbarData.searchEnable\">\r\n <input type=\"text\" name=\"text\" autocomplete=\"off\" required/>\r\n <label class=\"label-name\">\r\n <span class=\"content-name\">\r\n Search\r\n </span>\r\n </label>\r\n <button class=\"search-wrapper\">\r\n <i class=\"fa fa-search\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"toolbarData.notificationEnable\" class=\"icon\" id=\"bell\" (click)=\"toggleNotificationList()\">\r\n <i class=\"fa fa-bell\"></i>\r\n </div>\r\n <div *ngIf=\"toolbarData.profileEnable\" class=\"icon\" id=\"bell3\" (click)=\"clickProfile()\">\r\n <i class=\"fa fa-user\"></i>\r\n </div>\r\n <div *ngIf=\"toolbarData.settingsEnable\" class=\"icon\" id=\"bell2\" [matMenuTriggerFor]=\"settingsMenu\">\r\n <i class=\"fa fa-gear\"></i>\r\n </div>\r\n</nav>\r\n\r\n<div *ngIf=\"toolbarData.profileView\" class=\"notifications\">\r\n <div class=\"notifications-list-wrapper profile-list-wrapper\">\r\n <div class=\"notifications-list\">\r\n <div class=\"notifications-list-item\">\r\n <div [innerHTML]=\"toolbarData.profileContent\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--Settings related menus start-->\r\n<mat-menu #settingsMenu=\"matMenu\" xPosition=\"before\">\r\n <button mat-menu-item [matMenuTriggerFor]=\"appConfig\" *ngIf=\"toolbarData.applicationConfigurationEnable\">Application Settings</button>\r\n <button mat-menu-item [matMenuTriggerFor]=\"clientConfig\" *ngIf=\"toolbarData.clientConfigurationEnable\" #clientMenuTrigger>Client Settings</button>\r\n</mat-menu>\r\n<mat-menu #appConfig=\"matMenu\" xPosition=\"after\">\r\n <div *ngFor=\"let themeoption of toolbarData.themeOptions\">\r\n <button mat-menu-item class=\"radio\" (click)=\"onRadioClick(themeoption.value)\">\r\n <input value=\"{{themeoption.value}}\" name=\"radio\" type=\"radio\" checked [ngModel]=\"selected\"\r\n (ngModelChange)=\"setClass($event)\">\r\n <span>{{themeoption.name}}</span>\r\n </button>\r\n </div>\r\n</mat-menu>\r\n<mat-menu #clientConfig=\"matMenu\" xPosition=\"after\">\r\n <div style=\"width: 250px\" class=\"client-menu-wrapper\">\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-12\" (click)=\"$event.stopPropagation();\">\r\n <input type=\"text\" class=\"search-input\" placeholder=\"Search Client\" [(ngModel)]=\"searchText\"/>\r\n </div>\r\n <div class=\"col-sm-12\">\r\n <div class=\"mt-2 list-item-container\">\r\n <div class=\"list-item text-truncate\" *ngFor=\"let item of toolbarData.clientList | search : searchText;let i = index\"\r\n [ngClass]=\"{'client-selected': item.selected}\"\r\n (click)=\"toggleSelect($event, item);\" mat-ripple>{{item.text}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n<!--Settings related menus end-->\r\n\r\n<sgh-notification-list *ngIf=\"toolbarData.isNotifNavCollapsed\"></sgh-notification-list>\r\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { SidenavData } from './sidenav/sidenav-data';\r\nimport { ToolbarData } from './toolbar/toolbar-data';\r\n\r\n@Component({\r\n selector: 'lib-sgh-navbar',\r\n template: `\r\n <div class=\"sgh-navbar-container\">\r\n <sgh-toolbar \r\n [toolbarData]=\"toolbarData\" \r\n [expanded]=\"expanded\" \r\n (toggleSidebarEvent)=\"onToggleSidebar($event)\"\r\n (searchInputEvent)=\"onSearchInput($event)\"\r\n (client)=\"onClientChange($event)\"\r\n (subClient)=\"onSubClientChange($event)\">\r\n </sgh-toolbar>\r\n \r\n <div class=\"sgh-navbar-layout\">\r\n <sgh-sidenav \r\n [sidenavData]=\"sidenavData\" \r\n [expanded]=\"expanded\"\r\n (onToggleSideNav)=\"onSidenavToggle($event)\">\r\n </sgh-sidenav>\r\n \r\n <div class=\"sgh-navbar-content\" [class.expanded]=\"expanded\">\r\n <div class=\"sgh-breadcrumb-container\" *ngIf=\"showBreadcrumbs\">\r\n <nav aria-label=\"breadcrumb\">\r\n <ol class=\"breadcrumb\">\r\n <li class=\"breadcrumb-item\" *ngFor=\"let item of breadcrumbs; let last = last\"\r\n [class.active]=\"last\">\r\n <a *ngIf=\"!last\" [routerLink]=\"item.routeLink\">{{ item.label }}</a>\r\n <span *ngIf=\"last\">{{ item.label }}</span>\r\n </li>\r\n </ol>\r\n </nav>\r\n </div>\r\n \r\n <div class=\"sgh-navbar-main-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styleUrls: ['./sgh-navbar.component.scss'],\r\n standalone: false\r\n})\r\nexport class SghNavbarComponent implements OnInit {\r\n @Input() sidenavData: SidenavData;\r\n @Input() toolbarData: ToolbarData;\r\n @Input() expanded: boolean = false;\r\n @Input() showBreadcrumbs: boolean = true;\r\n @Input() breadcrumbs: any[] = [];\r\n \r\n @Output() toggleSidebarEvent = new EventEmitter<boolean>();\r\n @Output() searchInputEvent = new EventEmitter<string>();\r\n @Output() clientChange = new EventEmitter<any>();\r\n @Output() subClientChange = new EventEmitter<any>();\r\n @Output() sidenavToggle = new EventEmitter<any>();\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n onToggleSidebar(expanded: boolean) {\r\n this.expanded = !expanded;\r\n this.toggleSidebarEvent.emit(this.expanded);\r\n }\r\n\r\n onSearchInput(searchText: string) {\r\n this.searchInputEvent.emit(searchText);\r\n }\r\n\r\n onClientChange(client: any) {\r\n this.clientChange.emit(client);\r\n }\r\n\r\n onSubClientChange(subClient: any) {\r\n this.subClientChange.emit(subClient);\r\n }\r\n\r\n onSidenavToggle(event: any) {\r\n this.sidenavToggle.emit(event);\r\n }\r\n}\r\n","import { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { fadeInOut, INavbarData } from './helper';\r\n\r\n@Component({\r\n selector: 'sgh-sublevel-menu',\r\n template: `\r\n <ul *ngIf=\"collapsed && data.items && data.items.length > 0\"\r\n [@submenu]=\"expanded\r\n ? {value: 'visible',\r\n params: {transitionParams: '400ms cubic-bezier(0.86, 0, 0.07, 1)', height: '*'}}\r\n : {value: 'hidden',\r\n params: {transitionParams: '400ms cubic-bezier(0.86, 0, 0.07, 1)', height: '0'}}\"\r\n class=\"sublevel-nav\"\r\n >\r\n <li *ngFor=\"let item of data.items\" class=\"sublevel-nav-item\">\r\n <a class=\"sublevel-nav-link\"\r\n (click)=\"handleClick(item)\"\r\n *ngIf=\"item.items && item.items.length > 0 && item.visible\"\r\n [ngClass]=\"getActiveClass(item)\"\r\n >\r\n <i class=\"sublevel-link-icon fa fa-circle\"></i>\r\n <span class=\"sublevel-link-text\" @fadeInOut\r\n *ngIf=\"collapsed\">{{item.label}}</span>\r\n <i *ngIf=\"item.items && collapsed\" class=\"menu-collapse-icon\"\r\n [ngClass]=\"!item.expanded ? 'fal fa-angle-right' : 'fal fa-angle-down'\"\r\n ></i>\r\n </a>\r\n <a class=\"sublevel-nav-link\"\r\n *ngIf=\"(!item.items || (item.items && item.items.length === 0)) && item.visible\"\r\n [routerLink]=\"[item.routeLink]\"\r\n routerLinkActive=\"active-sublevel\"\r\n [routerLinkActiveOptions]=\"{exact: true}\"\r\n >\r\n <i class=\"sublevel-link-icon fa fa-circle\"></i>\r\n <span class=\"sublevel-link-text\" @fadeInOut\r\n *ngIf=\"collapsed\">{{item.label}}</span>\r\n </a>\r\n <div *ngIf=\"item.items && item.items.length > 0\">\r\n <sgh-sublevel-menu\r\n [data]=\"item\"\r\n [collapsed]=\"collapsed\"\r\n [multiple]=\"multiple\"\r\n [expanded]=\"item.expanded\"\r\n ></sgh-sublevel-menu>\r\n </div>\r\n </li>\r\n </ul>\r\n `,\r\n styleUrls: ['./sublevel-menu.component.scss'],\r\n animations: [\r\n fadeInOut,\r\n trigger('submenu', [\r\n state('hidden', style({\r\n height: '0',\r\n overflow: 'hidden'\r\n })),\r\n state('visible', style({\r\n height: '*'\r\n })),\r\n transition('visible <=> hidden', [style({ overflow: 'hidden' }),\r\n animate('{{transitionParams}}')]),\r\n transition('void => *', animate(0))\r\n ])\r\n ],\r\n standalone: false\r\n})\r\nexport class SublevelMenuComponent implements OnInit {\r\n\r\n @Input() data: INavbarData = {\r\n routeLink: '',\r\n icon: '',\r\n label: '',\r\n visible: true,\r\n items: []\r\n }\r\n @Input() collapsed = false;\r\n @Input() animating: boolean | undefined;\r\n @Input() expanded: boolean | undefined;\r\n @Input() multiple: boolean = false;\r\n\r\n constructor(public router: Router) {}\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n handleClick(item: any): void {\r\n if (!this.multiple) {\r\n if (this.data.items && this.data.items.length > 0) {\r\n for(let modelItem of this.data.items) {\r\n if (item !==modelItem && modelItem.expanded) {\r\n modelItem.expanded = false;\r\n }\r\n }\r\n }\r\n }\r\n item.expanded = !item.expanded;\r\n }\r\n\r\n getActiveClass(item: INavbarData): string {\r\n return item.expanded && this.router.url.includes(item.routeLink)\r\n ? 'active-sublevel'\r\n : '';\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Router, NavigationEnd, ActivatedRoute } from '@angular/router';\nimport { filter, map } from 'rxjs/operators';\n\nexport interface BreadcrumbItem {\n label: string;\n routeLink: string;\n icon?: string;\n isActive?: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BreadcrumbService {\n private breadcrumbsSubject = new BehaviorSubject<BreadcrumbItem[]>([]);\n public breadcrumbs$: Observable<BreadcrumbItem[]> = this.breadcrumbsSubject.asObservable();\n\n constructor(private router: Router, private activatedRoute: ActivatedRoute) {\n this.router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n map(() => this.buildBreadcrumbs(this.activatedRoute.root))\n ).subscribe(breadcrumbs => {\n this.breadcrumbsSubject.next(breadcrumbs);\n });\n }\n\n setBreadcrumbs(breadcrumbs: BreadcrumbItem[]): void {\n this.breadcrumbsSubject.next(breadcrumbs);\n }\n\n addBreadcrumb(breadcrumb: BreadcrumbItem): void {\n const current = this.breadcrumbsSubject.value;\n this.breadcrumbsSubject.next([...current, breadcrumb]);\n }\n\n private buildBreadcrumbs(route: ActivatedRoute, url: string = '', breadcrumbs: BreadcrumbItem[] = []): BreadcrumbItem[] {\n const children: ActivatedRoute[] = route.children;\n\n if (children.length === 0) {\n return breadcrumbs;\n }\n\n for (const child of children) {\n const routeURL: string = child.snapshot.url.map(segment => segment.path).join('/');\n if (routeURL !== '') {\n url += `/${routeURL}`;\n }\n\n const label = child.snapshot.data['breadcrumb'];\n if (label) {\n breadcrumbs.push({\n label,\n routeLink: url,\n icon: child.snapshot.data['breadcrumbIcon']\n });\n }\n\n return this.buildBreadcrumbs(child, url, breadcrumbs);\n }\n\n return breadcrumbs;\n }\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { BreadcrumbItem, BreadcrumbService } from './breadcrumb.service';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'sgh-breadcrumb',\n template: `\n <nav class=\"sgh-breadcrumb\" aria-label=\"breadcrumb\" *ngIf=\"breadcrumbs$ | async as breadcrumbs\">\n <ol class=\"breadcrumb-list\">\n <li class=\"breadcrumb-item home-item\">\n <a [routerLink]=\"'/'\" class=\"breadcrumb-link\">\n <i class=\"fa fa-home\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Home</span>\n </a>\n </li>\n <li class=\"breadcrumb-item\" \n *ngFor=\"let item of breadcrumbs; let last = last\"\n [class.active]=\"last\">\n <i class=\"fa fa-angle-right breadcrumb-separator\" aria-hidden=\"true\"></i>\n <a *ngIf=\"!last\" [routerLink]=\"item.routeLink\" class=\"breadcrumb-link\">\n <i *ngIf=\"item.icon\" class=\"fa fa-{{item.icon}}\" aria-hidden=\"true\"></i>\n {{ item.label }}\n </a>\n <span *ngIf=\"last\" class=\"breadcrumb-current\">\n <i *ngIf=\"item.icon\" class=\"fa fa-{{item.icon}}\" aria-hidden=\"true\"></i>\n {{ item.label }}\n </span>\n </li>\n </ol>\n </nav>\n `,\n styleUrls: ['./breadcrumb.component.scss'],\n standalone: false\n})\nexport class BreadcrumbComponent implements OnInit {\n @Input() customBreadcrumbs: BreadcrumbItem[] = [];\n \n breadcrumbs$: Observable<BreadcrumbItem[]>;\n\n constructor(private breadcrumbService: BreadcrumbService) {\n this.breadcrumbs$ = this.breadcrumbService.breadcrumbs$;\n }\n\n ngOnInit(): void {\n if (this.customBreadcrumbs.length > 0) {\n this.breadcrumbService.setBreadcrumbs(this.customBreadcrumbs);\n }\n }\n}","import {NgModule} from '@angular/core';\r\nimport {SghNavbarComponent} from './sgh-navbar.component';\r\nimport {SublevelMenuComponent} from './sidenav/sublevel-menu.component';\r\nimport {SidenavComponent} from './sidenav/sidenav.component';\r\nimport {ToolbarComponent} from './toolbar/toolbar.component';\r\nimport {CommonModule} from '@angular/common';\r\nimport {RouterModule} from '@angular/router';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {MenuListItemComponent} from \"./sidenav/menu-list-item/menu-list-item.component\";\r\nimport {SghNavbarService} from \"./sgh-navbar.service\";\r\nimport {NotificationListComponent} from \"./toolbar/notification-list/notification-list.component\";\r\nimport {MatMenuModule} from \"@angular/material/menu\";\r\nimport {SearchPipe} from \"./toolbar/search.pipe\";\r\nimport {MatRippleModule} from \"@angular/material/core\";\r\nimport { SubClientDialogComponent } from './toolbar/sub-client-dialog/sub-client-dialog.component';\r\nimport {MatDialogModule} from \"@angular/material/dialog\";\r\nimport {MatRadioModule} from \"@angular/material/radio\";\r\nimport { BreadcrumbComponent } from './breadcrumb/breadcrumb.component';\r\nimport { BreadcrumbService } from './breadcrumb/breadcrumb.service';\r\n\r\n@NgModule({\r\n declarations: [\r\n SghNavbarComponent,\r\n SublevelMenuComponent,\r\n SidenavComponent,\r\n ToolbarComponent,\r\n MenuListItemComponent,\r\n NotificationListComponent,\r\n SearchPipe,\r\n SubClientDialogComponent,\r\n BreadcrumbComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n FormsModule,\r\n MatMenuModule,\r\n MatRippleModule,\r\n MatDialogModule,\r\n MatRadioModule\r\n ],\r\n exports: [\r\n SghNavbarComponent,\r\n SublevelMenuComponent,\r\n SidenavComponent,\r\n ToolbarComponent,\r\n BreadcrumbComponent\r\n ],\r\n providers: [SghNavbarService, BreadcrumbService],\r\n})\r\nexport class SghNavbarModule {\r\n}\r\n","/*\r\n * Public API Surface of sgh-navbar\r\n */\r\n\r\nexport * from './lib/sgh-navbar.service';\r\nexport * from './lib/sgh-navbar.component';\r\nexport * from './lib/sgh-navbar.module';\r\n\r\nexport * from './lib/sidenav/sidenav.component';\r\nexport * from './lib/sidenav/sublevel-menu.component';\r\nexport * from './lib/sidenav/sidenav-data';\r\nexport * from './lib/sidenav/helper';\r\n\r\nexport * from './lib/toolbar/toolbar.component';\r\nexport * from './lib/toolbar/toolbar-data';\r\n\r\nexport * from './lib/breadcrumb/breadcrumb.component';\r\nexport * from './lib/breadcrumb/breadcrumb.service';\r\n\r\nexport * from './lib/configs/default-toolbar.config';\r\nexport * from './lib/configs/default-sidenav.config';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SghNavbarService","i3","i4.MenuListItemComponent","i1","i4","i7.NotificationListComponent","i8.SearchPipe","i2","i3.SidenavComponent","i4.ToolbarComponent","i1.BreadcrumbService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sgh-navbar.mjs","sources":["../../../projects/sgh-navbar/src/lib/sgh-navbar.service.ts","../../../projects/sgh-navbar/src/lib/sidenav/nav-data.ts","../../../projects/sgh-navbar/src/lib/configs/default-sidenav.config.ts","../../../projects/sgh-navbar/src/lib/sidenav/menu-list-item/menu-list-item.component.ts","../../../projects/sgh-navbar/src/lib/sidenav/menu-list-item/menu-list-item.component.html","../../../projects/sgh-navbar/src/lib/sidenav/sidenav.component.ts","../../../projects/sgh-navbar/src/lib/sidenav/sidenav.component.html","../../../projects/sgh-navbar/src/lib/sidenav/helper.ts","../../../projects/sgh-navbar/src/lib/toolbar/sub-client-dialog/sub-client-dialog.component.ts","../../../projects/sgh-navbar/src/lib/toolbar/sub-client-dialog/sub-client-dialog.component.html","../../../projects/sgh-navbar/src/lib/configs/default-toolbar.config.ts","../../../projects/sgh-navbar/src/lib/toolbar/notification-list/notification-list.component.ts","../../../projects/sgh-navbar/src/lib/toolbar/notification-list/notification-list.component.html","../../../projects/sgh-navbar/src/lib/toolbar/search.pipe.ts","../../../projects/sgh-navbar/src/lib/toolbar/toolbar.component.ts","../../../projects/sgh-navbar/src/lib/toolbar/toolbar.component.html","../../../projects/sgh-navbar/src/lib/sgh-navbar.component.ts","../../../projects/sgh-navbar/src/lib/sidenav/sublevel-menu.component.ts","../../../projects/sgh-navbar/src/lib/breadcrumb/breadcrumb.service.ts","../../../projects/sgh-navbar/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/sgh-navbar/src/lib/sgh-navbar.module.ts","../../../projects/sgh-navbar/src/public-api.ts","../../../projects/sgh-navbar/src/sgh-navbar.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { ClientListItem, SubClientListItem } from './toolbar/toolbar-data';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SghNavbarService {\r\n expanded: boolean = false;\r\n client = new BehaviorSubject<ClientListItem | null>(null);\r\n subClient = new BehaviorSubject<SubClientListItem | null>(null);\r\n setExpanded(value: boolean) {\r\n this.expanded = value;\r\n }\r\n\r\n getExpanded(): boolean {\r\n return this.expanded;\r\n }\r\n\r\n setClient(client: ClientListItem): void {\r\n this.client.next(client);\r\n }\r\n\r\n getClient(): Observable<ClientListItem | null> {\r\n return this.client.asObservable();\r\n }\r\n\r\n setSubclient(subclient: SubClientListItem): void {\r\n this.subClient.next(subclient);\r\n }\r\n\r\n getSubclient(): Observable<SubClientListItem | null> {\r\n return this.subClient.asObservable();\r\n }\r\n}\r\n","import { INavbarData } from \"./helper\";\r\n\r\nexport const navbarData: INavbarData[] = [\r\n {\r\n \"label\": \"Dashboard\",\r\n \"icon\": \"home\",\r\n \"routeLink\": \"dashboard\",\r\n \"visible\": true,\r\n \"items\": [\r\n {\r\n \"label\": \"Cards\",\r\n \"icon\": \"home\",\r\n \"routeLink\": \"dashboard/cards\",\r\n \"visible\": true,\r\n },\r\n {\r\n \"label\": \"Charts\",\r\n \"icon\": \"home\",\r\n \"routeLink\": \"dashboard/charts\",\r\n \"visible\": true,\r\n \"items\": [\r\n {\r\n \"label\": \"Vertical bar chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/vertical-bar-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Horizontal bar chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/horizontal-bar-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Grouped horizontal bar chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/grouped-horizontal-bar-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Grouped vertical bar chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/grouped-vertical-bar-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Pie chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/pie-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Advanced pie chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/advanced-pie-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Pie grid chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/pie-grid-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Line chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/line-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Number card chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/number-card-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Linear gauge chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/linear-gauge-chart\",\r\n \"visible\": true\r\n },\r\n {\r\n \"label\": \"Combo chart\",\r\n \"icon\": \"\",\r\n \"routeLink\": \"dashboard/charts/pages/combo-chart\",\r\n \"visible\": true\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Form elements\",\r\n \"icon\": \"home\",\r\n \"routeLink\": \"main\",\r\n \"visible\": true,\r\n },\r\n];\r\n","import { SidenavData } from '../sidenav/sidenav-data';\r\nimport { navbarData } from '../sidenav/nav-data';\r\n\r\nexport const DEFAULT_SIDENAV_CONFIG: SidenavData = {\r\n navData: navbarData,\r\n bgColor: '#fff',\r\n imgSm: '',\r\n imgLg: ''\r\n};","import {Component, HostBinding, Input, OnInit, ViewEncapsulation} from '@angular/core';\r\nimport {INavbarData} from '../helper';\r\nimport {Router} from '@angular/router';\r\nimport {animate, state, style, transition, trigger} from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'sgh-menu-list-item',\r\n templateUrl: './menu-list-item.component.html',\r\n styleUrls: ['./menu-list-item.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [\r\n trigger('indicatorRotate', [\r\n state('collapsed', style({ transform: 'rotate(0deg)' })),\r\n state('expanded', style({ transform: 'rotate(180deg)' })),\r\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),\r\n ])\r\n ],\r\n standalone: false\r\n})\r\nexport class MenuListItemComponent implements OnInit {\r\n expanded: boolean = false;\r\n @HostBinding('attr.aria-expanded') ariaExpanded = this.expanded;\r\n @Input() items: INavbarData[] = [];\r\n\r\n constructor(public router: Router) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n onItemSelected(item: INavbarData): void {\r\n if (!item.items || !item.items.length) {\r\n if (item.routeLink) {\r\n this.router.navigate([item.routeLink]).catch(error => {\r\n console.error('Navigation error:', error);\r\n });\r\n }\r\n }\r\n if (item.items && item.items.length) {\r\n item.expanded = !item.expanded;\r\n }\r\n }\r\n\r\n}\r\n","<div class=\"sidebar_div\" *ngFor=\"let data of items\">\r\n <a (click)=\"onItemSelected(data)\" class=\"sub-link {{data.customLinkCSS}}\"\r\n [routerLink]=\"[data.routeLink]\" routerLinkActive=\"item-active\" *ngIf=\"data.visible\">\r\n <div class=\"text-wrapper\">\r\n <i class=\"fa-size fa fa-{{data.icon}} {{data.icon ? '' : 'padding-10'}}\"></i>\r\n <div class=\"text-div\">\r\n {{data.label}}\r\n </div>\r\n </div>\r\n <i class=\"fa-size fa fa-angle-down\" *ngIf=\"!(data.items == undefined)\"\r\n [@indicatorRotate]=\"data.expanded ? 'expanded': 'collapsed'\"></i>\r\n </a>\r\n <div class=\"sub-link-wrapper\" *ngIf=\"data.expanded\">\r\n <sgh-menu-list-item [items]=\"data.items || []\">\r\n </sgh-menu-list-item>\r\n </div>\r\n</div>\r\n","import {animate, keyframes, state, style, transition, trigger} from '@angular/animations';\r\nimport {\r\n Component,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n Input,\r\n} from '@angular/core';\r\nimport {Router} from '@angular/router';\r\nimport {navbarData} from './nav-data';\r\nimport {SghNavbarService} from \"../sgh-navbar.service\";\r\nimport {SidenavData} from \"./sidenav-data\";\r\nimport {ClientListItem, SubClientListItem} from \"../toolbar/toolbar-data\";\r\nimport {INavbarData} from \"./helper\";\r\nimport {DEFAULT_SIDENAV_CONFIG} from \"../configs/default-sidenav.config\";\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\ninterface SideNavToggle {\r\n screenWidth: number;\r\n collapsed: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'sgh-sidenav',\r\n templateUrl: './sidenav.component.html',\r\n styleUrls: ['./sidenav.component.scss'],\r\n animations: [\r\n trigger('inOutAnimation', [\r\n transition(':enter', [\r\n style({ height: 0, opacity: 0 }),\r\n animate('500ms ease-out', style({ height: '*', opacity: 1 }))\r\n ]),\r\n transition(':leave', [\r\n style({ height: '*', opacity: 1 }),\r\n animate('500ms ease-in', style({ height: 0, opacity: 0 }))\r\n ])\r\n ]),\r\n trigger('rotate', [\r\n transition(':enter', [\r\n animate('1000ms', keyframes([\r\n style({ transform: 'rotate(0deg)', offset: '0' }),\r\n style({ transform: 'rotate(2turn)', offset: '1' })\r\n ]))\r\n ])\r\n ]),\r\n trigger('indicatorRotate', [\r\n state('collapsed', style({ transform: 'rotate(0deg)' })),\r\n state('expanded', style({ transform: 'rotate(180deg)' })),\r\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4,0.0,0.2,1)')),\r\n ]),\r\n trigger('slideInOut', [\r\n transition(':enter', [style({ transform: 'translateX(-100px)' }), animate('.5s ease-out', style({ transform: 'translateX(0%)' }))]),\r\n transition(':leave', [\r\n style({ transform: 'translateX(0%)' }),\r\n animate('.5s ease-out', style({ transform: 'translateX(-100%)' }))\r\n ])\r\n ])\r\n ],\r\n standalone: false\r\n})\r\nexport class SidenavComponent implements OnInit, OnDestroy {\r\n private destroy$ = new Subject<void>();\r\n\r\n @Output() onToggleSideNav: EventEmitter<SideNavToggle> = new EventEmitter();\r\n @Input() expanded: boolean = false;\r\n @Input() sidenavData: SidenavData = DEFAULT_SIDENAV_CONFIG;\r\n client: ClientListItem | null = null;\r\n subclient: SubClientListItem | null = null;\r\n hasClients: boolean = false;\r\n\r\n constructor(public router: Router, private sidebarService: SghNavbarService) {\r\n this.sidebarService.getClient()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (client) => {\r\n this.client = client;\r\n },\r\n error: (error) => {\r\n console.error('Error getting client:', error);\r\n }\r\n });\r\n \r\n this.sidebarService.getSubclient()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (subclient) => {\r\n this.subclient = subclient;\r\n },\r\n error: (error) => {\r\n console.error('Error getting subclient:', error);\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n\r\n onItemSelected(item: INavbarData): void {\r\n if (!item.items || !item.items.length) {\r\n if (item.routeLink) {\r\n this.router.navigate([item.routeLink]).catch(error => {\r\n console.error('Navigation error:', error);\r\n });\r\n }\r\n }\r\n if (item.items && item.items.length) {\r\n item.expanded = !item.expanded;\r\n }\r\n }\r\n}\r\n","<div class=\"close sidenav-overlay\" *ngIf=\"expanded\"></div>\r\n<aside class=\"sgh-sidebar\" *ngIf=\"expanded\" [@slideInOut]>\r\n <div class=\"menu-wrapper\">\r\n <div class=\"sidebar_div \" *ngFor=\"let data of sidenavData.navData\">\r\n <a (click)=\"onItemSelected(data)\" class=\"{{data.customLinkCSS}}\"\r\n [routerLink]=\"[data.routeLink]\" routerLinkActive=\"item-active\" *ngIf=\"data.visible\">\r\n <div class=\"text-wrap\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"fa-size fa fa-{{data.icon}}\"></i>\r\n </div>\r\n <div>\r\n {{data.label}}\r\n </div>\r\n </div>\r\n <i class=\"fa-size fa fa-angle-down\" *ngIf=\"!(data.items == undefined)\"\r\n [@indicatorRotate]=\"data.expanded ? 'expanded': 'collapsed'\"></i>\r\n </a>\r\n <div class=\"sub-link-wrapper\" *ngIf=\"data.expanded\" [@inOutAnimation]>\r\n <sgh-menu-list-item [items]=\"data.items || []\">\r\n </sgh-menu-list-item>\r\n </div>\r\n </div>\r\n <div class=\"auth-info-wrp\" *ngIf=\"hasClients\">\r\n <div *ngIf=\"client && subclient\" class=\"client-info-wrp\">\r\n <div>{{client.text}}</div>\r\n <i class=\"fa fa-angle-right\"></i>\r\n <div>{{subclient.text}}</div>\r\n </div>\r\n <div *ngIf=\"sidenavData.activeRole\" class=\"role-info-wrp\">\r\n <span class=\"role-info-text\">Logged in as </span>\r\n <span class=\"role-info-text role\">{{sidenavData.activeRole}}</span></div>\r\n </div>\r\n </div>\r\n</aside>\r\n","import { animate, style, transition, trigger } from \"@angular/animations\";\r\n\r\nexport interface INavbarData {\r\n routeLink: string;\r\n icon?: string;\r\n customLinkCSS?: string;\r\n label: string;\r\n expanded?: boolean;\r\n visible: boolean;\r\n items?: INavbarData[];\r\n}\r\n\r\nexport const fadeInOut = trigger('fadeInOut', [\r\n transition(':enter', [\r\n style({opacity: 0}),\r\n animate('350ms',\r\n style({opacity: 1})\r\n )\r\n ]),\r\n transition(':leave', [\r\n style({opacity: 1}),\r\n animate('350ms',\r\n style({opacity: 0})\r\n )\r\n ])\r\n ])\r\n","import {Component, EventEmitter, Inject, Output} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from \"@angular/material/dialog\";\r\nimport {ClientListItem, SubClientListItem} from \"../toolbar-data\";\r\nimport {SghNavbarService} from \"../../sgh-navbar.service\";\r\n\r\n@Component({\r\n selector: 'lib-subclient-dialog',\r\n templateUrl: './sub-client-dialog.component.html',\r\n styleUrls: ['./sub-client-dialog.component.scss'],\r\n standalone: false\r\n})\r\nexport class SubClientDialogComponent {\r\n client: ClientListItem;\r\n subClientList: SubClientListItem[];\r\n @Output() subClient = new EventEmitter<any>();\r\n selectedSubClient: SubClientListItem;\r\n\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any, private dialogRef: MatDialogRef<SubClientDialogComponent>, private sghNavbarService: SghNavbarService) {\r\n this.client = data.client;\r\n this.subClientList = data.client.subClientList;\r\n // find the selected sub client\r\n let selectedSubClientIndex = this.subClientList.findIndex((subClient) => subClient.checked == true);\r\n this.selectedSubClient = this.subClientList[selectedSubClientIndex];\r\n }\r\n\r\n onSubClientSelect(item: SubClientListItem) {\r\n\r\n // update the sub client list with newly selected values\r\n this.subClientList.forEach((subClient) => {\r\n if (subClient == item) {\r\n subClient.checked = true\r\n } else {\r\n subClient.checked = false;\r\n }\r\n });\r\n this.selectedSubClient = item;\r\n }\r\n\r\n onSelectBtnClick() {\r\n this.dialogRef.close({data: {selectedSubClient: this.selectedSubClient}});\r\n }\r\n}\r\n","<div class=\"subclientlist-wrapper dialog-wrapper\">\r\n <h4 class=\"subclientlist-header\">Select Sub Client</h4>\r\n <div class=\"subclientlist-body\">\r\n <div>\r\n <mat-radio-group class=\"subclientlist-radiogrp\" aria-label=\"Select an option\">\r\n <mat-radio-button [value]=\"item.value\" *ngFor=\"let item of subClientList;index as i\" (click)=\"onSubClientSelect(item)\" [checked]=\"item.checked\">{{item.text}}</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n </div>\r\n <div class=\"subclientlist-btns\">\r\n <button class=\"sgh-btn-primary\" (click)=\"onSelectBtnClick()\">Select</button>\r\n </div>\r\n</div>\r\n\r\n","import { ToolbarData } from '../toolbar/toolbar-data';\r\n\r\nexport const DEFAULT_TOOLBAR_CONFIG: ToolbarData = {\r\n themeOptions: [\r\n {\r\n name: 'Sgh-default-theme',\r\n value: 'sgh-default-theme',\r\n checked: true\r\n },\r\n {\r\n name: 'Sgh-light-theme',\r\n value: 'sgh-light-theme',\r\n checked: false\r\n },\r\n {\r\n name: 'Sgh-blue-theme',\r\n value: 'sgh-blue-theme',\r\n checked: false\r\n }\r\n ],\r\n bgColor: '#fff',\r\n img: '../assets/images/Synergen_Logo-new.svg',\r\n profileView: false,\r\n isNotifNavCollapsed: false,\r\n searchEnable: true,\r\n notificationEnable: true,\r\n profileEnable: true,\r\n settingsEnable: true,\r\n clientList: [\r\n {\r\n text: 'Client 1',\r\n value: 'CLIENT_1',\r\n selected: true,\r\n subClientList: [\r\n { text: 'Sub Client 1', value: 'SUB_CLIENT_1', checked: true },\r\n { text: 'Sub Client 2', value: 'SUB_CLIENT_2', checked: false },\r\n { text: 'Sub Client 3', value: 'SUB_CLIENT_3', checked: false }\r\n ]\r\n },\r\n {\r\n text: 'Client 2',\r\n value: 'CLIENT_2',\r\n selected: false,\r\n subClientList: [\r\n { text: 'Sub Client 1', value: 'SUB_CLIENT_1', checked: true },\r\n { text: 'Sub Client 2', value: 'SUB_CLIENT_2', checked: false }\r\n ]\r\n },\r\n {\r\n text: 'Client 3',\r\n value: 'CLIENT_3',\r\n selected: false\r\n }\r\n ],\r\n profileContent: '<div>profile content</div>',\r\n clientConfigurationEnable: true,\r\n applicationConfigurationEnable: true,\r\n};","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sgh-notification-list',\r\n templateUrl: './notification-list.component.html',\r\n styleUrls: ['./notification-list.component.scss'],\r\n standalone: false\r\n})\r\nexport class NotificationListComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n}\r\n","<div class=\"notifications-list-wrapper\">\r\n <div class=\"notifications-list\">\r\n <div class=\"notifications-title\">\r\n <span class=\"title mat-h3\">Notifications</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-list-item\">\r\n <span class=\"item-title mat-h4\">David James</span>\r\n <span class=\"item-description mat-h5\">A notification box show message</span>\r\n </div>\r\n <div class=\"notifications-title\">\r\n <span class=\"see-all mat-h4\">See all</span>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'search',\r\n standalone: false\r\n})\r\nexport class SearchPipe implements PipeTransform {\r\n\r\n transform(values: any, args?: any): any {\r\n if (args === undefined) {\r\n return values;\r\n }\r\n\r\n return values.filter(value => {\r\n return value.text.toLowerCase().includes(args.toLowerCase());\r\n });\r\n }\r\n\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {fadeInOut} from '../sidenav/helper';\r\nimport {MatDialog} from \"@angular/material/dialog\";\r\nimport {MatMenuTrigger} from \"@angular/material/menu\";\r\nimport {ClientListItem, SubClientListItem, ToolbarData} from \"./toolbar-data\";\r\nimport {SubClientDialogComponent} from \"./sub-client-dialog/sub-client-dialog.component\";\r\nimport {SghNavbarService} from \"../sgh-navbar.service\";\r\nimport {DEFAULT_TOOLBAR_CONFIG} from \"../configs/default-toolbar.config\";\r\n\r\n@Component({\r\n selector: 'sgh-toolbar',\r\n templateUrl: './toolbar.component.html',\r\n styleUrls: ['./toolbar.component.scss'],\r\n animations: [\r\n fadeInOut\r\n ],\r\n standalone: false\r\n})\r\nexport class ToolbarComponent implements AfterViewInit {\r\n @Input() expanded: boolean = false;\r\n @Output() toggleSidebarEvent = new EventEmitter<boolean>();\r\n @Input() toolbarData: ToolbarData = DEFAULT_TOOLBAR_CONFIG;\r\n @Output() searchInputEvent = new EventEmitter<string>();\r\n @Output() client = new EventEmitter<ClientListItem>();\r\n @Output() subClient = new EventEmitter<SubClientListItem>();\r\n\r\n searchInput: string = \"\";\r\n private prev: string = '';\r\n selected: string = 'sgh-default-theme';\r\n private wasInside: boolean = false;\r\n selectedClient: ClientListItem | null = null;\r\n\r\n @ViewChild('clientMenuTrigger') clientMenuTrigger!: MatMenuTrigger;\r\n\r\n\r\n @HostListener('click')\r\n clickInside() {\r\n this.wasInside = true;\r\n }\r\n\r\n @HostListener('document:click')\r\n clickOut() {\r\n if (!this.wasInside) {\r\n this.toolbarData.profileView = false;\r\n this.toolbarData.isThemeCollapsed = false;\r\n this.toolbarData.isNotifNavCollapsed = false;\r\n }\r\n this.wasInside = false;\r\n }\r\n\r\n constructor(private dialog: MatDialog, private sghNavbarSvc: SghNavbarService) {\r\n }\r\n\r\n\r\n toggleSidebar(): boolean {\r\n // Toggle the expanded state and emit the new value\r\n const newExpandedState = !this.expanded;\r\n this.toggleSidebarEvent.emit(newExpandedState);\r\n return newExpandedState;\r\n }\r\n\r\n toggleNotificationList() {\r\n this.toolbarData.isNotifNavCollapsed = !this.toolbarData.isNotifNavCollapsed\r\n }\r\n\r\n clickProfile() {\r\n this.toolbarData.profileView = !this.toolbarData.profileView\r\n }\r\n\r\n onSearchInput() {\r\n this.searchInputEvent.emit(this.searchInput);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // initially set client and subclients\r\n // Use Promise-based timeout for better error handling\r\n Promise.resolve().then(() => {\r\n try {\r\n this.toolbarData.clientList?.forEach((client: ClientListItem, index: number) => {\r\n // select the first client\r\n if (index === 0) {\r\n client.selected = true;\r\n this.sghNavbarSvc.setClient(client);\r\n this.selectedClient = client;\r\n } else {\r\n client.selected = false;\r\n }\r\n this.initSelectedSubClient(client);\r\n });\r\n } catch (error) {\r\n console.error('Error initializing clients:', error);\r\n }\r\n });\r\n }\r\n\r\n setClass(selected: string): void {\r\n this.selected = selected;\r\n window.document.body.classList.remove(this.prev);\r\n window.document.body.classList.add(selected);\r\n this.prev = selected;\r\n }\r\n\r\n searchText: string = '';\r\n\r\n onRadioClick(themeValue: string): void {\r\n this.selected = themeValue;\r\n this.setClass(themeValue);\r\n }\r\n\r\n toggleSelect(event: Event, clientItem: ClientListItem): void {\r\n this.selectedClient = clientItem;\r\n // unselect current selected client\r\n this.unselectClientItems();\r\n // select current client\r\n clientItem.selected = true;\r\n this.sghNavbarSvc.setClient(clientItem);\r\n // at least one subclient should exist\r\n if (clientItem.subClientList && clientItem.subClientList.length > 0) { // if sub clients exist open sub client dialog\r\n const subClientDialogRef = this.dialog.open(SubClientDialogComponent, {\r\n data: {\r\n client: clientItem\r\n },\r\n minWidth: 400,\r\n disableClose: true\r\n });\r\n // select first item of each subclient\r\n this.selectFirstSubclient();\r\n\r\n subClientDialogRef.afterClosed().subscribe({\r\n next: (result) => {\r\n if (result && result.data && result.data.selectedSubClient) {\r\n this.clientMenuTrigger.focus();\r\n this.sghNavbarSvc.setSubclient(result.data.selectedSubClient);\r\n\r\n // set the selected subclient item as checked, search by name comparison\r\n const selectedObj = clientItem.subClientList?.find((scItem) => \r\n scItem.text === result.data.selectedSubClient.text\r\n );\r\n if (selectedObj) {\r\n selectedObj.checked = true;\r\n }\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Error in subclient dialog:', error);\r\n }\r\n });\r\n }\r\n }\r\n\r\n initSelectedSubClient(client: ClientListItem): void {\r\n client.subClientList?.forEach((subclient: SubClientListItem, index: number) => {\r\n if (index === 0) {\r\n subclient.checked = true;\r\n if (client.selected) { // set the first subclient of the first client as selected\r\n this.sghNavbarSvc.setSubclient(subclient);\r\n }\r\n } else { subclient.checked = false; }\r\n\r\n });\r\n }\r\n\r\n unselectClientItems(): void {\r\n this.toolbarData.clientList?.forEach((client: ClientListItem) => {\r\n if (client.selected) {\r\n client.selected = false;\r\n }\r\n });\r\n }\r\n\r\n selectFirstSubclient(): void {\r\n this.toolbarData.clientList?.forEach((client) => {\r\n if (client !== this.selectedClient) {\r\n client.subClientList?.forEach((scItem, index: number) => {\r\n scItem.checked = index === 0;\r\n });\r\n }\r\n })\r\n }\r\n}\r\n","<header class=\"sgh-toolbar\" [style.background-color]=\"toolbarData.bgColor\" id=\"toolBarWrapper\" role=\"banner\">\r\n <nav class=\"toolbar-main-wrapper\">\r\n <!-- Left Section -->\r\n <div class=\"toolbar-left-section\">\r\n <!-- Logo -->\r\n <div class=\"toolbar-logo\">\r\n <img class=\"logo-image\" [src]=\"toolbarData.img\" alt=\"Application Logo\"/>\r\n </div>\r\n\r\n <!-- Menu Toggle -->\r\n <button class=\"toolbar-menu-toggle\"\r\n (click)=\"toggleSidebar()\"\r\n aria-label=\"Toggle navigation menu\"\r\n title=\"Toggle Menu\">\r\n <i class=\"fa fa-bars\"></i>\r\n </button>\r\n\r\n <!-- Search Bar -->\r\n <div class=\"toolbar-search\" *ngIf=\"toolbarData.searchEnable\">\r\n <form class=\"search-form\" (submit)=\"$event.preventDefault()\">\r\n <div class=\"search-input-wrapper\">\r\n <i class=\"fa fa-search search-icon\"></i>\r\n <input type=\"search\"\r\n class=\"search-input\"\r\n placeholder=\"Search...\"\r\n autocomplete=\"off\"\r\n aria-label=\"Search\"/>\r\n <button type=\"submit\" class=\"search-submit\" aria-label=\"Submit search\">\r\n <i class=\"fa fa-arrow-right\"></i>\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Section -->\r\n <div class=\"toolbar-right-section\">\r\n <!-- Notification Button -->\r\n <button *ngIf=\"toolbarData.notificationEnable\"\r\n class=\"toolbar-action-btn notification-btn\"\r\n (click)=\"toggleNotificationList()\"\r\n aria-label=\"View notifications\"\r\n title=\"Notifications\">\r\n <i class=\"fa fa-bell\"></i>\r\n <span class=\"notification-badge\" *ngIf=\"true\">3</span>\r\n </button>\r\n\r\n <!-- Settings Button -->\r\n <button *ngIf=\"toolbarData.settingsEnable\"\r\n class=\"toolbar-action-btn settings-btn\"\r\n [matMenuTriggerFor]=\"settingsMenu\"\r\n aria-label=\"Open settings\"\r\n title=\"Settings\">\r\n <i class=\"fa fa-cog\"></i>\r\n </button>\r\n\r\n <!-- User Profile Button -->\r\n <button *ngIf=\"toolbarData.profileEnable\"\r\n class=\"toolbar-action-btn profile-btn\"\r\n (click)=\"clickProfile()\"\r\n aria-label=\"View profile\"\r\n title=\"Profile\">\r\n <i class=\"fa fa-user-circle\"></i>\r\n </button>\r\n </div>\r\n </nav>\r\n</header>\r\n\r\n<!-- Profile Dropdown -->\r\n<div *ngIf=\"toolbarData.profileView\" class=\"toolbar-dropdown profile-dropdown\" @fadeInOut>\r\n <div class=\"dropdown-card\">\r\n <div class=\"dropdown-content\">\r\n <div [innerHTML]=\"toolbarData.profileContent\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Settings Menu -->\r\n<mat-menu #settingsMenu=\"matMenu\" xPosition=\"before\" class=\"sgh-settings-menu\">\r\n <button mat-menu-item\r\n [matMenuTriggerFor]=\"appConfig\"\r\n *ngIf=\"toolbarData.applicationConfigurationEnable\"\r\n class=\"menu-item-with-icon\">\r\n <i class=\"fa fa-paint-brush menu-icon\"></i>\r\n <span>Application Settings</span>\r\n </button>\r\n <button mat-menu-item\r\n [matMenuTriggerFor]=\"clientConfig\"\r\n *ngIf=\"toolbarData.clientConfigurationEnable\"\r\n #clientMenuTrigger\r\n class=\"menu-item-with-icon\">\r\n <i class=\"fa fa-building menu-icon\"></i>\r\n <span>Client Settings</span>\r\n </button>\r\n</mat-menu>\r\n\r\n<!-- Application Configuration Menu -->\r\n<mat-menu #appConfig=\"matMenu\" xPosition=\"after\" class=\"sgh-app-config-menu\">\r\n <div class=\"theme-menu-header\">\r\n <i class=\"fa fa-palette\"></i>\r\n <span>Choose Theme</span>\r\n </div>\r\n <div *ngFor=\"let themeoption of toolbarData.themeOptions\" class=\"theme-option-wrapper\">\r\n <button mat-menu-item class=\"theme-radio-option\" (click)=\"onRadioClick(themeoption.value)\">\r\n <div class=\"radio-button\">\r\n <input value=\"{{themeoption.value}}\"\r\n name=\"radio\"\r\n type=\"radio\"\r\n [checked]=\"selected === themeoption.value\"\r\n [ngModel]=\"selected\"\r\n (ngModelChange)=\"setClass($event)\">\r\n <span class=\"radio-label\">{{themeoption.name}}</span>\r\n </div>\r\n </button>\r\n </div>\r\n</mat-menu>\r\n\r\n<!-- Client Configuration Menu -->\r\n<mat-menu #clientConfig=\"matMenu\" xPosition=\"after\" class=\"sgh-client-config-menu\">\r\n <div class=\"client-menu-container\">\r\n <div class=\"client-menu-header\">\r\n <i class=\"fa fa-building\"></i>\r\n <span>Select Client</span>\r\n </div>\r\n <div class=\"client-search-wrapper\" (click)=\"$event.stopPropagation();\">\r\n <i class=\"fa fa-search search-icon\"></i>\r\n <input type=\"text\"\r\n class=\"client-search-input\"\r\n placeholder=\"Search clients...\"\r\n [(ngModel)]=\"searchText\"\r\n autocomplete=\"off\"/>\r\n </div>\r\n <div class=\"client-list-container\">\r\n <div class=\"client-list-item\"\r\n *ngFor=\"let item of toolbarData.clientList | search : searchText; let i = index\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"toggleSelect($event, item);\"\r\n mat-ripple>\r\n <i class=\"fa fa-check-circle check-icon\" *ngIf=\"item.selected\"></i>\r\n <span class=\"client-name\">{{item.text}}</span>\r\n </div>\r\n <div class=\"no-results\" *ngIf=\"(toolbarData.clientList | search : searchText)?.length === 0\">\r\n <i class=\"fa fa-search\"></i>\r\n <span>No clients found</span>\r\n </div>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n<sgh-notification-list *ngIf=\"toolbarData.isNotifNavCollapsed\"></sgh-notification-list>\r\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { SidenavData } from './sidenav/sidenav-data';\r\nimport { ToolbarData } from './toolbar/toolbar-data';\r\n\r\n@Component({\r\n selector: 'lib-sgh-navbar',\r\n template: `\r\n <div class=\"sgh-navbar-container\">\r\n <sgh-toolbar \r\n [toolbarData]=\"toolbarData\" \r\n [expanded]=\"expanded\" \r\n (toggleSidebarEvent)=\"onToggleSidebar($event)\"\r\n (searchInputEvent)=\"onSearchInput($event)\"\r\n (client)=\"onClientChange($event)\"\r\n (subClient)=\"onSubClientChange($event)\">\r\n </sgh-toolbar>\r\n \r\n <div class=\"sgh-navbar-layout\">\r\n <sgh-sidenav \r\n [sidenavData]=\"sidenavData\" \r\n [expanded]=\"expanded\"\r\n (onToggleSideNav)=\"onSidenavToggle($event)\">\r\n </sgh-sidenav>\r\n \r\n <div class=\"sgh-navbar-content\" [class.expanded]=\"expanded\">\r\n <div class=\"sgh-breadcrumb-container\" *ngIf=\"showBreadcrumbs\">\r\n <nav aria-label=\"breadcrumb\">\r\n <ol class=\"breadcrumb\">\r\n <li class=\"breadcrumb-item\" *ngFor=\"let item of breadcrumbs; let last = last\"\r\n [class.active]=\"last\">\r\n <a *ngIf=\"!last\" [routerLink]=\"item.routeLink\">{{ item.label }}</a>\r\n <span *ngIf=\"last\">{{ item.label }}</span>\r\n </li>\r\n </ol>\r\n </nav>\r\n </div>\r\n \r\n <div class=\"sgh-navbar-main-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styleUrls: ['./sgh-navbar.component.scss'],\r\n standalone: false\r\n})\r\nexport class SghNavbarComponent implements OnInit {\r\n @Input() sidenavData: SidenavData;\r\n @Input() toolbarData: ToolbarData;\r\n @Input() expanded: boolean = false;\r\n @Input() showBreadcrumbs: boolean = true;\r\n @Input() breadcrumbs: any[] = [];\r\n \r\n @Output() toggleSidebarEvent = new EventEmitter<boolean>();\r\n @Output() searchInputEvent = new EventEmitter<string>();\r\n @Output() clientChange = new EventEmitter<any>();\r\n @Output() subClientChange = new EventEmitter<any>();\r\n @Output() sidenavToggle = new EventEmitter<any>();\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n onToggleSidebar(expanded: boolean) {\r\n this.expanded = expanded;\r\n this.toggleSidebarEvent.emit(this.expanded);\r\n }\r\n\r\n onSearchInput(searchText: string) {\r\n this.searchInputEvent.emit(searchText);\r\n }\r\n\r\n onClientChange(client: any) {\r\n this.clientChange.emit(client);\r\n }\r\n\r\n onSubClientChange(subClient: any) {\r\n this.subClientChange.emit(subClient);\r\n }\r\n\r\n onSidenavToggle(event: any) {\r\n this.sidenavToggle.emit(event);\r\n }\r\n}\r\n","import { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { fadeInOut, INavbarData } from './helper';\r\n\r\n@Component({\r\n selector: 'sgh-sublevel-menu',\r\n template: `\r\n <ul *ngIf=\"collapsed && data.items && data.items.length > 0\"\r\n [@submenu]=\"expanded\r\n ? {value: 'visible',\r\n params: {transitionParams: '400ms cubic-bezier(0.86, 0, 0.07, 1)', height: '*'}}\r\n : {value: 'hidden',\r\n params: {transitionParams: '400ms cubic-bezier(0.86, 0, 0.07, 1)', height: '0'}}\"\r\n class=\"sublevel-nav\"\r\n >\r\n <li *ngFor=\"let item of data.items\" class=\"sublevel-nav-item\">\r\n <a class=\"sublevel-nav-link\"\r\n (click)=\"handleClick(item)\"\r\n *ngIf=\"item.items && item.items.length > 0 && item.visible\"\r\n [ngClass]=\"getActiveClass(item)\"\r\n >\r\n <i class=\"sublevel-link-icon fa fa-circle\"></i>\r\n <span class=\"sublevel-link-text\" @fadeInOut\r\n *ngIf=\"collapsed\">{{item.label}}</span>\r\n <i *ngIf=\"item.items && collapsed\" class=\"menu-collapse-icon\"\r\n [ngClass]=\"!item.expanded ? 'fal fa-angle-right' : 'fal fa-angle-down'\"\r\n ></i>\r\n </a>\r\n <a class=\"sublevel-nav-link\"\r\n *ngIf=\"(!item.items || (item.items && item.items.length === 0)) && item.visible\"\r\n [routerLink]=\"[item.routeLink]\"\r\n routerLinkActive=\"active-sublevel\"\r\n [routerLinkActiveOptions]=\"{exact: true}\"\r\n >\r\n <i class=\"sublevel-link-icon fa fa-circle\"></i>\r\n <span class=\"sublevel-link-text\" @fadeInOut\r\n *ngIf=\"collapsed\">{{item.label}}</span>\r\n </a>\r\n <div *ngIf=\"item.items && item.items.length > 0\">\r\n <sgh-sublevel-menu\r\n [data]=\"item\"\r\n [collapsed]=\"collapsed\"\r\n [multiple]=\"multiple\"\r\n [expanded]=\"item.expanded\"\r\n ></sgh-sublevel-menu>\r\n </div>\r\n </li>\r\n </ul>\r\n `,\r\n styleUrls: ['./sublevel-menu.component.scss'],\r\n animations: [\r\n fadeInOut,\r\n trigger('submenu', [\r\n state('hidden', style({\r\n height: '0',\r\n overflow: 'hidden'\r\n })),\r\n state('visible', style({\r\n height: '*'\r\n })),\r\n transition('visible <=> hidden', [style({ overflow: 'hidden' }),\r\n animate('{{transitionParams}}')]),\r\n transition('void => *', animate(0))\r\n ])\r\n ],\r\n standalone: false\r\n})\r\nexport class SublevelMenuComponent implements OnInit {\r\n\r\n @Input() data: INavbarData = {\r\n routeLink: '',\r\n icon: '',\r\n label: '',\r\n visible: true,\r\n items: []\r\n }\r\n @Input() collapsed = false;\r\n @Input() animating: boolean | undefined;\r\n @Input() expanded: boolean | undefined;\r\n @Input() multiple: boolean = false;\r\n\r\n constructor(public router: Router) {}\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n handleClick(item: any): void {\r\n if (!this.multiple) {\r\n if (this.data.items && this.data.items.length > 0) {\r\n for(let modelItem of this.data.items) {\r\n if (item !==modelItem && modelItem.expanded) {\r\n modelItem.expanded = false;\r\n }\r\n }\r\n }\r\n }\r\n item.expanded = !item.expanded;\r\n }\r\n\r\n getActiveClass(item: INavbarData): string {\r\n return item.expanded && this.router.url.includes(item.routeLink)\r\n ? 'active-sublevel'\r\n : '';\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Router, NavigationEnd, ActivatedRoute } from '@angular/router';\nimport { filter, map } from 'rxjs/operators';\n\nexport interface BreadcrumbItem {\n label: string;\n routeLink: string;\n icon?: string;\n isActive?: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BreadcrumbService {\n private breadcrumbsSubject = new BehaviorSubject<BreadcrumbItem[]>([]);\n public breadcrumbs$: Observable<BreadcrumbItem[]> = this.breadcrumbsSubject.asObservable();\n\n constructor(private router: Router, private activatedRoute: ActivatedRoute) {\n this.router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n map(() => this.buildBreadcrumbs(this.activatedRoute.root))\n ).subscribe(breadcrumbs => {\n this.breadcrumbsSubject.next(breadcrumbs);\n });\n }\n\n setBreadcrumbs(breadcrumbs: BreadcrumbItem[]): void {\n this.breadcrumbsSubject.next(breadcrumbs);\n }\n\n addBreadcrumb(breadcrumb: BreadcrumbItem): void {\n const current = this.breadcrumbsSubject.value;\n this.breadcrumbsSubject.next([...current, breadcrumb]);\n }\n\n private buildBreadcrumbs(route: ActivatedRoute, url: string = '', breadcrumbs: BreadcrumbItem[] = []): BreadcrumbItem[] {\n const children: ActivatedRoute[] = route.children;\n\n if (children.length === 0) {\n return breadcrumbs;\n }\n\n for (const child of children) {\n const routeURL: string = child.snapshot.url.map(segment => segment.path).join('/');\n if (routeURL !== '') {\n url += `/${routeURL}`;\n }\n\n const label = child.snapshot.data['breadcrumb'];\n if (label) {\n breadcrumbs.push({\n label,\n routeLink: url,\n icon: child.snapshot.data['breadcrumbIcon']\n });\n }\n\n return this.buildBreadcrumbs(child, url, breadcrumbs);\n }\n\n return breadcrumbs;\n }\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { BreadcrumbItem, BreadcrumbService } from './breadcrumb.service';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'sgh-breadcrumb',\n template: `\n <nav class=\"sgh-breadcrumb\" aria-label=\"breadcrumb\" *ngIf=\"breadcrumbs$ | async as breadcrumbs\">\n <ol class=\"breadcrumb-list\">\n <li class=\"breadcrumb-item home-item\">\n <a [routerLink]=\"'/'\" class=\"breadcrumb-link\">\n <i class=\"fa fa-home\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Home</span>\n </a>\n </li>\n <li class=\"breadcrumb-item\" \n *ngFor=\"let item of breadcrumbs; let last = last\"\n [class.active]=\"last\">\n <i class=\"fa fa-angle-right breadcrumb-separator\" aria-hidden=\"true\"></i>\n <a *ngIf=\"!last\" [routerLink]=\"item.routeLink\" class=\"breadcrumb-link\">\n <i *ngIf=\"item.icon\" class=\"fa fa-{{item.icon}}\" aria-hidden=\"true\"></i>\n {{ item.label }}\n </a>\n <span *ngIf=\"last\" class=\"breadcrumb-current\">\n <i *ngIf=\"item.icon\" class=\"fa fa-{{item.icon}}\" aria-hidden=\"true\"></i>\n {{ item.label }}\n </span>\n </li>\n </ol>\n </nav>\n `,\n styleUrls: ['./breadcrumb.component.scss'],\n standalone: false\n})\nexport class BreadcrumbComponent implements OnInit {\n @Input() customBreadcrumbs: BreadcrumbItem[] = [];\n \n breadcrumbs$: Observable<BreadcrumbItem[]>;\n\n constructor(private breadcrumbService: BreadcrumbService) {\n this.breadcrumbs$ = this.breadcrumbService.breadcrumbs$;\n }\n\n ngOnInit(): void {\n if (this.customBreadcrumbs.length > 0) {\n this.breadcrumbService.setBreadcrumbs(this.customBreadcrumbs);\n }\n }\n}","import {NgModule} from '@angular/core';\r\nimport {SghNavbarComponent} from './sgh-navbar.component';\r\nimport {SublevelMenuComponent} from './sidenav/sublevel-menu.component';\r\nimport {SidenavComponent} from './sidenav/sidenav.component';\r\nimport {ToolbarComponent} from './toolbar/toolbar.component';\r\nimport {CommonModule} from '@angular/common';\r\nimport {RouterModule} from '@angular/router';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {MenuListItemComponent} from \"./sidenav/menu-list-item/menu-list-item.component\";\r\nimport {SghNavbarService} from \"./sgh-navbar.service\";\r\nimport {NotificationListComponent} from \"./toolbar/notification-list/notification-list.component\";\r\nimport {MatMenuModule} from \"@angular/material/menu\";\r\nimport {SearchPipe} from \"./toolbar/search.pipe\";\r\nimport {MatRippleModule} from \"@angular/material/core\";\r\nimport { SubClientDialogComponent } from './toolbar/sub-client-dialog/sub-client-dialog.component';\r\nimport {MatDialogModule} from \"@angular/material/dialog\";\r\nimport {MatRadioModule} from \"@angular/material/radio\";\r\nimport { BreadcrumbComponent } from './breadcrumb/breadcrumb.component';\r\nimport { BreadcrumbService } from './breadcrumb/breadcrumb.service';\r\n\r\n@NgModule({\r\n declarations: [\r\n SghNavbarComponent,\r\n SublevelMenuComponent,\r\n SidenavComponent,\r\n ToolbarComponent,\r\n MenuListItemComponent,\r\n NotificationListComponent,\r\n SearchPipe,\r\n SubClientDialogComponent,\r\n BreadcrumbComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n FormsModule,\r\n MatMenuModule,\r\n MatRippleModule,\r\n MatDialogModule,\r\n MatRadioModule\r\n ],\r\n exports: [\r\n SghNavbarComponent,\r\n SublevelMenuComponent,\r\n SidenavComponent,\r\n ToolbarComponent,\r\n BreadcrumbComponent\r\n ],\r\n providers: [SghNavbarService, BreadcrumbService],\r\n})\r\nexport class SghNavbarModule {\r\n}\r\n","/*\r\n * Public API Surface of sgh-navbar\r\n */\r\n\r\nexport * from './lib/sgh-navbar.service';\r\nexport * from './lib/sgh-navbar.component';\r\nexport * from './lib/sgh-navbar.module';\r\n\r\nexport * from './lib/sidenav/sidenav.component';\r\nexport * from './lib/sidenav/sublevel-menu.component';\r\nexport * from './lib/sidenav/sidenav-data';\r\nexport * from './lib/sidenav/helper';\r\n\r\nexport * from './lib/toolbar/toolbar.component';\r\nexport * from './lib/toolbar/toolbar-data';\r\n\r\nexport * from './lib/breadcrumb/breadcrumb.component';\r\nexport * from './lib/breadcrumb/breadcrumb.service';\r\n\r\nexport * from './lib/configs/default-toolbar.config';\r\nexport * from './lib/configs/default-sidenav.config';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SghNavbarService","i3","i4.MenuListItemComponent","i1","i4","i7.NotificationListComponent","i8.SearchPipe","i2","i3.SidenavComponent","i4.ToolbarComponent","i1.BreadcrumbService"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sgh-navbar",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A modern, responsive Angular navigation library with sidebar, toolbar, themes, notifications, and client management. Features glassmorphism design, accessibility support, and dark mode.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"angular",
|
|
7
|
+
"angular19",
|
|
8
|
+
"navbar",
|
|
9
|
+
"navigation",
|
|
10
|
+
"toolbar",
|
|
11
|
+
"sidebar",
|
|
12
|
+
"menu",
|
|
13
|
+
"sidenav",
|
|
14
|
+
"responsive",
|
|
15
|
+
"material",
|
|
16
|
+
"theme",
|
|
17
|
+
"dark-mode",
|
|
18
|
+
"accessibility",
|
|
19
|
+
"ui-component"
|
|
20
|
+
],
|
|
21
|
+
"author": "SGH Team",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://bitbucket.org/sghdev/sgh-ui"
|
|
26
|
+
},
|
|
27
|
+
"homepage": "https://bitbucket.org/sghdev/sgh-ui#readme",
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://bitbucket.org/sghdev/sgh-ui/issues"
|
|
30
|
+
},
|
|
4
31
|
"peerDependencies": {
|
|
5
32
|
"@angular/common": "^19.2.0",
|
|
6
33
|
"@angular/core": "^19.2.0",
|
|
@@ -13,6 +40,10 @@
|
|
|
13
40
|
"dependencies": {
|
|
14
41
|
"tslib": "^2.3.0"
|
|
15
42
|
},
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=18.0.0",
|
|
45
|
+
"npm": ">=9.0.0"
|
|
46
|
+
},
|
|
16
47
|
"module": "fesm2022/sgh-navbar.mjs",
|
|
17
48
|
"typings": "index.d.ts",
|
|
18
49
|
"exports": {
|