@excellore/ui 0.0.9 → 0.0.11
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 +3 -62
- package/fesm2022/excellore-ui.mjs +391 -165
- package/fesm2022/excellore-ui.mjs.map +1 -1
- package/package.json +4 -3
- package/types/excellore-ui.d.ts +101 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"excellore-ui.mjs","sources":["../../../projects/ui/src/lib/services/theme.service.ts","../../../projects/ui/src/lib/navigation/app-switcher/app-switcher.ts","../../../projects/ui/src/lib/navigation/app-switcher/app-switcher.html","../../../projects/ui/src/lib/navigation/sidebar-menu/sidebar-menu.ts","../../../projects/ui/src/lib/navigation/sidebar-menu/sidebar-menu.html","../../../projects/ui/src/lib/notifications/notification-panel/notification-panel.ts","../../../projects/ui/src/lib/notifications/notification-panel/notification-panel.html","../../../projects/ui/src/lib/notifications/notification-bell/notification-bell.ts","../../../projects/ui/src/lib/notifications/notification-bell/notification-bell.html","../../../projects/ui/src/lib/user/user-avatar/user-avatar.ts","../../../projects/ui/src/lib/user/user-avatar/user-avatar.html","../../../projects/ui/src/lib/user/user-menu/user-menu.ts","../../../projects/ui/src/lib/user/user-menu/user-menu.html","../../../projects/ui/src/lib/shared/icon/icon.component.ts","../../../projects/ui/src/lib/layout/header/header.ts","../../../projects/ui/src/lib/layout/header/header.html","../../../projects/ui/src/lib/layout/sidebar/sidebar.ts","../../../projects/ui/src/lib/layout/sidebar/sidebar.html","../../../projects/ui/src/public-api.ts","../../../projects/ui/src/excellore-ui.ts"],"sourcesContent":["import { Injectable, signal, effect, Inject, PLATFORM_ID, inject } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { Theme } from '../models/models.interface';\r\n\r\nconst THEME_STORAGE_KEY = 'excellore-theme';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService {\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly isBrowser = isPlatformBrowser(this.platformId);\r\n\r\n // The active theme preference ('light', 'dark', 'system')\r\n readonly theme = signal<Theme>('system');\r\n\r\n // The currently resolved actual theme applied ('light' | 'dark')\r\n readonly resolvedTheme = signal<'light' | 'dark'>('light');\r\n\r\n private mediaQueryListener?: (e: MediaQueryListEvent) => void;\r\n\r\n constructor() {\r\n this.initializeTheme();\r\n\r\n // Effect to reactively update storage, apply document classes, and set up listeners\r\n effect(() => {\r\n const activeTheme = this.theme();\r\n this.saveThemeToStorage(activeTheme);\r\n this.applyTheme(activeTheme);\r\n });\r\n }\r\n\r\n setTheme(theme: Theme): void {\r\n this.theme.set(theme);\r\n }\r\n\r\n getTheme(): Theme {\r\n return this.theme();\r\n }\r\n\r\n toggleTheme(): void {\r\n const current = this.theme();\r\n if (current === 'light') {\r\n this.setTheme('dark');\r\n } else if (current === 'dark') {\r\n this.setTheme('system');\r\n } else {\r\n this.setTheme('light');\r\n }\r\n }\r\n\r\n private initializeTheme(): void {\r\n if (!this.isBrowser) {\r\n return;\r\n }\r\n\r\n try {\r\n const savedTheme = localStorage.getItem(THEME_STORAGE_KEY) as Theme;\r\n if (savedTheme === 'light' || savedTheme === 'dark' || savedTheme === 'system') {\r\n this.theme.set(savedTheme);\r\n } else {\r\n this.theme.set('system');\r\n }\r\n } catch {\r\n this.theme.set('system');\r\n }\r\n }\r\n\r\n private saveThemeToStorage(theme: Theme): void {\r\n if (!this.isBrowser) {\r\n return;\r\n }\r\n\r\n try {\r\n localStorage.setItem(THEME_STORAGE_KEY, theme);\r\n } catch (e) {\r\n console.warn('Failed to save theme to localStorage:', e);\r\n }\r\n }\r\n\r\n private applyTheme(theme: Theme): void {\r\n if (!this.isBrowser) {\r\n return;\r\n }\r\n\r\n const doc = document.documentElement;\r\n const mediaQuery = typeof window.matchMedia === 'function' ? window.matchMedia('(prefers-color-scheme: dark)') : null;\r\n\r\n // Clean up any previous listener to avoid leaks\r\n if (this.mediaQueryListener && mediaQuery) {\r\n mediaQuery.removeEventListener('change', this.mediaQueryListener);\r\n this.mediaQueryListener = undefined;\r\n }\r\n\r\n let actualTheme: 'light' | 'dark' = 'light';\r\n\r\n if (theme === 'system') {\r\n actualTheme = mediaQuery?.matches ? 'dark' : 'light';\r\n\r\n if (mediaQuery) {\r\n // Watch for system preference changes in real-time\r\n this.mediaQueryListener = (e: MediaQueryListEvent) => {\r\n const newResolvedTheme = e.matches ? 'dark' : 'light';\r\n this.resolvedTheme.set(newResolvedTheme);\r\n this.updateDocumentClass(newResolvedTheme);\r\n };\r\n mediaQuery.addEventListener('change', this.mediaQueryListener);\r\n }\r\n } else {\r\n actualTheme = theme;\r\n }\r\n\r\n this.resolvedTheme.set(actualTheme);\r\n this.updateDocumentClass(actualTheme);\r\n }\r\n\r\n private updateDocumentClass(resolved: 'light' | 'dark'): void {\r\n const doc = document.documentElement;\r\n if (resolved === 'dark') {\r\n doc.classList.add('dark');\r\n doc.classList.remove('light');\r\n } else {\r\n doc.classList.add('light');\r\n doc.classList.remove('dark');\r\n }\r\n }\r\n}\r\n","import { Component, input, output, HostListener, signal } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Application } from '../../models/models.interface';\r\nimport { LucideGrid } from '@lucide/angular';\r\n\r\n@Component({\r\n selector: 'lib-app-switcher',\r\n standalone: true,\r\n imports: [CommonModule, LucideGrid],\r\n templateUrl: './app-switcher.html',\r\n styleUrl: './app-switcher.css',\r\n})\r\nexport class AppSwitcherComponent {\r\n readonly applications = input<Application[]>([]);\r\n readonly applicationSelected = output<Application>();\r\n\r\n readonly isOpen = signal(false);\r\n\r\n toggleSwitcher(): void {\r\n this.isOpen.update((v) => !v);\r\n }\r\n\r\n closeSwitcher(): void {\r\n this.isOpen.set(false);\r\n }\r\n\r\n onSelect(app: Application): void {\r\n if (app.available !== false) {\r\n this.applicationSelected.emit(app);\r\n this.closeSwitcher();\r\n }\r\n }\r\n\r\n getInitials(name: string): string {\r\n return name\r\n .split(/[.\\s_-]+/)\r\n .filter(Boolean)\r\n .slice(0, 2)\r\n .map((part) => part[0]?.toUpperCase())\r\n .join('') || 'AP';\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onOutsideClick(event: MouseEvent): void {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.app-switcher-wrapper')) {\r\n this.closeSwitcher();\r\n }\r\n }\r\n}\r\n","<div class=\"app-switcher-wrapper\">\r\n <button\r\n type=\"button\"\r\n class=\"app-switcher-trigger\"\r\n (click)=\"toggleSwitcher()\"\r\n aria-haspopup=\"true\"\r\n [aria-expanded]=\"isOpen()\"\r\n aria-label=\"Toggle application switcher\"\r\n >\r\n <svg lucideGrid class=\"app-switcher-trigger-icon\"></svg>\r\n </button>\r\n\r\n @if (isOpen()) {\r\n <div class=\"app-switcher-dropdown\">\r\n <div class=\"app-switcher-header\">\r\n <div>\r\n <h3>Excellore Apps</h3>\r\n <p>Switch between available workspaces</p>\r\n </div>\r\n </div>\r\n \r\n @if (applications().length === 0) {\r\n <div class=\"app-switcher-empty\">\r\n No other apps available\r\n </div>\r\n } @else {\r\n <div class=\"app-switcher-list\">\r\n @for (app of applications(); track app.id) {\r\n @if (app.available !== false) {\r\n <a\r\n [href]=\"app.url\"\r\n (click)=\"onSelect(app)\"\r\n class=\"app-switcher-item app-switcher-link\"\r\n >\r\n <div class=\"app-switcher-app-mark\">\r\n {{ app.initials || getInitials(app.name) }}\r\n </div>\r\n <div class=\"app-switcher-app-content\">\r\n <div class=\"app-switcher-app-name\" [title]=\"app.name\">{{ app.name }}</div>\r\n <div class=\"app-switcher-app-url\">{{ app.url }}</div>\r\n </div>\r\n <span class=\"app-switcher-open-pill\">\r\n Open\r\n </span>\r\n </a>\r\n } @else {\r\n <div class=\"app-switcher-item unavailable\">\r\n <div class=\"app-switcher-app-mark unavailable\">\r\n {{ app.initials || getInitials(app.name) }}\r\n </div>\r\n <div class=\"app-switcher-app-content\">\r\n <div class=\"app-switcher-app-name\">{{ app.name }}</div>\r\n <div class=\"app-switcher-app-url\">{{ app.url }}</div>\r\n </div>\r\n <span class=\"app-switcher-soon-pill\">\r\n Soon\r\n </span>\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { Component, computed, input, output, signal } from '@angular/core';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { SidebarMenuItem } from '../../models/models.interface';\r\n\r\n@Component({\r\n selector: 'lib-sidebar-menu',\r\n standalone: true,\r\n imports: [NgClass, NgTemplateOutlet, RouterLink, RouterLinkActive],\r\n templateUrl: './sidebar-menu.html',\r\n styleUrl: './sidebar-menu.css',\r\n})\r\nexport class SidebarMenuComponent {\n readonly items = input<SidebarMenuItem[]>([]);\n readonly errorMessage = input<string | null>(null);\n readonly defaultIcon = input('bi-dot');\n\r\n readonly menuItemSelected = output<SidebarMenuItem>();\r\n\r\n private readonly expandedIds = signal<Set<string>>(new Set<string>());\r\n\r\n readonly sortedItems = computed(() => this.sortItems(this.items()));\r\n\r\n toggle(item: SidebarMenuItem): void {\r\n if (item.disabled) {\r\n return;\r\n }\r\n\r\n this.expandedIds.update((ids) => {\r\n const next = new Set(ids);\r\n if (next.has(item.id)) {\r\n next.delete(item.id);\r\n } else {\r\n next.add(item.id);\r\n }\r\n return next;\r\n });\r\n }\r\n\r\n isExpanded(item: SidebarMenuItem): boolean {\r\n return this.expandedIds().has(item.id);\r\n }\r\n\r\n hasChildren(item: SidebarMenuItem): boolean {\r\n return !!item.children?.length;\r\n }\r\n\r\n hasRoute(item: SidebarMenuItem): boolean {\r\n return !!item.route;\r\n }\r\n\r\n hasHref(item: SidebarMenuItem): boolean {\r\n return !!item.href;\r\n }\r\n\r\n iconFor(item: SidebarMenuItem): string {\r\n return item.icon || this.defaultIcon();\r\n }\r\n\r\n onSelect(item: SidebarMenuItem): void {\r\n if (!item.disabled) {\r\n this.menuItemSelected.emit(item);\r\n }\r\n }\r\n\r\n sortedChildren(item: SidebarMenuItem): SidebarMenuItem[] {\r\n return this.sortItems(item.children ?? []);\r\n }\r\n\r\n private sortItems(items: SidebarMenuItem[]): SidebarMenuItem[] {\r\n return [...items]\r\n .sort((a, b) => (a.sortOrder ?? 0) - (b.sortOrder ?? 0) || a.label.localeCompare(b.label))\r\n .map((item) => ({\r\n ...item,\r\n children: item.children ? this.sortItems(item.children) : undefined,\r\n }));\r\n }\r\n}\r\n","<nav class=\"sidebar-menu\" aria-label=\"Sidebar menu\">\n @if (errorMessage()) {\n <div class=\"sidebar-menu__error\" role=\"alert\">\n {{ errorMessage() }}\n </div>\r\n }\r\n\r\n <ng-template #menuList let-menuItems let-level=\"level\">\r\n @for (item of menuItems; track item.id) {\r\n @if (hasChildren(item)) {\r\n <div class=\"sidebar-menu__group\">\r\n <button\r\n type=\"button\"\r\n class=\"sidebar-menu__item sidebar-menu__button\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.expanded]=\"isExpanded(item)\"\r\n [style.padding-left.rem]=\"0.75 + level * 0.75\"\r\n [attr.aria-expanded]=\"isExpanded(item)\"\r\n (click)=\"toggle(item)\"\r\n >\r\n <span class=\"sidebar-menu__item-main\">\r\n <i class=\"bi sidebar-menu__icon\" [ngClass]=\"iconFor(item)\" aria-hidden=\"true\"></i>\r\n <span class=\"sidebar-menu__label\">{{ item.label }}</span>\r\n </span>\r\n <svg class=\"sidebar-menu__chevron\" [class.expanded]=\"isExpanded(item)\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\r\n <path d=\"M6 8l4 4 4-4\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.8\" />\r\n </svg>\r\n </button>\r\n\r\n @if (isExpanded(item)) {\r\n <div class=\"sidebar-menu__children\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"menuList\"\r\n [ngTemplateOutletContext]=\"{ $implicit: sortedChildren(item), level: level + 1 }\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n } @else if (hasRoute(item)) {\r\n <a\r\n [routerLink]=\"item.route\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{ exact: item.exact ?? true }\"\r\n class=\"sidebar-menu__item\"\r\n [class.disabled]=\"item.disabled\"\r\n [style.padding-left.rem]=\"0.75 + level * 0.75\"\r\n (click)=\"onSelect(item)\"\r\n >\r\n <i class=\"bi sidebar-menu__icon\" [ngClass]=\"iconFor(item)\" aria-hidden=\"true\"></i>\r\n <span class=\"sidebar-menu__label\">{{ item.label }}</span>\r\n </a>\r\n } @else if (hasHref(item)) {\r\n <a\r\n [href]=\"item.href\"\r\n [target]=\"item.target || '_self'\"\r\n class=\"sidebar-menu__item\"\r\n [class.disabled]=\"item.disabled\"\r\n [style.padding-left.rem]=\"0.75 + level * 0.75\"\r\n (click)=\"onSelect(item)\"\r\n >\r\n <i class=\"bi sidebar-menu__icon\" [ngClass]=\"iconFor(item)\" aria-hidden=\"true\"></i>\r\n <span class=\"sidebar-menu__label\">{{ item.label }}</span>\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"sidebar-menu__item sidebar-menu__button\"\r\n [class.disabled]=\"item.disabled\"\r\n [style.padding-left.rem]=\"0.75 + level * 0.75\"\r\n (click)=\"onSelect(item)\"\r\n >\r\n <span class=\"sidebar-menu__item-main\">\r\n <i class=\"bi sidebar-menu__icon\" [ngClass]=\"iconFor(item)\" aria-hidden=\"true\"></i>\r\n <span class=\"sidebar-menu__label\">{{ item.label }}</span>\r\n </span>\r\n </button>\r\n }\r\n }\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"menuList\" [ngTemplateOutletContext]=\"{ $implicit: sortedItems(), level: 0 }\" />\r\n</nav>\r\n","import { Component, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Notification } from '../../models/models.interface';\r\nimport { LucideBellOff, LucideCheckCheck, LucideTrash2 } from '@lucide/angular';\r\n\r\n@Component({\r\n selector: 'lib-notification-panel',\r\n standalone: true,\r\n imports: [CommonModule, LucideBellOff, LucideCheckCheck, LucideTrash2],\r\n templateUrl: './notification-panel.html',\r\n styleUrl: './notification-panel.css',\r\n})\r\nexport class NotificationPanelComponent {\r\n readonly notifications = input<Notification[]>([]);\r\n readonly notificationClick = output<Notification>();\r\n readonly markRead = output<string>();\r\n readonly clearAll = output<void>();\r\n\r\n onNotificationClick(notification: Notification): void {\r\n this.notificationClick.emit(notification);\r\n }\r\n\r\n onMarkRead(id: string, event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.markRead.emit(id);\r\n }\r\n\r\n onClearAll(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.clearAll.emit();\r\n }\r\n\r\n formatTime(date: Date | string): string {\r\n const d = new Date(date);\r\n const now = new Date();\r\n const diffMs = now.getTime() - d.getTime();\r\n const diffMins = Math.floor(diffMs / 60000);\r\n const diffHours = Math.floor(diffMins / 60);\r\n const diffDays = Math.floor(diffHours / 24);\r\n\r\n if (diffMins < 1) return 'Just now';\r\n if (diffMins < 60) return `${diffMins}m ago`;\r\n if (diffHours < 24) return `${diffHours}h ago`;\r\n if (diffDays === 1) return 'Yesterday';\r\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\r\n }\r\n}\r\n","<div class=\"notification-panel-inner flex flex-col h-full max-h-[380px] w-full text-left\">\r\n <!-- Panel Header -->\r\n <div class=\"flex items-center justify-between border-b border-[var(--border)] px-3.5 py-2\">\r\n <span class=\"text-[10px] font-bold uppercase tracking-wider text-[var(--secondary)]\">Notifications</span>\r\n @if (notifications().length > 0) {\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center gap-1 text-[9px] font-bold text-[var(--secondary)] hover:text-[var(--danger,#ef4444)] hover:underline cursor-pointer\"\r\n (click)=\"onClearAll($event)\"\r\n >\r\n <svg lucideTrash2 class=\"h-3 w-3\"></svg>\r\n <span>Clear All</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- Panel Body -->\r\n <div class=\"flex-1 overflow-y-auto min-h-0 py-0.5 divide-y divide-[var(--border)]\">\r\n @if (notifications().length === 0) {\r\n <div class=\"flex flex-col items-center justify-center py-10 px-4 text-center select-none\">\r\n <div class=\"flex h-10 w-10 items-center justify-center rounded-full bg-[rgba(var(--secondary),0.06)] text-[var(--secondary)] mb-2.5\">\r\n <svg lucideBellOff class=\"h-4.5 w-4.5\"></svg>\r\n </div>\r\n <p class=\"text-xs font-semibold text-[var(--foreground)]\">All caught up</p>\r\n <p class=\"text-[10px] text-[var(--secondary)] mt-0.5\">No new notifications to display.</p>\r\n </div>\r\n } @else {\r\n @for (item of notifications(); track item.id) {\r\n <div\r\n (click)=\"onNotificationClick(item)\"\r\n class=\"notification-item flex gap-2.5 p-3 transition hover:bg-[rgba(var(--foreground),0.02)] cursor-pointer relative\"\r\n [class.bg-[rgba(var(--primary),0.015)]]=\"!item.read\"\r\n >\r\n <!-- Read status dot -->\r\n <div class=\"flex-shrink-0 pt-1\">\r\n @if (!item.read) {\r\n <span class=\"block h-1.5 w-1.5 rounded-full bg-[var(--primary)] animate-pulse\"></span>\r\n } @else {\r\n <span class=\"block h-1.5 w-1.5 rounded-full bg-transparent\"></span>\r\n }\r\n </div>\r\n\r\n <!-- Notification content -->\r\n <div class=\"flex-1 min-w-0\">\r\n <h4 class=\"text-xs font-semibold text-[var(--foreground)] truncate\" [class.font-bold]=\"!item.read\">\r\n {{ item.title }}\r\n </h4>\r\n <p class=\"text-[10.5px] text-[var(--secondary)] mt-0.5 leading-snug break-words\">\r\n {{ item.message }}\r\n </p>\r\n <span class=\"block text-[9px] text-[var(--secondary)] mt-1 font-medium\">\r\n {{ formatTime(item.createdAt) }}\r\n </span>\r\n </div>\r\n\r\n <!-- Actions -->\r\n @if (!item.read) {\r\n <div class=\"flex items-center flex-shrink-0\">\r\n <button\r\n type=\"button\"\r\n class=\"mark-read-btn grid h-6 w-6 place-items-center rounded-full text-[var(--secondary)] hover:text-[var(--primary)] hover:bg-[rgba(var(--foreground),0.05)] cursor-pointer\"\r\n [title]=\"'Mark as read'\"\r\n (click)=\"onMarkRead(item.id, $event)\"\r\n >\r\n <svg lucideCheckCheck class=\"h-3.5 w-3.5\"></svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import { Component, input, output, HostListener, signal } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Notification } from '../../models/models.interface';\r\nimport { NotificationPanelComponent } from '../notification-panel/notification-panel';\r\nimport { LucideBell } from '@lucide/angular';\r\n\r\n@Component({\r\n selector: 'lib-notification-bell',\r\n standalone: true,\r\n imports: [CommonModule, NotificationPanelComponent, LucideBell],\r\n templateUrl: './notification-bell.html',\r\n styleUrl: './notification-bell.css',\r\n})\r\nexport class NotificationBellComponent {\r\n readonly unreadCount = input<number>(0);\r\n readonly notifications = input<Notification[]>([]);\r\n\r\n readonly notificationClick = output<Notification>();\r\n readonly markRead = output<string>();\r\n readonly clearAll = output<void>();\r\n\r\n readonly isOpen = signal(false);\r\n\r\n togglePanel(): void {\r\n this.isOpen.update((v) => !v);\r\n }\r\n\r\n closePanel(): void {\r\n this.isOpen.set(false);\r\n }\r\n\r\n onNotificationClick(notification: Notification): void {\r\n this.notificationClick.emit(notification);\r\n this.closePanel();\r\n }\r\n\r\n onMarkRead(id: string): void {\r\n this.markRead.emit(id);\r\n }\r\n\r\n onClearAll(): void {\r\n this.clearAll.emit();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onOutsideClick(event: MouseEvent): void {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.notification-bell-wrapper')) {\r\n this.closePanel();\r\n }\r\n }\r\n}\r\n","<div class=\"notification-bell-wrapper relative inline-block text-left\">\r\n <button\r\n type=\"button\"\r\n class=\"notification-trigger\"\r\n (click)=\"togglePanel()\"\r\n aria-haspopup=\"true\"\r\n [aria-expanded]=\"isOpen()\"\r\n aria-label=\"View notifications\"\r\n >\r\n <svg lucideBell class=\"h-4.5 w-4.5\"></svg>\r\n \r\n @if (unreadCount() > 0) {\r\n <span class=\"absolute top-1.5 right-1.5 flex h-2 w-2\">\r\n <span class=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-[var(--danger,#ef4444)] opacity-75\"></span>\r\n <span class=\"relative inline-flex rounded-full h-2 w-2 bg-[var(--danger,#ef4444)]\"></span>\r\n </span>\r\n }\r\n </button>\r\n\r\n @if (isOpen()) {\r\n <div class=\"notification-dropdown fixed left-2 right-2 top-14 mt-2 origin-top rounded-xl border border-[var(--border)] bg-[var(--background)] p-0 shadow-lg focus:outline-none z-50 sm:absolute sm:left-auto sm:right-0 sm:top-auto sm:w-80 sm:origin-top-right\">\r\n <lib-notification-panel\r\n [notifications]=\"notifications()\"\r\n (notificationClick)=\"onNotificationClick($event)\"\r\n (markRead)=\"onMarkRead($event)\"\r\n (clearAll)=\"onClearAll()\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import { Component, input, computed } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { User } from '../../models/models.interface';\r\n\r\n@Component({\r\n selector: 'lib-user-avatar',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './user-avatar.html',\r\n styleUrl: './user-avatar.css',\r\n})\r\nexport class UserAvatarComponent {\r\n // Input using the modern Angular signal inputs\r\n readonly user = input<User | null>(null);\r\n\r\n // Computes the initials from the user's name or email\r\n readonly initials = computed(() => {\r\n const userData = this.user();\r\n if (!userData) return 'EU';\r\n\r\n const source = userData.name || userData.email || 'Excellore User';\r\n return source\r\n .split(/[.@\\s_-]+/)\r\n .filter(Boolean)\r\n .slice(0, 2)\r\n .map(part => part[0]?.toUpperCase())\r\n .join('') || 'EU';\r\n });\r\n\r\n // Check if image loading failed to dynamically switch to initials\r\n protected imageError = false;\r\n\r\n onImageError(): void {\r\n this.imageError = true;\r\n }\r\n}\r\n","<div class=\"avatar-container\">\r\n @if (user()?.avatar && !imageError) {\r\n <img [src]=\"user()?.avatar\" [alt]=\"user()?.name || 'User avatar'\" class=\"avatar-img\" (error)=\"onImageError()\" />\r\n } @else {\r\n <span class=\"avatar-initials\">{{ initials() }}</span>\r\n }\r\n</div>\r\n","import { Component, input, output, HostListener, signal } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { User } from '../../models/models.interface';\r\nimport { UserAvatarComponent } from '../user-avatar/user-avatar';\r\nimport {\r\n LucideChevronDown,\r\n LucideCreditCard,\r\n LucideLogOut,\r\n LucideSettings,\r\n LucideUser,\r\n} from '@lucide/angular';\r\n\r\n@Component({\r\n selector: 'lib-user-menu',\r\n standalone: true,\r\n imports: [CommonModule, UserAvatarComponent, LucideChevronDown, LucideCreditCard, LucideLogOut, LucideSettings, LucideUser],\r\n templateUrl: './user-menu.html',\r\n styleUrl: './user-menu.css',\r\n})\r\nexport class UserMenuComponent {\r\n readonly user = input<User | null>(null);\r\n readonly menuAction = output<'profile' | 'settings' | 'billing' | 'logout'>();\r\n\r\n // Signalled open state\r\n readonly isOpen = signal(false);\r\n\r\n toggleMenu(): void {\r\n this.isOpen.update((v) => !v);\r\n }\r\n\r\n closeMenu(): void {\r\n this.isOpen.set(false);\r\n }\r\n\r\n onAction(action: 'profile' | 'settings' | 'billing' | 'logout'): void {\r\n this.menuAction.emit(action);\r\n this.closeMenu();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onOutsideClick(event: MouseEvent): void {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.user-menu-wrapper')) {\r\n this.closeMenu();\r\n }\r\n }\r\n}\r\n","<div class=\"user-menu-wrapper\">\r\n <button type=\"button\" class=\"user-menu-trigger\" (click)=\"toggleMenu()\" aria-haspopup=\"true\" [aria-expanded]=\"isOpen()\"\r\n aria-label=\"User profile menu\">\r\n <div class=\"user-menu-avatar\">\r\n <lib-user-avatar [user]=\"user()\" />\r\n </div>\r\n <svg lucideChevronDown class=\"user-menu-chevron\"\r\n [class.rotate-180]=\"isOpen()\"></svg>\r\n </button>\r\n\r\n @if (isOpen()) {\r\n <div class=\"user-dropdown-panel\">\r\n @if (user(); as u) {\r\n <div class=\"user-dropdown-profile\">\r\n <p class=\"user-dropdown-name\" [title]=\"u.name\">{{ u.name }}</p>\r\n <p class=\"user-dropdown-email\" [title]=\"u.email\">{{ u.email }}</p>\r\n </div>\r\n }\r\n\r\n <div class=\"user-menu-list\">\r\n <button type=\"button\" class=\"user-menu-item\" (click)=\"onAction('profile')\">\r\n <svg lucideUser class=\"user-menu-icon\"></svg>\r\n <span>My Profile</span>\r\n </button>\r\n\r\n <button type=\"button\" class=\"user-menu-item\" (click)=\"onAction('settings')\">\r\n <svg lucideSettings class=\"user-menu-icon\"></svg>\r\n <span>Settings</span>\r\n </button>\r\n\r\n <button type=\"button\" class=\"user-menu-item\" (click)=\"onAction('billing')\">\r\n <svg lucideCreditCard class=\"user-menu-icon\"></svg>\r\n <span>Billing</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"user-menu-danger-zone\">\r\n <button type=\"button\" class=\"user-menu-item danger\" (click)=\"onAction('logout')\">\r\n <svg lucideLogOut class=\"user-menu-icon\"></svg>\r\n <span>Sign Out</span>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","// lib/shared/icon/icon.component.ts\r\nimport { Component, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n LucideBell,\r\n LucideBuilding2,\r\n LucideChevronDown,\r\n LucideGrid,\r\n LucideMenu,\r\n LucideMonitor,\r\n LucideMoon,\r\n LucideSearch,\r\n LucideSun,\r\n LucideX,\r\n} from '@lucide/angular';\r\n\r\n@Component({\r\n selector: 'lib-icon',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n LucideBell,\r\n LucideBuilding2,\r\n LucideChevronDown,\r\n LucideGrid,\r\n LucideMenu,\r\n LucideMonitor,\r\n LucideMoon,\r\n LucideSearch,\r\n LucideSun,\r\n LucideX,\r\n ],\r\n template: `\r\n @switch (name()) {\r\n @case ('menu') {\r\n <svg lucideMenu [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('x') {\r\n <svg lucideX [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('sun') {\r\n <svg lucideSun [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('moon') {\r\n <svg lucideMoon [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('monitor') {\r\n <svg lucideMonitor [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('bell') {\r\n <svg lucideBell [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('grid') {\r\n <svg lucideGrid [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('chevronDown') {\r\n <svg lucideChevronDown [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('building2') {\r\n <svg lucideBuilding2 [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @default {\r\n <svg lucideSearch [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n }\r\n `,\r\n styles: [`\r\n :host {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: inherit;\r\n }\r\n .lib-icon {\r\n display: block;\r\n color: inherit;\r\n }\r\n `]\r\n})\r\nexport class IconComponent {\r\n readonly name = input.required<string>();\r\n readonly size = input<number>(24);\r\n readonly color = input<string | undefined>(undefined);\r\n readonly strokeWidth = input<number | undefined>(undefined);\r\n}\r\n","import { Component, inject, input, output, signal, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router, RouterLink, RouterLinkActive } from '@angular/router';\nimport { User, NavigationItem, Notification, Application } from '../../models/models.interface';\nimport { ThemeService } from '../../services/theme.service';\r\nimport { AppSwitcherComponent } from '../../navigation';\r\nimport { NotificationBellComponent } from '../../notifications';\r\nimport { UserMenuComponent } from '../../user';\r\n\r\nimport { IconComponent } from '../../shared/icon/icon.component';\r\n\r\n\r\n@Component({\r\n selector: 'lib-header',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n RouterLink,\r\n RouterLinkActive,\r\n AppSwitcherComponent,\r\n NotificationBellComponent,\r\n UserMenuComponent,\r\n IconComponent,\r\n ],\r\n templateUrl: './header.html',\r\n styleUrl: './header.css',\r\n})\r\nexport class HeaderComponent {\r\n private readonly router = inject(Router);\r\n protected readonly themeService = inject(ThemeService);\r\n\r\n // User Inputs\n readonly user = input.required<User>();\n readonly permissions = input<string[]>([]);\n\r\n // Navigation & Integration Inputs\r\n readonly navigationItems = input<NavigationItem[]>([]);\r\n readonly applications = input<Application[]>([]);\r\n readonly notifications = input<Notification[]>([]);\r\n readonly notificationCount = input<number>(0);\r\n readonly logoUrl = input<string>('https://cdn.jsdelivr.net/gh/Excellore/excellore-static-assets@main/images/excellore-logo-origin.png');\r\n readonly appName = input<string>('Excellore');\r\n readonly currentAppName = input<string>('');\r\n readonly showSearch = input<boolean>(true);\r\n readonly showNotifications = input<boolean>(true);\n readonly showAppSwitcher = input<boolean>(true);\n readonly showThemeSwitcher = input<boolean>(true);\n\n // Outputs as decided in the architecture plan\n readonly search = output<string>();\n readonly applicationSelected = output<Application>();\n readonly notificationClick = output<Notification>();\r\n readonly markRead = output<string>();\r\n readonly clearAll = output<void>();\r\n readonly menuAction = output<'profile' | 'settings' | 'billing' | 'logout'>();\r\n\r\n // Lucide Icons\r\n // readonly searchIcon = Search;\r\n // readonly menuIcon = Menu;\r\n // readonly xIcon = X;\r\n // readonly sunIcon = Sun;\r\n // readonly moonIcon = Moon;\r\n // readonly monitorIcon = Monitor;\r\n\r\n // Header specific UI states\r\n readonly isMobileMenuOpen = signal(false);\r\n\r\n // Checks if the user has permission to see an item\r\n hasPermission(item: NavigationItem): boolean {\r\n if (!item.permissions || item.permissions.length === 0) {\r\n return true;\r\n }\r\n const currentPermissions = this.permissions();\r\n return item.permissions.some((p) => currentPermissions.includes(p));\r\n }\r\n\r\n // Reactive unread count selector\r\n readonly unreadCount = computed(() => {\r\n const overrideCount = this.notificationCount();\r\n if (overrideCount > 0) return overrideCount;\r\n return this.notifications().filter((n) => !n.read).length;\r\n });\r\n\r\n readonly hasMobileMenuContent = computed(() =>\r\n this.showSearch() || this.navigationItems().some((item) => this.hasPermission(item))\r\n );\r\n\r\n // Determines if an item's internal route is active\r\n isActive(item: NavigationItem): boolean {\r\n if (!item.route) return false;\r\n try {\r\n return this.router.isActive(item.route, {\r\n paths: 'subset',\r\n queryParams: 'ignored',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n });\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n toggleMobileMenu(): void {\r\n this.isMobileMenuOpen.update((v) => !v);\r\n }\r\n\r\n closeMobileMenu(): void {\r\n this.isMobileMenuOpen.set(false);\r\n }\r\n\r\n onSearch(query: string): void {\r\n this.search.emit(query);\r\n }\r\n\r\n onApplicationSelect(app: Application): void {\r\n this.applicationSelected.emit(app);\r\n }\r\n\r\n onNotificationClick(notification: Notification): void {\r\n this.notificationClick.emit(notification);\r\n }\r\n\r\n onMarkRead(id: string): void {\r\n this.markRead.emit(id);\r\n }\r\n\r\n onClearAll(): void {\r\n this.clearAll.emit();\r\n }\r\n\r\n onMenuAction(action: 'profile' | 'settings' | 'billing' | 'logout'): void {\r\n this.menuAction.emit(action);\r\n }\r\n}\r\n","<header class=\"header-container\">\r\n\r\n <!-- Left Side: Brand, Current App & Desktop Links -->\r\n <div class=\"header-left\">\r\n\r\n <a routerLink=\"/\" class=\"brand-identity\">\r\n <img [src]=\"logoUrl()\" [alt]=\"appName() + ' logo'\" width=\"26\" height=\"26\" class=\"brand-logo\" />\r\n <span class=\"brand-name\">{{ appName() }}</span>\r\n </a>\r\n\r\n @if (currentAppName()) {\r\n <div class=\"current-app-identity\" [attr.aria-label]=\"'Current app: ' + currentAppName()\">\r\n <span class=\"brand-separator\" aria-hidden=\"true\">|</span>\r\n <span class=\"current-app-name\">{{ currentAppName() }}</span>\r\n </div>\r\n }\r\n\r\n <!-- Desktop Navigation Links -->\r\n <nav class=\"desktop-nav ml-1 hidden items-center lg:flex\" aria-label=\"Desktop primary navigation\">\r\n @for (item of navigationItems(); track item.id) {\r\n @if (hasPermission(item)) {\r\n @if (item.route) {\r\n <a [routerLink]=\"item.route\" routerLinkActive=\"active\" [routerLinkActiveOptions]=\"{exact: true}\" class=\"nav-link\"\r\n [attr.aria-current]=\"isActive(item) ? 'page' : null\">\r\n {{ item.label }}\r\n </a>\r\n } @else {\r\n <a [href]=\"item.href\" [target]=\"item.target || '_self'\" class=\"nav-link\">\r\n {{ item.label }}\r\n </a>\r\n }\r\n }\r\n }\r\n </nav>\r\n </div>\r\n\r\n <!-- Middle: Search Input (Desktop) -->\r\n @if (showSearch()) {\r\n <div class=\"header-middle\">\r\n <div class=\"header-search-shell\">\r\n <lib-icon name=\"search\" [size]=\"14\"\r\n class=\"pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-[var(--secondary)]\" />\r\n\r\n <input type=\"search\" placeholder=\"Search Excellore...\" #searchInput\r\n (keyup.enter)=\"onSearch(searchInput.value); searchInput.value = ''\" class=\"header-search\" autocomplete=\"off\"\r\n aria-label=\"Search\" />\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"header-spacer\"></div>\r\n }\r\n\r\n <!-- Right Side Actions -->\r\n <div class=\"header-actions\">\r\n\r\n <!-- Mobile Search Trigger -->\r\n @if (showSearch()) {\r\n <button type=\"button\" class=\"header-action mobile-search-action\" (click)=\"toggleMobileMenu()\"\r\n aria-label=\"Open mobile menu\" aria-expanded=\"isMobileMenuOpen()\" #menuToggle>\r\n <lib-icon name=\"search\" [size]=\"16\" class=\"h-4.5 w-4.5\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n\r\n <!-- Theme Switcher -->\r\n @if (showThemeSwitcher()) {\r\n <button type=\"button\" class=\"header-action\" (click)=\"themeService.toggleTheme()\" aria-label=\"Toggle theme\">\r\n @switch (themeService.theme()) {\r\n @case ('light') {\r\n <lib-icon name=\"sun\" [size]=\"16\" class=\"text-[var(--primary)]\" />\r\n }\r\n @case ('dark') {\r\n <lib-icon name=\"moon\" [size]=\"16\" class=\"text-[var(--primary)]\" />\r\n }\r\n @default {\r\n <lib-icon name=\"monitor\" [size]=\"16\" class=\"text-[var(--secondary)]\" />\r\n }\r\n }\r\n </button>\r\n }\r\n\r\n <!-- App Switcher -->\r\n @if (showAppSwitcher() && applications().length > 0) {\r\n <lib-app-switcher [applications]=\"applications()\" (applicationSelected)=\"onApplicationSelect($event)\" />\r\n }\r\n\r\n <!-- Notifications -->\r\n @if (showNotifications()) {\r\n <lib-notification-bell [unreadCount]=\"unreadCount()\" [notifications]=\"notifications()\"\r\n (notificationClick)=\"onNotificationClick($event)\" (markRead)=\"onMarkRead($event)\" (clearAll)=\"onClearAll()\" />\r\n }\r\n\r\n <!-- User Menu -->\n <div class=\"user-menu-divider\">\n <lib-user-menu [user]=\"user()\" (menuAction)=\"onMenuAction($event)\" />\n </div>\n\n <!-- Mobile Menu Toggle (Hamburger) -->\n @if (hasMobileMenuContent()) {\r\n <button type=\"button\" class=\"header-action mobile-menu-action\" (click)=\"toggleMobileMenu()\"\r\n aria-label=\"Toggle navigation menu\" aria-expanded=\"isMobileMenuOpen()\" #mobileMenuToggle>\r\n <lib-icon [name]=\"isMobileMenuOpen() ? 'x' : 'menu'\" [size]=\"16\" class=\"h-4.5 w-4.5\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n </div>\r\n</header>\r\n\r\n<!-- Mobile Menu Backdrop -->\r\n@if (isMobileMenuOpen() && hasMobileMenuContent()) {\r\n<div class=\"mobile-backdrop fixed inset-0 z-30 lg:hidden\" (click)=\"closeMobileMenu()\"\r\n (keydown.escape)=\"closeMobileMenu()\" tabindex=\"-1\" aria-hidden=\"true\"></div>\r\n\r\n<!-- Mobile Navigation Drawer -->\r\n<div\r\n class=\"mobile-drawer fixed inset-x-2 top-16 z-40 flex max-h-[calc(100dvh-4.5rem)] flex-col rounded-2xl border border-[var(--border)] bg-[var(--background)] p-3 lg:hidden\"\r\n role=\"dialog\" aria-modal=\"true\" aria-label=\"Mobile navigation\" (keydown.escape)=\"closeMobileMenu()\">\r\n <!-- Mobile Search -->\r\n @if (showSearch()) {\r\n <div class=\"relative mb-3 w-full\">\r\n <lib-icon name=\"search\" [size]=\"16\"\r\n class=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-[var(--secondary)] pointer-events-none\"\r\n aria-hidden=\"true\" />\r\n\r\n <input type=\"search\" placeholder=\"Search Excellore...\" #mobileSearchInput\r\n (keyup.enter)=\"onSearch(mobileSearchInput.value); mobileSearchInput.value = ''; closeMobileMenu()\"\r\n class=\"header-search mobile\" autocomplete=\"off\" aria-label=\"Search\" />\r\n </div>\r\n }\r\n\r\n <!-- Mobile Nav Links -->\r\n <nav class=\"flex flex-col gap-1 overflow-y-auto\" role=\"navigation\">\r\n @for (item of navigationItems(); track item.id) {\r\n @if (hasPermission(item)) {\r\n @if (item.route) {\r\n <a [routerLink]=\"item.route\" routerLinkActive=\"mobile-active\" [routerLinkActiveOptions]=\"{exact: true}\"\r\n (click)=\"closeMobileMenu()\" class=\"mobile-nav-link\" [attr.aria-current]=\"isActive(item) ? 'page' : null\">\r\n {{ item.label }}\r\n </a>\r\n } @else {\r\n <a [href]=\"item.href\" [target]=\"item.target || '_self'\" (click)=\"closeMobileMenu()\" class=\"mobile-nav-link\">\r\n {{ item.label }}\r\n </a>\r\n }\r\n }\r\n }\r\n </nav>\r\n</div>\r\n}\r\n","import { Component, input, output, signal } from '@angular/core';\nimport { SidebarMenuItem } from '../../models/models.interface';\nimport { SidebarMenuComponent } from '../../navigation/sidebar-menu/sidebar-menu';\n\n@Component({\n selector: 'lib-sidebar',\n standalone: true,\n imports: [SidebarMenuComponent],\n templateUrl: './sidebar.html',\n styleUrl: './sidebar.css',\n})\nexport class SidebarComponent {\n readonly menuItems = input<SidebarMenuItem[]>([]);\n readonly menuError = input<string | null>(null);\n readonly showMobileToggle = input<boolean>(true);\n\n readonly menuItemSelected = output<SidebarMenuItem>();\n\n readonly isOpen = signal(false);\n\r\n toggleSidebar(): void {\r\n this.isOpen.update((value) => !value);\r\n }\r\n\r\n closeSidebar(): void {\r\n this.isOpen.set(false);\r\n }\r\n\r\n onMenuItemSelected(item: SidebarMenuItem): void {\r\n this.menuItemSelected.emit(item);\n this.closeSidebar();\n }\n}\n","@if (showMobileToggle()) {\r\n<button\r\n class=\"sidebar-toggle\"\r\n type=\"button\"\r\n title=\"Toggle sidebar menu\"\r\n aria-label=\"Toggle sidebar menu\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n (click)=\"toggleSidebar()\"\r\n>\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n</button>\r\n}\r\n\r\n@if (isOpen()) {\r\n<div class=\"sidebar-overlay\" (click)=\"closeSidebar()\" (keydown.escape)=\"closeSidebar()\" tabindex=\"-1\" aria-hidden=\"true\"></div>\r\n}\r\n\r\n<aside class=\"sidebar\" [class.open]=\"isOpen()\" aria-label=\"Application sidebar\">\n <div class=\"sidebar__middle\">\n <lib-sidebar-menu\n [items]=\"menuItems()\"\n [errorMessage]=\"menuError()\"\n (menuItemSelected)=\"onMenuItemSelected($event)\"\n />\n </div>\n</aside>\n","/*\r\n * Public API Surface of ui\r\n */\r\n\r\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/layout';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"excellore-ui.mjs","sources":["../../../projects/ui/src/lib/services/theme.service.ts","../../../projects/ui/src/lib/navigation/app-switcher/app-switcher.ts","../../../projects/ui/src/lib/navigation/app-switcher/app-switcher.html","../../../projects/ui/src/lib/shared/icon/icon.component.ts","../../../projects/ui/src/lib/navigation/sidebar-menu/sidebar-menu.ts","../../../projects/ui/src/lib/navigation/sidebar-menu/sidebar-menu.html","../../../projects/ui/src/lib/notifications/notification-panel/notification-panel.ts","../../../projects/ui/src/lib/notifications/notification-panel/notification-panel.html","../../../projects/ui/src/lib/notifications/notification-bell/notification-bell.ts","../../../projects/ui/src/lib/notifications/notification-bell/notification-bell.html","../../../projects/ui/src/lib/user/user-avatar/user-avatar.ts","../../../projects/ui/src/lib/user/user-avatar/user-avatar.html","../../../projects/ui/src/lib/user/user-menu/user-menu.ts","../../../projects/ui/src/lib/user/user-menu/user-menu.html","../../../projects/ui/src/lib/layout/header/header.ts","../../../projects/ui/src/lib/layout/header/header.html","../../../projects/ui/src/lib/layout/sidebar/sidebar.ts","../../../projects/ui/src/lib/layout/sidebar/sidebar.html","../../../projects/ui/src/public-api.ts","../../../projects/ui/src/excellore-ui.ts"],"sourcesContent":["import { Injectable, OnDestroy, effect, inject, PLATFORM_ID, signal } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { Theme } from '../models/models.interface';\r\n\r\nconst THEME_STORAGE_KEY = 'excellore-theme';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService implements OnDestroy {\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly isBrowser = isPlatformBrowser(this.platformId);\r\n\r\n // The active theme preference ('light', 'dark', 'system')\r\n readonly theme = signal<Theme>('system');\r\n\r\n // The currently resolved actual theme applied ('light' | 'dark')\r\n readonly resolvedTheme = signal<'light' | 'dark'>('light');\r\n\r\n private mediaQueryListener?: (e: MediaQueryListEvent) => void;\r\n private mediaQuery?: MediaQueryList;\r\n\r\n constructor() {\r\n this.initializeTheme();\r\n\r\n // Effect to reactively update storage, apply document classes, and set up listeners\r\n effect(() => {\r\n const activeTheme = this.theme();\r\n this.saveThemeToStorage(activeTheme);\r\n this.applyTheme(activeTheme);\r\n });\r\n }\r\n\r\n setTheme(theme: Theme): void {\r\n this.theme.set(theme);\r\n }\r\n\r\n getTheme(): Theme {\r\n return this.theme();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeMediaQueryListener();\r\n }\r\n\r\n toggleTheme(): void {\r\n const current = this.theme();\r\n if (current === 'light') {\r\n this.setTheme('dark');\r\n } else if (current === 'dark') {\r\n this.setTheme('system');\r\n } else {\r\n this.setTheme('light');\r\n }\r\n }\r\n\r\n private initializeTheme(): void {\r\n if (!this.isBrowser) {\r\n return;\r\n }\r\n\r\n try {\r\n const savedTheme = localStorage.getItem(THEME_STORAGE_KEY) as Theme;\r\n if (savedTheme === 'light' || savedTheme === 'dark' || savedTheme === 'system') {\r\n this.theme.set(savedTheme);\r\n } else {\r\n this.theme.set('system');\r\n }\r\n } catch {\r\n this.theme.set('system');\r\n }\r\n }\r\n\r\n private saveThemeToStorage(theme: Theme): void {\r\n if (!this.isBrowser) {\r\n return;\r\n }\r\n\r\n try {\r\n localStorage.setItem(THEME_STORAGE_KEY, theme);\r\n } catch (e) {\r\n console.warn('Failed to save theme to localStorage:', e);\r\n }\r\n }\r\n\r\n private applyTheme(theme: Theme): void {\r\n if (!this.isBrowser) {\r\n return;\r\n }\r\n\r\n const doc = document.documentElement;\r\n this.removeMediaQueryListener();\r\n const mediaQuery = typeof window.matchMedia === 'function' ? window.matchMedia('(prefers-color-scheme: dark)') : null;\r\n this.mediaQuery = mediaQuery ?? undefined;\r\n\r\n let actualTheme: 'light' | 'dark' = 'light';\r\n\r\n if (theme === 'system') {\r\n actualTheme = mediaQuery?.matches ? 'dark' : 'light';\r\n\r\n if (mediaQuery) {\r\n // Watch for system preference changes in real-time\r\n this.mediaQueryListener = (e: MediaQueryListEvent) => {\r\n const newResolvedTheme = e.matches ? 'dark' : 'light';\r\n this.resolvedTheme.set(newResolvedTheme);\r\n this.updateDocumentClass(newResolvedTheme);\r\n };\r\n mediaQuery.addEventListener('change', this.mediaQueryListener);\r\n }\r\n } else {\r\n actualTheme = theme;\r\n }\r\n\r\n this.resolvedTheme.set(actualTheme);\r\n this.updateDocumentClass(actualTheme);\r\n }\r\n\r\n private updateDocumentClass(resolved: 'light' | 'dark'): void {\r\n const doc = document.documentElement;\r\n if (resolved === 'dark') {\r\n doc.classList.add('dark');\r\n doc.classList.remove('light');\r\n } else {\r\n doc.classList.add('light');\r\n doc.classList.remove('dark');\r\n }\r\n }\r\n\r\n private removeMediaQueryListener(): void {\r\n if (this.mediaQuery && this.mediaQueryListener) {\r\n this.mediaQuery.removeEventListener('change', this.mediaQueryListener);\r\n }\r\n this.mediaQuery = undefined;\r\n this.mediaQueryListener = undefined;\r\n }\r\n}\r\n","import { Component, input, output, HostListener, signal } from '@angular/core';\r\nimport { Application } from '../../models/models.interface';\r\nimport { LucideGrid } from '@lucide/angular';\r\n\r\n@Component({\r\n selector: 'lib-app-switcher',\r\n standalone: true,\r\n imports: [LucideGrid],\r\n templateUrl: './app-switcher.html',\r\n styleUrl: './app-switcher.css',\r\n})\r\nexport class AppSwitcherComponent {\r\n readonly applications = input<Application[]>([]);\r\n readonly applicationSelected = output<Application>();\r\n\r\n readonly isOpen = signal(false);\r\n\r\n toggleSwitcher(): void {\r\n this.isOpen.update((v) => !v);\r\n }\r\n\r\n closeSwitcher(): void {\r\n this.isOpen.set(false);\r\n }\r\n\r\n onSelect(app: Application): void {\r\n if (app.available !== false) {\r\n this.applicationSelected.emit(app);\r\n this.closeSwitcher();\r\n }\r\n }\r\n\r\n getInitials(name: string): string {\r\n return name\r\n .split(/[.\\s_-]+/)\r\n .filter(Boolean)\r\n .slice(0, 2)\r\n .map((part) => part[0]?.toUpperCase())\r\n .join('') || 'AP';\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onOutsideClick(event: MouseEvent): void {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.app-switcher-wrapper')) {\r\n this.closeSwitcher();\r\n }\r\n }\r\n}\r\n","<div class=\"app-switcher-wrapper\">\r\n <button\r\n type=\"button\"\r\n class=\"app-switcher-trigger\"\r\n (click)=\"toggleSwitcher()\"\r\n aria-haspopup=\"true\"\r\n [aria-expanded]=\"isOpen()\"\r\n aria-label=\"Toggle application switcher\"\r\n >\r\n <svg lucideGrid class=\"app-switcher-trigger-icon\"></svg>\r\n </button>\r\n\r\n @if (isOpen()) {\r\n <div class=\"app-switcher-dropdown\">\r\n <div class=\"app-switcher-header\">\r\n <div>\r\n <h3>Excellore Apps</h3>\r\n <p>Switch between available workspaces</p>\r\n </div>\r\n </div>\r\n \r\n @if (applications().length === 0) {\r\n <div class=\"app-switcher-empty\">\r\n No other apps available\r\n </div>\r\n } @else {\r\n <div class=\"app-switcher-list\">\r\n @for (app of applications(); track app.id) {\r\n @if (app.available !== false) {\r\n <a\r\n [href]=\"app.url\"\r\n (click)=\"onSelect(app)\"\r\n class=\"app-switcher-item app-switcher-link\"\r\n >\r\n <div class=\"app-switcher-app-mark\">\r\n {{ app.initials || getInitials(app.name) }}\r\n </div>\r\n <div class=\"app-switcher-app-content\">\r\n <div class=\"app-switcher-app-name\" [title]=\"app.name\">{{ app.name }}</div>\r\n <div class=\"app-switcher-app-url\">{{ app.url }}</div>\r\n </div>\r\n <span class=\"app-switcher-open-pill\">\r\n Open\r\n </span>\r\n </a>\r\n } @else {\r\n <div class=\"app-switcher-item unavailable\">\r\n <div class=\"app-switcher-app-mark unavailable\">\r\n {{ app.initials || getInitials(app.name) }}\r\n </div>\r\n <div class=\"app-switcher-app-content\">\r\n <div class=\"app-switcher-app-name\">{{ app.name }}</div>\r\n <div class=\"app-switcher-app-url\">{{ app.url }}</div>\r\n </div>\r\n <span class=\"app-switcher-soon-pill\">\r\n Soon\r\n </span>\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","// lib/shared/icon/icon.component.ts\r\nimport { Component, input } from '@angular/core';\r\nimport {\r\n LucideBarChart3,\r\n LucideBell,\r\n LucideCheckSquare,\r\n LucideCalendar,\r\n LucideClipboardList,\r\n LucideBuilding2,\r\n LucideChevronDown,\r\n LucideChevronLeft,\r\n LucideChevronRight,\r\n LucideCreditCard,\r\n LucideFolderKanban,\r\n LucideGrid,\r\n LucideHardDrive,\r\n LucideLayoutGrid,\r\n LucideLogOut,\r\n LucideLifeBuoy,\r\n LucideMail,\r\n LucideMenu,\r\n LucideMoreHorizontal,\r\n LucideMonitor,\r\n LucideMoon,\r\n LucideMessageSquare,\r\n LucidePieChart,\r\n LucidePlus,\r\n LucideSearch,\r\n LucideSettings,\r\n LucideSun,\r\n LucideUser,\r\n LucideUsers,\r\n LucideWorkflow,\r\n LucideFileText,\r\n LucideX,\r\n} from '@lucide/angular';\r\n\r\n@Component({\r\n selector: 'lib-icon',\r\n standalone: true,\r\n imports: [\r\n LucideBell,\r\n LucideBarChart3,\r\n LucideCheckSquare,\r\n LucideCalendar,\r\n LucideClipboardList,\r\n LucideBuilding2,\r\n LucideChevronDown,\r\n LucideChevronLeft,\r\n LucideChevronRight,\r\n LucideCreditCard,\r\n LucideFolderKanban,\r\n LucideGrid,\r\n LucideHardDrive,\r\n LucideLayoutGrid,\r\n LucideLogOut,\r\n LucideLifeBuoy,\r\n LucideMail,\r\n LucideMenu,\r\n LucideMonitor,\r\n LucideMoon,\r\n LucideMessageSquare,\r\n LucidePieChart,\r\n LucideMoreHorizontal,\r\n LucidePlus,\r\n LucideSearch,\r\n LucideSettings,\r\n LucideSun,\r\n LucideUser,\r\n LucideUsers,\r\n LucideWorkflow,\r\n LucideFileText,\r\n LucideX,\r\n ],\r\n template: `\r\n @switch (name()) {\r\n @case ('menu') {\r\n <svg lucideMenu [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('x') {\r\n <svg lucideX [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('sun') {\r\n <svg lucideSun [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('moon') {\r\n <svg lucideMoon [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('monitor') {\r\n <svg lucideMonitor [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('bell') {\r\n <svg lucideBell [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('grid') {\r\n <svg lucideGrid [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('chevronDown') {\r\n <svg lucideChevronDown [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('building2') {\r\n <svg lucideBuilding2 [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n @case ('dashboard') { <svg lucideLayoutGrid [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('analytics') { <svg lucideBarChart3 [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('projects') { <svg lucideFolderKanban [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('tasks') { <svg lucideCheckSquare [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('team') { <svg lucideUsers [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('billing') { <svg lucideCreditCard [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('settings') { <svg lucideSettings [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('user') { <svg lucideUser [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('logout') { <svg lucideLogOut [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('plus') { <svg lucidePlus [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('more') { <svg lucideMoreHorizontal [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('chevronLeft') { <svg lucideChevronLeft [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('chevronRight') { <svg lucideChevronRight [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('mail') { <svg lucideMail [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('calendar') { <svg lucideCalendar [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('docs') { <svg lucideFileText [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('drive') { <svg lucideHardDrive [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('chat') { <svg lucideMessageSquare [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('automations') { <svg lucideWorkflow [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('forms') { <svg lucideClipboardList [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('reports') { <svg lucidePieChart [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @case ('support') { <svg lucideLifeBuoy [size]=\"size()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg> }\r\n @default {\r\n <svg lucideSearch [size]=\"size()\" [color]=\"color()\" [strokeWidth]=\"strokeWidth()\" class=\"lib-icon\"></svg>\r\n }\r\n }\r\n `,\r\n styles: [`\r\n :host {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: inherit;\r\n }\r\n .lib-icon {\r\n display: block;\r\n color: inherit;\r\n }\r\n `]\r\n})\r\nexport class IconComponent {\r\n readonly name = input.required<string>();\r\n readonly size = input<number>(24);\r\n readonly color = input<string | undefined>(undefined);\r\n readonly strokeWidth = input<number | undefined>(undefined);\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { Component, computed, inject, input, output, signal } from '@angular/core';\r\nimport { Router, RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { SidebarMenuItem } from '../../models/models.interface';\r\nimport { IconComponent } from '../../shared/icon/icon.component';\r\n\r\n@Component({\r\n selector: 'lib-sidebar-menu',\r\n standalone: true,\r\n imports: [NgTemplateOutlet, RouterLink, RouterLinkActive, IconComponent],\r\n templateUrl: './sidebar-menu.html',\r\n styleUrl: './sidebar-menu.css',\r\n})\r\nexport class SidebarMenuComponent {\r\n private readonly router = inject(Router);\r\n readonly items = input<SidebarMenuItem[]>([]);\r\n readonly errorMessage = input<string | null>(null);\r\n readonly defaultIcon = input('dashboard');\r\n readonly compact = input(false);\r\n\r\n readonly menuItemSelected = output<SidebarMenuItem>();\r\n readonly menuDismissed = output<void>();\r\n\r\n private readonly expandedIds = signal<Set<string>>(new Set<string>());\r\n\r\n readonly sortedItems = computed(() => this.sortItems(this.items()));\r\n\r\n toggle(item: SidebarMenuItem): void {\r\n if (item.disabled) {\r\n return;\r\n }\r\n\r\n this.expandedIds.update((ids) => {\r\n const next = new Set(ids);\r\n if (next.has(item.id)) {\r\n next.delete(item.id);\r\n } else {\r\n next.add(item.id);\r\n }\r\n return next;\r\n });\r\n }\r\n\r\n isExpanded(item: SidebarMenuItem): boolean {\r\n return this.expandedIds().has(item.id);\r\n }\r\n\r\n hasChildren(item: SidebarMenuItem): boolean {\r\n return !!item.children?.length;\r\n }\r\n\r\n isActiveBranch(item: SidebarMenuItem): boolean {\r\n return (item.children ?? []).some(child => (!!child.route && this.router.isActive(child.route, false)) || this.isActiveBranch(child));\r\n }\r\n\r\n hasRoute(item: SidebarMenuItem): boolean {\r\n return !!item.route;\r\n }\r\n\r\n hasHref(item: SidebarMenuItem): boolean {\r\n return !!item.href;\r\n }\r\n\r\n iconFor(item: SidebarMenuItem): string {\r\n return item.icon || this.defaultIcon();\r\n }\r\n\r\n onSelect(item: SidebarMenuItem): void {\r\n if (!item.disabled) {\r\n this.menuItemSelected.emit(item);\r\n this.expandedIds.set(new Set());\r\n this.menuDismissed.emit();\r\n }\r\n }\r\n\r\n closeFlyouts(): void {\r\n if (this.compact()) {\r\n this.expandedIds.set(new Set());\r\n }\r\n }\r\n\r\n sortedChildren(item: SidebarMenuItem): SidebarMenuItem[] {\r\n return this.sortItems(item.children ?? []);\r\n }\r\n\r\n private sortItems(items: SidebarMenuItem[]): SidebarMenuItem[] {\r\n return [...items]\r\n .sort((a, b) => (a.sortOrder ?? 0) - (b.sortOrder ?? 0) || a.label.localeCompare(b.label))\r\n .map((item) => ({\r\n ...item,\r\n children: item.children ? this.sortItems(item.children) : undefined,\r\n }));\r\n }\r\n}\r\n","<nav class=\"sidebar-menu\" [class.compact]=\"compact()\" aria-label=\"Sidebar menu\">\r\n @if (errorMessage()) { <div class=\"sidebar-menu__error\" role=\"alert\">{{ errorMessage() }}</div> }\r\n\r\n <ng-template #menuList let-menuItems let-level=\"level\">\r\n @for (item of menuItems; track item.id) {\r\n <div class=\"sidebar-menu__node\" [class.has-open-flyout]=\"compact() && isExpanded(item)\">\r\n @if (hasChildren(item)) {\r\n <button type=\"button\" class=\"sidebar-menu__item\" [class.disabled]=\"item.disabled\" [class.expanded]=\"isExpanded(item) || isActiveBranch(item)\" [class.active-ancestor]=\"isActiveBranch(item)\" [style.position]=\"compact() && level === 0 ? 'relative' : null\"\r\n [attr.aria-expanded]=\"isExpanded(item)\" [attr.aria-haspopup]=\"compact() ? 'menu' : null\"\r\n [attr.title]=\"compact() ? item.label : null\" (click)=\"toggle(item)\">\r\n <span class=\"sidebar-menu__item-main\" [style.position]=\"compact() && level === 0 ? 'absolute' : null\" [style.left]=\"compact() && level === 0 ? '50%' : null\" [style.transform]=\"compact() && level === 0 ? 'translateX(-50%)' : null\"><lib-icon [name]=\"iconFor(item)\" [size]=\"17\" [strokeWidth]=\"isExpanded(item) ? 2.4 : 2\" /><span class=\"sidebar-menu__label\">{{ item.label }}</span></span>\r\n <lib-icon class=\"sidebar-menu__chevron\" [class.expanded]=\"isExpanded(item)\" [name]=\"compact() ? 'chevronRight' : 'chevronDown'\" [size]=\"15\" />\r\n </button>\r\n @if (isExpanded(item)) {\r\n <div class=\"sidebar-menu__children\" [class.sidebar-menu__flyout]=\"compact()\" role=\"menu\" [attr.aria-label]=\"item.label\">\r\n @if (compact()) { <div class=\"sidebar-menu__flyout-title\">{{ item.label }}</div> }\r\n <ng-container [ngTemplateOutlet]=\"menuList\" [ngTemplateOutletContext]=\"{ $implicit: sortedChildren(item), level: level + 1 }\" />\r\n </div>\r\n }\r\n } @else {\r\n <ng-template #content><lib-icon [name]=\"iconFor(item)\" [size]=\"17\" [strokeWidth]=\"2\" /><span class=\"sidebar-menu__label\">{{ item.label }}</span>@if (item.badge !== undefined) { <span class=\"sidebar-menu__badge\">{{ item.badge }}</span> }</ng-template>\r\n @if (hasRoute(item)) {\r\n <a [routerLink]=\"item.route\" routerLinkActive=\"active\" [routerLinkActiveOptions]=\"{ exact: item.exact ?? true }\" class=\"sidebar-menu__item\" [class.disabled]=\"item.disabled\" [attr.title]=\"compact() ? item.label : null\" role=\"menuitem\" (click)=\"onSelect(item)\"><ng-container [ngTemplateOutlet]=\"content\" /></a>\r\n } @else if (hasHref(item)) {\r\n <a [href]=\"item.href\" [target]=\"item.target || '_self'\" class=\"sidebar-menu__item\" [class.disabled]=\"item.disabled\" [attr.title]=\"compact() ? item.label : null\" role=\"menuitem\" (click)=\"onSelect(item)\"><ng-container [ngTemplateOutlet]=\"content\" /></a>\r\n } @else {\r\n <button type=\"button\" class=\"sidebar-menu__item\" [class.disabled]=\"item.disabled\" [attr.title]=\"compact() ? item.label : null\" role=\"menuitem\" (click)=\"onSelect(item)\"><ng-container [ngTemplateOutlet]=\"content\" /></button>\r\n }\r\n }\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <section class=\"sidebar-menu__section\">\r\n <div class=\"sidebar-menu__list\">\r\n <ng-container [ngTemplateOutlet]=\"menuList\" [ngTemplateOutletContext]=\"{ $implicit: sortedItems(), level: 0 }\" />\r\n </div>\r\n </section>\r\n</nav>\r\n","import { Component, input, output } from '@angular/core';\r\nimport { Notification } from '../../models/models.interface';\r\nimport { LucideBellOff, LucideCheckCheck, LucideTrash2 } from '@lucide/angular';\r\n\r\n@Component({\r\n selector: 'lib-notification-panel',\r\n standalone: true,\r\n imports: [LucideBellOff, LucideCheckCheck, LucideTrash2],\r\n templateUrl: './notification-panel.html',\r\n styleUrl: './notification-panel.css',\r\n})\r\nexport class NotificationPanelComponent {\r\n readonly notifications = input<Notification[]>([]);\r\n readonly notificationClick = output<Notification>();\r\n readonly markRead = output<string>();\r\n readonly clearAll = output<void>();\r\n\r\n onNotificationClick(notification: Notification): void {\r\n this.notificationClick.emit(notification);\r\n }\r\n\r\n onMarkRead(id: string, event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.markRead.emit(id);\r\n }\r\n\r\n onClearAll(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.clearAll.emit();\r\n }\r\n\r\n formatTime(date: Date | string): string {\r\n const d = new Date(date);\r\n const now = new Date();\r\n const diffMs = now.getTime() - d.getTime();\r\n const diffMins = Math.floor(diffMs / 60000);\r\n const diffHours = Math.floor(diffMins / 60);\r\n const diffDays = Math.floor(diffHours / 24);\r\n\r\n if (diffMins < 1) return 'Just now';\r\n if (diffMins < 60) return `${diffMins}m ago`;\r\n if (diffHours < 24) return `${diffHours}h ago`;\r\n if (diffDays === 1) return 'Yesterday';\r\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\r\n }\r\n}\r\n","<div class=\"notification-panel-inner flex flex-col h-full max-h-[380px] w-full text-left\">\r\n <!-- Panel Header -->\r\n <div class=\"flex items-center justify-between border-b border-[var(--border)] px-3.5 py-2\">\r\n <span class=\"text-[10px] font-bold uppercase tracking-wider text-[var(--secondary)]\">Notifications</span>\r\n @if (notifications().length > 0) {\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center gap-1 text-[9px] font-bold text-[var(--secondary)] hover:text-[var(--danger,#ef4444)] hover:underline cursor-pointer\"\r\n (click)=\"onClearAll($event)\"\r\n >\r\n <svg lucideTrash2 class=\"h-3 w-3\"></svg>\r\n <span>Clear All</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- Panel Body -->\r\n <div class=\"flex-1 overflow-y-auto min-h-0 py-0.5 divide-y divide-[var(--border)]\">\r\n @if (notifications().length === 0) {\r\n <div class=\"flex flex-col items-center justify-center py-10 px-4 text-center select-none\">\r\n <div class=\"flex h-10 w-10 items-center justify-center rounded-full bg-[rgba(var(--secondary),0.06)] text-[var(--secondary)] mb-2.5\">\r\n <svg lucideBellOff class=\"h-4.5 w-4.5\"></svg>\r\n </div>\r\n <p class=\"text-xs font-semibold text-[var(--foreground)]\">All caught up</p>\r\n <p class=\"text-[10px] text-[var(--secondary)] mt-0.5\">No new notifications to display.</p>\r\n </div>\r\n } @else {\r\n @for (item of notifications(); track item.id) {\r\n <div\r\n (click)=\"onNotificationClick(item)\"\r\n class=\"notification-item flex gap-2.5 p-3 transition hover:bg-[rgba(var(--foreground),0.02)] cursor-pointer relative\"\r\n [class.bg-[rgba(var(--primary),0.015)]]=\"!item.read\"\r\n >\r\n <!-- Read status dot -->\r\n <div class=\"flex-shrink-0 pt-1\">\r\n @if (!item.read) {\r\n <span class=\"block h-1.5 w-1.5 rounded-full bg-[var(--primary)] animate-pulse\"></span>\r\n } @else {\r\n <span class=\"block h-1.5 w-1.5 rounded-full bg-transparent\"></span>\r\n }\r\n </div>\r\n\r\n <!-- Notification content -->\r\n <div class=\"flex-1 min-w-0\">\r\n <h4 class=\"text-xs font-semibold text-[var(--foreground)] truncate\" [class.font-bold]=\"!item.read\">\r\n {{ item.title }}\r\n </h4>\r\n <p class=\"text-[10.5px] text-[var(--secondary)] mt-0.5 leading-snug break-words\">\r\n {{ item.message }}\r\n </p>\r\n <span class=\"block text-[9px] text-[var(--secondary)] mt-1 font-medium\">\r\n {{ formatTime(item.createdAt) }}\r\n </span>\r\n </div>\r\n\r\n <!-- Actions -->\r\n @if (!item.read) {\r\n <div class=\"flex items-center flex-shrink-0\">\r\n <button\r\n type=\"button\"\r\n class=\"mark-read-btn grid h-6 w-6 place-items-center rounded-full text-[var(--secondary)] hover:text-[var(--primary)] hover:bg-[rgba(var(--foreground),0.05)] cursor-pointer\"\r\n [title]=\"'Mark as read'\"\r\n (click)=\"onMarkRead(item.id, $event)\"\r\n >\r\n <svg lucideCheckCheck class=\"h-3.5 w-3.5\"></svg>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import { Component, input, output, HostListener, signal } from '@angular/core';\r\nimport { Notification } from '../../models/models.interface';\r\nimport { NotificationPanelComponent } from '../notification-panel/notification-panel';\r\nimport { LucideBell } from '@lucide/angular';\r\n\r\n@Component({\r\n selector: 'lib-notification-bell',\r\n standalone: true,\r\n imports: [NotificationPanelComponent, LucideBell],\r\n templateUrl: './notification-bell.html',\r\n styleUrl: './notification-bell.css',\r\n})\r\nexport class NotificationBellComponent {\r\n readonly unreadCount = input<number>(0);\r\n readonly notifications = input<Notification[]>([]);\r\n\r\n readonly notificationClick = output<Notification>();\r\n readonly markRead = output<string>();\r\n readonly clearAll = output<void>();\r\n\r\n readonly isOpen = signal(false);\r\n\r\n togglePanel(): void {\r\n this.isOpen.update((v) => !v);\r\n }\r\n\r\n closePanel(): void {\r\n this.isOpen.set(false);\r\n }\r\n\r\n onNotificationClick(notification: Notification): void {\r\n this.notificationClick.emit(notification);\r\n this.closePanel();\r\n }\r\n\r\n onMarkRead(id: string): void {\r\n this.markRead.emit(id);\r\n }\r\n\r\n onClearAll(): void {\r\n this.clearAll.emit();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onOutsideClick(event: MouseEvent): void {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.notification-bell-wrapper')) {\r\n this.closePanel();\r\n }\r\n }\r\n}\r\n","<div class=\"notification-bell-wrapper relative inline-block text-left\">\r\n <button\r\n type=\"button\"\r\n class=\"notification-trigger\"\r\n (click)=\"togglePanel()\"\r\n aria-haspopup=\"true\"\r\n [aria-expanded]=\"isOpen()\"\r\n aria-label=\"View notifications\"\r\n >\r\n <svg lucideBell class=\"h-4.5 w-4.5\"></svg>\r\n \r\n @if (unreadCount() > 0) {\r\n <span class=\"absolute top-1.5 right-1.5 flex h-2 w-2\">\r\n <span class=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-[var(--danger,#ef4444)] opacity-75\"></span>\r\n <span class=\"relative inline-flex rounded-full h-2 w-2 bg-[var(--danger,#ef4444)]\"></span>\r\n </span>\r\n }\r\n </button>\r\n\r\n @if (isOpen()) {\r\n <div class=\"notification-dropdown fixed left-2 right-2 top-14 mt-2 origin-top rounded-xl border border-[var(--border)] bg-[var(--background)] p-0 shadow-lg focus:outline-none z-50 sm:absolute sm:left-auto sm:right-0 sm:top-auto sm:w-80 sm:origin-top-right\">\r\n <lib-notification-panel\r\n [notifications]=\"notifications()\"\r\n (notificationClick)=\"onNotificationClick($event)\"\r\n (markRead)=\"onMarkRead($event)\"\r\n (clearAll)=\"onClearAll()\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import { Component, input, computed } from '@angular/core';\r\nimport { User } from '../../models/models.interface';\r\n\r\n@Component({\r\n selector: 'lib-user-avatar',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './user-avatar.html',\r\n styleUrl: './user-avatar.css',\r\n})\r\nexport class UserAvatarComponent {\r\n // Input using the modern Angular signal inputs\r\n readonly user = input<User | null>(null);\r\n\r\n // Computes the initials from the user's name or email\r\n readonly initials = computed(() => {\r\n const userData = this.user();\r\n if (!userData) return 'EU';\r\n\r\n const source = userData.name || userData.email || 'Excellore User';\r\n return source\r\n .split(/[.@\\s_-]+/)\r\n .filter(Boolean)\r\n .slice(0, 2)\r\n .map(part => part[0]?.toUpperCase())\r\n .join('') || 'EU';\r\n });\r\n\r\n // Check if image loading failed to dynamically switch to initials\r\n protected imageError = false;\r\n\r\n onImageError(): void {\r\n this.imageError = true;\r\n }\r\n}\r\n","<div class=\"avatar-container\">\r\n @if (user()?.avatar && !imageError) {\r\n <img [src]=\"user()?.avatar\" [alt]=\"user()?.name || 'User avatar'\" class=\"avatar-img\" (error)=\"onImageError()\" />\r\n } @else {\r\n <span class=\"avatar-initials\">{{ initials() }}</span>\r\n }\r\n</div>\r\n","import { Component, input, output, HostListener, signal } from '@angular/core';\r\nimport { User } from '../../models/models.interface';\r\nimport { UserAvatarComponent } from '../user-avatar/user-avatar';\r\nimport {\r\n LucideChevronDown,\r\n LucideCreditCard,\r\n LucideLogOut,\r\n LucideSettings,\r\n LucideUser,\r\n} from '@lucide/angular';\r\n\r\n@Component({\r\n selector: 'lib-user-menu',\r\n standalone: true,\r\n imports: [UserAvatarComponent, LucideChevronDown, LucideCreditCard, LucideLogOut, LucideSettings, LucideUser],\r\n templateUrl: './user-menu.html',\r\n styleUrl: './user-menu.css',\r\n})\r\nexport class UserMenuComponent {\r\n readonly user = input<User | null>(null);\r\n readonly menuAction = output<'profile' | 'settings' | 'billing' | 'logout'>();\r\n\r\n // Signalled open state\r\n readonly isOpen = signal(false);\r\n\r\n toggleMenu(): void {\r\n this.isOpen.update((v) => !v);\r\n }\r\n\r\n closeMenu(): void {\r\n this.isOpen.set(false);\r\n }\r\n\r\n onAction(action: 'profile' | 'settings' | 'billing' | 'logout'): void {\r\n this.menuAction.emit(action);\r\n this.closeMenu();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onOutsideClick(event: MouseEvent): void {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.user-menu-wrapper')) {\r\n this.closeMenu();\r\n }\r\n }\r\n}\r\n","<div class=\"user-menu-wrapper\">\r\n <button type=\"button\" class=\"user-menu-trigger\" (click)=\"toggleMenu()\" aria-haspopup=\"true\" [aria-expanded]=\"isOpen()\"\r\n aria-label=\"User profile menu\">\r\n <div class=\"user-menu-avatar\">\r\n <lib-user-avatar [user]=\"user()\" />\r\n </div>\r\n <svg lucideChevronDown class=\"user-menu-chevron\" [class.rotate-180]=\"isOpen()\"></svg>\r\n </button>\r\n\r\n @if (isOpen()) {\r\n <div class=\"user-dropdown-panel\">\r\n @if (user(); as u) {\r\n <div class=\"user-dropdown-profile\">\r\n <p class=\"user-dropdown-name\" [title]=\"u.name\">{{ u.name }}</p>\r\n <p class=\"user-dropdown-email\" [title]=\"u.email\">{{ u.email }}</p>\r\n </div>\r\n }\r\n\r\n <div class=\"user-menu-list\">\r\n <button type=\"button\" class=\"user-menu-item\" (click)=\"onAction('profile')\">\r\n <svg lucideUser class=\"user-menu-icon\"></svg>\r\n <span>My Profile</span>\r\n </button>\r\n\r\n <!-- <button type=\"button\" class=\"user-menu-item\" (click)=\"onAction('settings')\">\r\n <svg lucideSettings class=\"user-menu-icon\"></svg>\r\n <span>Settings</span>\r\n </button>\r\n\r\n <button type=\"button\" class=\"user-menu-item\" (click)=\"onAction('billing')\">\r\n <svg lucideCreditCard class=\"user-menu-icon\"></svg>\r\n <span>Billing</span>\r\n </button> -->\r\n </div>\r\n\r\n <div class=\"user-menu-danger-zone\">\r\n <button type=\"button\" class=\"user-menu-item danger\" (click)=\"onAction('logout')\">\r\n <svg lucideLogOut class=\"user-menu-icon\"></svg>\r\n <span>Sign Out</span>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n</div>","import { Component, inject, input, output, signal, computed } from '@angular/core';\r\nimport { Router, RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { User, NavigationItem, Notification, Application } from '../../models/models.interface';\r\nimport { ThemeService } from '../../services/theme.service';\r\nimport { AppSwitcherComponent } from '../../navigation';\r\nimport { NotificationBellComponent } from '../../notifications';\r\nimport { UserMenuComponent } from '../../user';\r\n\r\nimport { IconComponent } from '../../shared/icon/icon.component';\r\n\r\n\r\n@Component({\r\n selector: 'lib-header',\r\n standalone: true,\r\n imports: [\r\n RouterLink,\r\n RouterLinkActive,\r\n AppSwitcherComponent,\r\n NotificationBellComponent,\r\n UserMenuComponent,\r\n IconComponent,\r\n ],\r\n templateUrl: './header.html',\r\n styleUrl: './header.css',\r\n})\r\nexport class HeaderComponent {\r\n private readonly router = inject(Router);\r\n protected readonly themeService = inject(ThemeService);\r\n\r\n readonly user = input.required<User>();\r\n readonly permissions = input<string[]>([]);\r\n\r\n readonly navigationItems = input<NavigationItem[]>([]);\r\n readonly applications = input<Application[]>([]);\r\n readonly notifications = input<Notification[]>([]);\r\n readonly notificationCount = input<number>(0);\r\n readonly logoUrl = input<string>('https://cdn.jsdelivr.net/gh/Excellore/excellore-static-assets@main/images/excellore-logo-origin.png');\r\n readonly appName = input<string>('Excellore');\r\n readonly currentAppName = input<string>('');\r\n readonly showSearch = input<boolean>(true);\r\n readonly showNotifications = input<boolean>(true);\r\n readonly showAppSwitcher = input<boolean>(true);\r\n readonly showThemeSwitcher = input<boolean>(true);\r\n\r\n readonly search = output<string>();\r\n readonly applicationSelected = output<Application>();\r\n readonly notificationClick = output<Notification>();\r\n readonly markRead = output<string>();\r\n readonly clearAll = output<void>();\r\n readonly menuAction = output<'profile' | 'settings' | 'billing' | 'logout'>();\r\n\r\n readonly isMobileMenuOpen = signal(false);\r\n\r\n hasPermission(item: NavigationItem): boolean {\r\n if (!item.permissions || item.permissions.length === 0) {\r\n return true;\r\n }\r\n const currentPermissions = this.permissions();\r\n return item.permissions.some((p) => currentPermissions.includes(p));\r\n }\r\n\r\n readonly unreadCount = computed(() => {\r\n const overrideCount = this.notificationCount();\r\n if (overrideCount > 0) return overrideCount;\r\n return this.notifications().filter((n) => !n.read).length;\r\n });\r\n\r\n readonly hasMobileMenuContent = computed(() =>\r\n this.showSearch() || this.navigationItems().some((item) => this.hasPermission(item))\r\n );\r\n\r\n isActive(item: NavigationItem): boolean {\r\n if (!item.route) return false;\r\n try {\r\n return this.router.isActive(item.route, {\r\n paths: 'subset',\r\n queryParams: 'ignored',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n });\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n toggleMobileMenu(): void {\r\n this.isMobileMenuOpen.update((v) => !v);\r\n }\r\n\r\n closeMobileMenu(): void {\r\n this.isMobileMenuOpen.set(false);\r\n }\r\n\r\n onSearch(query: string): void {\r\n this.search.emit(query);\r\n }\r\n\r\n onApplicationSelect(app: Application): void {\r\n this.applicationSelected.emit(app);\r\n }\r\n\r\n onNotificationClick(notification: Notification): void {\r\n this.notificationClick.emit(notification);\r\n }\r\n\r\n onMarkRead(id: string): void {\r\n this.markRead.emit(id);\r\n }\r\n\r\n onClearAll(): void {\r\n this.clearAll.emit();\r\n }\r\n\r\n onMenuAction(action: 'profile' | 'settings' | 'billing' | 'logout'): void {\r\n this.menuAction.emit(action);\r\n }\r\n}\r\n","<header class=\"header-container\">\r\n\r\n <!-- Left Side: Brand, Current App & Desktop Links -->\r\n <div class=\"header-left\">\r\n\r\n <a routerLink=\"/\" class=\"brand-identity\">\r\n <img [src]=\"logoUrl()\" [alt]=\"appName() + ' logo'\" width=\"26\" height=\"26\" class=\"brand-logo\" />\r\n <span class=\"brand-name\">{{ appName() }}</span>\r\n </a>\r\n\r\n @if (currentAppName()) {\r\n <div class=\"current-app-identity\" [attr.aria-label]=\"'Current app: ' + currentAppName()\">\r\n <span class=\"brand-separator\" aria-hidden=\"true\">|</span>\r\n <span class=\"current-app-name\">{{ currentAppName() }}</span>\r\n </div>\r\n }\r\n\r\n <!-- Desktop Navigation Links -->\r\n <nav class=\"desktop-nav ml-1 hidden items-center lg:flex\" aria-label=\"Desktop primary navigation\">\r\n @for (item of navigationItems(); track item.id) {\r\n @if (hasPermission(item)) {\r\n @if (item.route) {\r\n <a [routerLink]=\"item.route\" routerLinkActive=\"active\" [routerLinkActiveOptions]=\"{exact: true}\" class=\"nav-link\"\r\n [attr.aria-current]=\"isActive(item) ? 'page' : null\">\r\n {{ item.label }}\r\n </a>\r\n } @else {\r\n <a [href]=\"item.href\" [target]=\"item.target || '_self'\" class=\"nav-link\">\r\n {{ item.label }}\r\n </a>\r\n }\r\n }\r\n }\r\n </nav>\r\n </div>\r\n\r\n <!-- Middle: Search Input (Desktop) -->\r\n @if (showSearch()) {\r\n <div class=\"header-middle\">\r\n <div class=\"header-search-shell\">\r\n <lib-icon name=\"search\" [size]=\"14\"\r\n class=\"pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-[var(--secondary)]\" />\r\n\r\n <input type=\"search\" placeholder=\"Search Excellore...\" #searchInput\r\n (keyup.enter)=\"onSearch(searchInput.value); searchInput.value = ''\" class=\"header-search\" autocomplete=\"off\"\r\n aria-label=\"Search\" />\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"header-spacer\"></div>\r\n }\r\n\r\n <!-- Right Side Actions -->\r\n <div class=\"header-actions\">\r\n\r\n <!-- Mobile Search Trigger -->\r\n @if (showSearch()) {\r\n <button type=\"button\" class=\"header-action mobile-search-action\" (click)=\"toggleMobileMenu()\"\r\n aria-label=\"Open mobile menu\" aria-expanded=\"isMobileMenuOpen()\" #menuToggle>\r\n <lib-icon name=\"search\" [size]=\"16\" class=\"h-4.5 w-4.5\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n\r\n <!-- Theme Switcher -->\r\n @if (showThemeSwitcher()) {\r\n <button type=\"button\" class=\"header-action\" (click)=\"themeService.toggleTheme()\" aria-label=\"Toggle theme\">\r\n @switch (themeService.theme()) {\r\n @case ('light') {\r\n <lib-icon name=\"sun\" [size]=\"16\" class=\"text-[var(--primary)]\" />\r\n }\r\n @case ('dark') {\r\n <lib-icon name=\"moon\" [size]=\"16\" class=\"text-[var(--primary)]\" />\r\n }\r\n @default {\r\n <lib-icon name=\"monitor\" [size]=\"16\" class=\"text-[var(--secondary)]\" />\r\n }\r\n }\r\n </button>\r\n }\r\n\r\n <!-- App Switcher -->\r\n @if (showAppSwitcher() && applications().length > 0) {\r\n <lib-app-switcher [applications]=\"applications()\" (applicationSelected)=\"onApplicationSelect($event)\" />\r\n }\r\n\r\n <!-- Notifications -->\r\n @if (showNotifications()) {\r\n <lib-notification-bell [unreadCount]=\"unreadCount()\" [notifications]=\"notifications()\"\r\n (notificationClick)=\"onNotificationClick($event)\" (markRead)=\"onMarkRead($event)\" (clearAll)=\"onClearAll()\" />\r\n }\r\n\r\n <!-- User Menu -->\r\n <div class=\"user-menu-divider\">\r\n <lib-user-menu [user]=\"user()\" (menuAction)=\"onMenuAction($event)\" />\r\n </div>\r\n\r\n <!-- Mobile Menu Toggle (Hamburger) -->\r\n @if (hasMobileMenuContent()) {\r\n <button type=\"button\" class=\"header-action mobile-menu-action\" (click)=\"toggleMobileMenu()\"\r\n aria-label=\"Toggle navigation menu\" aria-expanded=\"isMobileMenuOpen()\" #mobileMenuToggle>\r\n <lib-icon [name]=\"isMobileMenuOpen() ? 'x' : 'menu'\" [size]=\"16\" class=\"h-4.5 w-4.5\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n </div>\r\n</header>\r\n\r\n<!-- Mobile Menu Backdrop -->\r\n@if (isMobileMenuOpen() && hasMobileMenuContent()) {\r\n<div class=\"mobile-backdrop fixed inset-0 z-30 lg:hidden\" (click)=\"closeMobileMenu()\"\r\n (keydown.escape)=\"closeMobileMenu()\" tabindex=\"-1\" aria-hidden=\"true\"></div>\r\n\r\n<!-- Mobile Navigation Drawer -->\r\n<div\r\n class=\"mobile-drawer fixed inset-x-2 top-16 z-40 flex max-h-[calc(100dvh-4.5rem)] flex-col rounded-2xl border border-[var(--border)] bg-[var(--background)] p-3 lg:hidden\"\r\n role=\"dialog\" aria-modal=\"true\" aria-label=\"Mobile navigation\" (keydown.escape)=\"closeMobileMenu()\">\r\n <!-- Mobile Search -->\r\n @if (showSearch()) {\r\n <div class=\"relative mb-3 w-full\">\r\n <lib-icon name=\"search\" [size]=\"16\"\r\n class=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-[var(--secondary)] pointer-events-none\"\r\n aria-hidden=\"true\" />\r\n\r\n <input type=\"search\" placeholder=\"Search Excellore...\" #mobileSearchInput\r\n (keyup.enter)=\"onSearch(mobileSearchInput.value); mobileSearchInput.value = ''; closeMobileMenu()\"\r\n class=\"header-search mobile\" autocomplete=\"off\" aria-label=\"Search\" />\r\n </div>\r\n }\r\n\r\n <!-- Mobile Nav Links -->\r\n <nav class=\"flex flex-col gap-1 overflow-y-auto\" role=\"navigation\">\r\n @for (item of navigationItems(); track item.id) {\r\n @if (hasPermission(item)) {\r\n @if (item.route) {\r\n <a [routerLink]=\"item.route\" routerLinkActive=\"mobile-active\" [routerLinkActiveOptions]=\"{exact: true}\"\r\n (click)=\"closeMobileMenu()\" class=\"mobile-nav-link\" [attr.aria-current]=\"isActive(item) ? 'page' : null\">\r\n {{ item.label }}\r\n </a>\r\n } @else {\r\n <a [href]=\"item.href\" [target]=\"item.target || '_self'\" (click)=\"closeMobileMenu()\" class=\"mobile-nav-link\">\r\n {{ item.label }}\r\n </a>\r\n }\r\n }\r\n }\r\n </nav>\r\n</div>\r\n}\r\n","import { Component, ElementRef, HostListener, OnDestroy, computed, inject, input, output, signal, viewChild } from '@angular/core';\r\nimport { Application, SidebarCommand, SidebarMenuItem, SidebarUserAction, SidebarWorkspace, User } from '../../models/models.interface';\r\nimport { SidebarMenuComponent } from '../../navigation/sidebar-menu/sidebar-menu';\r\nimport { ThemeService } from '../../services/theme.service';\r\nimport { IconComponent } from '../../shared/icon/icon.component';\r\n\r\ntype RailCommand = SidebarCommand & { kind: 'menu' | 'application' | 'action'; source: SidebarMenuItem | Application | SidebarCommand };\r\n\r\n@Component({ selector: 'lib-sidebar', standalone: true, imports: [SidebarMenuComponent, IconComponent], templateUrl: './sidebar.html', styleUrls: ['./sidebar.css', './sidebar-dialogs.css'] })\r\nexport class SidebarComponent implements OnDestroy {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly menu = viewChild(SidebarMenuComponent);\r\n readonly themeService = inject(ThemeService);\r\n\r\n readonly menuItems = input<SidebarMenuItem[]>([]);\r\n readonly menuError = input<string | null>(null);\r\n readonly showMobileToggle = input(true);\r\n readonly workspace = input<SidebarWorkspace>({ id: 'workspace', name: 'Workspace', initials: 'W' });\r\n readonly workspaces = input<SidebarWorkspace[]>([]);\r\n readonly user = input<User | null>(null);\r\n readonly applications = input<Application[]>([]);\r\n readonly quickActions = input<SidebarCommand[]>([]);\r\n readonly userActions = input<SidebarUserAction[]>([\r\n { id: 'profile', label: 'Profile', icon: 'user' }, { id: 'settings', label: 'Settings', icon: 'settings' }, { id: 'logout', label: 'Log out', icon: 'logout', danger: true },\r\n ]);\r\n readonly collapsible = input(true);\r\n readonly showSearch = input(true);\r\n readonly showAppLauncher = input(true);\r\n readonly showNotifications = input(true);\r\n readonly showThemeToggle = input(true);\r\n readonly hasUnreadNotifications = input(false);\r\n\r\n readonly menuItemSelected = output<SidebarMenuItem>();\r\n readonly workspaceSelected = output<SidebarWorkspace>();\r\n readonly applicationSelected = output<Application>();\r\n readonly userActionSelected = output<SidebarUserAction>();\r\n readonly quickActionSelected = output<SidebarCommand>();\r\n readonly notificationActivated = output<void>();\r\n readonly collapsedChange = output<boolean>();\r\n\r\n readonly isOpen = signal(false);\r\n readonly collapsed = signal(false);\r\n readonly workspaceMenuOpen = signal(false);\r\n readonly profileMenuOpen = signal(false);\r\n readonly appLauncherOpen = signal(false);\r\n readonly commandOpen = signal(false);\r\n readonly appQuery = signal('');\r\n readonly commandQuery = signal('');\r\n readonly activeCommandIndex = signal(0);\r\n private returnFocus: HTMLElement | null = null;\r\n\r\n readonly filteredApplications = computed(() => this.filterApplications(this.appQuery()));\r\n readonly allCommands = computed<RailCommand[]>(() => [\r\n ...this.flattenMenu(this.menuItems()).filter(item => !item.children?.length).map(item => ({ id: `nav-${item.id}`, label: item.label, category: 'Navigate', icon: item.icon, disabled: item.disabled, kind: 'menu' as const, source: item })),\r\n ...this.applications().map(app => ({ id: `app-${app.id}`, label: app.name, category: 'Apps', icon: app.icon, disabled: app.available === false, kind: 'application' as const, source: app })),\r\n ...this.quickActions().map(action => ({ ...action, category: action.category || 'Quick actions', kind: 'action' as const, source: action })),\r\n ]);\r\n readonly filteredCommands = computed(() => {\r\n const query = this.commandQuery().trim().toLowerCase();\r\n return query ? this.allCommands().filter(command => command.label.toLowerCase().includes(query) || command.category?.toLowerCase().includes(query)) : this.allCommands();\r\n });\r\n readonly commandGroups = computed(() => {\r\n const groups: { category: string; commands: RailCommand[] }[] = [];\r\n for (const command of this.filteredCommands()) {\r\n const category = command.category || 'Commands';\r\n let group = groups.find(value => value.category === category);\r\n if (!group) { group = { category, commands: [] }; groups.push(group); }\r\n group.commands.push(command);\r\n }\r\n return groups;\r\n });\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n onDocumentKeydown(event: KeyboardEvent): void {\r\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k' && this.showSearch()) { event.preventDefault(); this.openCommandPalette(); return; }\r\n if (event.key === 'Escape') { this.closeAllOverlays(true); return; }\r\n if (event.key === 'Tab' && (this.commandOpen() || this.appLauncherOpen())) { this.trapDialogFocus(event); return; }\r\n if (!this.commandOpen()) return;\r\n const commands = this.filteredCommands();\r\n if (event.key === 'ArrowDown') { event.preventDefault(); this.activeCommandIndex.update(index => Math.min(index + 1, Math.max(0, commands.length - 1))); }\r\n if (event.key === 'ArrowUp') { event.preventDefault(); this.activeCommandIndex.update(index => Math.max(index - 1, 0)); }\r\n if (event.key === 'Enter') { event.preventDefault(); const command = commands[this.activeCommandIndex()]; if (command) this.runCommand(command); }\r\n }\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n onDocumentPointer(event: MouseEvent): void {\r\n const target = event.target;\r\n if (!(target instanceof Element)) return;\r\n if (!target.closest('.workspace__trigger,.workspace-menu')) this.workspaceMenuOpen.set(false);\r\n if (!target.closest('.user__trigger,.profile-menu')) this.profileMenuOpen.set(false);\r\n if (!this.host.nativeElement.contains(target)) this.closeMenuFlyouts();\r\n }\r\n\r\n ngOnDestroy(): void { this.returnFocus = null; }\r\n toggleSidebar(): void { this.isOpen.update(value => !value); }\r\n closeSidebar(): void { this.isOpen.set(false); }\r\n toggleCollapsed(): void { this.collapsed.update(value => !value); this.closeAllOverlays(false); this.collapsedChange.emit(this.collapsed()); }\r\n toggleWorkspaceMenu(event?: Event): void { this.captureTrigger(event); const next = !this.workspaceMenuOpen(); this.closeAllOverlays(false); this.workspaceMenuOpen.set(next); }\r\n toggleProfileMenu(event?: Event): void { this.captureTrigger(event); const next = !this.profileMenuOpen(); this.closeAllOverlays(false); this.profileMenuOpen.set(next); }\r\n openAppLauncher(event?: Event): void { this.captureTrigger(event); this.closeAllOverlays(false); this.appLauncherOpen.set(true); this.focusSoon('.launcher input'); }\r\n openCommandPalette(event?: Event): void { this.captureTrigger(event); this.closeAllOverlays(false); this.commandQuery.set(''); this.activeCommandIndex.set(0); this.commandOpen.set(true); this.focusSoon('.command-palette input'); }\r\n closeAppLauncher(): void { this.appLauncherOpen.set(false); this.appQuery.set(''); this.restoreFocus(); }\r\n closeCommandPalette(): void { this.commandOpen.set(false); this.commandQuery.set(''); this.restoreFocus(); }\r\n closeAllOverlays(restoreFocus: boolean): void { this.workspaceMenuOpen.set(false); this.profileMenuOpen.set(false); this.appLauncherOpen.set(false); this.commandOpen.set(false); this.closeMenuFlyouts(); if (restoreFocus) this.restoreFocus(); }\r\n closeMenuFlyouts(): void { this.menu()?.closeFlyouts(); }\r\n onMenuItemSelected(item: SidebarMenuItem): void { this.menuItemSelected.emit(item); this.closeSidebar(); }\r\n selectWorkspace(item: SidebarWorkspace): void { this.workspaceSelected.emit(item); this.workspaceMenuOpen.set(false); this.restoreFocus(); }\r\n selectApplication(app: Application): void {\r\n if (app.available === false) return;\r\n\r\n window.open(app.url, '_blank', 'noopener,noreferrer');\r\n this.applicationSelected.emit(app);\r\n this.closeAppLauncher();\r\n }\r\n selectUserAction(action: SidebarUserAction): void { this.userActionSelected.emit(action); this.profileMenuOpen.set(false); this.restoreFocus(); }\r\n activateNotifications(event?: Event): void { this.captureTrigger(event); this.notificationActivated.emit(); }\r\n toggleTheme(): void { this.themeService.toggleTheme(); }\r\n updateCommandQuery(value: string): void { this.commandQuery.set(value); this.activeCommandIndex.set(0); }\r\n runCommand(command: RailCommand): void {\r\n if (command.disabled) return;\r\n if (command.kind === 'menu') this.onMenuItemSelected(command.source as SidebarMenuItem);\r\n if (command.kind === 'application') this.applicationSelected.emit(command.source as Application);\r\n if (command.kind === 'action') this.quickActionSelected.emit(command.source as SidebarCommand);\r\n this.closeCommandPalette();\r\n }\r\n commandIndex(command: RailCommand): number { return this.filteredCommands().findIndex(item => item.id === command.id); }\r\n initials(name: string): string { return name.split(/\\s+/).map(part => part[0]).join('').slice(0, 2).toUpperCase(); }\r\n\r\n private filterApplications(queryValue: string): Application[] { const query = queryValue.trim().toLowerCase(); return query ? this.applications().filter(app => app.name.toLowerCase().includes(query)) : this.applications(); }\r\n private flattenMenu(items: SidebarMenuItem[]): SidebarMenuItem[] {\r\n return items.flatMap(item => [item, ...this.flattenMenu(item.children || [])]);\r\n }\r\n private captureTrigger(event?: Event): void { const target = event?.currentTarget; if (target instanceof HTMLElement) this.returnFocus = target; }\r\n private focusSoon(selector: string): void { setTimeout(() => this.host.nativeElement.querySelector<HTMLElement>(selector)?.focus()); }\r\n private restoreFocus(): void { const element = this.returnFocus; this.returnFocus = null; setTimeout(() => element?.focus()); }\r\n private trapDialogFocus(event: KeyboardEvent): void {\r\n const dialog = this.host.nativeElement.querySelector<HTMLElement>('.dialog');\r\n const focusable = Array.from(dialog?.querySelectorAll<HTMLElement>('button:not(:disabled),input:not(:disabled),a[href]') ?? []);\r\n if (!focusable.length) return;\r\n const first = focusable[0];\r\n const last = focusable[focusable.length - 1];\r\n if (event.shiftKey && document.activeElement === first) { event.preventDefault(); last.focus(); }\r\n else if (!event.shiftKey && document.activeElement === last) { event.preventDefault(); first.focus(); }\r\n }\r\n}\r\n","@if (showMobileToggle()) { <button class=\"sidebar-toggle\" type=\"button\" aria-label=\"Open sidebar\"\r\n [attr.aria-expanded]=\"isOpen()\" (click)=\"toggleSidebar()\"><lib-icon name=\"menu\" [size]=\"20\" /></button> }\r\n@if (isOpen()) { <div class=\"sidebar-overlay\" (click)=\"closeSidebar()\"></div> }\r\n\r\n<aside class=\"sidebar\" [class.open]=\"isOpen()\" [class.collapsed]=\"collapsed()\" aria-label=\"Application sidebar\">\r\n <div class=\"sidebar__workspace-wrap\">\r\n <button class=\"workspace workspace__trigger\" type=\"button\" [attr.aria-expanded]=\"workspaceMenuOpen()\"\r\n aria-haspopup=\"menu\" (click)=\"toggleWorkspaceMenu($event)\">\r\n <span class=\"workspace__avatar\">{{ workspace().initials || initials(workspace().name) }}</span>\r\n <span class=\"workspace__copy\"><strong>{{ workspace().name }}</strong>@if(workspace().plan){<small>{{\r\n workspace().plan }}</small>}</span>\r\n <lib-icon class=\"workspace__chevron\" name=\"chevronDown\" [size]=\"15\" />\r\n </button>\r\n @if (workspaceMenuOpen()) {\r\n <div class=\"popover workspace-menu\" role=\"menu\" aria-label=\"Select workspace\">\r\n @for (item of workspaces(); track item.id) {\r\n <button type=\"button\" role=\"menuitemradio\" [attr.aria-checked]=\"item.id === workspace().id\"\r\n (click)=\"selectWorkspace(item)\"><span class=\"mini-avatar\">{{ item.initials || initials(item.name)\r\n }}</span><span>{{ item.name }}</span>@if(item.id === workspace().id){<span class=\"check\">✓</span>}</button>\r\n }\r\n <div class=\"popover__divider\"></div><button type=\"button\" class=\"muted\"><lib-icon name=\"plus\" [size]=\"16\" />\r\n Create organization</button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"sidebar__tools\" aria-label=\"Sidebar utilities\">\r\n @if(showSearch() && !collapsed()){<button class=\"utility-button\" type=\"button\" title=\"Search (Ctrl/⌘ K)\"\r\n aria-label=\"Search commands\" (click)=\"openCommandPalette($event)\"><lib-icon name=\"search\" [size]=\"16\" /></button>}\r\n @if(showAppLauncher()){<button class=\"utility-button\" type=\"button\" title=\"Apps\" aria-label=\"All apps\"\r\n (click)=\"openAppLauncher($event)\"><lib-icon name=\"grid\" [size]=\"16\" /></button>}\r\n @if(showNotifications() && !collapsed()){<button class=\"utility-button notification-button\" type=\"button\" title=\"Notifications\"\r\n aria-label=\"Notifications\" (click)=\"activateNotifications($event)\"><lib-icon name=\"bell\"\r\n [size]=\"16\" />@if(hasUnreadNotifications()){<span class=\"notification-dot\"></span>}</button>}\r\n @if(showThemeToggle() && !collapsed()){\r\n <button class=\"utility-button\" type=\"button\" [attr.title]=\"'Theme: ' + themeService.theme()\"\r\n [attr.aria-label]=\"'Current theme: ' + themeService.theme() + '. Toggle theme'\" (click)=\"toggleTheme()\">\r\n @switch (themeService.theme()) {\r\n @case ('light') { <lib-icon name=\"sun\" [size]=\"16\" /> }\r\n @case ('dark') { <lib-icon name=\"moon\" [size]=\"16\" /> }\r\n @default { <lib-icon name=\"monitor\" [size]=\"16\" /> }\r\n }\r\n </button>\r\n }\r\n @if (collapsible()) {\r\n <button class=\"collapse-toggle\" type=\"button\" [attr.title]=\"collapsed() ? 'Expand' : 'Collapse'\"\r\n [attr.aria-label]=\"collapsed() ? 'Expand sidebar' : 'Collapse sidebar'\" (click)=\"toggleCollapsed()\">\r\n <lib-icon [name]=\"collapsed() ? 'chevronRight' : 'chevronLeft'\" [size]=\"14\" [strokeWidth]=\"2\" />\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"sidebar__middle\" [style.overflow]=\"collapsed() ? 'visible' : null\"><lib-sidebar-menu [items]=\"menuItems()\"\r\n [errorMessage]=\"menuError()\" [compact]=\"collapsed()\" (menuItemSelected)=\"onMenuItemSelected($event)\" /></div>\r\n\r\n @if (user()) {\r\n <div class=\"sidebar__user-wrap\">\r\n @if (profileMenuOpen()) { <div class=\"popover profile-menu\" role=\"menu\">@for(action of userActions();track\r\n action.id){<button type=\"button\" role=\"menuitem\" [class.danger]=\"action.danger\"\r\n (click)=\"selectUserAction(action)\"><lib-icon [name]=\"action.icon || 'user'\"\r\n [size]=\"16\" />{{action.label}}</button>}</div> }\r\n <button class=\"user user__trigger\" type=\"button\" [attr.aria-expanded]=\"profileMenuOpen()\" aria-haspopup=\"menu\"\r\n (click)=\"toggleProfileMenu($event)\">\r\n <span class=\"user__avatar\">{{ initials(user()!.name) }}</span><span class=\"user__copy\"><strong>{{ user()!.name\r\n }}</strong><small>{{ user()!.email }}</small></span><lib-icon class=\"user__more\" name=\"more\" [size]=\"17\" />\r\n </button>\r\n </div>\r\n }\r\n</aside>\r\n\r\n@if (appLauncherOpen()) {\r\n<div class=\"dialog-backdrop\" (click)=\"closeAppLauncher()\">\r\n <section class=\"dialog launcher\" role=\"dialog\" aria-modal=\"true\" aria-label=\"All applications\"\r\n (click)=\"$event.stopPropagation()\">\r\n <div class=\"dialog__search\"><lib-icon name=\"search\" [size]=\"18\" /><input #appSearch type=\"search\"\r\n placeholder=\"Search apps\" [value]=\"appQuery()\" (input)=\"appQuery.set(appSearch.value)\"><button type=\"button\"\r\n aria-label=\"Close app launcher\" (click)=\"closeAppLauncher()\"><lib-icon name=\"x\" [size]=\"18\" /></button></div>\r\n <div class=\"launcher__body\">@if(filteredApplications().length === 0){<p class=\"empty-state\">No apps found for\r\n “{{appQuery()}}”</p>}@else{<div class=\"launcher__grid\">@for(app of filteredApplications();track app.id){<button\r\n type=\"button\" [disabled]=\"app.available === false\" (click)=\"selectApplication(app)\"><span class=\"app-icon\"\r\n [style.background]=\"app.iconBackground || null\"\r\n [style.color]=\"app.iconColor || null\">@if(app.icon){<lib-icon [name]=\"app.icon\" [size]=\"20\" />}@else { {{\r\n app.initials || initials(app.name) }} }</span><span>{{app.name}}</span></button>}</div>}</div>\r\n </section>\r\n</div>\r\n}\r\n\r\n@if (commandOpen()) {\r\n<div class=\"dialog-backdrop command-backdrop\" (click)=\"closeCommandPalette()\">\r\n <section class=\"dialog command-palette\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Command palette\"\r\n (click)=\"$event.stopPropagation()\">\r\n <div class=\"dialog__search\"><lib-icon name=\"search\" [size]=\"18\" /><input #commandSearch type=\"search\"\r\n placeholder=\"Type a command or search...\" [value]=\"commandQuery()\"\r\n (input)=\"updateCommandQuery(commandSearch.value)\"><kbd>esc</kbd></div>\r\n <div class=\"command-palette__body\">@if(filteredCommands().length === 0){<p class=\"empty-state\">No results for\r\n “{{commandQuery()}}”</p>}@else{@for(group of commandGroups();track group.category){<div class=\"command-group\">\r\n <h2>{{group.category}}</h2>@for(command of group.commands;track command.id){<button type=\"button\"\r\n [disabled]=\"command.disabled\" [class.active]=\"commandIndex(command) === activeCommandIndex()\"\r\n (mouseenter)=\"activeCommandIndex.set(commandIndex(command))\" (click)=\"runCommand(command)\"><lib-icon\r\n [name]=\"command.icon || 'dashboard'\" [size]=\"16\" /><span>{{command.label}}</span></button>}\r\n </div>}}</div>\r\n <footer class=\"command-palette__footer\"><span>↵ select</span><span>↑↓ navigate</span><span>esc close</span></footer>\r\n </section>\r\n</div>\r\n}\r\n","/** Public API for @excellore/ui. Internal composition components stay private. */\r\nexport * from './lib/models/models.interface';\r\nexport { ThemeService } from './lib/services/theme.service';\r\nexport { HeaderComponent } from './lib/layout/header/header';\r\nexport { SidebarComponent } from './lib/layout/sidebar/sidebar';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@excellore/ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.11",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
7
|
"peerDependencies": {
|
|
8
|
-
"@angular/common": "^21.0.0",
|
|
9
|
-
"@angular/core": "^21.0.0"
|
|
8
|
+
"@angular/common": "^21.0.0 || ^22.0.0",
|
|
9
|
+
"@angular/core": "^21.0.0 || ^22.0.0",
|
|
10
|
+
"@angular/router": "^21.0.0 || ^22.0.0"
|
|
10
11
|
},
|
|
11
12
|
"dependencies": {
|
|
12
13
|
"@lucide/angular": "^1.21.0",
|