UNPKG

amt-ui

Version:

Angular material, tailwind template

1 lines 65.8 kB
{"version":3,"file":"amt-ui.mjs","sources":["../../../projects/amt-ui/src/lib/services/storage.service.ts","../../../projects/amt-ui/src/lib/services/amt-theme.service.ts","../../../projects/amt-ui/src/lib/services/amt-menu.service.ts","../../../projects/amt-ui/src/lib/auth-layout/auth-layout.component.ts","../../../projects/amt-ui/src/lib/auth-layout/auth-layout.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/sidebar-sub-menu/sidebar-sub-menu.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/sidebar-sub-menu/sidebar-sub-menu.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/sidebar-menu/sidebar-menu.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/sidebar-menu/sidebar-menu.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/sidebar/sidebar.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/sidebar/sidebar.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-profile/navbar-profile.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-profile/navbar-profile.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-languages/navbar-languages.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-languages/navbar-languages.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-theme/navbar-theme.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-theme/navbar-theme.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-colors/navbar-colors.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-colors/navbar-colors.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-fullscreen/navbar-fullscreen.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-fullscreen/navbar-fullscreen.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-responsive/navbar-responsive.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-responsive/navbar-responsive.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-notifications/navbar-notifications.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/navbar-notifications/navbar-notifications.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/navbar/navbar.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/navbar/navbar.component.html","../../../projects/amt-ui/src/lib/dashboard-layout/dashboard-layout.component.ts","../../../projects/amt-ui/src/lib/dashboard-layout/dashboard-layout.component.html","../../../projects/amt-ui/src/lib/errors/errors.component.ts","../../../projects/amt-ui/src/lib/errors/errors.component.html","../../../projects/amt-ui/src/lib/errors/error404/error404.component.ts","../../../projects/amt-ui/src/lib/errors/error404/error404.component.html","../../../projects/amt-ui/src/lib/errors/error500/error500.component.ts","../../../projects/amt-ui/src/lib/errors/error500/error500.component.html","../../../projects/amt-ui/src/lib/errors/errors-routing.module.ts","../../../projects/amt-ui/src/lib/errors/errors.module.ts","../../../projects/amt-ui/src/public-api.ts","../../../projects/amt-ui/src/amt-ui.ts"],"sourcesContent":["import {Inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StorageService {\n isBrowser: boolean;\n prefix = 'amt';\n\n constructor(@Inject(PLATFORM_ID) platformId: Object) {\n this.isBrowser = isPlatformBrowser(platformId);\n }\n\n set(key: string, value: any): void {\n if (this.isBrowser) {\n localStorage.setItem(this.key(key), JSON.stringify(value));\n }\n }\n\n get(key: string): any {\n try {\n if (this.isBrowser) {\n return JSON.parse(localStorage.getItem(this.key(key)) || '');\n } else {\n return null;\n }\n } catch (e) {\n return null;\n }\n }\n\n remove(key: string): void {\n if (this.isBrowser) {\n return localStorage.removeItem(this.key(key));\n }\n }\n\n exists(key: string): boolean {\n return this.get(key) !== null;\n }\n\n private key(value: string) {\n return `${this.prefix}-${value}`;\n }\n}\n","import {inject, Injectable, Renderer2, RendererFactory2, signal} from '@angular/core';\nimport {AmtTheme, AmtThemeColor, AmtThemeDirection, AmtThemeMode} from '../interfaces/amt-theme.inteface';\nimport {StorageService} from './storage.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmtThemeService {\n public settings = signal<AmtTheme>({mode: 'dark', color: 'base', direction: 'ltr'});\n private storage = inject(StorageService);\n private renderer: Renderer2 = inject(RendererFactory2).createRenderer(null, null);\n\n constructor() {\n this.loadDefaults();\n }\n\n set title(title: string) {\n this.settings.update((settings) => {\n settings.title = title;\n return settings;\n });\n }\n\n get title(): string {\n return this.settings().title || '';\n }\n\n set direction(direction: AmtThemeDirection) {\n this.settings.update((settings) => {\n settings.direction = direction;\n return settings;\n });\n }\n\n get direction(): string {\n return this.settings().direction || 'ltr';\n }\n\n set mode(mode: AmtThemeMode) {\n if (mode == 'system') {\n mode = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n this.storage.set('mode', mode);\n this.settings().mode = mode;\n this.updateHtmlClass(mode);\n }\n\n get mode(): string {\n return this.settings().mode || '';\n }\n\n toggleMode(): void {\n this.mode = this.mode === 'dark' ? 'light' : 'dark';\n }\n\n set color(color: AmtThemeColor) {\n this.storage.set('color', color);\n this.settings().color = color;\n this.updateHtmlAttribute('data-theme', color);\n }\n\n get color(): string {\n return this.settings().color || '';\n }\n\n private loadDefaults() {\n this.mode = this.storage.get('mode') || 'system';\n this.color = this.storage.get('color') || 'base';\n }\n\n private updateHtmlClass(className: string): void {\n const html = document.documentElement;\n this.renderer.setAttribute(html, 'class', className);\n }\n\n private updateHtmlAttribute(attribute: string, value: string): void {\n const html = document.documentElement;\n this.renderer.setAttribute(html, attribute, value);\n }\n}\n","import {inject, Injectable, signal} from '@angular/core';\nimport {\n AmtMenuItem,\n AmtProfileItem,\n AmtProfileLanguage,\n AmtProfileUser,\n AmtSubMenuItem\n} from '../interfaces/amt-menu.interface';\nimport {Router} from '@angular/router';\nimport {Subject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmtMenuService {\n showSideBar = signal(true);\n pagesMenu = signal<AmtMenuItem[]>([]);\n showMobileMenu = signal(false);\n user = signal<AmtProfileUser | null>(null);\n profileMenu = signal<AmtProfileItem[]>([]);\n languages = signal<AmtProfileLanguage[]>([]);\n router = inject(Router);\n languageChanged$ = new Subject<AmtProfileLanguage>();\n\n public toggleSidebar() {\n this.showSideBar.set(!this.showSideBar());\n }\n\n public toggleSubMenu(submenu: AmtSubMenuItem) {\n submenu.expanded = !submenu.expanded;\n }\n\n public isActive(instruction: any): boolean {\n return this.router.isActive(this.router.createUrlTree([instruction]), {\n paths: 'subset',\n queryParams: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n });\n }\n\n public toggleMenu(menu: any) {\n this.showSideBar.set(true);\n menu.expanded = !menu.expanded;\n }\n\n\n // private _showMobileMenu = signal(false);\n // private _pagesMenu = signal<MenuItem[]>([]);\n // private _subscription = new Subscription();\n //\n // constructor(private router: Router) {\n // /** Set dynamic menu */\n // this._pagesMenu.set(Menu.pages);\n //\n // let sub = this.router.events.subscribe((event) => {\n // if (event instanceof NavigationEnd) {\n // /** Expand menu base on active route */\n // this._pagesMenu().forEach((menu) => {\n // let activeGroup = false;\n // menu.items.forEach((subMenu) => {\n // const active = this.isActive(subMenu.route);\n // subMenu.expanded = active;\n // subMenu.active = active;\n // if (active) activeGroup = true;\n // if (subMenu.children) {\n // this.expand(subMenu.children);\n // }\n // });\n // menu.active = activeGroup;\n // });\n // }\n // });\n // this._subscription.add(sub);\n // }\n //\n // get showSideBar() {\n // return this.showSidebar();\n // }\n // get showMobileMenu() {\n // return this._showMobileMenu();\n // }\n\n // set showSideBar(value: boolean) {\n // this.showSidebar.set(value);\n // }\n // set showMobileMenu(value: boolean) {\n // this._showMobileMenu.set(value);\n // }\n\n // public toggleSubMenu(submenu: SubMenuItem) {\n // submenu.expanded = !submenu.expanded;\n // }\n //\n // private expand(items: Array<any>) {\n // items.forEach((item) => {\n // item.expanded = this.isActive(item.route);\n // if (item.children) this.expand(item.children);\n // });\n // }\n //\n\n //\n // ngOnDestroy(): void {\n // this._subscription.unsubscribe();\n // }\n}\n","import {Component, input} from '@angular/core';\nimport {RouterOutlet} from '@angular/router';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatIconModule} from '@angular/material/icon';\nimport {AmtThemeService} from '../services/amt-theme.service';\n\n@Component({\n selector: 'amt-auth-layout',\n imports: [\n RouterOutlet,\n MatButtonModule,\n MatMenuModule,\n MatIconModule\n ],\n standalone: true,\n templateUrl: './auth-layout.component.html',\n styleUrl: './auth-layout.component.css'\n})\nexport class AuthLayoutComponent {\n logoUrl = input<string>('https://cdn.btretail.io/assets/images/full-logo.png');\n bannerUrl = input<string>('https://cdn.btretail.io/assets/images/banner-bi.png');\n\n constructor(public themeService: AmtThemeService) {}\n}\n","<div class=\"flex h-screen w-screen\">\n <div class=\"auth-bg bg-primary hidden flex-1 items-center justify-center bg-cover lg:flex\">\n <div class=\"max-w-2xl space-y-4 p-8 text-center text-white\">\n <img [src]=\"bannerUrl()\" [alt]=\"themeService.title\" />\n </div>\n </div>\n <div class=\"bg-background flex flex-1 items-center justify-center\">\n <div class=\"max-w-md overflow-y-auto px-4 sm:w-[500px]\">\n <!-- logo -->\n <a href=\"/\" class=\"flex items-center justify-center p-2\">\n <img [src]=\"logoUrl()\" [alt]=\"themeService.title\" />\n </a>\n <!-- Route -->\n <router-outlet></router-outlet>\n </div>\n </div>\n</div>\n","import {Component, input} from '@angular/core';\nimport {AmtSubMenuItem} from '../../interfaces/amt-menu.interface';\nimport {AmtMenuService} from '../../services/amt-menu.service';\nimport {NgClass, NgTemplateOutlet} from '@angular/common';\nimport {RouterModule} from '@angular/router';\nimport {MatIconModule} from '@angular/material/icon';\n\n@Component({\n selector: 'amt-sidebar-sub-menu',\n imports: [\n NgClass,\n NgTemplateOutlet,\n RouterModule,\n MatIconModule\n ],\n templateUrl: './sidebar-sub-menu.component.html',\n styleUrl: './sidebar-sub-menu.component.css'\n})\nexport class SidebarSubMenuComponent {\n submenu = input<AmtSubMenuItem>({});\n\n constructor(public menuService: AmtMenuService) {}\n\n public toggleMenu(menu: any) {\n this.menuService.toggleSubMenu(menu);\n }\n}\n","<div class=\"max-h-0 overflow-hidden pt-1 transition-all duration-500 ltr:pl-4 rtl:pr-4\"\n [ngClass]=\"{ hidden: !menuService.showSideBar(), 'max-h-screen': submenu().expanded }\">\n <ul class=\"border-border text-muted-foreground flex flex-col border-dashed ltr:border-l ltr:pl-2 rtl:border-r rtl:pr-2\">\n @for (sub of submenu().children; track sub) {\n <li>\n <div class=\"text-muted-foreground hover:text-primary relative flex\" (click)=\"toggleMenu(sub)\">\n <!-- Condition -->\n <ng-container\n [ngTemplateOutlet]=\"sub.children ? childMenu : parentMenu\"\n [ngTemplateOutletContext]=\"{ sub: sub }\">\n </ng-container>\n\n <!-- Parent Menu -->\n <ng-template #parentMenu let-sub=\"sub\">\n <a\n [routerLink]=\"sub.route\"\n routerLinkActive=\"text-primary\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n class=\"hover:bg-card inline-block w-full rounded-lg px-4 py-2 text-xs\">\n {{ sub.label }}\n </a>\n @if(menuService.isActive(sub.route)){\n <span\n class=\"size-1.5 bg-primary absolute flex translate-y-3.5 items-center rounded-full ltr:-translate-x-[11.5px] rtl:translate-x-[11.5px]\">\n </span>\n }\n </ng-template>\n\n <!-- Child Menu -->\n <ng-template #childMenu let-sub=\"sub\">\n <a class=\"inline-block w-full cursor-pointer px-4 py-2 text-xs\">\n {{ sub.label }}\n </a>\n <button class=\"text-foreground/50 flex cursor-pointer items-center justify-end px-2 transition-all duration-500\"\n [ngClass]=\"{ hidden: !menuService.showSideBar() }\">\n <mat-icon>{{sub.expanded ? 'keyboard_arrow_down' : 'keyboard_arrow_right'}}</mat-icon>\n </button>\n </ng-template>\n </div>\n <!-- Submenu items -->\n @if(sub.children?.length){\n <amt-sidebar-sub-menu [submenu]=\"sub\"></amt-sidebar-sub-menu>\n }\n </li>\n }\n </ul>\n</div>\n","import {Component} from '@angular/core';\nimport {NgClass, NgTemplateOutlet} from '@angular/common';\nimport {RouterModule} from '@angular/router';\nimport {AmtSubMenuItem} from '../../interfaces/amt-menu.interface';\nimport {AmtMenuService} from '../../services/amt-menu.service';\nimport {SidebarSubMenuComponent} from '../sidebar-sub-menu/sidebar-sub-menu.component';\nimport {MatIconModule} from '@angular/material/icon';\n\n@Component({\n selector: 'amt-sidebar-menu',\n imports: [\n NgClass,\n NgTemplateOutlet,\n RouterModule,\n SidebarSubMenuComponent,\n MatIconModule\n ],\n templateUrl: './sidebar-menu.component.html',\n styleUrl: './sidebar-menu.component.css'\n})\nexport class SidebarMenuComponent {\n constructor(public menuService: AmtMenuService) {}\n\n public toggleMenu(subMenu: AmtSubMenuItem) {\n this.menuService.toggleMenu(subMenu);\n }\n}\n","@for (menu of menuService.pagesMenu(); track menu) {\n <div>\n @if (menuService.showSideBar()) {\n <div class=\"mx-1 flex items-center justify-between py-3\">\n <small [ngClass]=\"{hidden: !menuService.showSideBar()}\" class=\"text-muted-foreground/50 text-xs font-semibold\">\n {{ menu.group }}\n </small>\n </div>\n }\n\n <ul class=\"flex flex-col\">\n <!-- List items -->\n @for (item of menu.items; track item) {\n <li>\n <!-- Menu List -->\n <div class=\"text-muted-foreground hover:text-foreground group relative flex grow items-center gap-4 rounded-lg px-2\"\n (click)=\"toggleMenu(item)\" [ngClass]=\"{\n 'hover:bg-primary/10': !menuService.showSideBar() && item.active,\n 'hover:bg-card/50': !menuService.showSideBar()\n }\">\n <!-- Icon -->\n <div [ngClass]=\"item.active && !menuService.showSideBar() ? 'text-primary' : 'text-muted-foreground/50'\">\n <mat-icon>{{ item.icon }}</mat-icon>\n </div>\n\n <!-- Condition -->\n <ng-container [ngTemplateOutlet]=\"item.children ? childMenu : parentMenu\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-container>\n\n <!-- Workaround:: Enable routerLink -->\n <ng-template #parentMenu let-item=\"item\">\n <div class=\"text-muted-foreground hover:text-primary flex h-[36px] cursor-pointer items-center justify-start rounded-sm\"\n routerLink=\"{{ item.route }}\">\n <a class=\"truncate text-xs font-semibold tracking-wide focus:outline-hidden\"\n routerLinkActive=\"text-primary\" [ngClass]=\"{hidden: !menuService.showSideBar()}\">\n {{ item.label }}\n </a>\n </div>\n </ng-template>\n\n <!-- Workaround:: Disable routerLink -->\n <ng-template #childMenu let-item=\"item\">\n <div class=\"flex h-9 grow cursor-pointer items-center justify-start rounded-sm\">\n <a class=\"text-muted-foreground group-hover:text-primary truncate text-xs font-semibold tracking-wide focus:outline-hidden\"\n [ngClass]=\"{hidden: !menuService.showSideBar()}\">\n {{ item.label }}\n </a>\n </div>\n </ng-template>\n\n <!-- Arrow Icon -->\n @if (item.children) {\n <button class=\"text-foreground/50 flex cursor-pointer items-center justify-end p-0 transition-all duration-500 ltr:right-0 rtl:left-0\"\n [ngClass]=\"{ hidden: !menuService.showSideBar() }\">\n <mat-icon>{{item.expanded ? 'keyboard_arrow_down' : 'keyboard_arrow_right'}}</mat-icon>\n </button>\n }\n\n <!-- Tooltip -->\n @if (!menuService.showSideBar()) {\n <div class=\"z-1 fixed h-[36px]\">\n <span class=\"z-1 bg-foreground text-background absolute w-auto min-w-max translate-y-[2px] scale-0 rounded-md p-2 text-xs font-bold shadow-md transition-all duration-200 group-hover:scale-100 ltr:origin-left ltr:translate-x-10 rtl:origin-right rtl:-translate-x-10\">\n {{ item.label }}\n </span>\n </div>\n }\n </div>\n\n <!-- Submenu items -->\n <amt-sidebar-sub-menu [submenu]=\"item\"></amt-sidebar-sub-menu>\n </li>\n }\n </ul>\n\n @if(menu.separator) {\n <div class=\"py-3\">\n <hr class=\"border-border border-dashed\" />\n </div>\n }\n </div>\n}\n","import {Component, inject} from '@angular/core';\nimport {NgClass} from '@angular/common';\nimport {AmtMenuService} from '../../services/amt-menu.service';\nimport {AmtThemeService} from '../../services/amt-theme.service';\nimport {MatIconModule} from '@angular/material/icon';\nimport {SidebarMenuComponent} from '../sidebar-menu/sidebar-menu.component';\n\n@Component({\n selector: 'amt-sidebar',\n imports: [\n NgClass,\n MatIconModule,\n SidebarMenuComponent\n ],\n templateUrl: './sidebar.component.html',\n styleUrl: './sidebar.component.css'\n})\nexport class SidebarComponent {\n menuService: AmtMenuService = inject(AmtMenuService);\n themeService: AmtThemeService = inject(AmtThemeService);\n\n constructor() {\n }\n}\n","<nav class=\"bg-background hidden h-full flex-col justify-between pt-3 transition-all duration-300 lg:flex\"\n [ngClass]=\"menuService.showSideBar() ? 'w-[210px] xl:w-[280px]' : 'w-[70px]'\">\n <div class=\"overflow-hidden\">\n <!-- Logo -->\n <div [ngClass]=\"menuService.showSideBar() ? 'justify-between' : 'justify-center'\"\n class=\"mx-4 mb-2 flex h-9 items-center\">\n @if (menuService.showSideBar()) {\n <div class=\"flex items-center\">\n <a class=\"bg-primary flex cursor-pointer items-center justify-center rounded-sm p-2 focus:outline-hidden focus:ring-1\"\n (click)=\"menuService.toggleSidebar()\">\n<!-- <svg-icon src=\"assets/icons/logo.svg\"> </svg-icon>-->\n </a>\n <b class=\"text-foreground ps-2 ml-1 grow text-sm font-bold\">\n {{ themeService.title }}\n </b>\n </div>\n }\n\n <button class=\"text-muted-foreground/50 hover:text-muted-foreground flex items-center justify-center rounded-md p-2 transition-all duration-200 focus:outline-hidden\"\n (click)=\"menuService.toggleSidebar()\" [ngClass]=\"{ 'rotate-180': !menuService.showSideBar() }\">\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n </div>\n\n <!-- Menu Items -->\n <div class=\"scrollbar-thumb--sm scrollbar-track-rounded scrollbar-thin scrollbar-track-transparent scrollbar-thumb-card h-full overflow-auto px-4\">\n <amt-sidebar-menu />\n </div>\n </div>\n</nav>\n","import {Component, inject} from '@angular/core';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {AmtMenuService} from '../../services/amt-menu.service';\nimport {RouterModule} from '@angular/router';\nimport {MatIconModule} from '@angular/material/icon';\n\n@Component({\n selector: 'amt-navbar-profile',\n imports: [\n MatMenuModule,\n RouterModule,\n MatIconModule\n ],\n templateUrl: './navbar-profile.component.html',\n styleUrl: './navbar-profile.component.css',\n})\nexport class NavbarProfileComponent {\n public amtMenuService = inject(AmtMenuService);\n}\n","<button [matMenuTriggerFor]=\"menuProfile\" class=\"relative flex rounded-full bg-card text-sm h-9 w-9\" type=\"button\">\n @if(amtMenuService.user()?.photo) {\n <img class=\"h-9 w-9 rounded-md\" [src]=\"amtMenuService.user()?.photo\" [alt]=\"amtMenuService.user()?.fullName\" />\n } @else {\n <div class=\"rounded-md inline-flex items-center justify-center w-9 h-9 bg-gray-100 dark:bg-gray-600\">\n <span class=\"font-medium text-gray-600 dark:text-gray-300\">{{amtMenuService.user()?.initials}}</span>\n </div>\n }\n</button>\n\n<mat-menu #menuProfile=\"matMenu\">\n <div class=\"flex-row flex items-center px-4 pb-4 mt-2 -m-3\">\n <div class=\"w-10 shrink-0\">\n @if(amtMenuService.user()?.photo) {\n <img class=\"h-9 w-9 rounded-md\" [src]=\"amtMenuService.user()?.photo\" [alt]=\"amtMenuService.user()?.fullName\" />\n } @else {\n <div class=\"rounded-md inline-flex items-center justify-center w-9 h-9 bg-gray-100 dark:bg-gray-600\">\n <span class=\"font-medium text-gray-600 dark:text-gray-300\">{{amtMenuService.user()?.initials}}</span>\n </div>\n }\n </div>\n <div class=\"overflow-hidden px-2 text-sm font-semibold text-foreground\">\n {{amtMenuService.user()?.fullName}}\n <p class=\"truncate text-ellipsis text-xs font-semibold text-muted-foreground\">{{amtMenuService.user()?.email}}</p>\n </div>\n </div>\n\n <div class=\"border-b border-dashed border-border my-2\"></div>\n\n @for (item of amtMenuService.profileMenu(); track item) {\n <button mat-menu-item [routerLink]=\"item.route\" (click)=\"item.click ? item.click() : null\">\n <mat-icon>{{item.icon}}</mat-icon>{{ item.label }}\n </button>\n }\n</mat-menu>\n","import {Component, inject} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatIconModule} from '@angular/material/icon';\nimport {NgClass} from '@angular/common';\nimport {AmtProfileLanguage} from '../../interfaces/amt-menu.interface';\nimport {AmtMenuService} from '../../services/amt-menu.service';\n\n@Component({\n selector: 'amt-navbar-languages',\n imports: [\n MatButtonModule,\n MatMenuModule,\n MatIconModule,\n NgClass\n ],\n templateUrl: './navbar-languages.component.html',\n styleUrl: './navbar-languages.component.css'\n})\nexport class NavbarLanguagesComponent {\n public amtMenuService = inject(AmtMenuService);\n\n changeLanguage(language: AmtProfileLanguage): void {\n this.amtMenuService.languageChanged$.next(language);\n }\n}\n","<button mat-icon-button [matMenuTriggerFor]=\"menuLanguage\">\n <mat-icon class=\"text-muted-foreground/50\">translate</mat-icon>\n</button>\n\n<mat-menu #menuLanguage=\"matMenu\">\n <div class=\"text-center font-semibold px-4 pb-2 text-muted-foreground\" i18n=\"@@choose_language\">\n Choose Language\n </div>\n @for (language of amtMenuService.languages(); track language) {\n <button mat-menu-item (click)=\"changeLanguage(language)\">\n <span class=\"rounded-full me-3 scale-150\" [ngClass]=\"language.flagClass\"></span>\n <span>{{language.title}}</span>\n </button>\n }\n</mat-menu>\n","import {Component, inject} from '@angular/core';\nimport {AmtThemeService} from '../../services/amt-theme.service';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\n\n@Component({\n selector: 'amt-navbar-theme',\n imports: [\n MatButtonModule,\n MatIconModule\n ],\n templateUrl: './navbar-theme.component.html',\n styleUrl: './navbar-theme.component.css'\n})\nexport class NavbarThemeComponent {\n amtThemeService = inject(AmtThemeService);\n\n toggleThemeMode() {\n this.amtThemeService.mode = this.amtThemeService.mode == 'light' ? 'dark' : 'light';\n }\n}\n","<button mat-icon-button (click)=\"toggleThemeMode()\">\n <mat-icon class=\"text-muted-foreground/50\">\n {{amtThemeService.mode == 'dark' ? 'light_mode' : 'dark_mode'}}\n </mat-icon>\n</button>\n","import {Component, inject} from '@angular/core';\nimport {AmtThemeService} from '../../services/amt-theme.service';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {AmtThemeColor} from '../../interfaces/amt-theme.inteface';\n\n@Component({\n selector: 'amt-navbar-colors',\n imports: [\n MatMenuModule,\n MatButtonModule,\n MatIconModule\n ],\n templateUrl: './navbar-colors.component.html',\n styleUrl: './navbar-colors.component.css'\n})\nexport class NavbarColorsComponent {\n amtThemeService = inject(AmtThemeService);\n\n themeColors: {name: AmtThemeColor, code: string}[] = [\n {name: 'base', code: '#e11d48'},\n {name: 'yellow', code: '#f59e0b'},\n {name: 'green', code: '#22c55e'},\n {name: 'blue', code: '#3b82f6'},\n {name: 'orange', code: '#ea580c'},\n {name: 'red', code: '#cc0022'},\n {name: 'violet', code: '#6d28d9'}\n ];\n\n toggleThemeColor(color: AmtThemeColor) {\n this.amtThemeService.color = color;\n }\n}\n","<button mat-icon-button [matMenuTriggerFor]=\"menuPalette\">\n <mat-icon class=\"text-muted-foreground/50\">palette</mat-icon>\n</button>\n\n<mat-menu #menuPalette=\"matMenu\">\n @for (item of themeColors; track $index) {\n <button mat-menu-item (click)=\"toggleThemeColor(item.name)\">\n <div class=\"flex\">\n <span [style.background]=\"item.code\" class=\"me-1 h-5 w-5 rounded-full\"></span>{{ item.name }}\n </div>\n </button>\n }\n</mat-menu>\n","import {Component, OnInit} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport screenfull from 'screenfull';\n\n@Component({\n selector: 'amt-navbar-fullscreen',\n imports: [\n MatButtonModule,\n MatIconModule\n ],\n templateUrl: './navbar-fullscreen.component.html',\n styleUrl: './navbar-fullscreen.component.css'\n})\nexport class NavbarFullscreenComponent implements OnInit {\n isFullscreen: boolean = false;\n\n ngOnInit(): void {\n screenfull.onchange(() => (this.isFullscreen = screenfull.isFullscreen));\n }\n\n toggleFullscreen() {\n if (screenfull.isEnabled) {\n screenfull.isFullscreen ? screenfull.exit().then() : screenfull.request().then();\n }\n }\n}\n","<button mat-icon-button (click)=\"toggleFullscreen()\">\n <mat-icon class=\"text-muted-foreground/50\">{{isFullscreen ? 'fullscreen_exit' : 'fullscreen'}}</mat-icon>\n</button>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'amt-navbar-responsive',\n imports: [],\n templateUrl: './navbar-responsive.component.html',\n styleUrl: './navbar-responsive.component.css'\n})\nexport class NavbarResponsiveComponent {\n\n}\n","<div class=\"rounded-md bg-primary py-1 px-3 align-middle text-sm font-medium text-primary-foreground\">\n <span class=\"hidden sm:block md:hidden\">sm</span>\n <span class=\"hidden md:block lg:hidden\">md</span>\n <span class=\"hidden lg:block xl:hidden\">lg</span>\n <span class=\"hidden xl:block 2xl:hidden\">xl</span>\n <span class=\"hidden 2xl:block\">2xl</span>\n</div>\n","import { Component } from '@angular/core';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\n\n@Component({\n selector: 'amt-navbar-notifications',\n imports: [\n MatMenuModule,\n MatIconModule,\n MatButtonModule\n ],\n templateUrl: './navbar-notifications.component.html',\n styleUrl: './navbar-notifications.component.css'\n})\nexport class NavbarNotificationsComponent {\n notifications = [\n {\n icon: 'notifications_active',\n name: 'Jese Leos',\n time: 'a few moments ago',\n message:\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\n },\n {\n icon: 'alarm',\n name: 'Joseph Mcfall',\n time: '10 minutes ago',\n message:\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\n },\n {\n icon: 'face_5',\n name: 'Bonnie Green',\n time: '44 minutes ago',\n message:\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\n },\n {\n icon: 'face_5',\n name: 'Leslie Livingston',\n time: '1 hour ago',\n message:\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\n },\n {\n icon: 'timer_5',\n name: 'Robert Brown',\n time: '3 hours ago',\n message:\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\n },\n ];\n}\n","<button mat-icon-button [matMenuTriggerFor]=\"menuNotifications\">\n <mat-icon class=\"text-muted-foreground/50\">notifications\n </mat-icon>\n</button>\n\n<mat-menu #menuNotifications=\"matMenu\">\n <div class=\"-m-3\">\n <div class=\"block px-4 py-2 font-medium text-center text-gray-700 rounded-t-lg bg-gray-50 dark:bg-gray-800 dark:text-white\">\n Notifications\n </div>\n <div class=\"divide-y divide-gray-100 dark:divide-gray-700\">\n @for (message of notifications; track message) {\n <a href=\"#\" class=\"flex px-4 py-3 hover:bg-gray-100 dark:hover:bg-gray-700\">\n <div class=\"flex-shrink-0\">\n <mat-icon class=\"text-muted-foreground/50\">{{message.icon}}</mat-icon>\n </div>\n <div class=\"w-full ps-3\">\n <div class=\"text-gray-500 text-sm mb-1.5 dark:text-gray-400\">{{message.message}}</div>\n <div class=\"text-xs text-blue-600 dark:text-blue-500\">{{message.time}}</div>\n </div>\n </a>\n }\n </div>\n <a href=\"#\" class=\"block py-2 text-sm font-medium text-center text-gray-900 rounded-b-lg bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 dark:text-white\">\n <div class=\"inline-flex items-center \">\n <mat-icon class=\"w-4 h-4 me-2 text-gray-500 dark:text-gray-400\">visibility</mat-icon>\n View all\n </div>\n </a>\n </div>\n</mat-menu>\n","import { Component } from '@angular/core';\nimport {AmtMenuService} from '../../services/amt-menu.service';\nimport {NavbarProfileComponent} from '../navbar-profile/navbar-profile.component';\nimport {NavbarLanguagesComponent} from '../navbar-languages/navbar-languages.component';\nimport {NavbarThemeComponent} from '../navbar-theme/navbar-theme.component';\nimport {NavbarColorsComponent} from '../navbar-colors/navbar-colors.component';\nimport {NavbarFullscreenComponent} from '../navbar-fullscreen/navbar-fullscreen.component';\nimport {NavbarResponsiveComponent} from '../navbar-responsive/navbar-responsive.component';\nimport {NavbarNotificationsComponent} from '../navbar-notifications/navbar-notifications.component';\n\n@Component({\n selector: 'amt-navbar',\n imports: [\n NavbarProfileComponent,\n NavbarLanguagesComponent,\n NavbarThemeComponent,\n NavbarColorsComponent,\n NavbarFullscreenComponent,\n NavbarResponsiveComponent,\n NavbarNotificationsComponent\n ],\n templateUrl: './navbar.component.html',\n styleUrl: './navbar.component.css'\n})\nexport class NavbarComponent {\n constructor(private menuService: AmtMenuService) {}\n\n public toggleMobileMenu(): void {\n this.menuService.showMobileMenu.set(true);\n }\n}\n","<div class=\"bg-background relative\">\n <div class=\"mx-auto px-5\">\n <div class=\"flex items-center justify-between py-3.5 md:justify-start\">\n <!-- Mobile Navigation Menu Button-->\n <div class=\"sm:order-1 md:hidden\">\n <button class=\"bg-muted text-muted-foreground focus:ring-primary hover:bg-muted-foreground hover:text-muted inline-flex items-center justify-center rounded-md p-2 focus:outline-hidden focus:ring-2 focus:ring-inset\"\n (click)=\"toggleMobileMenu()\" type=\"button\">\n <span class=\"sr-only\">Open menu</span>\n <!-- Heroicon name: outline/menu -->\n<!-- <svg-icon src=\"assets/icons/heroicons/outline/menu.svg\" [svgClass]=\"'h-6 w-6'\"> </svg-icon>-->\n </button>\n </div>\n\n <!-- Logo -->\n <div class=\"flex items-center justify-start gap-3 sm:order-2 ltr:md:mr-10 rtl:md:ml-10 lg:hidden\">\n <a class=\"bg-primary flex items-center justify-center rounded-sm p-2 focus:outline-hidden focus:ring-1\">\n<!-- <svg-icon src=\"assets/icons/logo.svg\"></svg-icon>-->\n </a>\n <b class=\"text-foreground hidden text-sm font-bold sm:block\"> Angular Tailwind </b>\n </div>\n\n <!-- Desktop Menu -->\n <div class=\"hidden space-x-10 sm:order-3 md:flex\">\n<!-- <app-navbar-menu></app-navbar-menu>-->\n </div>\n\n <!-- Profile menu -->\n <div class=\"items-center justify-end sm:order-4 md:flex md:flex-1 lg:w-0 space-x-1\">\n <amt-navbar-responsive />\n <amt-navbar-colors />\n <amt-navbar-fullscreen />\n <amt-navbar-theme />\n <amt-navbar-notifications />\n <amt-navbar-languages />\n <amt-navbar-profile />\n </div>\n </div>\n </div>\n <!-- Mobile menu -->\n<!-- <app-navbar-mobile></app-navbar-mobile>-->\n</div>\n","import {Component} from '@angular/core';\nimport {RouterOutlet} from '@angular/router';\nimport {SidebarComponent} from './sidebar/sidebar.component';\nimport {NavbarComponent} from './navbar/navbar.component';\n\n@Component({\n selector: 'amt-dashboard-layout',\n imports: [\n RouterOutlet,\n SidebarComponent,\n NavbarComponent\n ],\n templateUrl: './dashboard-layout.component.html',\n styleUrl: './dashboard-layout.component.css'\n})\nexport class DashboardLayoutComponent {}\n\n\n\n","<div class=\"flex h-screen w-full overflow-hidden\">\n <!-- Sidebar -->\n <amt-sidebar />\n\n <div class=\"flex grow flex-col content-start overflow-hidden bg-card\">\n <!-- Header -->\n <amt-navbar />\n <!-- main content -->\n <div class=\"scrollbar-thumb-rounded scrollbar-track-rounded grow overflow-auto scrollbar-thin scrollbar-track-transparent scrollbar-thumb-muted\">\n <div class=\"mx-auto px-4 py-4 sm:px-8 lg:container\">\n <router-outlet></router-outlet>\n </div>\n </div>\n\n <!-- footer -->\n <!-- <app-footer></app-footer>-->\n\n <!-- Bottom bar -->\n <!-- <app-bottom-navbar></app-bottom-navbar> -->\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport {RouterOutlet} from '@angular/router';\n\n@Component({\n selector: 'amt-errors',\n imports: [\n RouterOutlet\n ],\n templateUrl: './errors.component.html',\n styleUrl: './errors.component.css'\n})\nexport class ErrorsComponent {\n\n}\n","<div class=\"flex h-screen w-screen\">\n <div class=\"bg-background flex flex-1 items-center justify-center\">\n <router-outlet></router-outlet>\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RouterModule} from '@angular/router';\n\n@Component({\n selector: 'amt-error404',\n imports: [\n MatButtonModule,\n RouterModule\n ],\n templateUrl: './error404.component.html',\n styleUrl: './error404.component.css'\n})\nexport class Error404Component {\n\n}\n","<div class=\"bg-background flex max-w-lg flex-col items-center justify-center gap-2 rounded-lg p-8 text-center\">\n <img src=\"assets/404.svg\" class=\"w-[300px] h-[150px] text-muted-foreground\" alt=\"404 error\" />\n <h1 class=\"text-foreground text-4xl font-bold\">Booo!</h1>\n <p class=\"text-muted-foreground text-sm\">The requested page is missing. Check the URL or return to</p>\n\n <button routerLink=\"/\" mat-flat-button i18n=\"@@home_page\">Home Page</button>\n</div>\n","import { Component } from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {RouterModule} from '@angular/router';\n\n@Component({\n selector: 'amt-error500',\n imports: [\n MatButtonModule,\n RouterModule\n ],\n templateUrl: './error500.component.html',\n styleUrl: './error500.component.css'\n})\nexport class Error500Component {\n\n}\n","<div class=\"bg-background flex max-w-lg flex-col items-center justify-center gap-2 rounded-lg p-8 text-center\">\n <img src=\"assets/images/500.svg\" class=\"w-[300px] h-[150px] text-muted-foreground\" alt=\"500 error\" />\n <h1 class=\"text-foreground text-4xl font-bold\">Oops! Server Error</h1>\n <p class=\"text-muted-foreground text-sm\">\n Please try again later. If the issue persists, feel free to contact us for assistance.\n </p>\n\n <button routerLink=\"/\" mat-flat-button i18n=\"@@home_page\">Home Page</button>\n</div>\n","import { NgModule } from '@angular/core';\nimport {ErrorsComponent} from './errors.component';\nimport {RouterModule} from '@angular/router';\nimport {Error404Component} from './error404/error404.component';\nimport {Error500Component} from './error500/error500.component';\n\n@NgModule({\n imports: [RouterModule.forChild([{path: '', component: ErrorsComponent, children: [\n {path: '', redirectTo: '404', pathMatch: 'full'},\n {path: '404', component: Error404Component},\n {path: '500', component: Error500Component},\n {path: '**', redirectTo: 'errors/404'},\n ]}])],\n exports: [RouterModule],\n})\nexport class ErrorRoutingModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {ErrorRoutingModule} from './errors-routing.module';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n ErrorRoutingModule\n ]\n})\nexport class ErrorsModule { }\n","/*\n * Public API Surface of amt-ui\n */\nexport * from './lib/services/amt-theme.service';\nexport * from './lib/services/amt-menu.service';\nexport * from './lib/interfaces/amt-menu.interface';\nexport * from './lib/interfaces/amt-theme.inteface';\nexport * from './lib/auth-layout/auth-layout.component';\nexport * from './lib/dashboard-layout/dashboard-layout.component';\nexport * from './lib/errors/errors.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AmtThemeService","i1.AmtMenuService","i2","i3"],"mappings":"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