@updevs/components 1.0.0-alpha.43 → 1.0.0-alpha.45

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.
@@ -1,25 +1,54 @@
1
- import { Component, HostBinding, ViewEncapsulation, inject, signal } from '@angular/core';
1
+ import { Component, HostBinding, ViewEncapsulation, inject, signal, computed, viewChild, ElementRef } from '@angular/core';
2
2
  import { Router, NavigationStart } from '@angular/router';
3
3
  import { TextService } from '@updevs/sdk';
4
4
  import { MenuService } from '@updevs/sdk/routes';
5
- import { BaseComponent } from '@updevs/sdk/layout';
5
+ import { BaseComponent, LayoutService, UpdCoreLayoutConfigService } from '@updevs/sdk/layout';
6
+ import { SecurityStorage } from '@updevs/sdk/security';
6
7
  import { filter } from 'rxjs';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/common";
9
10
  import * as i2 from "@updevs/icons";
10
11
  import * as i3 from "@updevs/components/link";
12
+ import * as i4 from "@updevs/components/dropdown";
11
13
  export class SidebarComponent extends BaseComponent {
12
14
  constructor() {
13
15
  super(...arguments);
14
16
  this.wrapperClasses = 'navbar navbar-vertical navbar-expand-lg';
15
17
  this.theme = 'dark';
16
18
  this.menuItems = [];
19
+ this.isLoggedUserDropdownOpen = false;
20
+ this.loggedUserRef = viewChild('loggedUserBtn', { read: ElementRef });
17
21
  this.textService = inject(TextService);
18
22
  this.isSidebarMobileOpen = signal(false);
23
+ this.config = computed(() => this.layoutService.mainHeaderConfig());
24
+ this.userInfo = computed(() => this.securityStorage.getUserInfo());
25
+ this.userIdentification = computed(() => !!this.userInfo() ? this.coreLayoutConfigService.config.getUserName(this.userInfo()) : '');
26
+ this.userDescription = computed(() => !!this.coreLayoutConfigService.config.getUserDescription
27
+ ? this.coreLayoutConfigService.config.getUserDescription(this.userInfo())
28
+ : '');
29
+ this.loggedUserOptions = computed(() => {
30
+ const userActions = [];
31
+ this.coreLayoutConfigService.config.loggedUserMenuActions.forEach(act => userActions.push({
32
+ id: act.id(),
33
+ text: act.text(),
34
+ type: 'default',
35
+ icon: act.iconModel?.()
36
+ }));
37
+ return userActions;
38
+ });
39
+ this.userInitials = computed(() => {
40
+ const firstChar = this.userIdentification().charAt(0);
41
+ const lastSpaceIndex = this.userIdentification().lastIndexOf(' ');
42
+ const firstAfterLastSpace = lastSpaceIndex !== -1 ? this.userIdentification().charAt(lastSpaceIndex + 1) : '';
43
+ return `${firstChar}${firstAfterLastSpace}`;
44
+ });
19
45
  this.currentRoute = '';
20
46
  this.menuItemsBackup = [];
21
47
  this.router = inject(Router);
22
48
  this.menuService = inject(MenuService);
49
+ this.layoutService = inject(LayoutService);
50
+ this.securityStorage = inject(SecurityStorage);
51
+ this.coreLayoutConfigService = inject(UpdCoreLayoutConfigService);
23
52
  }
24
53
  ngOnInit() {
25
54
  this.currentRoute = this.router.url;
@@ -74,6 +103,12 @@ export class SidebarComponent extends BaseComponent {
74
103
  toggleSidebarOnMobile() {
75
104
  this.isSidebarMobileOpen.set(!this.isSidebarMobileOpen());
76
105
  }
106
+ selectLoggedUserMenuItem(item) {
107
+ const btn = this.coreLayoutConfigService.config.loggedUserMenuActions.find(b => b.id() === item.id);
108
+ if (!!btn?.clickFunction) {
109
+ btn.clickFunction({ data: this.userInfo() });
110
+ }
111
+ }
77
112
  findActiveNode(item, fullPath) {
78
113
  if (item.fullPath === fullPath) {
79
114
  return item;
@@ -184,11 +219,11 @@ export class SidebarComponent extends BaseComponent {
184
219
  return undefined;
185
220
  }
186
221
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SidebarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
187
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SidebarComponent, selector: "upd-sidebar", host: { properties: { "class": "this.wrapperClasses", "attr.data-bs-theme": "this.theme" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i3.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
222
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SidebarComponent, selector: "upd-sidebar", host: { properties: { "class": "this.wrapperClasses", "attr.data-bs-theme": "this.theme" } }, viewQueries: [{ propertyName: "loggedUserRef", first: true, predicate: ["loggedUserBtn"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n\n @if (!!config().showUserMenu && !!userInfo()) {\n <div class=\"navbar-nav flex-row d-lg-none\">\n <div class=\"nav-item dropdown\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLoggedUserDropdownOpen = true\" #loggedUserBtn>\n @if (!!userInfo()!.avatar) {\n <span class=\"avatar avatar-sm\" style=\"background-image: url({{userInfo()?.avatar}})\"></span>\n } @else {\n <span class=\"avatar avatar-sm\">{{ userInitials() }}</span>\n }\n\n <div class=\"d-none d-xl-block px-2\">\n <div>{{ userIdentification() }}</div>\n @if (!!userDescription()) {\n <div class=\"mt-1 small text-muted\">{{ userDescription() }}</div>\n }\n </div>\n </upd-link>\n @if (loggedUserOptions().length > 0) {\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLoggedUserDropdownOpen\" [dropdownReference]=\"loggedUserRef()\"\n [items]=\"loggedUserOptions()\" [shouldCloseOnOutsideClick]=\"true\" (selectedItem)=\"selectLoggedUserMenuItem($event)\"\n (isOpenChange)=\"isLoggedUserDropdownOpen = $event\" arrowType=\"right\">\n </upd-dropdown>\n }\n </div>\n </div>\n }\n\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i3.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }, { kind: "component", type: i4.DropdownComponent, selector: "upd-dropdown", inputs: ["items", "header", "isOpen", "shouldCloseOnOutsideClick", "arrowType", "wrapperClasses", "elementsExcludedFromOutsideClick", "minHeight", "maxHeight", "minWidth", "maxWidth", "dropdownReference", "dropdownReferencePosition", "textOverflowStrategy"], outputs: ["isOpenChange", "selectedItem", "checkboxChanged"] }], encapsulation: i0.ViewEncapsulation.None }); }
188
223
  }
189
224
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SidebarComponent, decorators: [{
190
225
  type: Component,
191
- args: [{ selector: 'upd-sidebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
226
+ args: [{ selector: 'upd-sidebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n\n @if (!!config().showUserMenu && !!userInfo()) {\n <div class=\"navbar-nav flex-row d-lg-none\">\n <div class=\"nav-item dropdown\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLoggedUserDropdownOpen = true\" #loggedUserBtn>\n @if (!!userInfo()!.avatar) {\n <span class=\"avatar avatar-sm\" style=\"background-image: url({{userInfo()?.avatar}})\"></span>\n } @else {\n <span class=\"avatar avatar-sm\">{{ userInitials() }}</span>\n }\n\n <div class=\"d-none d-xl-block px-2\">\n <div>{{ userIdentification() }}</div>\n @if (!!userDescription()) {\n <div class=\"mt-1 small text-muted\">{{ userDescription() }}</div>\n }\n </div>\n </upd-link>\n @if (loggedUserOptions().length > 0) {\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLoggedUserDropdownOpen\" [dropdownReference]=\"loggedUserRef()\"\n [items]=\"loggedUserOptions()\" [shouldCloseOnOutsideClick]=\"true\" (selectedItem)=\"selectLoggedUserMenuItem($event)\"\n (isOpenChange)=\"isLoggedUserDropdownOpen = $event\" arrowType=\"right\">\n </upd-dropdown>\n }\n </div>\n </div>\n }\n\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
192
227
  }], propDecorators: { wrapperClasses: [{
193
228
  type: HostBinding,
194
229
  args: ['class']
@@ -196,4 +231,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
196
231
  type: HostBinding,
197
232
  args: ['attr.data-bs-theme']
198
233
  }] } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGF5b3V0L3NyYy9wYXJ0aWFscy9zaWRlYmFyL3NpZGViYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvc2lkZWJhci9zaWRlYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBUTlCLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxhQUFhO0lBTm5EOztRQU8wQixtQkFBYyxHQUFHLHlDQUF5QyxDQUFDO1FBQzlDLFVBQUssR0FBRyxNQUFNLENBQUM7UUFFbEQsY0FBUyxHQUFxQixFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJDLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLG9CQUFlLEdBQXFCLEVBQUUsQ0FBQztRQUU5QixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGdCQUFXLEdBQUcs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QUFRLEVBQUUsSUFBSSxFQUFvQixDQUFDO2dCQUM1RCxDQUFDO2dCQUVELE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDM0IsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBdUIsRUFBRSxRQUFhO1FBQ3ZELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN2QixPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBRXpELElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNWLE9BQU8sS0FBSyxDQUFDO2dCQUNqQixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDOzhHQXBPUSxnQkFBZ0I7a0dBQWhCLGdCQUFnQix3S0NkN0IsdXZIQXdFQTs7MkZEMURhLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDSSxhQUFhLGlCQUdSLGlCQUFpQixDQUFDLElBQUk7OEJBR2YsY0FBYztzQkFBbkMsV0FBVzt1QkFBQyxPQUFPO2dCQUNlLEtBQUs7c0JBQXZDLFdBQVc7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgVmlld0VuY2Fwc3VsYXRpb24sIE9uSW5pdCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvblN0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRleHRTZXJ2aWNlIH0gZnJvbSAnQHVwZGV2cy9zZGsnO1xuaW1wb3J0IHsgUm91dGVEYXRhTW9kZWwsIE1lbnVTZXJ2aWNlIH0gZnJvbSAnQHVwZGV2cy9zZGsvcm91dGVzJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdAdXBkZXZzL3Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgT3B0aW9uYWxUeXBlIH0gZnJvbSAnQHVwZGV2cy9zZGsvdHlwZXMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndXBkLXNpZGViYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zaWRlYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zaWRlYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTaWRlYmFyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIHdyYXBwZXJDbGFzc2VzID0gJ25hdmJhciBuYXZiYXItdmVydGljYWwgbmF2YmFyLWV4cGFuZC1sZyc7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtYnMtdGhlbWUnKSB0aGVtZSA9ICdkYXJrJztcblxuICAgIG1lbnVJdGVtczogUm91dGVEYXRhTW9kZWxbXSA9IFtdO1xuICAgIHJlYWRvbmx5IHRleHRTZXJ2aWNlID0gaW5qZWN0KFRleHRTZXJ2aWNlKTtcbiAgICByZWFkb25seSBpc1NpZGViYXJNb2JpbGVPcGVuID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIHByaXZhdGUgY3VycmVudFJvdXRlID0gJyc7XG4gICAgcHJpdmF0ZSBtZW51SXRlbXNCYWNrdXA6IFJvdXRlRGF0YU1vZGVsW10gPSBbXTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51U2VydmljZSA9IGluamVjdChNZW51U2VydmljZSk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zID0gdGhpcy5tZW51U2VydmljZS5nZW5lcmF0ZU1lbnUoKTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXNCYWNrdXAgPSBbLi4udGhpcy5tZW51SXRlbXNdO1xuICAgICAgICBjb25zdCBtZW51UmVmcmVzaFN1YiA9IHRoaXMubWVudVNlcnZpY2UucmVmcmVzaFN1YmplY3Quc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zID0gWy4uLnRoaXMubWVudVNlcnZpY2UuZ2VuZXJhdGVNZW51KCldO1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXNCYWNrdXAgPSBbLi4udGhpcy5tZW51SXRlbXNdO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZVJvdXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByb3V0ZXJTdWIgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydClcbiAgICAgICAgKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Um91dGUgPSAoPE5hdmlnYXRpb25TdGFydD5ldmVudCkudXJsO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVSb3V0ZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZVJvdXRlKCk7XG4gICAgICAgIHRoaXMuYWRkU3Vic2NyaXB0aW9ucyhyb3V0ZXJTdWIsIG1lbnVSZWZyZXNoU3ViKTtcbiAgICB9XG5cbiAgICBvbk1lbnVJdGVtQ2xpY2soaXRlbTogUm91dGVEYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKGl0ZW0uaXNMb2NrZWQpIHtcbiAgICAgICAgICAgIGlmICghIWl0ZW0ubG9ja2VkQ2xpY2tGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIGl0ZW0ubG9ja2VkQ2xpY2tGdW5jdGlvbigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3TWVudUl0ZW1zID0gdGhpcy5yZXNldE1lbnVTdGF0ZSh0aGlzLm1lbnVJdGVtcyk7XG4gICAgICAgIG5ld01lbnVJdGVtcyA9IHRoaXMuc2V0SXRlbUFjdGl2ZShuZXdNZW51SXRlbXMsIGl0ZW0sIHRoaXMuaGFzQ2hpbGRyZW4oaXRlbSkgPyAhaXRlbS5pc0FjdGl2ZSA6IHRydWUpO1xuICAgICAgICBuZXdNZW51SXRlbXMgPSB0aGlzLnVwZGF0ZVBhcmVudHMobmV3TWVudUl0ZW1zLCBpdGVtKTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXMgPSBuZXdNZW51SXRlbXM7XG5cbiAgICAgICAgaWYgKCEhaXRlbS5jbGlja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICBpdGVtLmNsaWNrRnVuY3Rpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHRoaXMuZmluZEl0ZW1CeUlkKHRoaXMubWVudUl0ZW1zQmFja3VwLCBpdGVtLmlkKSEuZ2V0RnVsbFBhdGgoKTtcblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShmdWxsUGF0aCkudGhlbigpO1xuICAgIH1cblxuICAgIGhhc0NoaWxkcmVuKGl0ZW06IFJvdXRlRGF0YU1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoaXRlbS5jaGlsZHJlbj8ubGVuZ3RoIHx8IDApID4gMDtcbiAgICB9XG5cbiAgICBhc01lbnVJdGVtKGl0ZW06IGFueSk6IFJvdXRlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gYXMgUm91dGVEYXRhTW9kZWw7XG4gICAgfVxuXG4gICAgZ2V0SXRlbUNsYXNzZXMoaXRlbTogUm91dGVEYXRhTW9kZWwsIGFjdGl2ZUNsYXNzOiBzdHJpbmcsIC4uLmNsYXNzZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4uY2xhc3NlcyxcbiAgICAgICAgICAgIGl0ZW0uaXNBY3RpdmUgPyBhY3RpdmVDbGFzcyA6ICcnLFxuICAgICAgICAgICAgaXRlbS5pc0xvY2tlZCA/ICdkaXNhYmxlZCcgOiAnJ1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIHRvZ2dsZVNpZGViYXJPbk1vYmlsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1NpZGViYXJNb2JpbGVPcGVuLnNldCghdGhpcy5pc1NpZGViYXJNb2JpbGVPcGVuKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEFjdGl2ZU5vZGUoaXRlbTogUm91dGVEYXRhTW9kZWwsIGZ1bGxQYXRoOiBzdHJpbmcpOiBPcHRpb25hbFR5cGU8Um91dGVEYXRhTW9kZWw+IHtcbiAgICAgICAgaWYgKGl0ZW0uZnVsbFBhdGggPT09IGZ1bGxQYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRBY3RpdmVOb2RlKGNoaWxkLCBmdWxsUGF0aCk7XG5cbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVBY3RpdmVSb3V0ZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IG5ld01lbnVJdGVtcyA9IHRoaXMucmVzZXRNZW51U3RhdGUodGhpcy5tZW51SXRlbXMpO1xuICAgICAgICBjb25zdCBhY3RpdmVQYXRoID0gdGhpcy5nZXRBY3RpdmVQYXRoKG5ld01lbnVJdGVtcyk7XG4gICAgICAgIG5ld01lbnVJdGVtcyA9IHRoaXMuc2V0QWN0aXZlUGF0aChuZXdNZW51SXRlbXMsIGFjdGl2ZVBhdGgpO1xuICAgICAgICB0aGlzLm1lbnVJdGVtcyA9IG5ld01lbnVJdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEFjdGl2ZVBhdGgoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIHBhdGg6IFJvdXRlRGF0YU1vZGVsW10pOiBSb3V0ZURhdGFNb2RlbFtdIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aEl0ZW0gPSBwYXRoLmZpbmQocCA9PiBwLmlkID09PSBpdGVtLmlkKTtcblxuICAgICAgICAgICAgaWYgKCFwYXRoSXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtID0geyAuLi5pdGVtLCBpc0FjdGl2ZTogdHJ1ZSB9IGFzIFJvdXRlRGF0YU1vZGVsO1xuXG4gICAgICAgICAgICBpZiAobmV3SXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbiA9IHRoaXMuc2V0QWN0aXZlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5maWx0ZXIocCA9PiBwLnBhcmVudD8uaWQgPT09IG5ld0l0ZW0uaWQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQucGFyZW50ID0gbmV3SXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjdGl2ZVBhdGgoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10pOiBSb3V0ZURhdGFNb2RlbFtdIHtcbiAgICAgICAgbGV0IGFjdGl2ZUl0ZW06IE9wdGlvbmFsVHlwZTxSb3V0ZURhdGFNb2RlbD47XG5cbiAgICAgICAgLy8gRmluZCB0aGUgZGVlcGVzdCBhY3RpdmUgaXRlbS5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBhY3RpdmVJdGVtID0gdGhpcy5maW5kQWN0aXZlTm9kZShpdGVtLCB0aGlzLmN1cnJlbnRSb3V0ZSk7XG5cbiAgICAgICAgICAgIGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2xsZWN0IHBhcmVudCBoaWVyYXJjaHkuXG4gICAgICAgIGNvbnN0IHBhdGg6IFJvdXRlRGF0YU1vZGVsW10gPSBbXTtcblxuICAgICAgICB3aGlsZSAoYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgcGF0aC51bnNoaWZ0KGFjdGl2ZUl0ZW0pO1xuICAgICAgICAgICAgYWN0aXZlSXRlbSA9IGFjdGl2ZUl0ZW0ucGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldE1lbnVTdGF0ZShpdGVtczogUm91dGVEYXRhTW9kZWxbXSk6IFJvdXRlRGF0YU1vZGVsW10ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4uaXRlbSwgaXNBY3RpdmU6IGZhbHNlIH0gYXMgUm91dGVEYXRhTW9kZWw7XG5cbiAgICAgICAgICAgIGlmIChuZXdJdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuID0gdGhpcy5yZXNldE1lbnVTdGF0ZShuZXdJdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQucGFyZW50ID0gbmV3SXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEl0ZW1BY3RpdmUoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIHRhcmdldDogUm91dGVEYXRhTW9kZWwsIGlzQWN0aXZlOiBib29sZWFuKTogUm91dGVEYXRhTW9kZWxbXSB7XG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gdGFyZ2V0LmlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4uaXRlbSwgaXNBY3RpdmUgfSBhcyBSb3V0ZURhdGFNb2RlbDtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdJdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbiA9IHRoaXMuc2V0SXRlbUFjdGl2ZShuZXdJdGVtLmNoaWxkcmVuLCB0YXJnZXQsIGlzQWN0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnBhcmVudCA9IG5ld0l0ZW0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2hpbGRyZW4gPSB0aGlzLnNldEl0ZW1BY3RpdmUoaXRlbS5jaGlsZHJlbiwgdGFyZ2V0LCBpc0FjdGl2ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4uaXRlbSwgY2hpbGRyZW46IG5ld0NoaWxkcmVuIH0gYXMgUm91dGVEYXRhTW9kZWw7XG5cbiAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnBhcmVudCA9IG5ld0l0ZW0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVBhcmVudHMoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIGNoaWxkSXRlbTogUm91dGVEYXRhTW9kZWwpOiBSb3V0ZURhdGFNb2RlbFtdIHtcbiAgICAgICAgbGV0IHBhcmVudCA9IGNoaWxkSXRlbS5wYXJlbnQ7XG4gICAgICAgIGxldCB1cGRhdGVkSXRlbXMgPSBbLi4uaXRlbXNdO1xuXG4gICAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRJdGVtcyA9IHVwZGF0ZWRJdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHBhcmVudCEuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucGFyZW50ISwgaXNBY3RpdmU6IHRydWUgfSBhcyBSb3V0ZURhdGFNb2RlbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVkSXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kSXRlbUJ5SWQoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIHRhcmdldElkOiBhbnkpOiBPcHRpb25hbFR5cGU8Um91dGVEYXRhTW9kZWw+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gdGFyZ2V0SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5maW5kSXRlbUJ5SWQoaXRlbS5jaGlsZHJlbiwgdGFyZ2V0SWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEhY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJuYXZiYXItdG9nZ2xlclwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlU2lkZWJhck9uTW9iaWxlKClcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzU2lkZWJhck1vYmlsZU9wZW4oKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyLWljb25cIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGgxIGNsYXNzPVwibmF2YmFyLWJyYW5kIG5hdmJhci1icmFuZC1hdXRvZGFya1wiPlxuICAgICAgICA8YSBocmVmPVwiLlwiPlxuICAgICAgICAgICAgPGltZyB3aWR0aD1cIjExMFwiIGhlaWdodD1cIjMyXCIgY2xhc3M9XCJuYXZiYXItYnJhbmQtaW1hZ2UgdXBkLWJyYW5kLWxvZ29cIiAvPlxuICAgICAgICA8L2E+XG4gICAgPC9oMT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgW2NsYXNzLnNob3ddPVwiaXNTaWRlYmFyTW9iaWxlT3BlbigpXCI+XG4gICAgICAgIDx1bCBjbGFzcz1cIm5hdmJhci1uYXYgcHQtbGctM1wiPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBtZW51SXRlbXM7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIFtjbGFzcy5kcm9wZG93bl09XCJoYXNDaGlsZHJlbihpdGVtKVwiIFtjbGFzcy5hY3RpdmVdPVwiaXRlbS5pc0FjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UcGxcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie21lbnVJdGVtOiBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNpdGVtVHBsIGxldC1pdGVtPVwibWVudUl0ZW1cIj5cbiAgICA8dXBkLWxpbmsgW2lzTmF2aWdhdGlvbl09XCJ0cnVlXCIgKGNsaWNrZWQpPVwib25NZW51SXRlbUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgW2N1c3RvbUNsYXNzZXNdPVwiZ2V0SXRlbUNsYXNzZXMoaXRlbSwgJ3Nob3cnLCBoYXNDaGlsZHJlbihpdGVtKSA/ICdkcm9wZG93bi10b2dnbGUnOicnKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpbmtDb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInttZW51SXRlbTogaXRlbX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3VwZC1saW5rPlxuICAgIEBpZiAoaGFzQ2hpbGRyZW4oaXRlbSkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZHJlblRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bWVudUl0ZW06IGl0ZW19XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaW5rQ29udGVudCBsZXQtaXRlbT1cIm1lbnVJdGVtXCI+XG4gICAgQGlmICghIWl0ZW0uaWNvbikge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1saW5rLWljb24gZC1tZC1ub25lIGQtbGctaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgICA8dXBkLWljb24gW21vZGVsXT1cIml0ZW0uaWNvblwiPjwvdXBkLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICB9XG4gICAgPHNwYW4gY2xhc3M9XCJuYXYtbGluay10aXRsZVwiPnt7IHRleHRTZXJ2aWNlLmdldFRleHQoaXRlbS50aXRsZSkgfX08L3NwYW4+XG4gICAgQGlmIChpdGVtLmlzTG9ja2VkKSB7XG4gICAgICAgIDx1cGQtaWNvbiBjbGFzcz1cIm1zLWF1dG9cIiBbbW9kZWxdPVwie3RhYmxlckljb246ICdsb2NrJ31cIj48L3VwZC1pY29uPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2hpbGRyZW5UcGwgbGV0LWl0ZW09XCJtZW51SXRlbVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgW2NsYXNzLnNob3ddPVwiaXRlbS5pc0FjdGl2ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudS1jb2x1bW5zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBhc01lbnVJdGVtKGl0ZW0pLmNoaWxkcmVuOyB0cmFjayBjaGlsZC5pZCkge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKCFoYXNDaGlsZHJlbihjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtbGluayAoY2xpY2tlZCk9XCJvbk1lbnVJdGVtQ2xpY2soY2hpbGQpXCIgW2N1c3RvbUNsYXNzZXNdPVwiZ2V0SXRlbUNsYXNzZXMoY2hpbGQsICdhY3RpdmUnLCAnZHJvcGRvd24taXRlbScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaW5rQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bWVudUl0ZW06IGNoaWxkfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91cGQtbGluaz5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtbGluayAoY2xpY2tlZCk9XCJvbk1lbnVJdGVtQ2xpY2soY2hpbGQpXCIgW2N1c3RvbUNsYXNzZXNdPVwiZ2V0SXRlbUNsYXNzZXMoY2hpbGQsICdhY3RpdmUnLCAnZHJvcGRvd24taXRlbScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlua0NvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie21lbnVJdGVtOiBjaGlsZH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgW2NsYXNzLnNob3ddPVwiY2hpbGQuaXNBY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZ3JhbmRjaGlsZCBvZiBjaGlsZC5jaGlsZHJlbjsgdHJhY2sgZ3JhbmRjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwZC1saW5rIChjbGlja2VkKT1cIm9uTWVudUl0ZW1DbGljayhncmFuZGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUNsYXNzZXNdPVwiZ2V0SXRlbUNsYXNzZXMoZ3JhbmRjaGlsZCwgJ2FjdGl2ZScsICdkcm9wZG93bi1pdGVtJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpbmtDb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInttZW51SXRlbTogZ3JhbmRjaGlsZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdXBkLWxpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGF5b3V0L3NyYy9wYXJ0aWFscy9zaWRlYmFyL3NpZGViYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvc2lkZWJhci9zaWRlYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkksT0FBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBUTlCLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxhQUFhO0lBTm5EOztRQU8wQixtQkFBYyxHQUFHLHlDQUF5QyxDQUFDO1FBQzlDLFVBQUssR0FBRyxNQUFNLENBQUM7UUFFbEQsY0FBUyxHQUFxQixFQUFFLENBQUM7UUFDakMsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO1FBRXhCLGtCQUFhLEdBQUcsU0FBUyxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FB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IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkluaXQsIGluamVjdCwgc2lnbmFsLCBjb21wdXRlZCwgdmlld0NoaWxkLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25TdGFydCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUZXh0U2VydmljZSB9IGZyb20gJ0B1cGRldnMvc2RrJztcbmltcG9ydCB7IFJvdXRlRGF0YU1vZGVsLCBNZW51U2VydmljZSB9IGZyb20gJ0B1cGRldnMvc2RrL3JvdXRlcyc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBMYXlvdXRTZXJ2aWNlLCBVcGRDb3JlTGF5b3V0Q29uZmlnU2VydmljZSB9IGZyb20gJ0B1cGRldnMvc2RrL2xheW91dCc7XG5pbXBvcnQgeyBTZWN1cml0eVN0b3JhZ2UgfSBmcm9tICdAdXBkZXZzL3Nkay9zZWN1cml0eSc7XG5pbXBvcnQgeyBPcHRpb25hbFR5cGUgfSBmcm9tICdAdXBkZXZzL3Nkay90eXBlcyc7XG5pbXBvcnQgeyBEcm9wZG93bkl0ZW0gfSBmcm9tICdAdXBkZXZzL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndXBkLXNpZGViYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zaWRlYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zaWRlYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTaWRlYmFyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIHdyYXBwZXJDbGFzc2VzID0gJ25hdmJhciBuYXZiYXItdmVydGljYWwgbmF2YmFyLWV4cGFuZC1sZyc7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtYnMtdGhlbWUnKSB0aGVtZSA9ICdkYXJrJztcblxuICAgIG1lbnVJdGVtczogUm91dGVEYXRhTW9kZWxbXSA9IFtdO1xuICAgIGlzTG9nZ2VkVXNlckRyb3Bkb3duT3BlbiA9IGZhbHNlO1xuXG4gICAgcmVhZG9ubHkgbG9nZ2VkVXNlclJlZiA9IHZpZXdDaGlsZCgnbG9nZ2VkVXNlckJ0bicsIHsgcmVhZDogRWxlbWVudFJlZiB9KTtcbiAgICByZWFkb25seSB0ZXh0U2VydmljZSA9IGluamVjdChUZXh0U2VydmljZSk7XG4gICAgcmVhZG9ubHkgaXNTaWRlYmFyTW9iaWxlT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gICAgcmVhZG9ubHkgY29uZmlnID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sYXlvdXRTZXJ2aWNlLm1haW5IZWFkZXJDb25maWcoKSk7XG4gICAgcmVhZG9ubHkgdXNlckluZm8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlY3VyaXR5U3RvcmFnZS5nZXRVc2VySW5mbygpKTtcbiAgICByZWFkb25seSB1c2VySWRlbnRpZmljYXRpb24gPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICAhIXRoaXMudXNlckluZm8oKSA/IHRoaXMuY29yZUxheW91dENvbmZpZ1NlcnZpY2UuY29uZmlnLmdldFVzZXJOYW1lKHRoaXMudXNlckluZm8oKSEpIDogJydcbiAgICApO1xuICAgIHJlYWRvbmx5IHVzZXJEZXNjcmlwdGlvbiA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgICEhdGhpcy5jb3JlTGF5b3V0Q29uZmlnU2VydmljZS5jb25maWcuZ2V0VXNlckRlc2NyaXB0aW9uXG4gICAgICAgICAgICA/IHRoaXMuY29yZUxheW91dENvbmZpZ1NlcnZpY2UuY29uZmlnLmdldFVzZXJEZXNjcmlwdGlvbih0aGlzLnVzZXJJbmZvKCkhKVxuICAgICAgICAgICAgOiAnJ1xuICAgICk7XG4gICAgcmVhZG9ubHkgbG9nZ2VkVXNlck9wdGlvbnMgPSBjb21wdXRlZDxEcm9wZG93bkl0ZW1bXT4oKCkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyQWN0aW9uczogRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICAgICAgICB0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5sb2dnZWRVc2VyTWVudUFjdGlvbnMuZm9yRWFjaChhY3QgPT4gdXNlckFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBpZDogYWN0LmlkISgpLFxuICAgICAgICAgICAgdGV4dDogYWN0LnRleHQhKCksXG4gICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICBpY29uOiBhY3QuaWNvbk1vZGVsPy4oKVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgcmV0dXJuIHVzZXJBY3Rpb25zO1xuICAgIH0pO1xuICAgIHJlYWRvbmx5IHVzZXJJbml0aWFscyA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4ge1xuICAgICAgICBjb25zdCBmaXJzdENoYXIgPSB0aGlzLnVzZXJJZGVudGlmaWNhdGlvbigpLmNoYXJBdCgwKTtcbiAgICAgICAgY29uc3QgbGFzdFNwYWNlSW5kZXggPSB0aGlzLnVzZXJJZGVudGlmaWNhdGlvbigpLmxhc3RJbmRleE9mKCcgJyk7XG4gICAgICAgIGNvbnN0IGZpcnN0QWZ0ZXJMYXN0U3BhY2UgPSBsYXN0U3BhY2VJbmRleCAhPT0gLTEgPyB0aGlzLnVzZXJJZGVudGlmaWNhdGlvbigpLmNoYXJBdChsYXN0U3BhY2VJbmRleCArIDEpIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIGAke2ZpcnN0Q2hhcn0ke2ZpcnN0QWZ0ZXJMYXN0U3BhY2V9YDtcbiAgICB9KTtcblxuICAgIHByaXZhdGUgY3VycmVudFJvdXRlID0gJyc7XG4gICAgcHJpdmF0ZSBtZW51SXRlbXNCYWNrdXA6IFJvdXRlRGF0YU1vZGVsW10gPSBbXTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51U2VydmljZSA9IGluamVjdChNZW51U2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsYXlvdXRTZXJ2aWNlID0gaW5qZWN0KExheW91dFNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VjdXJpdHlTdG9yYWdlID0gaW5qZWN0KFNlY3VyaXR5U3RvcmFnZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb3JlTGF5b3V0Q29uZmlnU2VydmljZSA9IGluamVjdChVcGRDb3JlTGF5b3V0Q29uZmlnU2VydmljZSk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zID0gdGhpcy5tZW51U2VydmljZS5nZW5lcmF0ZU1lbnUoKTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXNCYWNrdXAgPSBbLi4udGhpcy5tZW51SXRlbXNdO1xuICAgICAgICBjb25zdCBtZW51UmVmcmVzaFN1YiA9IHRoaXMubWVudVNlcnZpY2UucmVmcmVzaFN1YmplY3Quc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zID0gWy4uLnRoaXMubWVudVNlcnZpY2UuZ2VuZXJhdGVNZW51KCldO1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXNCYWNrdXAgPSBbLi4udGhpcy5tZW51SXRlbXNdO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZVJvdXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByb3V0ZXJTdWIgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydClcbiAgICAgICAgKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Um91dGUgPSAoPE5hdmlnYXRpb25TdGFydD5ldmVudCkudXJsO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVSb3V0ZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZVJvdXRlKCk7XG4gICAgICAgIHRoaXMuYWRkU3Vic2NyaXB0aW9ucyhyb3V0ZXJTdWIsIG1lbnVSZWZyZXNoU3ViKTtcbiAgICB9XG5cbiAgICBvbk1lbnVJdGVtQ2xpY2soaXRlbTogUm91dGVEYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKGl0ZW0uaXNMb2NrZWQpIHtcbiAgICAgICAgICAgIGlmICghIWl0ZW0ubG9ja2VkQ2xpY2tGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIGl0ZW0ubG9ja2VkQ2xpY2tGdW5jdGlvbigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3TWVudUl0ZW1zID0gdGhpcy5yZXNldE1lbnVTdGF0ZSh0aGlzLm1lbnVJdGVtcyk7XG4gICAgICAgIG5ld01lbnVJdGVtcyA9IHRoaXMuc2V0SXRlbUFjdGl2ZShuZXdNZW51SXRlbXMsIGl0ZW0sIHRoaXMuaGFzQ2hpbGRyZW4oaXRlbSkgPyAhaXRlbS5pc0FjdGl2ZSA6IHRydWUpO1xuICAgICAgICBuZXdNZW51SXRlbXMgPSB0aGlzLnVwZGF0ZVBhcmVudHMobmV3TWVudUl0ZW1zLCBpdGVtKTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXMgPSBuZXdNZW51SXRlbXM7XG5cbiAgICAgICAgaWYgKCEhaXRlbS5jbGlja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICBpdGVtLmNsaWNrRnVuY3Rpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHRoaXMuZmluZEl0ZW1CeUlkKHRoaXMubWVudUl0ZW1zQmFja3VwLCBpdGVtLmlkKSEuZ2V0RnVsbFBhdGgoKTtcblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShmdWxsUGF0aCkudGhlbigpO1xuICAgIH1cblxuICAgIGhhc0NoaWxkcmVuKGl0ZW06IFJvdXRlRGF0YU1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoaXRlbS5jaGlsZHJlbj8ubGVuZ3RoIHx8IDApID4gMDtcbiAgICB9XG5cbiAgICBhc01lbnVJdGVtKGl0ZW06IGFueSk6IFJvdXRlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gYXMgUm91dGVEYXRhTW9kZWw7XG4gICAgfVxuXG4gICAgZ2V0SXRlbUNsYXNzZXMoaXRlbTogUm91dGVEYXRhTW9kZWwsIGFjdGl2ZUNsYXNzOiBzdHJpbmcsIC4uLmNsYXNzZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4uY2xhc3NlcyxcbiAgICAgICAgICAgIGl0ZW0uaXNBY3RpdmUgPyBhY3RpdmVDbGFzcyA6ICcnLFxuICAgICAgICAgICAgaXRlbS5pc0xvY2tlZCA/ICdkaXNhYmxlZCcgOiAnJ1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIHRvZ2dsZVNpZGViYXJPbk1vYmlsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1NpZGViYXJNb2JpbGVPcGVuLnNldCghdGhpcy5pc1NpZGViYXJNb2JpbGVPcGVuKCkpO1xuICAgIH1cblxuICAgIHNlbGVjdExvZ2dlZFVzZXJNZW51SXRlbShpdGVtOiBEcm9wZG93bkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYnRuID0gdGhpcy5jb3JlTGF5b3V0Q29uZmlnU2VydmljZS5jb25maWcubG9nZ2VkVXNlck1lbnVBY3Rpb25zLmZpbmQoYiA9PiBiLmlkISgpID09PSBpdGVtLmlkKTtcblxuICAgICAgICBpZiAoISFidG4/LmNsaWNrRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGJ0bi5jbGlja0Z1bmN0aW9uISh7IGRhdGE6IHRoaXMudXNlckluZm8oKSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEFjdGl2ZU5vZGUoaXRlbTogUm91dGVEYXRhTW9kZWwsIGZ1bGxQYXRoOiBzdHJpbmcpOiBPcHRpb25hbFR5cGU8Um91dGVEYXRhTW9kZWw+IHtcbiAgICAgICAgaWYgKGl0ZW0uZnVsbFBhdGggPT09IGZ1bGxQYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRBY3RpdmVOb2RlKGNoaWxkLCBmdWxsUGF0aCk7XG5cbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVBY3RpdmVSb3V0ZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IG5ld01lbnVJdGVtcyA9IHRoaXMucmVzZXRNZW51U3RhdGUodGhpcy5tZW51SXRlbXMpO1xuICAgICAgICBjb25zdCBhY3RpdmVQYXRoID0gdGhpcy5nZXRBY3RpdmVQYXRoKG5ld01lbnVJdGVtcyk7XG4gICAgICAgIG5ld01lbnVJdGVtcyA9IHRoaXMuc2V0QWN0aXZlUGF0aChuZXdNZW51SXRlbXMsIGFjdGl2ZVBhdGgpO1xuICAgICAgICB0aGlzLm1lbnVJdGVtcyA9IG5ld01lbnVJdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEFjdGl2ZVBhdGgoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIHBhdGg6IFJvdXRlRGF0YU1vZGVsW10pOiBSb3V0ZURhdGFNb2RlbFtdIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aEl0ZW0gPSBwYXRoLmZpbmQocCA9PiBwLmlkID09PSBpdGVtLmlkKTtcblxuICAgICAgICAgICAgaWYgKCFwYXRoSXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtID0geyAuLi5pdGVtLCBpc0FjdGl2ZTogdHJ1ZSB9IGFzIFJvdXRlRGF0YU1vZGVsO1xuXG4gICAgICAgICAgICBpZiAobmV3SXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbiA9IHRoaXMuc2V0QWN0aXZlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5maWx0ZXIocCA9PiBwLnBhcmVudD8uaWQgPT09IG5ld0l0ZW0uaWQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQucGFyZW50ID0gbmV3SXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjdGl2ZVBhdGgoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10pOiBSb3V0ZURhdGFNb2RlbFtdIHtcbiAgICAgICAgbGV0IGFjdGl2ZUl0ZW06IE9wdGlvbmFsVHlwZTxSb3V0ZURhdGFNb2RlbD47XG5cbiAgICAgICAgLy8gRmluZCB0aGUgZGVlcGVzdCBhY3RpdmUgaXRlbS5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBhY3RpdmVJdGVtID0gdGhpcy5maW5kQWN0aXZlTm9kZShpdGVtLCB0aGlzLmN1cnJlbnRSb3V0ZSk7XG5cbiAgICAgICAgICAgIGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2xsZWN0IHBhcmVudCBoaWVyYXJjaHkuXG4gICAgICAgIGNvbnN0IHBhdGg6IFJvdXRlRGF0YU1vZGVsW10gPSBbXTtcblxuICAgICAgICB3aGlsZSAoYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgcGF0aC51bnNoaWZ0KGFjdGl2ZUl0ZW0pO1xuICAgICAgICAgICAgYWN0aXZlSXRlbSA9IGFjdGl2ZUl0ZW0ucGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldE1lbnVTdGF0ZShpdGVtczogUm91dGVEYXRhTW9kZWxbXSk6IFJvdXRlRGF0YU1vZGVsW10ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4uaXRlbSwgaXNBY3RpdmU6IGZhbHNlIH0gYXMgUm91dGVEYXRhTW9kZWw7XG5cbiAgICAgICAgICAgIGlmIChuZXdJdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuID0gdGhpcy5yZXNldE1lbnVTdGF0ZShuZXdJdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQucGFyZW50ID0gbmV3SXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEl0ZW1BY3RpdmUoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIHRhcmdldDogUm91dGVEYXRhTW9kZWwsIGlzQWN0aXZlOiBib29sZWFuKTogUm91dGVEYXRhTW9kZWxbXSB7XG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gdGFyZ2V0LmlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4uaXRlbSwgaXNBY3RpdmUgfSBhcyBSb3V0ZURhdGFNb2RlbDtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdJdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbiA9IHRoaXMuc2V0SXRlbUFjdGl2ZShuZXdJdGVtLmNoaWxkcmVuLCB0YXJnZXQsIGlzQWN0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnBhcmVudCA9IG5ld0l0ZW0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2hpbGRyZW4gPSB0aGlzLnNldEl0ZW1BY3RpdmUoaXRlbS5jaGlsZHJlbiwgdGFyZ2V0LCBpc0FjdGl2ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4uaXRlbSwgY2hpbGRyZW46IG5ld0NoaWxkcmVuIH0gYXMgUm91dGVEYXRhTW9kZWw7XG5cbiAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnBhcmVudCA9IG5ld0l0ZW0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVBhcmVudHMoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIGNoaWxkSXRlbTogUm91dGVEYXRhTW9kZWwpOiBSb3V0ZURhdGFNb2RlbFtdIHtcbiAgICAgICAgbGV0IHBhcmVudCA9IGNoaWxkSXRlbS5wYXJlbnQ7XG4gICAgICAgIGxldCB1cGRhdGVkSXRlbXMgPSBbLi4uaXRlbXNdO1xuXG4gICAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRJdGVtcyA9IHVwZGF0ZWRJdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHBhcmVudCEuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucGFyZW50ISwgaXNBY3RpdmU6IHRydWUgfSBhcyBSb3V0ZURhdGFNb2RlbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVkSXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kSXRlbUJ5SWQoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIHRhcmdldElkOiBhbnkpOiBPcHRpb25hbFR5cGU8Um91dGVEYXRhTW9kZWw+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gdGFyZ2V0SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5maW5kSXRlbUJ5SWQoaXRlbS5jaGlsZHJlbiwgdGFyZ2V0SWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEhY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJuYXZiYXItdG9nZ2xlclwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlU2lkZWJhck9uTW9iaWxlKClcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzU2lkZWJhck1vYmlsZU9wZW4oKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyLWljb25cIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGgxIGNsYXNzPVwibmF2YmFyLWJyYW5kIG5hdmJhci1icmFuZC1hdXRvZGFya1wiPlxuICAgICAgICA8YSBocmVmPVwiLlwiPlxuICAgICAgICAgICAgPGltZyB3aWR0aD1cIjExMFwiIGhlaWdodD1cIjMyXCIgY2xhc3M9XCJuYXZiYXItYnJhbmQtaW1hZ2UgdXBkLWJyYW5kLWxvZ29cIiAvPlxuICAgICAgICA8L2E+XG4gICAgPC9oMT5cblxuICAgIEBpZiAoISFjb25maWcoKS5zaG93VXNlck1lbnUgJiYgISF1c2VySW5mbygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXZiYXItbmF2IGZsZXgtcm93IGQtbGctbm9uZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgPHVwZC1saW5rIFtpc05hdmlnYXRpb25dPVwidHJ1ZVwiIFtjdXN0b21DbGFzc2VzXT1cIlsncHgtMCddXCIgKGNsaWNrZWQpPVwiaXNMb2dnZWRVc2VyRHJvcGRvd25PcGVuID0gdHJ1ZVwiICNsb2dnZWRVc2VyQnRuPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCEhdXNlckluZm8oKSEuYXZhdGFyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF2YXRhciBhdmF0YXItc21cIiBzdHlsZT1cImJhY2tncm91bmQtaW1hZ2U6IHVybCh7e3VzZXJJbmZvKCk/LmF2YXRhcn19KVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF2YXRhciBhdmF0YXItc21cIj57eyB1c2VySW5pdGlhbHMoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC14bC1ibG9jayBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IHVzZXJJZGVudGlmaWNhdGlvbigpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEhdXNlckRlc2NyaXB0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBzbWFsbCB0ZXh0LW11dGVkXCI+e3sgdXNlckRlc2NyaXB0aW9uKCkgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC91cGQtbGluaz5cbiAgICAgICAgICAgICAgICBAaWYgKGxvZ2dlZFVzZXJPcHRpb25zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICA8dXBkLWRyb3Bkb3duIHdyYXBwZXJDbGFzc2VzPVwibXQtMVwiIFtpc09wZW5dPVwiaXNMb2dnZWRVc2VyRHJvcGRvd25PcGVuXCIgW2Ryb3Bkb3duUmVmZXJlbmNlXT1cImxvZ2dlZFVzZXJSZWYoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwibG9nZ2VkVXNlck9wdGlvbnMoKVwiIFtzaG91bGRDbG9zZU9uT3V0c2lkZUNsaWNrXT1cInRydWVcIiAoc2VsZWN0ZWRJdGVtKT1cInNlbGVjdExvZ2dlZFVzZXJNZW51SXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc09wZW5DaGFuZ2UpPVwiaXNMb2dnZWRVc2VyRHJvcGRvd25PcGVuID0gJGV2ZW50XCIgYXJyb3dUeXBlPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC91cGQtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZSBuYXZiYXItY29sbGFwc2VcIiBbY2xhc3Muc2hvd109XCJpc1NpZGViYXJNb2JpbGVPcGVuKClcIj5cbiAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBwdC1sZy0zXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIG1lbnVJdGVtczsgdHJhY2sgaXRlbS5pZCkge1xuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgW2NsYXNzLmRyb3Bkb3duXT1cImhhc0NoaWxkcmVuKGl0ZW0pXCIgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLmlzQWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bWVudUl0ZW06IGl0ZW19XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2l0ZW1UcGwgbGV0LWl0ZW09XCJtZW51SXRlbVwiPlxuICAgIDx1cGQtbGluayBbaXNOYXZpZ2F0aW9uXT1cInRydWVcIiAoY2xpY2tlZCk9XCJvbk1lbnVJdGVtQ2xpY2soaXRlbSlcIlxuICAgICAgICBbY3VzdG9tQ2xhc3Nlc109XCJnZXRJdGVtQ2xhc3NlcyhpdGVtLCAnc2hvdycsIGhhc0NoaWxkcmVuKGl0ZW0pID8gJ2Ryb3Bkb3duLXRvZ2dsZSc6JycpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlua0NvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie21lbnVJdGVtOiBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvdXBkLWxpbms+XG4gICAgQGlmIChoYXNDaGlsZHJlbihpdGVtKSkge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaWxkcmVuVHBsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInttZW51SXRlbTogaXRlbX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpbmtDb250ZW50IGxldC1pdGVtPVwibWVudUl0ZW1cIj5cbiAgICBAaWYgKCEhaXRlbS5pY29uKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmF2LWxpbmstaWNvbiBkLW1kLW5vbmUgZC1sZy1pbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgIDx1cGQtaWNvbiBbbW9kZWxdPVwiaXRlbS5pY29uXCI+PC91cGQtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgIH1cbiAgICA8c3BhbiBjbGFzcz1cIm5hdi1saW5rLXRpdGxlXCI+e3sgdGV4dFNlcnZpY2UuZ2V0VGV4dChpdGVtLnRpdGxlKSB9fTwvc3Bhbj5cbiAgICBAaWYgKGl0ZW0uaXNMb2NrZWQpIHtcbiAgICAgICAgPHVwZC1pY29uIGNsYXNzPVwibXMtYXV0b1wiIFttb2RlbF09XCJ7dGFibGVySWNvbjogJ2xvY2snfVwiPjwvdXBkLWljb24+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaGlsZHJlblRwbCBsZXQtaXRlbT1cIm1lbnVJdGVtXCI+XG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBbY2xhc3Muc2hvd109XCJpdGVtLmlzQWN0aXZlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51LWNvbHVtbnNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGFzTWVudUl0ZW0oaXRlbSkuY2hpbGRyZW47IHRyYWNrIGNoaWxkLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWhhc0NoaWxkcmVuKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHVwZC1saW5rIChjbGlja2VkKT1cIm9uTWVudUl0ZW1DbGljayhjaGlsZClcIiBbY3VzdG9tQ2xhc3Nlc109XCJnZXRJdGVtQ2xhc3NlcyhjaGlsZCwgJ2FjdGl2ZScsICdkcm9wZG93bi1pdGVtJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpbmtDb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInttZW51SXRlbTogY2hpbGR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwZC1saW5rIChjbGlja2VkKT1cIm9uTWVudUl0ZW1DbGljayhjaGlsZClcIiBbY3VzdG9tQ2xhc3Nlc109XCJnZXRJdGVtQ2xhc3NlcyhjaGlsZCwgJ2FjdGl2ZScsICdkcm9wZG93bi1pdGVtJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaW5rQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bWVudUl0ZW06IGNoaWxkfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdXBkLWxpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBbY2xhc3Muc2hvd109XCJjaGlsZC5pc0FjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChncmFuZGNoaWxkIG9mIGNoaWxkLmNoaWxkcmVuOyB0cmFjayBncmFuZGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWxpbmsgKGNsaWNrZWQpPVwib25NZW51SXRlbUNsaWNrKGdyYW5kY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tQ2xhc3Nlc109XCJnZXRJdGVtQ2xhc3NlcyhncmFuZGNoaWxkLCAnYWN0aXZlJywgJ2Ryb3Bkb3duLWl0ZW0nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlua0NvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie21lbnVJdGVtOiBncmFuZGNoaWxkfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91cGQtbGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -41,6 +41,7 @@ export class PopoverDirective {
41
41
  initPopover() {
42
42
  this.setupPopover();
43
43
  this.popoverComponentRef.instance.setVisible(true);
44
+ this.popoverComponentRef.changeDetectorRef.detectChanges();
44
45
  this.ngZone.runOutsideAngular(() => this.positioningService
45
46
  .computePosition(this.elementRef, this.popoverComponentRef.location, { placement: this.placement })
46
47
  .subscribe(resp => this.updatePosition(resp)));
@@ -62,6 +63,10 @@ export class PopoverDirective {
62
63
  updatePosition(result) {
63
64
  const nativeElement = this.popoverComponentRef.location.nativeElement;
64
65
  const arrowElement = this.popoverComponentRef.location.nativeElement.querySelector('.popover-arrow');
66
+ if (!arrowElement) {
67
+ console.warn('Popover arrow element not found. Positioning may be incorrect.');
68
+ return;
69
+ }
65
70
  const popoverBox = nativeElement.getBoundingClientRect();
66
71
  const arrowBox = arrowElement.getBoundingClientRect();
67
72
  switch (this.placement) {
@@ -126,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
126
131
  type: HostListener,
127
132
  args: ['click']
128
133
  }] } });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvcG9wb3Zlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBRU4sWUFBWSxFQUFFLE1BQU0sRUFDdkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUF5Qiw2QkFBNkIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUt2RCxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBUWtDLGNBQVMsR0FBMkIsS0FBSyxDQUFDO1FBRXhFOzs7V0FHRztRQUM4QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUlyQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hELGtDQUE2QixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0tBbUYxRjtJQWhGRyxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lB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QUMsd0JBQXdCO2dCQWEvQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsWUFBWTtnQkFRMUIsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLFlBQVk7Z0JBUTFCLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgSW5wdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBSZW5kZXJlcjIsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3RvcixcbiAgICBOZ1pvbmUsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lciwgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9wQm90dG9tTGVmdFJpZ2h0VHlwZSB9IGZyb20gJ0B1cGRldnMvc2RrL3R5cGVzJztcbmltcG9ydCB7IFBvc2l0aW9uaW5nU2VydmljZSwgQ29tcHV0ZVBvc2l0aW9uUmVzdWx0LCBEeW5hbWljQ29tcG9uZW50TG9hZGVyU2VydmljZSB9IGZyb20gJ0B1cGRldnMvc2RrL2xheW91dCc7XG5cbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXIuY29tcG9uZW50JztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdXBkUG9wb3Zlcl0nXG59KVxuZXhwb3J0IGNsYXNzIFBvcG92ZXJEaXJlY3RpdmUge1xuICAgIEBJbnB1dCgndXBkUG9wb3ZlcicpIHRleHQ/OiBzdHJpbmc7XG4gICAgQElucHV0KCd1cGRQb3BvdmVyVGl0bGUnKSB0aXRsZT86IHN0cmluZztcbiAgICBASW5wdXQoJ3VwZFBvcG92ZXJUaXRsZVRlbXBsYXRlJykgcG9wb3ZlclRpdGxlVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgndXBkUG9wb3ZlclRlbXBsYXRlJykgcG9wb3ZlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoJ3VwZFBvcG92ZXJQbGFjZW1lbnQnKSBwbGFjZW1lbnQ6IFRvcEJvdHRvbUxlZnRSaWdodFR5cGUgPSAndG9wJztcbiAgICBASW5wdXQoJ3VwZFBvcG92ZXJDdXN0b21DbGFzc2VzJykgY3VzdG9tQ2xhc3Nlcz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ha2VzIHRoZSBwb3BvdmVyIGJlaGF2ZSBsaWtlIGEgdG9vbHRpcC5cbiAgICAgKiBJdCBtZWFucyBpdCdsbCBzaG93L2hpZGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG1vdXNlIGlzIG92ZXIgb3Igbm90IHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgndXBkUG9wb3ZlckFjdEFzVG9vbHRpcCcpIGFjdEFzVG9vbHRpcCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBwb3BvdmVyQ29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPFBvcG92ZXJDb21wb25lbnQ+O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvc2l0aW9uaW5nU2VydmljZSA9IGluamVjdChQb3NpdGlvbmluZ1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHluYW1pY0NvbXBvbmVudExvYWRlclNlcnZpY2UgPSBpbmplY3QoRHluYW1pY0NvbXBvbmVudExvYWRlclNlcnZpY2UpO1xuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpXG4gICAgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hY3RBc1Rvb2x0aXApIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICAgIG9uTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0QXNUb29sdGlwKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VQb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdEFzVG9vbHRpcCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZj8uaW5zdGFuY2UuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlUG9wb3ZlcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRQb3BvdmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldHVwUG9wb3ZlcigpO1xuICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmluc3RhbmNlLnNldFZpc2libGUodHJ1ZSk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uaW5nU2VydmljZVxuICAgICAgICAgICAgICAgIC5jb21wdXRlUG9zaXRpb24odGhpcy5lbGVtZW50UmVmLCB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmxvY2F0aW9uLCB7IHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQgfSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3AgPT4gdGhpcy51cGRhdGVQb3NpdGlvbihyZXNwKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc3Bvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5pbnN0YW5jZS5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50TG9hZGVyU2VydmljZS5sb2FkKFBvcG92ZXJDb21wb25lbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZiwgdGhpcy5pbmplY3Rvcik7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2UudGl0bGUgPSB0aGlzLnRpdGxlO1xuICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmluc3RhbmNlLnRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2UudGl0bGVUZW1wbGF0ZSA9IHRoaXMucG9wb3ZlclRpdGxlVGVtcGxhdGU7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2UudGVtcGxhdGUgPSB0aGlzLnBvcG92ZXJUZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5pbnN0YW5jZS5wbGFjZW1lbnQgPSB0aGlzLnBsYWNlbWVudDtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5pbnN0YW5jZS5jdXN0b21DbGFzc2VzID0gdGhpcy5jdXN0b21DbGFzc2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUG9zaXRpb24ocmVzdWx0OiBDb21wdXRlUG9zaXRpb25SZXN1bHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgYXJyb3dFbGVtZW50ID0gdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wb3BvdmVyLWFycm93Jyk7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJCb3ggPSBuYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBhcnJvd0JveCA9IGFycm93RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMucGxhY2VtZW50KSB7XG4gICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF0aXZlRWxlbWVudCwgJ3RvcCcsIGAke3Jlc3VsdC55IC0gYXJyb3dCb3guaGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAke3Jlc3VsdC54fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhcnJvd0VsZW1lbnQsICdsZWZ0JywgYCR7KHBvcG92ZXJCb3gud2lkdGggLyAyKSAtIChhcnJvd0JveC53aWR0aCAvIDIpfXB4YCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF0aXZlRWxlbWVudCwgJ3RvcCcsIGAke3Jlc3VsdC55ICsgYXJyb3dCb3guaGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAke3Jlc3VsdC54fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhcnJvd0VsZW1lbnQsICdsZWZ0JywgYCR7KHBvcG92ZXJCb3gud2lkdGggLyAyKSAtIChhcnJvd0JveC53aWR0aCAvIDIpfXB4YCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG5hdGl2ZUVsZW1lbnQsICd0b3AnLCBgJHtyZXN1bHQueX1weGApO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF0aXZlRWxlbWVudCwgJ2xlZnQnLCBgJHtyZXN1bHQueCAtIGFycm93Qm94LndpZHRofXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhcnJvd0VsZW1lbnQsICd0b3AnLCBgJHsocG9wb3ZlckJveC5oZWlnaHQgLyAyKSAtIChhcnJvd0JveC5oZWlnaHQgLyAyKX1weGApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF0aXZlRWxlbWVudCwgJ3RvcCcsIGAke3Jlc3VsdC55fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAke3Jlc3VsdC54ICsgYXJyb3dCb3gud2lkdGh9cHhgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGFycm93RWxlbWVudCwgJ3RvcCcsIGAkeyhwb3BvdmVyQm94LmhlaWdodCAvIDIpIC0gKGFycm93Qm94LmhlaWdodCAvIDIpfXB4YCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvcG9wb3Zlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBRU4sWUFBWSxFQUFFLE1BQU0sRUFDdkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUF5Qiw2QkFBNkIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUt2RCxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBUWtDLGNBQVMsR0FBMkIsS0FBSyxDQUFDO1FBRXhFOzs7V0FHRztRQUM4QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUlyQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hELGtDQUE2QixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0tBMEYxRjtJQXZGRyxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lB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Szt1QkFBQyx5QkFBeUI7Z0JBQ0gsZUFBZTtzQkFBM0MsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBQ0csU0FBUztzQkFBdEMsS0FBSzt1QkFBQyxxQkFBcUI7Z0JBQ00sYUFBYTtzQkFBOUMsS0FBSzt1QkFBQyx5QkFBeUI7Z0JBS0MsWUFBWTtzQkFBNUMsS0FBSzt1QkFBQyx3QkFBd0I7Z0JBYS9CLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZO2dCQVExQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsWUFBWTtnQkFRMUIsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBJbnB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFJlbmRlcmVyMixcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdG9yLFxuICAgIE5nWm9uZSxcbiAgICBDb21wb25lbnRSZWYsXG4gICAgSG9zdExpc3RlbmVyLCBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb3BCb3R0b21MZWZ0UmlnaHRUeXBlIH0gZnJvbSAnQHVwZGV2cy9zZGsvdHlwZXMnO1xuaW1wb3J0IHsgUG9zaXRpb25pbmdTZXJ2aWNlLCBDb21wdXRlUG9zaXRpb25SZXN1bHQsIER5bmFtaWNDb21wb25lbnRMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnQHVwZGV2cy9zZGsvbGF5b3V0JztcblxuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t1cGRQb3BvdmVyXSdcbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckRpcmVjdGl2ZSB7XG4gICAgQElucHV0KCd1cGRQb3BvdmVyJykgdGV4dD86IHN0cmluZztcbiAgICBASW5wdXQoJ3VwZFBvcG92ZXJUaXRsZScpIHRpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgndXBkUG9wb3ZlclRpdGxlVGVtcGxhdGUnKSBwb3BvdmVyVGl0bGVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCd1cGRQb3BvdmVyVGVtcGxhdGUnKSBwb3BvdmVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgndXBkUG9wb3ZlclBsYWNlbWVudCcpIHBsYWNlbWVudDogVG9wQm90dG9tTGVmdFJpZ2h0VHlwZSA9ICd0b3AnO1xuICAgIEBJbnB1dCgndXBkUG9wb3ZlckN1c3RvbUNsYXNzZXMnKSBjdXN0b21DbGFzc2VzPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoaXMgbWFrZXMgdGhlIHBvcG92ZXIgYmVoYXZlIGxpa2UgYSB0b29sdGlwLlxuICAgICAqIEl0IG1lYW5zIGl0J2xsIHNob3cvaGlkZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbW91c2UgaXMgb3ZlciBvciBub3QgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgQElucHV0KCd1cGRQb3BvdmVyQWN0QXNUb29sdGlwJykgYWN0QXNUb29sdGlwID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHBvcG92ZXJDb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8UG9wb3ZlckNvbXBvbmVudD47XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9zaXRpb25pbmdTZXJ2aWNlID0gaW5qZWN0KFBvc2l0aW9uaW5nU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkeW5hbWljQ29tcG9uZW50TG9hZGVyU2VydmljZSA9IGluamVjdChEeW5hbWljQ29tcG9uZW50TG9hZGVyU2VydmljZSk7XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgICBvbk1vdXNlRW50ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFjdEFzVG9vbHRpcCkge1xuICAgICAgICAgICAgdGhpcy5pbml0UG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gICAgb25Nb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hY3RBc1Rvb2x0aXApIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgICBvbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuYWN0QXNUb29sdGlwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmPy5pbnN0YW5jZS5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3Bvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFBvcG92ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0dXBQb3BvdmVyKCk7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2Uuc2V0VmlzaWJsZSh0cnVlKTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uaW5nU2VydmljZVxuICAgICAgICAgICAgICAgIC5jb21wdXRlUG9zaXRpb24odGhpcy5lbGVtZW50UmVmLCB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmxvY2F0aW9uLCB7IHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQgfSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3AgPT4gdGhpcy51cGRhdGVQb3NpdGlvbihyZXNwKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc3Bvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5pbnN0YW5jZS5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50TG9hZGVyU2VydmljZS5sb2FkKFBvcG92ZXJDb21wb25lbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZiwgdGhpcy5pbmplY3Rvcik7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2UudGl0bGUgPSB0aGlzLnRpdGxlO1xuICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmluc3RhbmNlLnRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2UudGl0bGVUZW1wbGF0ZSA9IHRoaXMucG9wb3ZlclRpdGxlVGVtcGxhdGU7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2UudGVtcGxhdGUgPSB0aGlzLnBvcG92ZXJUZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5pbnN0YW5jZS5wbGFjZW1lbnQgPSB0aGlzLnBsYWNlbWVudDtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5pbnN0YW5jZS5jdXN0b21DbGFzc2VzID0gdGhpcy5jdXN0b21DbGFzc2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUG9zaXRpb24ocmVzdWx0OiBDb21wdXRlUG9zaXRpb25SZXN1bHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgYXJyb3dFbGVtZW50ID0gdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wb3BvdmVyLWFycm93Jyk7XG5cbiAgICAgICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUG9wb3ZlciBhcnJvdyBlbGVtZW50IG5vdCBmb3VuZC4gUG9zaXRpb25pbmcgbWF5IGJlIGluY29ycmVjdC4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvcG92ZXJCb3ggPSBuYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBhcnJvd0JveCA9IGFycm93RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMucGxhY2VtZW50KSB7XG4gICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF0aXZlRWxlbWVudCwgJ3RvcCcsIGAke3Jlc3VsdC55IC0gYXJyb3dCb3guaGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAke3Jlc3VsdC54fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhcnJvd0VsZW1lbnQsICdsZWZ0JywgYCR7KHBvcG92ZXJCb3gud2lkdGggLyAyKSAtIChhcnJvd0JveC53aWR0aCAvIDIpfXB4YCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF0aXZlRWxlbWVudCwgJ3RvcCcsIGAke3Jlc3VsdC55ICsgYXJyb3dCb3guaGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAke3Jlc3VsdC54fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhcnJvd0VsZW1lbnQsICdsZWZ0JywgYCR7KHBvcG92ZXJCb3gud2lkdGggLyAyKSAtIChhcnJvd0JveC53aWR0aCAvIDIpfXB4YCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG5hdGl2ZUVsZW1lbnQsICd0b3AnLCBgJHtyZXN1bHQueX1weGApO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF0aXZlRWxlbWVudCwgJ2xlZnQnLCBgJHtyZXN1bHQueCAtIGFycm93Qm94LndpZHRofXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhcnJvd0VsZW1lbnQsICd0b3AnLCBgJHsocG9wb3ZlckJveC5oZWlnaHQgLyAyKSAtIChhcnJvd0JveC5oZWlnaHQgLyAyKX1weGApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF0aXZlRWxlbWVudCwgJ3RvcCcsIGAke3Jlc3VsdC55fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAke3Jlc3VsdC54ICsgYXJyb3dCb3gud2lkdGh9cHhgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGFycm93RWxlbWVudCwgJ3RvcCcsIGAkeyhwb3BvdmVyQm94LmhlaWdodCAvIDIpIC0gKGFycm93Qm94LmhlaWdodCAvIDIpfXB4YCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -513,12 +513,39 @@ class SidebarComponent extends BaseComponent {
513
513
  this.wrapperClasses = 'navbar navbar-vertical navbar-expand-lg';
514
514
  this.theme = 'dark';
515
515
  this.menuItems = [];
516
+ this.isLoggedUserDropdownOpen = false;
517
+ this.loggedUserRef = viewChild('loggedUserBtn', { read: ElementRef });
516
518
  this.textService = inject(TextService);
517
519
  this.isSidebarMobileOpen = signal(false);
520
+ this.config = computed(() => this.layoutService.mainHeaderConfig());
521
+ this.userInfo = computed(() => this.securityStorage.getUserInfo());
522
+ this.userIdentification = computed(() => !!this.userInfo() ? this.coreLayoutConfigService.config.getUserName(this.userInfo()) : '');
523
+ this.userDescription = computed(() => !!this.coreLayoutConfigService.config.getUserDescription
524
+ ? this.coreLayoutConfigService.config.getUserDescription(this.userInfo())
525
+ : '');
526
+ this.loggedUserOptions = computed(() => {
527
+ const userActions = [];
528
+ this.coreLayoutConfigService.config.loggedUserMenuActions.forEach(act => userActions.push({
529
+ id: act.id(),
530
+ text: act.text(),
531
+ type: 'default',
532
+ icon: act.iconModel?.()
533
+ }));
534
+ return userActions;
535
+ });
536
+ this.userInitials = computed(() => {
537
+ const firstChar = this.userIdentification().charAt(0);
538
+ const lastSpaceIndex = this.userIdentification().lastIndexOf(' ');
539
+ const firstAfterLastSpace = lastSpaceIndex !== -1 ? this.userIdentification().charAt(lastSpaceIndex + 1) : '';
540
+ return `${firstChar}${firstAfterLastSpace}`;
541
+ });
518
542
  this.currentRoute = '';
519
543
  this.menuItemsBackup = [];
520
544
  this.router = inject(Router);
521
545
  this.menuService = inject(MenuService);
546
+ this.layoutService = inject(LayoutService);
547
+ this.securityStorage = inject(SecurityStorage);
548
+ this.coreLayoutConfigService = inject(UpdCoreLayoutConfigService);
522
549
  }
523
550
  ngOnInit() {
524
551
  this.currentRoute = this.router.url;
@@ -573,6 +600,12 @@ class SidebarComponent extends BaseComponent {
573
600
  toggleSidebarOnMobile() {
574
601
  this.isSidebarMobileOpen.set(!this.isSidebarMobileOpen());
575
602
  }
603
+ selectLoggedUserMenuItem(item) {
604
+ const btn = this.coreLayoutConfigService.config.loggedUserMenuActions.find(b => b.id() === item.id);
605
+ if (!!btn?.clickFunction) {
606
+ btn.clickFunction({ data: this.userInfo() });
607
+ }
608
+ }
576
609
  findActiveNode(item, fullPath) {
577
610
  if (item.fullPath === fullPath) {
578
611
  return item;
@@ -683,11 +716,11 @@ class SidebarComponent extends BaseComponent {
683
716
  return undefined;
684
717
  }
685
718
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SidebarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
686
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SidebarComponent, selector: "upd-sidebar", host: { properties: { "class": "this.wrapperClasses", "attr.data-bs-theme": "this.theme" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1$2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i3.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
719
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SidebarComponent, selector: "upd-sidebar", host: { properties: { "class": "this.wrapperClasses", "attr.data-bs-theme": "this.theme" } }, viewQueries: [{ propertyName: "loggedUserRef", first: true, predicate: ["loggedUserBtn"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n\n @if (!!config().showUserMenu && !!userInfo()) {\n <div class=\"navbar-nav flex-row d-lg-none\">\n <div class=\"nav-item dropdown\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLoggedUserDropdownOpen = true\" #loggedUserBtn>\n @if (!!userInfo()!.avatar) {\n <span class=\"avatar avatar-sm\" style=\"background-image: url({{userInfo()?.avatar}})\"></span>\n } @else {\n <span class=\"avatar avatar-sm\">{{ userInitials() }}</span>\n }\n\n <div class=\"d-none d-xl-block px-2\">\n <div>{{ userIdentification() }}</div>\n @if (!!userDescription()) {\n <div class=\"mt-1 small text-muted\">{{ userDescription() }}</div>\n }\n </div>\n </upd-link>\n @if (loggedUserOptions().length > 0) {\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLoggedUserDropdownOpen\" [dropdownReference]=\"loggedUserRef()\"\n [items]=\"loggedUserOptions()\" [shouldCloseOnOutsideClick]=\"true\" (selectedItem)=\"selectLoggedUserMenuItem($event)\"\n (isOpenChange)=\"isLoggedUserDropdownOpen = $event\" arrowType=\"right\">\n </upd-dropdown>\n }\n </div>\n </div>\n }\n\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1$2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i3.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }, { kind: "component", type: i2.DropdownComponent, selector: "upd-dropdown", inputs: ["items", "header", "isOpen", "shouldCloseOnOutsideClick", "arrowType", "wrapperClasses", "elementsExcludedFromOutsideClick", "minHeight", "maxHeight", "minWidth", "maxWidth", "dropdownReference", "dropdownReferencePosition", "textOverflowStrategy"], outputs: ["isOpenChange", "selectedItem", "checkboxChanged"] }], encapsulation: i0.ViewEncapsulation.None }); }
687
720
  }
688
721
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SidebarComponent, decorators: [{
689
722
  type: Component,
690
- args: [{ selector: 'upd-sidebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
723
+ args: [{ selector: 'upd-sidebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n\n @if (!!config().showUserMenu && !!userInfo()) {\n <div class=\"navbar-nav flex-row d-lg-none\">\n <div class=\"nav-item dropdown\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLoggedUserDropdownOpen = true\" #loggedUserBtn>\n @if (!!userInfo()!.avatar) {\n <span class=\"avatar avatar-sm\" style=\"background-image: url({{userInfo()?.avatar}})\"></span>\n } @else {\n <span class=\"avatar avatar-sm\">{{ userInitials() }}</span>\n }\n\n <div class=\"d-none d-xl-block px-2\">\n <div>{{ userIdentification() }}</div>\n @if (!!userDescription()) {\n <div class=\"mt-1 small text-muted\">{{ userDescription() }}</div>\n }\n </div>\n </upd-link>\n @if (loggedUserOptions().length > 0) {\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLoggedUserDropdownOpen\" [dropdownReference]=\"loggedUserRef()\"\n [items]=\"loggedUserOptions()\" [shouldCloseOnOutsideClick]=\"true\" (selectedItem)=\"selectLoggedUserMenuItem($event)\"\n (isOpenChange)=\"isLoggedUserDropdownOpen = $event\" arrowType=\"right\">\n </upd-dropdown>\n }\n </div>\n </div>\n }\n\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
691
724
  }], propDecorators: { wrapperClasses: [{
692
725
  type: HostBinding,
693
726
  args: ['class']
@@ -1 +1 @@
1
- {"version":3,"file":"updevs-components-layout.mjs","sources":["../../../../libs/components/layout/src/abstractions/base-page.component.ts","../../../../libs/components/layout/src/partials/footer/footer.component.ts","../../../../libs/components/layout/src/partials/footer/footer.component.html","../../../../libs/components/layout/src/partials/footer/footer.module.ts","../../../../libs/components/layout/src/partials/header/header.component.ts","../../../../libs/components/layout/src/partials/header/header.component.html","../../../../libs/components/layout/src/partials/header/header.module.ts","../../../../libs/components/layout/src/models/login-page-config.model.ts","../../../../libs/components/layout/src/models/security-layout-config.model.ts","../../../../libs/components/layout/src/models/upd-layout-config.model.ts","../../../../libs/components/layout/src/tools/layout.constants.ts","../../../../libs/components/layout/src/services/upd-layout-config.service.ts","../../../../libs/components/layout/src/abstractions/base.layout.ts","../../../../libs/components/layout/src/layouts/blank-layout/blank-layout.component.ts","../../../../libs/components/layout/src/layouts/blank-layout/blank-layout.component.html","../../../../libs/components/layout/src/layouts/blank-layout/blank-layout.module.ts","../../../../libs/components/layout/src/partials/sidebar/sidebar.component.ts","../../../../libs/components/layout/src/partials/sidebar/sidebar.component.html","../../../../libs/components/layout/src/partials/page-header/page-header.component.ts","../../../../libs/components/layout/src/partials/page-header/page-header.component.html","../../../../libs/components/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.ts","../../../../libs/components/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.html","../../../../libs/components/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.ts","../../../../libs/components/layout/src/pages/auth-flow/logged-out/logged-out.component.ts","../../../../libs/components/layout/src/pages/auth-flow/logged-out/logged-out.component.html","../../../../libs/components/layout/src/pages/auth-flow/login/login.component.ts","../../../../libs/components/layout/src/pages/auth-flow/login/login.component.html","../../../../libs/components/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.ts","../../../../libs/components/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.html","../../../../libs/components/layout/src/pages/auth-flow/auth-flow-routing.module.ts","../../../../libs/components/layout/src/pages/auth-flow/auth-flow.module.ts","../../../../libs/components/layout/src/upd-layout.module.ts","../../../../libs/components/layout/src/updevs-components-layout.ts"],"sourcesContent":["import { OnDestroy, Directive, inject } from '@angular/core';\nimport { BaseComponent, LayoutService } from '@updevs/sdk/layout';\n\n/**\n * Basic page structure.\n */\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class BasePageComponent extends BaseComponent implements OnDestroy {\n protected readonly _layoutService = inject(LayoutService);\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._layoutService.pageHeader.set(undefined);\n }\n}\n","import { Component, HostBinding, OnInit, OnChanges, SimpleChanges, ViewEncapsulation, inject } from '@angular/core';\nimport { LinkModel } from '@updevs/sdk/core';\nimport { BaseComponent, LayoutService } from '@updevs/sdk/layout';\n\n@Component({\n selector: 'upd-footer',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class FooterComponent extends BaseComponent implements OnInit, OnChanges {\n @HostBinding('class') wrapperClasses = '';\n\n /**\n * Whether the footer will always be shown.\n */\n isSticky = false;\n /**\n * Whether the footer is transparent or not.\n */\n isTransparent = true;\n /**\n * Links.\n */\n links: LinkModel[] = [];\n /**\n * Current year.\n */\n currentYear = new Date().getFullYear();\n /**\n * Version of the application.\n */\n version?: string;\n\n readonly layoutService = inject(LayoutService);\n\n private baseWrapperClasses = 'footer d-print-none';\n\n ngOnInit(): void {\n this.updateWrapperClasses();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!!changes['isSticky'].currentValue || !!changes['isTransparent'].currentValue) {\n this.updateWrapperClasses();\n }\n }\n\n private updateWrapperClasses(): void {\n const stickyBottomCls = this.isSticky ? ' sticky-bottom' : '';\n const transparentCls = this.isTransparent ? ' footer-transparent' : '';\n this.wrapperClasses = `${this.baseWrapperClasses}${stickyBottomCls}${transparentCls}`;\n }\n}\n","<div class=\"container-xl\">\n <div class=\"row text-center align-items-center flex-row-reverse\">\n <div class=\"col-lg-auto ms-lg-auto\">\n @if (!!layoutService.rightFooter()) {\n <ng-container [ngTemplateOutlet]=\"layoutService.rightFooter()!\"></ng-container>\n }\n\n @if (links.length > 0) {\n <ul class=\"list-inline list-inline-dots mb-0\">\n @for (link of links; track link) {\n <li class=\"list-inline-item\">\n <a href=\"{{link.url}}\" target=\"{{link.target}}\" class=\"link-secondary\">\n <span [innerHTML]=\"link.text\"></span>\n </a>\n </li>\n }\n </ul>\n }\n </div>\n <div class=\"col-12 col-lg-auto mt-3 mt-lg-0\">\n <ul class=\"list-inline list-inline-dots mb-0\">\n <li class=\"list-inline-item\">\n <ng-container *transloco=\"let t; prefix: 'UpDevs.Footer'\">\n {{ t('Prefix') }} {{ t('Symbol') }} {{ currentYear }} {{ t('Suffix') }}\n </ng-container>\n </li>\n @if (!!version) {\n <li class=\"list-inline-item\">\n {{ version }}\n </li>\n }\n </ul>\n\n @if (!!layoutService.leftFooter()) {\n <ng-container [ngTemplateOutlet]=\"layoutService.leftFooter()!\"></ng-container>\n }\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoModule } from '@jsverse/transloco';\n\nimport { FooterComponent } from './footer.component';\n\n@NgModule({\n imports: [\n CommonModule,\n TranslocoModule\n ],\n declarations: [\n FooterComponent\n ],\n exports: [\n FooterComponent\n ]\n})\nexport class FooterModule {}\n","import {\n Component,\n ViewEncapsulation,\n HostBinding,\n OnInit,\n inject,\n computed,\n signal,\n viewChild,\n ElementRef, input\n} from '@angular/core';\nimport { TablerIconsType } from '@updevs/icons';\nimport { TextService } from '@updevs/sdk';\nimport { BaseComponent, LayoutService, PreferencesStorage, UpdCoreLayoutConfigService } from '@updevs/sdk/layout';\nimport { DropdownItem } from '@updevs/components/dropdown';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { NotificationModel, NotificationsService } from '@updevs/sdk/notifications';\nimport { SecurityStorage } from '@updevs/sdk/security';\n\nimport { HeaderStyleType } from './header-style.type';\n\n@Component({\n selector: 'upd-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class HeaderComponent extends BaseComponent implements OnInit {\n @HostBinding('class') get classes(): string {\n return this.wrapperClasses();\n }\n\n languageSwitcherRef = viewChild('languageSwitcherBtn', { read: ElementRef });\n notificationsRef = viewChild('notificationsBtn', { read: ElementRef });\n loggedUserRef = viewChild('loggedUserBtn', { read: ElementRef });\n\n isLanguageSwitcherDropdownOpen = false;\n isNotificationsDropdownOpen = false;\n isLoggedUserDropdownOpen = false;\n\n readonly style = input<HeaderStyleType>('light');\n readonly nextThemeIcon = computed<TablerIconsType>(() => this.currentPreferences()?.isDarkTheme ? 'sun' : 'moon-stars');\n readonly currentNotificationsIcon = computed<TablerIconsType>(() => this.hasNewNotifications() ? 'bell-ringing' : 'bell');\n readonly hasNewNotifications = computed(() => this.currentNotifications().some(n => !n.dateRead));\n readonly languagesOptions = computed<DropdownItem[]>(() => {\n const allLanguagesOptions: DropdownItem[] = [];\n const availableLanguages = (this.coreLayoutConfigService.config.availableLanguages || {});\n\n Object.keys(availableLanguages).forEach(key => {\n allLanguagesOptions.push({\n id: key,\n type: 'default',\n text: availableLanguages[key],\n isActive: this.currentLanguageKey() === key\n });\n });\n\n return allLanguagesOptions;\n });\n readonly loggedUserOptions = computed<DropdownItem[]>(() => {\n const userActions: DropdownItem[] = [];\n\n this.coreLayoutConfigService.config.loggedUserMenuActions.forEach(act => userActions.push({\n id: act.id!(),\n text: act.text!(),\n type: 'default',\n icon: act.iconModel?.()\n }));\n\n return userActions;\n });\n readonly userInfo = computed(() => this.securityStorage.getUserInfo());\n readonly userIdentification = computed(() =>\n !!this.userInfo() ? this.coreLayoutConfigService.config.getUserName(this.userInfo()!) : ''\n );\n readonly userDescription = computed(() =>\n !!this.coreLayoutConfigService.config.getUserDescription\n ? this.coreLayoutConfigService.config.getUserDescription(this.userInfo()!)\n : ''\n );\n readonly shouldBlinkIfNewNotifications = computed(() => !!this.coreLayoutConfigService.config.shouldBlinkIfNewNotifications);\n readonly latestNotifications = computed(() => {\n const unreadNotifications = this.currentNotifications()\n .filter(n => !n.dateRead)\n .sort((a, b) => new Date(b.dateReceived).getTime() - new Date(a.dateReceived).getTime())\n .slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);\n const readNotifications = this.currentNotifications()\n .filter(n => !!n.dateRead)\n .sort((a, b) => new Date(b.dateReceived).getTime() - new Date(a.dateReceived).getTime())\n .slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);\n\n return [\n ...unreadNotifications,\n ...readNotifications\n ].slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);\n });\n readonly textService = inject(TextService);\n readonly isSidebarMobileOpen = signal(false);\n\n private readonly securityStorage = inject(SecurityStorage);\n private readonly coreLayoutConfigService = inject(UpdCoreLayoutConfigService);\n private readonly layoutService = inject(LayoutService);\n private readonly translocoService = inject(TranslocoService);\n private readonly preferencesStorage = inject(PreferencesStorage);\n private readonly notificationsService = inject(NotificationsService);\n private readonly currentPreferences = this.preferencesStorage.getPreferences();\n private readonly currentNotifications = this.notificationsService.notifications;\n private readonly currentLanguageKey = signal('');\n private readonly wrapperClasses = computed(() => `navbar navbar-expand-md d-none d-lg-flex d-print-none navbar-${this.style()}`);\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n readonly config = computed(() => this.layoutService.mainHeaderConfig());\n\n ngOnInit(): void {\n if (!!this.currentPreferences()?.isDarkTheme) {\n this.layoutService.setDarkMode();\n }\n\n if (!!this.currentPreferences()?.currentLanguageCode) {\n const code = this.currentPreferences()!.currentLanguageCode!;\n\n this.currentLanguageKey.set(code);\n this.translocoService.setActiveLang(code);\n }\n }\n\n switchTheme(): void {\n this.layoutService.toggleDarkMode();\n }\n\n switchLanguage(item: DropdownItem): void {\n this.currentLanguageKey.set(item.id);\n this.translocoService.setActiveLang(item.id);\n this.preferencesStorage.savePreferences({ ...this.currentPreferences(), currentLanguageCode: item.id });\n this.layoutService.notifyUserChangedLanguage(item.id);\n\n this.isLanguageSwitcherDropdownOpen = false;\n }\n\n selectLoggedUserMenuItem(item: DropdownItem): void {\n const btn = this.coreLayoutConfigService.config.loggedUserMenuActions.find(b => b.id!() === item.id);\n\n if (!!btn?.clickFunction) {\n btn.clickFunction!({ data: this.userInfo() });\n }\n }\n\n readNotification(notification: NotificationModel): void {\n if (!notification.dateRead) {\n this.notificationsService.markAsRead(notification.id);\n }\n\n this.notificationsService.clickOnNotification(notification);\n }\n\n removeNotification(notification: NotificationModel): void {\n this.notificationsService.removeNotifications(notification.id);\n }\n\n toggleSidebarOnMobile(): void {\n this.isSidebarMobileOpen.set(!this.isSidebarMobileOpen());\n }\n}\n","<div class=\"container-xl\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-nav flex-row order-md-last\">\n <div class=\"d-none d-md-flex me-3\">\n @if (!!config().showThemeSwitcher) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchTheme()\">\n <upd-icon [tablerIcon]=\"nextThemeIcon()\"></upd-icon>\n </upd-link>\n </div>\n }\n @if (!!config().showLanguageSwitcher && languagesOptions().length > 0) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLanguageSwitcherDropdownOpen=true\"\n #languageSwitcherBtn>\n <upd-icon tablerIcon=\"language\"></upd-icon>\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLanguageSwitcherDropdownOpen\"\n [dropdownReference]=\"languageSwitcherRef()\" [items]=\"languagesOptions()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isLanguageSwitcherDropdownOpen = $event\" (selectedItem)=\"switchLanguage($event)\">\n </upd-dropdown>\n </div>\n }\n @if (!!config().showNotifications && !!userInfo()) {\n <div class=\"nav-item dropdown d-none d-md-flex\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isNotificationsDropdownOpen = true\"\n #notificationsBtn>\n <upd-icon [tablerIcon]=\"currentNotificationsIcon()\"></upd-icon>\n @if (hasNewNotifications()) {\n <span class=\"badge bg-red\" [class.badge-blink]=\"shouldBlinkIfNewNotifications()\"></span>\n }\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1 dropdown-menu-card\" [isOpen]=\"isNotificationsDropdownOpen\"\n [dropdownReference]=\"notificationsRef()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isNotificationsDropdownOpen = $event\" [minWidth]=\"400\" arrowType=\"right\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3 class=\"card-title\">{{ 'UpDevs.NotificationCenter.Title' | transloco }}</h3>\n </div>\n @for (notification of latestNotifications(); track notification) {\n <div class=\"list-group list-group-flush list-group-hoverable\" (click)=\"readNotification(notification)\">\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\">\n @if (!!notification.dateRead) {\n <span class=\"status-dot d-block\"></span>\n } @else {\n <span class=\"status-dot status-dot-animated bg-primary d-block\"></span>\n }\n </div>\n <div class=\"col text-truncate\">\n <a href=\"javascript:void(0)\" class=\"text-body d-block\"\n [class.fw-bold]=\"!notification.dateRead\">\n {{ textService.getText(notification.title) }}\n </a>\n @if (!!notification.description) {\n <div class=\"d-block text-secondary text-truncate mt-n1\">\n {{ textService.getText(notification.description) }}\n </div>\n }\n </div>\n <div class=\"col-auto\">\n <upd-link [customClasses]=\"['list-group-item-actions']\"\n (clicked)=\"removeNotification(notification)\">\n <upd-icon tablerIcon=\"x\"></upd-icon>\n </upd-link>\n </div>\n </div>\n </div>\n </div>\n } @empty {\n <div class=\"empty\">\n <h1 class=\"text-body-tertiary\">{{ 'UpDevs.NotificationCenter.NoNotifications' | transloco }}</h1>\n </div>\n }\n </div>\n </upd-dropdown>\n </div>\n }\n </div>\n @if (!!config().showUserMenu && !!userInfo()) {\n <div class=\"nav-item dropdown\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLoggedUserDropdownOpen = true\" #loggedUserBtn>\n @if (!!userInfo()!.avatar) {\n <span class=\"avatar avatar-sm\" style=\"background-image: url({{userInfo()?.avatar}})\"></span>\n }\n\n <div class=\"d-none d-xl-block px-2\">\n <div>{{ userIdentification() }}</div>\n @if (!!userDescription()) {\n <div class=\"mt-1 small text-muted\">{{ userDescription() }}</div>\n }\n </div>\n </upd-link>\n @if (loggedUserOptions().length > 0) {\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLoggedUserDropdownOpen\" [dropdownReference]=\"loggedUserRef()\"\n [items]=\"loggedUserOptions()\" [shouldCloseOnOutsideClick]=\"true\" (selectedItem)=\"selectLoggedUserMenuItem($event)\"\n (isOpenChange)=\"isLoggedUserDropdownOpen = $event\" arrowType=\"right\">\n </upd-dropdown>\n }\n </div>\n }\n </div>\n @if (!!config().showSearchBar && !!userInfo()) {\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <div class=\"me-2\" [class.w-100]=\"config().shouldUseFullSearchBar\">\n <form autocomplete=\"off\" novalidate>\n <div class=\"input-icon\">\n <span class=\"input-icon-addon\">\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </span>\n <input type=\"text\" value=\"\" class=\"form-control\" placeholder=\"{{'UpDevs.Header.Search' | transloco}}...\">\n </div>\n </form>\n </div>\n </div>\n } @else {\n <div></div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdDropdownModule } from '@updevs/components/dropdown';\nimport { UpdLinkModule } from '@updevs/components/link';\nimport { TranslocoModule } from '@jsverse/transloco';\n\nimport { HeaderComponent } from './header.component';\n\n@NgModule({\n imports: [\n CommonModule,\n TranslocoModule,\n UpdIconsModule,\n UpdDropdownModule,\n UpdLinkModule\n ],\n declarations: [\n HeaderComponent\n ],\n exports: [\n HeaderComponent\n ]\n})\nexport class HeaderModule {}\n","import { ButtonModel } from '@updevs/sdk/layout';\nimport { BgColorStyleType, ColorStyleType } from '@updevs/sdk/types';\n\nimport { LoginPageConfig } from './login-page.config';\n\n/**\n * Configuration of the login page layout.\n */\nexport class LoginPageConfigModel implements LoginPageConfig {\n /**\n * Layout of the login page.\n */\n layout: 'centered-box' | 'box-with-picture' | 'cover';\n\n /**\n * Background color of the login box (exclusive with bgStyle).\n * Should be the name of a CSS class.\n */\n bgColor?: string;\n\n /**\n * Background color of the login box (exclusive with bgColor).\n */\n bgStyle?: BgColorStyleType;\n\n /**\n * Color of the border used in the login page.\n */\n borderColor: ColorStyleType;\n\n /**\n * Color of the sign-in button.\n */\n signInButtonColor: ColorStyleType;\n\n /**\n * Color of all links in the login page.\n */\n linksColor: ColorStyleType;\n\n /**\n * Route with the page to recover the user's password.\n */\n recoverPasswordRoute?: string;\n\n /**\n * Route with the page to register a user.\n */\n signUpRoute?: string;\n\n /**\n * Buttons used for social login (google, facebook, etc).\n */\n socialLoginButtons: ButtonModel[] = [];\n\n constructor(init?: LoginPageConfig) {\n Object.assign(this, init);\n\n this.layout = init?.layout || 'centered-box';\n this.borderColor = init?.borderColor || 'primary';\n this.signInButtonColor = init?.signInButtonColor || 'primary';\n this.linksColor = init?.linksColor || this.signInButtonColor;\n\n if (init?.socialLoginButtons) {\n this.socialLoginButtons = init.socialLoginButtons;\n }\n }\n}\n","import { SecurityLayoutConfig } from './security-layout.config';\nimport { LoginPageConfigModel } from './login-page-config.model';\n\n/**\n * Configuration for the pages related to the security.\n */\nexport class SecurityLayoutConfigModel implements SecurityLayoutConfig {\n /**\n * Configuration of the login page.\n */\n loginPage: LoginPageConfigModel;\n\n constructor(init?: SecurityLayoutConfig) {\n this.loginPage = new LoginPageConfigModel(init?.loginPage);\n }\n}\n","import { UpdLayoutConfig } from './upd-layout.config';\nimport { SecurityLayoutConfigModel } from './security-layout-config.model';\n\n/**\n * Layout configuration.\n */\nexport class UpdLayoutConfigModel implements UpdLayoutConfig {\n /**\n * Main menu title.\n */\n menuTitle?: string;\n /**\n * Whether the menu should start expanded.\n */\n shouldMenuStartExpanded?: boolean;\n /**\n * Main application logo.\n */\n mainLogo?: string;\n /**\n * Small application logo.\n */\n smallLogo?: string;\n /**\n * Background image for the logged out page.\n */\n loggedOutBackground?: string;\n /**\n * Whether the default notifications button should be displayed.\n */\n showNotificationsButton?: boolean;\n /**\n * Whether the report error button should be displayed when an exception is thrown by the server.\n */\n displayReportErrorButton?: boolean;\n /**\n * Whether the logged user's menu should be displayed.\n */\n showUserMenu?: boolean;\n /**\n * Whether the fluid layout (less padding) should be used.\n */\n useFluidLayout?: boolean;\n /**\n * Configuration for the pages related to the security.\n */\n securityLayoutConfig: SecurityLayoutConfigModel;\n\n constructor(init?: UpdLayoutConfig) {\n if (init?.mainLogo === undefined) {\n // this.mainLogo = LogoConstants.defaultLogo; // TODO: add images\n }\n\n if (init?.smallLogo === undefined) {\n // this.smallLogo = LogoConstants.smallLogo;\n }\n\n if (init?.loggedOutBackground === undefined) {\n // this.loggedOutBackground = ImageConstants.loggedOutBackground;\n }\n\n this.menuTitle = init?.menuTitle || 'UpDevs';\n this.showNotificationsButton = init?.showNotificationsButton || true;\n this.showUserMenu = init?.showUserMenu || true;\n this.displayReportErrorButton = init?.displayReportErrorButton || false;\n this.useFluidLayout = init?.useFluidLayout || false;\n this.securityLayoutConfig = new SecurityLayoutConfigModel(init?.securityLayoutConfig);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { UpdLayoutConfig } from '../models/upd-layout.config';\n\n/**\n * Layout constants.\n */\nexport class LayoutConstants {\n /**\n * Key to inject the default configuration.\n */\n static defaultOptionsKey = 'upd-layout-default-options';\n\n /**\n * Injection token for the default configuration.\n */\n static defaultOptionsInjectionToken = new InjectionToken<UpdLayoutConfig>(LayoutConstants.defaultOptionsKey);\n}\n","import { Injectable, Inject } from '@angular/core';\n\nimport { UpdLayoutConfigModel } from '../models/upd-layout-config.model';\nimport { LayoutConstants } from '../tools/layout.constants';\nimport { UpdLayoutConfig } from '../models/upd-layout.config';\n\n/**\n * Layout configuration data.\n */\n@Injectable()\nexport class UpdLayoutConfigService {\n /**\n * Configuration (See: #upsee[p:models, i:UpdCoreLayoutConfigModel]).\n */\n readonly config: UpdLayoutConfigModel;\n\n constructor(@Inject(LayoutConstants.defaultOptionsInjectionToken) layoutConfig: UpdLayoutConfig) {\n this.config = new UpdLayoutConfigModel(layoutConfig);\n }\n}\n","import { BaseComponent, LayoutService } from '@updevs/sdk/layout';\nimport { inject, OnInit, Directive, OnDestroy } from '@angular/core';\n\nimport { UpdLayoutConfigService } from '../services/upd-layout-config.service';\n\n/**\n * Basic layout structure.\n */\n@Directive()\nexport abstract class BaseLayout extends BaseComponent implements OnInit, OnDestroy {\n protected readonly _layoutConfigService = inject(UpdLayoutConfigService);\n protected readonly _layoutService = inject(LayoutService);\n\n ngOnInit(): void {\n if (this._layoutConfigService.config.useFluidLayout) {\n this._layoutService.addBodyClasses('layout-fluid');\n }\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (this._layoutConfigService.config.useFluidLayout) {\n this._layoutService.removeBodyClasses('layout-fluid');\n }\n }\n}\n","import { Component, computed, OnInit } from '@angular/core';\n\nimport { BaseLayout } from '../../abstractions/base.layout';\n\n@Component({\n selector: 'upd-blank-layout',\n templateUrl: './blank-layout.component.html',\n styleUrls: ['./blank-layout.component.scss']\n})\nexport class BlankLayoutComponent extends BaseLayout implements OnInit {\n readonly config = computed(() => this._layoutService.mainHeaderConfig());\n\n override ngOnInit() {\n // Overriding layout fluid from parent.\n }\n}\n","<div class=\"page\" [class.page-center]=\"_layoutService.isPageCentered()\">\n @if (!config().shouldHideTopBarIfBlankLayout) {\n <upd-header [style]=\"'transparent'\"></upd-header>\n }\n\n <router-outlet></router-outlet>\n\n @if (!config().shouldHideFooterIfBlankLayout) {\n <upd-footer></upd-footer>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterOutlet } from '@angular/router';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdDropdownModule } from '@updevs/components/dropdown';\nimport { UpdLinkModule } from '@updevs/components/link';\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { FooterModule } from '../../partials/footer/footer.module';\nimport { HeaderModule } from '../../partials/header/header.module';\nimport { BlankLayoutComponent } from './blank-layout.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterOutlet,\n TranslocoPipe,\n UpdDropdownModule,\n UpdIconsModule,\n UpdLinkModule,\n FooterModule,\n HeaderModule\n ],\n declarations: [\n BlankLayoutComponent\n ],\n exports: [\n BlankLayoutComponent\n ]\n})\nexport class BlankLayoutModule {}\n","import { Component, HostBinding, ViewEncapsulation, OnInit, inject, signal } from '@angular/core';\nimport { Router, NavigationStart } from '@angular/router';\nimport { TextService } from '@updevs/sdk';\nimport { RouteDataModel, MenuService } from '@updevs/sdk/routes';\nimport { BaseComponent } from '@updevs/sdk/layout';\nimport { OptionalType } from '@updevs/sdk/types';\nimport { filter } from 'rxjs';\n\n@Component({\n selector: 'upd-sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class SidebarComponent extends BaseComponent implements OnInit {\n @HostBinding('class') wrapperClasses = 'navbar navbar-vertical navbar-expand-lg';\n @HostBinding('attr.data-bs-theme') theme = 'dark';\n\n menuItems: RouteDataModel[] = [];\n readonly textService = inject(TextService);\n readonly isSidebarMobileOpen = signal(false);\n\n private currentRoute = '';\n private menuItemsBackup: RouteDataModel[] = [];\n\n private readonly router = inject(Router);\n private readonly menuService = inject(MenuService);\n\n ngOnInit(): void {\n this.currentRoute = this.router.url;\n this.menuItems = this.menuService.generateMenu();\n this.menuItemsBackup = [...this.menuItems];\n const menuRefreshSub = this.menuService.refreshSubject.subscribe(() => {\n this.menuItems = [...this.menuService.generateMenu()];\n this.menuItemsBackup = [...this.menuItems];\n\n this.updateActiveRoute();\n });\n const routerSub = this.router.events.pipe(\n filter(event => event instanceof NavigationStart)\n ).subscribe(event => {\n this.currentRoute = (<NavigationStart>event).url;\n this.updateActiveRoute();\n });\n\n this.updateActiveRoute();\n this.addSubscriptions(routerSub, menuRefreshSub);\n }\n\n onMenuItemClick(item: RouteDataModel): void {\n if (item.isLocked) {\n if (!!item.lockedClickFunction) {\n item.lockedClickFunction();\n }\n\n return;\n }\n\n let newMenuItems = this.resetMenuState(this.menuItems);\n newMenuItems = this.setItemActive(newMenuItems, item, this.hasChildren(item) ? !item.isActive : true);\n newMenuItems = this.updateParents(newMenuItems, item);\n this.menuItems = newMenuItems;\n\n if (!!item.clickFunction) {\n item.clickFunction();\n return;\n }\n\n if (this.hasChildren(item)) {\n return;\n }\n\n const fullPath = this.findItemById(this.menuItemsBackup, item.id)!.getFullPath();\n\n this.router.navigate(fullPath).then();\n }\n\n hasChildren(item: RouteDataModel): boolean {\n return (item.children?.length || 0) > 0;\n }\n\n asMenuItem(item: any): RouteDataModel {\n return item as RouteDataModel;\n }\n\n getItemClasses(item: RouteDataModel, activeClass: string, ...classes: string[]): string[] {\n return [\n ...classes,\n item.isActive ? activeClass : '',\n item.isLocked ? 'disabled' : ''\n ];\n }\n\n toggleSidebarOnMobile(): void {\n this.isSidebarMobileOpen.set(!this.isSidebarMobileOpen());\n }\n\n private findActiveNode(item: RouteDataModel, fullPath: string): OptionalType<RouteDataModel> {\n if (item.fullPath === fullPath) {\n return item;\n }\n\n for (const child of item.children) {\n const found = this.findActiveNode(child, fullPath);\n\n if (found) {\n return found;\n }\n }\n\n return undefined;\n }\n\n private updateActiveRoute(): void {\n let newMenuItems = this.resetMenuState(this.menuItems);\n const activePath = this.getActivePath(newMenuItems);\n newMenuItems = this.setActivePath(newMenuItems, activePath);\n this.menuItems = newMenuItems;\n }\n\n private setActivePath(items: RouteDataModel[], path: RouteDataModel[]): RouteDataModel[] {\n if (path.length === 0) {\n return items;\n }\n\n return items.map(item => {\n const pathItem = path.find(p => p.id === item.id);\n\n if (!pathItem) {\n return item;\n }\n\n const newItem = { ...item, isActive: true } as RouteDataModel;\n\n if (newItem.children?.length) {\n newItem.children = this.setActivePath(\n newItem.children,\n path.filter(p => p.parent?.id === newItem.id)\n );\n newItem.children.forEach(child => child.parent = newItem);\n }\n\n return newItem;\n });\n }\n\n private getActivePath(items: RouteDataModel[]): RouteDataModel[] {\n let activeItem: OptionalType<RouteDataModel>;\n\n // Find the deepest active item.\n for (const item of items) {\n activeItem = this.findActiveNode(item, this.currentRoute);\n\n if (activeItem) {\n break;\n }\n }\n\n // Collect parent hierarchy.\n const path: RouteDataModel[] = [];\n\n while (activeItem) {\n path.unshift(activeItem);\n activeItem = activeItem.parent;\n }\n\n return path;\n }\n\n private resetMenuState(items: RouteDataModel[]): RouteDataModel[] {\n return items.map(item => {\n const newItem = { ...item, isActive: false } as RouteDataModel;\n\n if (newItem.children?.length) {\n newItem.children = this.resetMenuState(newItem.children);\n newItem.children.forEach(child => child.parent = newItem);\n }\n\n return newItem;\n });\n }\n\n private setItemActive(items: RouteDataModel[], target: RouteDataModel, isActive: boolean): RouteDataModel[] {\n return items.map(item => {\n if (item.id === target.id) {\n const newItem = { ...item, isActive } as RouteDataModel;\n\n if (newItem.children?.length) {\n newItem.children = this.setItemActive(newItem.children, target, isActive);\n newItem.children.forEach(child => child.parent = newItem);\n }\n\n return newItem;\n }\n\n if (item.children?.length) {\n const newChildren = this.setItemActive(item.children, target, isActive);\n const newItem = { ...item, children: newChildren } as RouteDataModel;\n\n newChildren.forEach(child => child.parent = newItem);\n\n return newItem;\n }\n\n return item;\n });\n }\n\n private updateParents(items: RouteDataModel[], childItem: RouteDataModel): RouteDataModel[] {\n let parent = childItem.parent;\n let updatedItems = [...items];\n\n while (parent) {\n updatedItems = updatedItems.map(item => {\n if (item.id === parent!.id) {\n return { ...parent!, isActive: true } as RouteDataModel;\n }\n\n return item;\n });\n parent = parent.parent;\n }\n\n return updatedItems;\n }\n\n private findItemById(items: RouteDataModel[], targetId: any): OptionalType<RouteDataModel> {\n for (const item of items) {\n if (item.id === targetId) {\n return item;\n }\n\n if (item.children?.length) {\n const child = this.findItemById(item.children, targetId);\n\n if (!!child) {\n return child;\n }\n }\n }\n\n return undefined;\n }\n}\n","<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n","import { Component, input } from '@angular/core';\nimport { PageHeaderModel } from '@updevs/sdk/layout';\n\n@Component({\n selector: 'upd-page-header',\n templateUrl: './page-header.component.html',\n styleUrls: ['./page-header.component.scss']\n})\nexport class PageHeaderComponent {\n model = input.required<PageHeaderModel>();\n}\n","<div class=\"page-header d-print-none\">\n <div class=\"container-xl\">\n <div class=\"row g-2 align-items-center\">\n <div class=\"col\">\n <div class=\"page-pretitle\">\n {{ model().titleHeader }}\n </div>\n <h2 class=\"page-title\">\n {{ model().title }}\n </h2>\n </div>\n @if (model().actionButtons.length > 0) {\n <div class=\"col-auto ms-auto d-print-none\">\n <div class=\"btn-list\">\n @for (btn of model().actionButtons; track btn) {\n <upd-button [model]=\"btn\"></upd-button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\n\nimport { BaseLayout } from '../../abstractions/base.layout';\n\n@Component({\n selector: 'upd-vertical-sidebar-layout',\n templateUrl: './vertical-sidebar-layout.component.html',\n styleUrls: ['./vertical-sidebar-layout.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class VerticalSidebarLayoutComponent extends BaseLayout {}\n","<div class=\"page\">\n <upd-sidebar></upd-sidebar>\n <upd-header></upd-header>\n\n <div class=\"page-wrapper\">\n @if (!!_layoutService.pageHeader()) {\n <upd-page-header [model]=\"_layoutService.pageHeader()!\"></upd-page-header>\n }\n <div class=\"page-body\">\n <div class=\"container-xl\">\n <router-outlet></router-outlet>\n </div>\n </div>\n <upd-footer></upd-footer>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdCoreLayoutModule } from '@updevs/sdk/layout';\nimport { UpdButtonModule } from '@updevs/components/button';\nimport { UpdLinkModule } from '@updevs/components/link';\nimport { UpdDropdownModule } from '@updevs/components/dropdown';\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\n\nimport * as en from '../../assets/i18n/en.json';\nimport * as pt from '../../assets/i18n/pt.json';\nimport { FooterModule } from '../../partials/footer/footer.module';\nimport { HeaderModule } from '../../partials/header/header.module';\nimport { VerticalSidebarLayoutComponent } from './vertical-sidebar-layout.component';\nimport { SidebarComponent } from '../../partials/sidebar/sidebar.component';\nimport { PageHeaderComponent } from '../../partials/page-header/page-header.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n TranslocoModule,\n UpdIconsModule,\n UpdCoreLayoutModule,\n UpdButtonModule,\n UpdLinkModule,\n UpdDropdownModule,\n FooterModule,\n HeaderModule\n ],\n declarations: [\n VerticalSidebarLayoutComponent,\n SidebarComponent,\n PageHeaderComponent\n ],\n exports: [\n VerticalSidebarLayoutComponent,\n SidebarComponent,\n PageHeaderComponent\n ]\n})\nexport class VerticalSidebarLayoutModule {\n constructor(translocoService: TranslocoService) {\n translocoService.setFallbackLangForMissingTranslation({ fallbackLang: 'en' });\n translocoService.setTranslation(en, 'en');\n translocoService.setTranslation(pt, 'pt');\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'upd-logged-out',\n templateUrl: './logged-out.component.html',\n styleUrls: ['./logged-out.component.scss']\n})\nexport class LoggedOutComponent {\n\n}\n","<p>logged-out works!</p>\n","import { Component, inject, OnDestroy, OnInit, model, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { FormGroup, Validators } from '@angular/forms';\nimport { LayoutService } from '@updevs/sdk/layout';\nimport { AuthService } from '@updevs/sdk/security';\nimport { FormRowModel, DynamicFieldType, InputFieldModel } from '@updevs/components/form';\nimport { finalize } from 'rxjs';\n\nimport { UpdLayoutConfigService } from '../../../services/upd-layout-config.service';\n\n@Component({\n selector: 'upd-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss']\n})\nexport class LoginComponent implements OnInit, OnDestroy {\n formGroup = model(new FormGroup({}));\n formRows: FormRowModel[] = [];\n isSigningIn = signal(false);\n readonly layoutConfigService = inject(UpdLayoutConfigService);\n readonly config = this.layoutConfigService.config.securityLayoutConfig.loginPage;\n\n get border(): string {\n return `border-${this.config.borderColor}`;\n }\n\n get linkClasses(): string[] {\n return [`link-${this.config.linksColor}`];\n }\n\n private get boxBgColor(): string {\n return this.config.bgColor || (!!this.config.bgStyle ? `bg-${this.config.bgStyle}` : '') || 'bg-white';\n }\n\n private readonly bodyClasses = ['border-top-wide', this.border, 'd-flex', 'flex-column'];\n private readonly router = inject(Router);\n private readonly authService = inject(AuthService);\n private readonly layoutService = inject(LayoutService);\n\n ngOnInit(): void {\n this.layoutService.addBodyClasses(this.boxBgColor);\n\n if (this.config.layout !== 'cover') {\n this.layoutService.addBodyClasses(...this.bodyClasses);\n }\n\n this.formRows = [\n {\n fields: [\n {\n name: 'username',\n type: DynamicFieldType.Input,\n colSize: { default: 12 },\n label: { text: 'UpDevs.Login.Email', isTranslated: false },\n validators: [Validators.required, Validators.minLength(3)],\n shouldSubmitOnEnter: true\n } as InputFieldModel\n ]\n },\n {\n fields: [\n {\n name: 'password',\n type: DynamicFieldType.Input,\n inputType: 'password',\n colSize: { default: 12 },\n label: { text: 'UpDevs.Login.Password', isTranslated: false },\n validators: [Validators.required, Validators.minLength(3)],\n shouldSubmitOnEnter: true\n } as InputFieldModel\n ]\n },\n {\n fields: [\n {\n name: 'rememberMe',\n type: DynamicFieldType.Checkbox,\n colSize: { default: 12 },\n label: { text: 'UpDevs.Login.RememberMe', isTranslated: false },\n initValue: false\n }\n ]\n }\n ];\n }\n\n ngOnDestroy(): void {\n this.layoutService.removeBodyClasses(this.boxBgColor);\n\n if (this.config.layout !== 'cover') {\n this.layoutService.removeBodyClasses(...this.bodyClasses);\n }\n }\n\n login(): void {\n // TODO: handle remember me\n this.isSigningIn.set(true);\n this.authService.login((this.formGroup().value as any).username, (this.formGroup().value as any).password)\n .pipe(finalize(() => this.isSigningIn.set(false)))\n .subscribe();\n }\n\n goToRecoverPasswordPage(): void {\n this.router.navigate([this.config.recoverPasswordRoute]).then();\n }\n\n goToSignUpPage(): void {\n this.router.navigate([this.config.signUpRoute]).then();\n }\n}\n","<ng-container *transloco=\"let t; prefix: 'UpDevs.Login'\">\n <upd-header [style]=\"'transparent'\"></upd-header>\n <div class=\"page page-center\">\n @switch (config.layout) {\n @case ('centered-box') {\n <div class=\"container container-tight py-4\">\n <ng-container [ngTemplateOutlet]=\"loginCardTpl\"></ng-container>\n </div>\n }\n @case ('box-with-picture') {\n <div class=\"container container-normal py-4\">\n <div class=\"row align-items-center g-4\">\n <div class=\"col-lg\">\n <div class=\"container-tight\">\n <ng-container [ngTemplateOutlet]=\"loginCardTpl\"></ng-container>\n </div>\n </div>\n <div class=\"col-lg d-none d-lg-block\">\n <img height=\"300\" class=\"d-block mx-auto upd-right-login-image\" />\n </div>\n </div>\n </div>\n }\n @case ('cover') {\n <div class=\"row g-0 flex-fill\">\n <div class=\"col-12 col-lg-6 col-xl-4 border-top-wide d-flex flex-column justify-content-center\"\n [ngClass]=\"border\">\n <div class=\"container container-tight my-5 px-lg-5\">\n <ng-container [ngTemplateOutlet]=\"headerTpl\"></ng-container>\n\n <h2 class=\"h3 text-center mb-3\">\n {{ t('Title') }}\n </h2>\n\n <ng-container [ngTemplateOutlet]=\"loginFormTpl\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"socialLoginTpl\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"noAccountTpl\"></ng-container>\n </div>\n </div>\n <div class=\"col-12 col-lg-6 col-xl-8 d-none d-lg-block\">\n <div class=\"bg-cover h-100 min-vh-100 upd-right-login-cover-image\"></div>\n </div>\n </div>\n }\n }\n </div>\n <upd-footer></upd-footer>\n\n <ng-template #loginCardTpl>\n <ng-container [ngTemplateOutlet]=\"headerTpl\"></ng-container>\n <upd-card [removeBorder]=\"true\">\n <div class=\"p-4\">\n <h2 class=\"h2 text-center mb-4\">\n {{ t('Title') }}\n </h2>\n <ng-container [ngTemplateOutlet]=\"loginFormTpl\"></ng-container>\n </div>\n <ng-container [ngTemplateOutlet]=\"socialLoginTpl\"></ng-container>\n </upd-card>\n <ng-container [ngTemplateOutlet]=\"noAccountTpl\"></ng-container>\n </ng-template>\n\n <ng-template #loginFormTpl>\n <upd-form [rows]=\"formRows\" [hasActionsSection]=\"false\" [(formGroup)]=\"formGroup\" (submitted)=\"login()\"></upd-form>\n <div class=\"form-footer\">\n <upd-button [colorStyle]=\"config.signInButtonColor\" (clicked)=\"login()\" [isLoading]=\"isSigningIn()\"\n customClasses=\"w-100\">\n {{ t('SignIn') }}\n </upd-button>\n @if (!!config.recoverPasswordRoute) {\n <div class=\"d-flex mt-2\">\n <upd-link class=\"ms-auto\" [customClasses]=\"linkClasses\" (clicked)=\"goToRecoverPasswordPage()\">\n {{ t('RecoverPassword') }}\n </upd-link>\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #socialLoginTpl>\n @if (config.socialLoginButtons.length > 0) {\n <div class=\"hr-text\">\n {{ t('Or') }}\n </div>\n <div class=\"card-body\">\n <div class=\"row\">\n @for (btn of config.socialLoginButtons; track btn) {\n <div class=\"col\">\n <upd-button [model]=\"btn\"></upd-button>\n </div>\n }\n </div>\n </div>\n }\n </ng-template>\n\n <ng-template #headerTpl>\n <div class=\"text-center mb-4\">\n <a href=\".\" class=\"navbar-brand navbar-brand-autodark\">\n <img height=\"36\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </div>\n </ng-template>\n\n <ng-template #noAccountTpl>\n @if (!!config.signUpRoute) {\n <div class=\"text-center text-muted mt-3\">\n {{ t('NoAccountYet') }}\n <upd-link [customClasses]=\"linkClasses\" (clicked)=\"goToSignUpPage()\">{{ t('SignUp') }}</upd-link>\n </div>\n }\n </ng-template>\n</ng-container>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'upd-oauth-callback',\n templateUrl: './oauth-callback.component.html',\n styleUrls: ['./oauth-callback.component.scss']\n})\nexport class OauthCallbackComponent {\n\n}\n","<p>oauth-callback works!</p>\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nimport { OauthCallbackComponent } from './oauth-callback/oauth-callback.component';\nimport { LoggedOutComponent } from './logged-out/logged-out.component';\nimport { LoginComponent } from './login/login.component';\n\n/**\n * Auth flow routes.\n */\nexport const routes: Routes = [\n { path: 'oauth/callback', component: OauthCallbackComponent },\n { path: 'logged-out', component: LoggedOutComponent },\n { path: 'login', component: LoginComponent }\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { useHash: true })],\n exports: [RouterModule]\n})\nexport class AuthFlowRoutingModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { UpdButtonModule } from '@updevs/components/button';\nimport { UpdLinkModule } from '@updevs/components/link';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdCardModule } from '@updevs/components/card';\nimport { UpdFormModule } from '@updevs/components/form';\nimport { TranslocoDirective } from '@jsverse/transloco';\n\nimport { FooterModule } from '../../partials/footer/footer.module';\nimport { HeaderModule } from '../../partials/header/header.module';\nimport { LoginComponent } from './login/login.component';\nimport { OauthCallbackComponent } from './oauth-callback/oauth-callback.component';\nimport { LoggedOutComponent } from './logged-out/logged-out.component';\nimport { AuthFlowRoutingModule } from './auth-flow-routing.module';\n\n@NgModule({\n imports: [\n CommonModule,\n AuthFlowRoutingModule,\n UpdButtonModule,\n UpdIconsModule,\n FormsModule,\n TranslocoDirective,\n UpdLinkModule,\n UpdCardModule,\n UpdFormModule,\n FooterModule,\n HeaderModule\n ],\n declarations: [\n LoginComponent,\n OauthCallbackComponent,\n LoggedOutComponent\n ],\n exports: [\n LoginComponent,\n OauthCallbackComponent,\n LoggedOutComponent\n ]\n})\nexport class AuthFlowModule {\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdCoreLayoutModule } from '@updevs/sdk/layout';\nimport { UpdNotificationsModule } from '@updevs/sdk/notifications';\n\nimport { UpdLayoutConfig } from './models/upd-layout.config';\nimport { LayoutConstants } from './tools/layout.constants';\nimport { UpdLayoutConfigService } from './services/upd-layout-config.service';\n\n/**\n * Layout module.\n */\n@NgModule({\n imports: [\n CommonModule,\n UpdCoreLayoutModule,\n UpdNotificationsModule\n ],\n providers: [\n UpdLayoutConfigService\n ]\n})\nexport class UpdLayoutModule {\n /**\n * Sets up the layout module with the provided configuration.\n * @param config Configuration (See: #updsee[p:abstractions, i:UpdCoreLayoutConfig]).\n */\n static forRoot(config: UpdLayoutConfig): ModuleWithProviders<UpdLayoutModule> {\n return {\n ngModule: UpdLayoutModule,\n providers: [\n { provide: LayoutConstants.defaultOptionsInjectionToken, useValue: config }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i4","i2.FooterComponent","i3.HeaderComponent","i4.SidebarComponent","i5.PageHeaderComponent","en","pt","i3","i5","i8.FooterComponent","i9.HeaderComponent"],"mappings":"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"}
1
+ {"version":3,"file":"updevs-components-layout.mjs","sources":["../../../../libs/components/layout/src/abstractions/base-page.component.ts","../../../../libs/components/layout/src/partials/footer/footer.component.ts","../../../../libs/components/layout/src/partials/footer/footer.component.html","../../../../libs/components/layout/src/partials/footer/footer.module.ts","../../../../libs/components/layout/src/partials/header/header.component.ts","../../../../libs/components/layout/src/partials/header/header.component.html","../../../../libs/components/layout/src/partials/header/header.module.ts","../../../../libs/components/layout/src/models/login-page-config.model.ts","../../../../libs/components/layout/src/models/security-layout-config.model.ts","../../../../libs/components/layout/src/models/upd-layout-config.model.ts","../../../../libs/components/layout/src/tools/layout.constants.ts","../../../../libs/components/layout/src/services/upd-layout-config.service.ts","../../../../libs/components/layout/src/abstractions/base.layout.ts","../../../../libs/components/layout/src/layouts/blank-layout/blank-layout.component.ts","../../../../libs/components/layout/src/layouts/blank-layout/blank-layout.component.html","../../../../libs/components/layout/src/layouts/blank-layout/blank-layout.module.ts","../../../../libs/components/layout/src/partials/sidebar/sidebar.component.ts","../../../../libs/components/layout/src/partials/sidebar/sidebar.component.html","../../../../libs/components/layout/src/partials/page-header/page-header.component.ts","../../../../libs/components/layout/src/partials/page-header/page-header.component.html","../../../../libs/components/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.ts","../../../../libs/components/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.html","../../../../libs/components/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.ts","../../../../libs/components/layout/src/pages/auth-flow/logged-out/logged-out.component.ts","../../../../libs/components/layout/src/pages/auth-flow/logged-out/logged-out.component.html","../../../../libs/components/layout/src/pages/auth-flow/login/login.component.ts","../../../../libs/components/layout/src/pages/auth-flow/login/login.component.html","../../../../libs/components/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.ts","../../../../libs/components/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.html","../../../../libs/components/layout/src/pages/auth-flow/auth-flow-routing.module.ts","../../../../libs/components/layout/src/pages/auth-flow/auth-flow.module.ts","../../../../libs/components/layout/src/upd-layout.module.ts","../../../../libs/components/layout/src/updevs-components-layout.ts"],"sourcesContent":["import { OnDestroy, Directive, inject } from '@angular/core';\nimport { BaseComponent, LayoutService } from '@updevs/sdk/layout';\n\n/**\n * Basic page structure.\n */\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class BasePageComponent extends BaseComponent implements OnDestroy {\n protected readonly _layoutService = inject(LayoutService);\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._layoutService.pageHeader.set(undefined);\n }\n}\n","import { Component, HostBinding, OnInit, OnChanges, SimpleChanges, ViewEncapsulation, inject } from '@angular/core';\nimport { LinkModel } from '@updevs/sdk/core';\nimport { BaseComponent, LayoutService } from '@updevs/sdk/layout';\n\n@Component({\n selector: 'upd-footer',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class FooterComponent extends BaseComponent implements OnInit, OnChanges {\n @HostBinding('class') wrapperClasses = '';\n\n /**\n * Whether the footer will always be shown.\n */\n isSticky = false;\n /**\n * Whether the footer is transparent or not.\n */\n isTransparent = true;\n /**\n * Links.\n */\n links: LinkModel[] = [];\n /**\n * Current year.\n */\n currentYear = new Date().getFullYear();\n /**\n * Version of the application.\n */\n version?: string;\n\n readonly layoutService = inject(LayoutService);\n\n private baseWrapperClasses = 'footer d-print-none';\n\n ngOnInit(): void {\n this.updateWrapperClasses();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!!changes['isSticky'].currentValue || !!changes['isTransparent'].currentValue) {\n this.updateWrapperClasses();\n }\n }\n\n private updateWrapperClasses(): void {\n const stickyBottomCls = this.isSticky ? ' sticky-bottom' : '';\n const transparentCls = this.isTransparent ? ' footer-transparent' : '';\n this.wrapperClasses = `${this.baseWrapperClasses}${stickyBottomCls}${transparentCls}`;\n }\n}\n","<div class=\"container-xl\">\n <div class=\"row text-center align-items-center flex-row-reverse\">\n <div class=\"col-lg-auto ms-lg-auto\">\n @if (!!layoutService.rightFooter()) {\n <ng-container [ngTemplateOutlet]=\"layoutService.rightFooter()!\"></ng-container>\n }\n\n @if (links.length > 0) {\n <ul class=\"list-inline list-inline-dots mb-0\">\n @for (link of links; track link) {\n <li class=\"list-inline-item\">\n <a href=\"{{link.url}}\" target=\"{{link.target}}\" class=\"link-secondary\">\n <span [innerHTML]=\"link.text\"></span>\n </a>\n </li>\n }\n </ul>\n }\n </div>\n <div class=\"col-12 col-lg-auto mt-3 mt-lg-0\">\n <ul class=\"list-inline list-inline-dots mb-0\">\n <li class=\"list-inline-item\">\n <ng-container *transloco=\"let t; prefix: 'UpDevs.Footer'\">\n {{ t('Prefix') }} {{ t('Symbol') }} {{ currentYear }} {{ t('Suffix') }}\n </ng-container>\n </li>\n @if (!!version) {\n <li class=\"list-inline-item\">\n {{ version }}\n </li>\n }\n </ul>\n\n @if (!!layoutService.leftFooter()) {\n <ng-container [ngTemplateOutlet]=\"layoutService.leftFooter()!\"></ng-container>\n }\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoModule } from '@jsverse/transloco';\n\nimport { FooterComponent } from './footer.component';\n\n@NgModule({\n imports: [\n CommonModule,\n TranslocoModule\n ],\n declarations: [\n FooterComponent\n ],\n exports: [\n FooterComponent\n ]\n})\nexport class FooterModule {}\n","import {\n Component,\n ViewEncapsulation,\n HostBinding,\n OnInit,\n inject,\n computed,\n signal,\n viewChild,\n ElementRef, input\n} from '@angular/core';\nimport { TablerIconsType } from '@updevs/icons';\nimport { TextService } from '@updevs/sdk';\nimport { BaseComponent, LayoutService, PreferencesStorage, UpdCoreLayoutConfigService } from '@updevs/sdk/layout';\nimport { DropdownItem } from '@updevs/components/dropdown';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { NotificationModel, NotificationsService } from '@updevs/sdk/notifications';\nimport { SecurityStorage } from '@updevs/sdk/security';\n\nimport { HeaderStyleType } from './header-style.type';\n\n@Component({\n selector: 'upd-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class HeaderComponent extends BaseComponent implements OnInit {\n @HostBinding('class') get classes(): string {\n return this.wrapperClasses();\n }\n\n languageSwitcherRef = viewChild('languageSwitcherBtn', { read: ElementRef });\n notificationsRef = viewChild('notificationsBtn', { read: ElementRef });\n loggedUserRef = viewChild('loggedUserBtn', { read: ElementRef });\n\n isLanguageSwitcherDropdownOpen = false;\n isNotificationsDropdownOpen = false;\n isLoggedUserDropdownOpen = false;\n\n readonly style = input<HeaderStyleType>('light');\n readonly nextThemeIcon = computed<TablerIconsType>(() => this.currentPreferences()?.isDarkTheme ? 'sun' : 'moon-stars');\n readonly currentNotificationsIcon = computed<TablerIconsType>(() => this.hasNewNotifications() ? 'bell-ringing' : 'bell');\n readonly hasNewNotifications = computed(() => this.currentNotifications().some(n => !n.dateRead));\n readonly languagesOptions = computed<DropdownItem[]>(() => {\n const allLanguagesOptions: DropdownItem[] = [];\n const availableLanguages = (this.coreLayoutConfigService.config.availableLanguages || {});\n\n Object.keys(availableLanguages).forEach(key => {\n allLanguagesOptions.push({\n id: key,\n type: 'default',\n text: availableLanguages[key],\n isActive: this.currentLanguageKey() === key\n });\n });\n\n return allLanguagesOptions;\n });\n readonly loggedUserOptions = computed<DropdownItem[]>(() => {\n const userActions: DropdownItem[] = [];\n\n this.coreLayoutConfigService.config.loggedUserMenuActions.forEach(act => userActions.push({\n id: act.id!(),\n text: act.text!(),\n type: 'default',\n icon: act.iconModel?.()\n }));\n\n return userActions;\n });\n readonly userInfo = computed(() => this.securityStorage.getUserInfo());\n readonly userIdentification = computed(() =>\n !!this.userInfo() ? this.coreLayoutConfigService.config.getUserName(this.userInfo()!) : ''\n );\n readonly userDescription = computed(() =>\n !!this.coreLayoutConfigService.config.getUserDescription\n ? this.coreLayoutConfigService.config.getUserDescription(this.userInfo()!)\n : ''\n );\n readonly shouldBlinkIfNewNotifications = computed(() => !!this.coreLayoutConfigService.config.shouldBlinkIfNewNotifications);\n readonly latestNotifications = computed(() => {\n const unreadNotifications = this.currentNotifications()\n .filter(n => !n.dateRead)\n .sort((a, b) => new Date(b.dateReceived).getTime() - new Date(a.dateReceived).getTime())\n .slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);\n const readNotifications = this.currentNotifications()\n .filter(n => !!n.dateRead)\n .sort((a, b) => new Date(b.dateReceived).getTime() - new Date(a.dateReceived).getTime())\n .slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);\n\n return [\n ...unreadNotifications,\n ...readNotifications\n ].slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);\n });\n readonly textService = inject(TextService);\n readonly isSidebarMobileOpen = signal(false);\n\n private readonly securityStorage = inject(SecurityStorage);\n private readonly coreLayoutConfigService = inject(UpdCoreLayoutConfigService);\n private readonly layoutService = inject(LayoutService);\n private readonly translocoService = inject(TranslocoService);\n private readonly preferencesStorage = inject(PreferencesStorage);\n private readonly notificationsService = inject(NotificationsService);\n private readonly currentPreferences = this.preferencesStorage.getPreferences();\n private readonly currentNotifications = this.notificationsService.notifications;\n private readonly currentLanguageKey = signal('');\n private readonly wrapperClasses = computed(() => `navbar navbar-expand-md d-none d-lg-flex d-print-none navbar-${this.style()}`);\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n readonly config = computed(() => this.layoutService.mainHeaderConfig());\n\n ngOnInit(): void {\n if (!!this.currentPreferences()?.isDarkTheme) {\n this.layoutService.setDarkMode();\n }\n\n if (!!this.currentPreferences()?.currentLanguageCode) {\n const code = this.currentPreferences()!.currentLanguageCode!;\n\n this.currentLanguageKey.set(code);\n this.translocoService.setActiveLang(code);\n }\n }\n\n switchTheme(): void {\n this.layoutService.toggleDarkMode();\n }\n\n switchLanguage(item: DropdownItem): void {\n this.currentLanguageKey.set(item.id);\n this.translocoService.setActiveLang(item.id);\n this.preferencesStorage.savePreferences({ ...this.currentPreferences(), currentLanguageCode: item.id });\n this.layoutService.notifyUserChangedLanguage(item.id);\n\n this.isLanguageSwitcherDropdownOpen = false;\n }\n\n selectLoggedUserMenuItem(item: DropdownItem): void {\n const btn = this.coreLayoutConfigService.config.loggedUserMenuActions.find(b => b.id!() === item.id);\n\n if (!!btn?.clickFunction) {\n btn.clickFunction!({ data: this.userInfo() });\n }\n }\n\n readNotification(notification: NotificationModel): void {\n if (!notification.dateRead) {\n this.notificationsService.markAsRead(notification.id);\n }\n\n this.notificationsService.clickOnNotification(notification);\n }\n\n removeNotification(notification: NotificationModel): void {\n this.notificationsService.removeNotifications(notification.id);\n }\n\n toggleSidebarOnMobile(): void {\n this.isSidebarMobileOpen.set(!this.isSidebarMobileOpen());\n }\n}\n","<div class=\"container-xl\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-nav flex-row order-md-last\">\n <div class=\"d-none d-md-flex me-3\">\n @if (!!config().showThemeSwitcher) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchTheme()\">\n <upd-icon [tablerIcon]=\"nextThemeIcon()\"></upd-icon>\n </upd-link>\n </div>\n }\n @if (!!config().showLanguageSwitcher && languagesOptions().length > 0) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLanguageSwitcherDropdownOpen=true\"\n #languageSwitcherBtn>\n <upd-icon tablerIcon=\"language\"></upd-icon>\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLanguageSwitcherDropdownOpen\"\n [dropdownReference]=\"languageSwitcherRef()\" [items]=\"languagesOptions()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isLanguageSwitcherDropdownOpen = $event\" (selectedItem)=\"switchLanguage($event)\">\n </upd-dropdown>\n </div>\n }\n @if (!!config().showNotifications && !!userInfo()) {\n <div class=\"nav-item dropdown d-none d-md-flex\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isNotificationsDropdownOpen = true\"\n #notificationsBtn>\n <upd-icon [tablerIcon]=\"currentNotificationsIcon()\"></upd-icon>\n @if (hasNewNotifications()) {\n <span class=\"badge bg-red\" [class.badge-blink]=\"shouldBlinkIfNewNotifications()\"></span>\n }\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1 dropdown-menu-card\" [isOpen]=\"isNotificationsDropdownOpen\"\n [dropdownReference]=\"notificationsRef()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isNotificationsDropdownOpen = $event\" [minWidth]=\"400\" arrowType=\"right\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3 class=\"card-title\">{{ 'UpDevs.NotificationCenter.Title' | transloco }}</h3>\n </div>\n @for (notification of latestNotifications(); track notification) {\n <div class=\"list-group list-group-flush list-group-hoverable\" (click)=\"readNotification(notification)\">\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\">\n @if (!!notification.dateRead) {\n <span class=\"status-dot d-block\"></span>\n } @else {\n <span class=\"status-dot status-dot-animated bg-primary d-block\"></span>\n }\n </div>\n <div class=\"col text-truncate\">\n <a href=\"javascript:void(0)\" class=\"text-body d-block\"\n [class.fw-bold]=\"!notification.dateRead\">\n {{ textService.getText(notification.title) }}\n </a>\n @if (!!notification.description) {\n <div class=\"d-block text-secondary text-truncate mt-n1\">\n {{ textService.getText(notification.description) }}\n </div>\n }\n </div>\n <div class=\"col-auto\">\n <upd-link [customClasses]=\"['list-group-item-actions']\"\n (clicked)=\"removeNotification(notification)\">\n <upd-icon tablerIcon=\"x\"></upd-icon>\n </upd-link>\n </div>\n </div>\n </div>\n </div>\n } @empty {\n <div class=\"empty\">\n <h1 class=\"text-body-tertiary\">{{ 'UpDevs.NotificationCenter.NoNotifications' | transloco }}</h1>\n </div>\n }\n </div>\n </upd-dropdown>\n </div>\n }\n </div>\n @if (!!config().showUserMenu && !!userInfo()) {\n <div class=\"nav-item dropdown\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLoggedUserDropdownOpen = true\" #loggedUserBtn>\n @if (!!userInfo()!.avatar) {\n <span class=\"avatar avatar-sm\" style=\"background-image: url({{userInfo()?.avatar}})\"></span>\n }\n\n <div class=\"d-none d-xl-block px-2\">\n <div>{{ userIdentification() }}</div>\n @if (!!userDescription()) {\n <div class=\"mt-1 small text-muted\">{{ userDescription() }}</div>\n }\n </div>\n </upd-link>\n @if (loggedUserOptions().length > 0) {\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLoggedUserDropdownOpen\" [dropdownReference]=\"loggedUserRef()\"\n [items]=\"loggedUserOptions()\" [shouldCloseOnOutsideClick]=\"true\" (selectedItem)=\"selectLoggedUserMenuItem($event)\"\n (isOpenChange)=\"isLoggedUserDropdownOpen = $event\" arrowType=\"right\">\n </upd-dropdown>\n }\n </div>\n }\n </div>\n @if (!!config().showSearchBar && !!userInfo()) {\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <div class=\"me-2\" [class.w-100]=\"config().shouldUseFullSearchBar\">\n <form autocomplete=\"off\" novalidate>\n <div class=\"input-icon\">\n <span class=\"input-icon-addon\">\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </span>\n <input type=\"text\" value=\"\" class=\"form-control\" placeholder=\"{{'UpDevs.Header.Search' | transloco}}...\">\n </div>\n </form>\n </div>\n </div>\n } @else {\n <div></div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdDropdownModule } from '@updevs/components/dropdown';\nimport { UpdLinkModule } from '@updevs/components/link';\nimport { TranslocoModule } from '@jsverse/transloco';\n\nimport { HeaderComponent } from './header.component';\n\n@NgModule({\n imports: [\n CommonModule,\n TranslocoModule,\n UpdIconsModule,\n UpdDropdownModule,\n UpdLinkModule\n ],\n declarations: [\n HeaderComponent\n ],\n exports: [\n HeaderComponent\n ]\n})\nexport class HeaderModule {}\n","import { ButtonModel } from '@updevs/sdk/layout';\nimport { BgColorStyleType, ColorStyleType } from '@updevs/sdk/types';\n\nimport { LoginPageConfig } from './login-page.config';\n\n/**\n * Configuration of the login page layout.\n */\nexport class LoginPageConfigModel implements LoginPageConfig {\n /**\n * Layout of the login page.\n */\n layout: 'centered-box' | 'box-with-picture' | 'cover';\n\n /**\n * Background color of the login box (exclusive with bgStyle).\n * Should be the name of a CSS class.\n */\n bgColor?: string;\n\n /**\n * Background color of the login box (exclusive with bgColor).\n */\n bgStyle?: BgColorStyleType;\n\n /**\n * Color of the border used in the login page.\n */\n borderColor: ColorStyleType;\n\n /**\n * Color of the sign-in button.\n */\n signInButtonColor: ColorStyleType;\n\n /**\n * Color of all links in the login page.\n */\n linksColor: ColorStyleType;\n\n /**\n * Route with the page to recover the user's password.\n */\n recoverPasswordRoute?: string;\n\n /**\n * Route with the page to register a user.\n */\n signUpRoute?: string;\n\n /**\n * Buttons used for social login (google, facebook, etc).\n */\n socialLoginButtons: ButtonModel[] = [];\n\n constructor(init?: LoginPageConfig) {\n Object.assign(this, init);\n\n this.layout = init?.layout || 'centered-box';\n this.borderColor = init?.borderColor || 'primary';\n this.signInButtonColor = init?.signInButtonColor || 'primary';\n this.linksColor = init?.linksColor || this.signInButtonColor;\n\n if (init?.socialLoginButtons) {\n this.socialLoginButtons = init.socialLoginButtons;\n }\n }\n}\n","import { SecurityLayoutConfig } from './security-layout.config';\nimport { LoginPageConfigModel } from './login-page-config.model';\n\n/**\n * Configuration for the pages related to the security.\n */\nexport class SecurityLayoutConfigModel implements SecurityLayoutConfig {\n /**\n * Configuration of the login page.\n */\n loginPage: LoginPageConfigModel;\n\n constructor(init?: SecurityLayoutConfig) {\n this.loginPage = new LoginPageConfigModel(init?.loginPage);\n }\n}\n","import { UpdLayoutConfig } from './upd-layout.config';\nimport { SecurityLayoutConfigModel } from './security-layout-config.model';\n\n/**\n * Layout configuration.\n */\nexport class UpdLayoutConfigModel implements UpdLayoutConfig {\n /**\n * Main menu title.\n */\n menuTitle?: string;\n /**\n * Whether the menu should start expanded.\n */\n shouldMenuStartExpanded?: boolean;\n /**\n * Main application logo.\n */\n mainLogo?: string;\n /**\n * Small application logo.\n */\n smallLogo?: string;\n /**\n * Background image for the logged out page.\n */\n loggedOutBackground?: string;\n /**\n * Whether the default notifications button should be displayed.\n */\n showNotificationsButton?: boolean;\n /**\n * Whether the report error button should be displayed when an exception is thrown by the server.\n */\n displayReportErrorButton?: boolean;\n /**\n * Whether the logged user's menu should be displayed.\n */\n showUserMenu?: boolean;\n /**\n * Whether the fluid layout (less padding) should be used.\n */\n useFluidLayout?: boolean;\n /**\n * Configuration for the pages related to the security.\n */\n securityLayoutConfig: SecurityLayoutConfigModel;\n\n constructor(init?: UpdLayoutConfig) {\n if (init?.mainLogo === undefined) {\n // this.mainLogo = LogoConstants.defaultLogo; // TODO: add images\n }\n\n if (init?.smallLogo === undefined) {\n // this.smallLogo = LogoConstants.smallLogo;\n }\n\n if (init?.loggedOutBackground === undefined) {\n // this.loggedOutBackground = ImageConstants.loggedOutBackground;\n }\n\n this.menuTitle = init?.menuTitle || 'UpDevs';\n this.showNotificationsButton = init?.showNotificationsButton || true;\n this.showUserMenu = init?.showUserMenu || true;\n this.displayReportErrorButton = init?.displayReportErrorButton || false;\n this.useFluidLayout = init?.useFluidLayout || false;\n this.securityLayoutConfig = new SecurityLayoutConfigModel(init?.securityLayoutConfig);\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { UpdLayoutConfig } from '../models/upd-layout.config';\n\n/**\n * Layout constants.\n */\nexport class LayoutConstants {\n /**\n * Key to inject the default configuration.\n */\n static defaultOptionsKey = 'upd-layout-default-options';\n\n /**\n * Injection token for the default configuration.\n */\n static defaultOptionsInjectionToken = new InjectionToken<UpdLayoutConfig>(LayoutConstants.defaultOptionsKey);\n}\n","import { Injectable, Inject } from '@angular/core';\n\nimport { UpdLayoutConfigModel } from '../models/upd-layout-config.model';\nimport { LayoutConstants } from '../tools/layout.constants';\nimport { UpdLayoutConfig } from '../models/upd-layout.config';\n\n/**\n * Layout configuration data.\n */\n@Injectable()\nexport class UpdLayoutConfigService {\n /**\n * Configuration (See: #upsee[p:models, i:UpdCoreLayoutConfigModel]).\n */\n readonly config: UpdLayoutConfigModel;\n\n constructor(@Inject(LayoutConstants.defaultOptionsInjectionToken) layoutConfig: UpdLayoutConfig) {\n this.config = new UpdLayoutConfigModel(layoutConfig);\n }\n}\n","import { BaseComponent, LayoutService } from '@updevs/sdk/layout';\nimport { inject, OnInit, Directive, OnDestroy } from '@angular/core';\n\nimport { UpdLayoutConfigService } from '../services/upd-layout-config.service';\n\n/**\n * Basic layout structure.\n */\n@Directive()\nexport abstract class BaseLayout extends BaseComponent implements OnInit, OnDestroy {\n protected readonly _layoutConfigService = inject(UpdLayoutConfigService);\n protected readonly _layoutService = inject(LayoutService);\n\n ngOnInit(): void {\n if (this._layoutConfigService.config.useFluidLayout) {\n this._layoutService.addBodyClasses('layout-fluid');\n }\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n\n if (this._layoutConfigService.config.useFluidLayout) {\n this._layoutService.removeBodyClasses('layout-fluid');\n }\n }\n}\n","import { Component, computed, OnInit } from '@angular/core';\n\nimport { BaseLayout } from '../../abstractions/base.layout';\n\n@Component({\n selector: 'upd-blank-layout',\n templateUrl: './blank-layout.component.html',\n styleUrls: ['./blank-layout.component.scss']\n})\nexport class BlankLayoutComponent extends BaseLayout implements OnInit {\n readonly config = computed(() => this._layoutService.mainHeaderConfig());\n\n override ngOnInit() {\n // Overriding layout fluid from parent.\n }\n}\n","<div class=\"page\" [class.page-center]=\"_layoutService.isPageCentered()\">\n @if (!config().shouldHideTopBarIfBlankLayout) {\n <upd-header [style]=\"'transparent'\"></upd-header>\n }\n\n <router-outlet></router-outlet>\n\n @if (!config().shouldHideFooterIfBlankLayout) {\n <upd-footer></upd-footer>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterOutlet } from '@angular/router';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdDropdownModule } from '@updevs/components/dropdown';\nimport { UpdLinkModule } from '@updevs/components/link';\nimport { TranslocoPipe } from '@jsverse/transloco';\n\nimport { FooterModule } from '../../partials/footer/footer.module';\nimport { HeaderModule } from '../../partials/header/header.module';\nimport { BlankLayoutComponent } from './blank-layout.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterOutlet,\n TranslocoPipe,\n UpdDropdownModule,\n UpdIconsModule,\n UpdLinkModule,\n FooterModule,\n HeaderModule\n ],\n declarations: [\n BlankLayoutComponent\n ],\n exports: [\n BlankLayoutComponent\n ]\n})\nexport class BlankLayoutModule {}\n","import { Component, HostBinding, ViewEncapsulation, OnInit, inject, signal, computed, viewChild, ElementRef } from '@angular/core';\nimport { Router, NavigationStart } from '@angular/router';\nimport { TextService } from '@updevs/sdk';\nimport { RouteDataModel, MenuService } from '@updevs/sdk/routes';\nimport { BaseComponent, LayoutService, UpdCoreLayoutConfigService } from '@updevs/sdk/layout';\nimport { SecurityStorage } from '@updevs/sdk/security';\nimport { OptionalType } from '@updevs/sdk/types';\nimport { DropdownItem } from '@updevs/components/dropdown';\nimport { filter } from 'rxjs';\n\n@Component({\n selector: 'upd-sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class SidebarComponent extends BaseComponent implements OnInit {\n @HostBinding('class') wrapperClasses = 'navbar navbar-vertical navbar-expand-lg';\n @HostBinding('attr.data-bs-theme') theme = 'dark';\n\n menuItems: RouteDataModel[] = [];\n isLoggedUserDropdownOpen = false;\n\n readonly loggedUserRef = viewChild('loggedUserBtn', { read: ElementRef });\n readonly textService = inject(TextService);\n readonly isSidebarMobileOpen = signal(false);\n readonly config = computed(() => this.layoutService.mainHeaderConfig());\n readonly userInfo = computed(() => this.securityStorage.getUserInfo());\n readonly userIdentification = computed(() =>\n !!this.userInfo() ? this.coreLayoutConfigService.config.getUserName(this.userInfo()!) : ''\n );\n readonly userDescription = computed(() =>\n !!this.coreLayoutConfigService.config.getUserDescription\n ? this.coreLayoutConfigService.config.getUserDescription(this.userInfo()!)\n : ''\n );\n readonly loggedUserOptions = computed<DropdownItem[]>(() => {\n const userActions: DropdownItem[] = [];\n\n this.coreLayoutConfigService.config.loggedUserMenuActions.forEach(act => userActions.push({\n id: act.id!(),\n text: act.text!(),\n type: 'default',\n icon: act.iconModel?.()\n }));\n\n return userActions;\n });\n readonly userInitials = computed<string>(() => {\n const firstChar = this.userIdentification().charAt(0);\n const lastSpaceIndex = this.userIdentification().lastIndexOf(' ');\n const firstAfterLastSpace = lastSpaceIndex !== -1 ? this.userIdentification().charAt(lastSpaceIndex + 1) : '';\n\n return `${firstChar}${firstAfterLastSpace}`;\n });\n\n private currentRoute = '';\n private menuItemsBackup: RouteDataModel[] = [];\n\n private readonly router = inject(Router);\n private readonly menuService = inject(MenuService);\n private readonly layoutService = inject(LayoutService);\n private readonly securityStorage = inject(SecurityStorage);\n private readonly coreLayoutConfigService = inject(UpdCoreLayoutConfigService);\n\n ngOnInit(): void {\n this.currentRoute = this.router.url;\n this.menuItems = this.menuService.generateMenu();\n this.menuItemsBackup = [...this.menuItems];\n const menuRefreshSub = this.menuService.refreshSubject.subscribe(() => {\n this.menuItems = [...this.menuService.generateMenu()];\n this.menuItemsBackup = [...this.menuItems];\n\n this.updateActiveRoute();\n });\n const routerSub = this.router.events.pipe(\n filter(event => event instanceof NavigationStart)\n ).subscribe(event => {\n this.currentRoute = (<NavigationStart>event).url;\n this.updateActiveRoute();\n });\n\n this.updateActiveRoute();\n this.addSubscriptions(routerSub, menuRefreshSub);\n }\n\n onMenuItemClick(item: RouteDataModel): void {\n if (item.isLocked) {\n if (!!item.lockedClickFunction) {\n item.lockedClickFunction();\n }\n\n return;\n }\n\n let newMenuItems = this.resetMenuState(this.menuItems);\n newMenuItems = this.setItemActive(newMenuItems, item, this.hasChildren(item) ? !item.isActive : true);\n newMenuItems = this.updateParents(newMenuItems, item);\n this.menuItems = newMenuItems;\n\n if (!!item.clickFunction) {\n item.clickFunction();\n return;\n }\n\n if (this.hasChildren(item)) {\n return;\n }\n\n const fullPath = this.findItemById(this.menuItemsBackup, item.id)!.getFullPath();\n\n this.router.navigate(fullPath).then();\n }\n\n hasChildren(item: RouteDataModel): boolean {\n return (item.children?.length || 0) > 0;\n }\n\n asMenuItem(item: any): RouteDataModel {\n return item as RouteDataModel;\n }\n\n getItemClasses(item: RouteDataModel, activeClass: string, ...classes: string[]): string[] {\n return [\n ...classes,\n item.isActive ? activeClass : '',\n item.isLocked ? 'disabled' : ''\n ];\n }\n\n toggleSidebarOnMobile(): void {\n this.isSidebarMobileOpen.set(!this.isSidebarMobileOpen());\n }\n\n selectLoggedUserMenuItem(item: DropdownItem): void {\n const btn = this.coreLayoutConfigService.config.loggedUserMenuActions.find(b => b.id!() === item.id);\n\n if (!!btn?.clickFunction) {\n btn.clickFunction!({ data: this.userInfo() });\n }\n }\n\n private findActiveNode(item: RouteDataModel, fullPath: string): OptionalType<RouteDataModel> {\n if (item.fullPath === fullPath) {\n return item;\n }\n\n for (const child of item.children) {\n const found = this.findActiveNode(child, fullPath);\n\n if (found) {\n return found;\n }\n }\n\n return undefined;\n }\n\n private updateActiveRoute(): void {\n let newMenuItems = this.resetMenuState(this.menuItems);\n const activePath = this.getActivePath(newMenuItems);\n newMenuItems = this.setActivePath(newMenuItems, activePath);\n this.menuItems = newMenuItems;\n }\n\n private setActivePath(items: RouteDataModel[], path: RouteDataModel[]): RouteDataModel[] {\n if (path.length === 0) {\n return items;\n }\n\n return items.map(item => {\n const pathItem = path.find(p => p.id === item.id);\n\n if (!pathItem) {\n return item;\n }\n\n const newItem = { ...item, isActive: true } as RouteDataModel;\n\n if (newItem.children?.length) {\n newItem.children = this.setActivePath(\n newItem.children,\n path.filter(p => p.parent?.id === newItem.id)\n );\n newItem.children.forEach(child => child.parent = newItem);\n }\n\n return newItem;\n });\n }\n\n private getActivePath(items: RouteDataModel[]): RouteDataModel[] {\n let activeItem: OptionalType<RouteDataModel>;\n\n // Find the deepest active item.\n for (const item of items) {\n activeItem = this.findActiveNode(item, this.currentRoute);\n\n if (activeItem) {\n break;\n }\n }\n\n // Collect parent hierarchy.\n const path: RouteDataModel[] = [];\n\n while (activeItem) {\n path.unshift(activeItem);\n activeItem = activeItem.parent;\n }\n\n return path;\n }\n\n private resetMenuState(items: RouteDataModel[]): RouteDataModel[] {\n return items.map(item => {\n const newItem = { ...item, isActive: false } as RouteDataModel;\n\n if (newItem.children?.length) {\n newItem.children = this.resetMenuState(newItem.children);\n newItem.children.forEach(child => child.parent = newItem);\n }\n\n return newItem;\n });\n }\n\n private setItemActive(items: RouteDataModel[], target: RouteDataModel, isActive: boolean): RouteDataModel[] {\n return items.map(item => {\n if (item.id === target.id) {\n const newItem = { ...item, isActive } as RouteDataModel;\n\n if (newItem.children?.length) {\n newItem.children = this.setItemActive(newItem.children, target, isActive);\n newItem.children.forEach(child => child.parent = newItem);\n }\n\n return newItem;\n }\n\n if (item.children?.length) {\n const newChildren = this.setItemActive(item.children, target, isActive);\n const newItem = { ...item, children: newChildren } as RouteDataModel;\n\n newChildren.forEach(child => child.parent = newItem);\n\n return newItem;\n }\n\n return item;\n });\n }\n\n private updateParents(items: RouteDataModel[], childItem: RouteDataModel): RouteDataModel[] {\n let parent = childItem.parent;\n let updatedItems = [...items];\n\n while (parent) {\n updatedItems = updatedItems.map(item => {\n if (item.id === parent!.id) {\n return { ...parent!, isActive: true } as RouteDataModel;\n }\n\n return item;\n });\n parent = parent.parent;\n }\n\n return updatedItems;\n }\n\n private findItemById(items: RouteDataModel[], targetId: any): OptionalType<RouteDataModel> {\n for (const item of items) {\n if (item.id === targetId) {\n return item;\n }\n\n if (item.children?.length) {\n const child = this.findItemById(item.children, targetId);\n\n if (!!child) {\n return child;\n }\n }\n }\n\n return undefined;\n }\n}\n","<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n\n @if (!!config().showUserMenu && !!userInfo()) {\n <div class=\"navbar-nav flex-row d-lg-none\">\n <div class=\"nav-item dropdown\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLoggedUserDropdownOpen = true\" #loggedUserBtn>\n @if (!!userInfo()!.avatar) {\n <span class=\"avatar avatar-sm\" style=\"background-image: url({{userInfo()?.avatar}})\"></span>\n } @else {\n <span class=\"avatar avatar-sm\">{{ userInitials() }}</span>\n }\n\n <div class=\"d-none d-xl-block px-2\">\n <div>{{ userIdentification() }}</div>\n @if (!!userDescription()) {\n <div class=\"mt-1 small text-muted\">{{ userDescription() }}</div>\n }\n </div>\n </upd-link>\n @if (loggedUserOptions().length > 0) {\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLoggedUserDropdownOpen\" [dropdownReference]=\"loggedUserRef()\"\n [items]=\"loggedUserOptions()\" [shouldCloseOnOutsideClick]=\"true\" (selectedItem)=\"selectLoggedUserMenuItem($event)\"\n (isOpenChange)=\"isLoggedUserDropdownOpen = $event\" arrowType=\"right\">\n </upd-dropdown>\n }\n </div>\n </div>\n }\n\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n","import { Component, input } from '@angular/core';\nimport { PageHeaderModel } from '@updevs/sdk/layout';\n\n@Component({\n selector: 'upd-page-header',\n templateUrl: './page-header.component.html',\n styleUrls: ['./page-header.component.scss']\n})\nexport class PageHeaderComponent {\n model = input.required<PageHeaderModel>();\n}\n","<div class=\"page-header d-print-none\">\n <div class=\"container-xl\">\n <div class=\"row g-2 align-items-center\">\n <div class=\"col\">\n <div class=\"page-pretitle\">\n {{ model().titleHeader }}\n </div>\n <h2 class=\"page-title\">\n {{ model().title }}\n </h2>\n </div>\n @if (model().actionButtons.length > 0) {\n <div class=\"col-auto ms-auto d-print-none\">\n <div class=\"btn-list\">\n @for (btn of model().actionButtons; track btn) {\n <upd-button [model]=\"btn\"></upd-button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\n\nimport { BaseLayout } from '../../abstractions/base.layout';\n\n@Component({\n selector: 'upd-vertical-sidebar-layout',\n templateUrl: './vertical-sidebar-layout.component.html',\n styleUrls: ['./vertical-sidebar-layout.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class VerticalSidebarLayoutComponent extends BaseLayout {}\n","<div class=\"page\">\n <upd-sidebar></upd-sidebar>\n <upd-header></upd-header>\n\n <div class=\"page-wrapper\">\n @if (!!_layoutService.pageHeader()) {\n <upd-page-header [model]=\"_layoutService.pageHeader()!\"></upd-page-header>\n }\n <div class=\"page-body\">\n <div class=\"container-xl\">\n <router-outlet></router-outlet>\n </div>\n </div>\n <upd-footer></upd-footer>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdCoreLayoutModule } from '@updevs/sdk/layout';\nimport { UpdButtonModule } from '@updevs/components/button';\nimport { UpdLinkModule } from '@updevs/components/link';\nimport { UpdDropdownModule } from '@updevs/components/dropdown';\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\n\nimport * as en from '../../assets/i18n/en.json';\nimport * as pt from '../../assets/i18n/pt.json';\nimport { FooterModule } from '../../partials/footer/footer.module';\nimport { HeaderModule } from '../../partials/header/header.module';\nimport { VerticalSidebarLayoutComponent } from './vertical-sidebar-layout.component';\nimport { SidebarComponent } from '../../partials/sidebar/sidebar.component';\nimport { PageHeaderComponent } from '../../partials/page-header/page-header.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n TranslocoModule,\n UpdIconsModule,\n UpdCoreLayoutModule,\n UpdButtonModule,\n UpdLinkModule,\n UpdDropdownModule,\n FooterModule,\n HeaderModule\n ],\n declarations: [\n VerticalSidebarLayoutComponent,\n SidebarComponent,\n PageHeaderComponent\n ],\n exports: [\n VerticalSidebarLayoutComponent,\n SidebarComponent,\n PageHeaderComponent\n ]\n})\nexport class VerticalSidebarLayoutModule {\n constructor(translocoService: TranslocoService) {\n translocoService.setFallbackLangForMissingTranslation({ fallbackLang: 'en' });\n translocoService.setTranslation(en, 'en');\n translocoService.setTranslation(pt, 'pt');\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'upd-logged-out',\n templateUrl: './logged-out.component.html',\n styleUrls: ['./logged-out.component.scss']\n})\nexport class LoggedOutComponent {\n\n}\n","<p>logged-out works!</p>\n","import { Component, inject, OnDestroy, OnInit, model, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { FormGroup, Validators } from '@angular/forms';\nimport { LayoutService } from '@updevs/sdk/layout';\nimport { AuthService } from '@updevs/sdk/security';\nimport { FormRowModel, DynamicFieldType, InputFieldModel } from '@updevs/components/form';\nimport { finalize } from 'rxjs';\n\nimport { UpdLayoutConfigService } from '../../../services/upd-layout-config.service';\n\n@Component({\n selector: 'upd-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss']\n})\nexport class LoginComponent implements OnInit, OnDestroy {\n formGroup = model(new FormGroup({}));\n formRows: FormRowModel[] = [];\n isSigningIn = signal(false);\n readonly layoutConfigService = inject(UpdLayoutConfigService);\n readonly config = this.layoutConfigService.config.securityLayoutConfig.loginPage;\n\n get border(): string {\n return `border-${this.config.borderColor}`;\n }\n\n get linkClasses(): string[] {\n return [`link-${this.config.linksColor}`];\n }\n\n private get boxBgColor(): string {\n return this.config.bgColor || (!!this.config.bgStyle ? `bg-${this.config.bgStyle}` : '') || 'bg-white';\n }\n\n private readonly bodyClasses = ['border-top-wide', this.border, 'd-flex', 'flex-column'];\n private readonly router = inject(Router);\n private readonly authService = inject(AuthService);\n private readonly layoutService = inject(LayoutService);\n\n ngOnInit(): void {\n this.layoutService.addBodyClasses(this.boxBgColor);\n\n if (this.config.layout !== 'cover') {\n this.layoutService.addBodyClasses(...this.bodyClasses);\n }\n\n this.formRows = [\n {\n fields: [\n {\n name: 'username',\n type: DynamicFieldType.Input,\n colSize: { default: 12 },\n label: { text: 'UpDevs.Login.Email', isTranslated: false },\n validators: [Validators.required, Validators.minLength(3)],\n shouldSubmitOnEnter: true\n } as InputFieldModel\n ]\n },\n {\n fields: [\n {\n name: 'password',\n type: DynamicFieldType.Input,\n inputType: 'password',\n colSize: { default: 12 },\n label: { text: 'UpDevs.Login.Password', isTranslated: false },\n validators: [Validators.required, Validators.minLength(3)],\n shouldSubmitOnEnter: true\n } as InputFieldModel\n ]\n },\n {\n fields: [\n {\n name: 'rememberMe',\n type: DynamicFieldType.Checkbox,\n colSize: { default: 12 },\n label: { text: 'UpDevs.Login.RememberMe', isTranslated: false },\n initValue: false\n }\n ]\n }\n ];\n }\n\n ngOnDestroy(): void {\n this.layoutService.removeBodyClasses(this.boxBgColor);\n\n if (this.config.layout !== 'cover') {\n this.layoutService.removeBodyClasses(...this.bodyClasses);\n }\n }\n\n login(): void {\n // TODO: handle remember me\n this.isSigningIn.set(true);\n this.authService.login((this.formGroup().value as any).username, (this.formGroup().value as any).password)\n .pipe(finalize(() => this.isSigningIn.set(false)))\n .subscribe();\n }\n\n goToRecoverPasswordPage(): void {\n this.router.navigate([this.config.recoverPasswordRoute]).then();\n }\n\n goToSignUpPage(): void {\n this.router.navigate([this.config.signUpRoute]).then();\n }\n}\n","<ng-container *transloco=\"let t; prefix: 'UpDevs.Login'\">\n <upd-header [style]=\"'transparent'\"></upd-header>\n <div class=\"page page-center\">\n @switch (config.layout) {\n @case ('centered-box') {\n <div class=\"container container-tight py-4\">\n <ng-container [ngTemplateOutlet]=\"loginCardTpl\"></ng-container>\n </div>\n }\n @case ('box-with-picture') {\n <div class=\"container container-normal py-4\">\n <div class=\"row align-items-center g-4\">\n <div class=\"col-lg\">\n <div class=\"container-tight\">\n <ng-container [ngTemplateOutlet]=\"loginCardTpl\"></ng-container>\n </div>\n </div>\n <div class=\"col-lg d-none d-lg-block\">\n <img height=\"300\" class=\"d-block mx-auto upd-right-login-image\" />\n </div>\n </div>\n </div>\n }\n @case ('cover') {\n <div class=\"row g-0 flex-fill\">\n <div class=\"col-12 col-lg-6 col-xl-4 border-top-wide d-flex flex-column justify-content-center\"\n [ngClass]=\"border\">\n <div class=\"container container-tight my-5 px-lg-5\">\n <ng-container [ngTemplateOutlet]=\"headerTpl\"></ng-container>\n\n <h2 class=\"h3 text-center mb-3\">\n {{ t('Title') }}\n </h2>\n\n <ng-container [ngTemplateOutlet]=\"loginFormTpl\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"socialLoginTpl\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"noAccountTpl\"></ng-container>\n </div>\n </div>\n <div class=\"col-12 col-lg-6 col-xl-8 d-none d-lg-block\">\n <div class=\"bg-cover h-100 min-vh-100 upd-right-login-cover-image\"></div>\n </div>\n </div>\n }\n }\n </div>\n <upd-footer></upd-footer>\n\n <ng-template #loginCardTpl>\n <ng-container [ngTemplateOutlet]=\"headerTpl\"></ng-container>\n <upd-card [removeBorder]=\"true\">\n <div class=\"p-4\">\n <h2 class=\"h2 text-center mb-4\">\n {{ t('Title') }}\n </h2>\n <ng-container [ngTemplateOutlet]=\"loginFormTpl\"></ng-container>\n </div>\n <ng-container [ngTemplateOutlet]=\"socialLoginTpl\"></ng-container>\n </upd-card>\n <ng-container [ngTemplateOutlet]=\"noAccountTpl\"></ng-container>\n </ng-template>\n\n <ng-template #loginFormTpl>\n <upd-form [rows]=\"formRows\" [hasActionsSection]=\"false\" [(formGroup)]=\"formGroup\" (submitted)=\"login()\"></upd-form>\n <div class=\"form-footer\">\n <upd-button [colorStyle]=\"config.signInButtonColor\" (clicked)=\"login()\" [isLoading]=\"isSigningIn()\"\n customClasses=\"w-100\">\n {{ t('SignIn') }}\n </upd-button>\n @if (!!config.recoverPasswordRoute) {\n <div class=\"d-flex mt-2\">\n <upd-link class=\"ms-auto\" [customClasses]=\"linkClasses\" (clicked)=\"goToRecoverPasswordPage()\">\n {{ t('RecoverPassword') }}\n </upd-link>\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #socialLoginTpl>\n @if (config.socialLoginButtons.length > 0) {\n <div class=\"hr-text\">\n {{ t('Or') }}\n </div>\n <div class=\"card-body\">\n <div class=\"row\">\n @for (btn of config.socialLoginButtons; track btn) {\n <div class=\"col\">\n <upd-button [model]=\"btn\"></upd-button>\n </div>\n }\n </div>\n </div>\n }\n </ng-template>\n\n <ng-template #headerTpl>\n <div class=\"text-center mb-4\">\n <a href=\".\" class=\"navbar-brand navbar-brand-autodark\">\n <img height=\"36\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </div>\n </ng-template>\n\n <ng-template #noAccountTpl>\n @if (!!config.signUpRoute) {\n <div class=\"text-center text-muted mt-3\">\n {{ t('NoAccountYet') }}\n <upd-link [customClasses]=\"linkClasses\" (clicked)=\"goToSignUpPage()\">{{ t('SignUp') }}</upd-link>\n </div>\n }\n </ng-template>\n</ng-container>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'upd-oauth-callback',\n templateUrl: './oauth-callback.component.html',\n styleUrls: ['./oauth-callback.component.scss']\n})\nexport class OauthCallbackComponent {\n\n}\n","<p>oauth-callback works!</p>\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nimport { OauthCallbackComponent } from './oauth-callback/oauth-callback.component';\nimport { LoggedOutComponent } from './logged-out/logged-out.component';\nimport { LoginComponent } from './login/login.component';\n\n/**\n * Auth flow routes.\n */\nexport const routes: Routes = [\n { path: 'oauth/callback', component: OauthCallbackComponent },\n { path: 'logged-out', component: LoggedOutComponent },\n { path: 'login', component: LoginComponent }\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { useHash: true })],\n exports: [RouterModule]\n})\nexport class AuthFlowRoutingModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { UpdButtonModule } from '@updevs/components/button';\nimport { UpdLinkModule } from '@updevs/components/link';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdCardModule } from '@updevs/components/card';\nimport { UpdFormModule } from '@updevs/components/form';\nimport { TranslocoDirective } from '@jsverse/transloco';\n\nimport { FooterModule } from '../../partials/footer/footer.module';\nimport { HeaderModule } from '../../partials/header/header.module';\nimport { LoginComponent } from './login/login.component';\nimport { OauthCallbackComponent } from './oauth-callback/oauth-callback.component';\nimport { LoggedOutComponent } from './logged-out/logged-out.component';\nimport { AuthFlowRoutingModule } from './auth-flow-routing.module';\n\n@NgModule({\n imports: [\n CommonModule,\n AuthFlowRoutingModule,\n UpdButtonModule,\n UpdIconsModule,\n FormsModule,\n TranslocoDirective,\n UpdLinkModule,\n UpdCardModule,\n UpdFormModule,\n FooterModule,\n HeaderModule\n ],\n declarations: [\n LoginComponent,\n OauthCallbackComponent,\n LoggedOutComponent\n ],\n exports: [\n LoginComponent,\n OauthCallbackComponent,\n LoggedOutComponent\n ]\n})\nexport class AuthFlowModule {\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdCoreLayoutModule } from '@updevs/sdk/layout';\nimport { UpdNotificationsModule } from '@updevs/sdk/notifications';\n\nimport { UpdLayoutConfig } from './models/upd-layout.config';\nimport { LayoutConstants } from './tools/layout.constants';\nimport { UpdLayoutConfigService } from './services/upd-layout-config.service';\n\n/**\n * Layout module.\n */\n@NgModule({\n imports: [\n CommonModule,\n UpdCoreLayoutModule,\n UpdNotificationsModule\n ],\n providers: [\n UpdLayoutConfigService\n ]\n})\nexport class UpdLayoutModule {\n /**\n * Sets up the layout module with the provided configuration.\n * @param config Configuration (See: #updsee[p:abstractions, i:UpdCoreLayoutConfig]).\n */\n static forRoot(config: UpdLayoutConfig): ModuleWithProviders<UpdLayoutModule> {\n return {\n ngModule: UpdLayoutModule,\n providers: [\n { provide: LayoutConstants.defaultOptionsInjectionToken, useValue: config }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i4","i2.FooterComponent","i3.HeaderComponent","i4.SidebarComponent","i5.PageHeaderComponent","en","pt","i3","i5","i8.FooterComponent","i9.HeaderComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;AAEG;AAEH;AACM,MAAgB,iBAAkB,SAAQ,aAAa,CAAA;AAF7D,IAAA,WAAA,GAAA;;AAGuB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AAM5D;IAJY,WAAW,GAAA;QAChB,KAAK,CAAC,WAAW,EAAE;QACnB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;;8GAL/B,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAFtC;;;ACIK,MAAO,eAAgB,SAAQ,aAAa,CAAA;AANlD,IAAA,WAAA,GAAA;;QAO0B,IAAc,CAAA,cAAA,GAAG,EAAE;AAEzC;;AAEG;QACH,IAAQ,CAAA,QAAA,GAAG,KAAK;AAChB;;AAEG;QACH,IAAa,CAAA,aAAA,GAAG,IAAI;AACpB;;AAEG;QACH,IAAK,CAAA,KAAA,GAAgB,EAAE;AACvB;;AAEG;AACH,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAM7B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAEtC,IAAkB,CAAA,kBAAA,GAAG,qBAAqB;AAiBrD;IAfG,QAAQ,GAAA;QACJ,IAAI,CAAC,oBAAoB,EAAE;;AAG/B,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,YAAY,EAAE;YAC/E,IAAI,CAAC,oBAAoB,EAAE;;;IAI3B,oBAAoB,GAAA;AACxB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,GAAG,gBAAgB,GAAG,EAAE;AAC7D,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,GAAG,qBAAqB,GAAG,EAAE;AACtE,QAAA,IAAI,CAAC,cAAc,GAAG,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAA,EAAG,eAAe,CAAA,EAAG,cAAc,CAAA,CAAE;;8GAzChF,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,wJCV5B,2nDAuCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FD7Ba,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;+BACI,YAAY,EAAA,aAAA,EAGP,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,2nDAAA,EAAA;8BAGf,cAAc,EAAA,CAAA;sBAAnC,WAAW;uBAAC,OAAO;;;MEOX,YAAY,CAAA;8GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAZ,YAAY,EAAA,YAAA,EAAA,CANjB,eAAe,CAAA,EAAA,OAAA,EAAA,CAJf,YAAY;AACZ,YAAA,eAAe,aAMf,eAAe,CAAA,EAAA,CAAA,CAAA;AAGV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAVjB,YAAY;YACZ,eAAe,CAAA,EAAA,CAAA,CAAA;;2FASV,YAAY,EAAA,UAAA,EAAA,CAAA;kBAZxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ;AACH,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACV;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL;AACH;AACJ,iBAAA;;;ACUK,MAAO,eAAgB,SAAQ,aAAa,CAAA;AANlD,IAAA,WAAA,GAAA;;QAWI,IAAmB,CAAA,mBAAA,GAAG,SAAS,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAC5E,IAAgB,CAAA,gBAAA,GAAG,SAAS,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QACtE,IAAa,CAAA,aAAA,GAAG,SAAS,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAEhE,IAA8B,CAAA,8BAAA,GAAG,KAAK;QACtC,IAA2B,CAAA,2BAAA,GAAG,KAAK;QACnC,IAAwB,CAAA,wBAAA,GAAG,KAAK;AAEvB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAkB,OAAO,CAAC;QACvC,IAAa,CAAA,aAAA,GAAG,QAAQ,CAAkB,MAAM,IAAI,CAAC,kBAAkB,EAAE,EAAE,WAAW,GAAG,KAAK,GAAG,YAAY,CAAC;AAC9G,QAAA,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAkB,MAAM,IAAI,CAAC,mBAAmB,EAAE,GAAG,cAAc,GAAG,MAAM,CAAC;QAChH,IAAmB,CAAA,mBAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACxF,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAiB,MAAK;YACtD,MAAM,mBAAmB,GAAmB,EAAE;AAC9C,YAAA,MAAM,kBAAkB,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAAC;YAEzF,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;gBAC1C,mBAAmB,CAAC,IAAI,CAAC;AACrB,oBAAA,EAAE,EAAE,GAAG;AACP,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC;AAC7B,oBAAA,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,KAAK;AAC3C,iBAAA,CAAC;AACN,aAAC,CAAC;AAEF,YAAA,OAAO,mBAAmB;AAC9B,SAAC,CAAC;AACO,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAiB,MAAK;YACvD,MAAM,WAAW,GAAmB,EAAE;AAEtC,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC;AACtF,gBAAA,EAAE,EAAE,GAAG,CAAC,EAAG,EAAE;AACb,gBAAA,IAAI,EAAE,GAAG,CAAC,IAAK,EAAE;AACjB,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,IAAI,EAAE,GAAG,CAAC,SAAS;AACtB,aAAA,CAAC,CAAC;AAEH,YAAA,OAAO,WAAW;AACtB,SAAC,CAAC;AACO,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;AAC7D,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MACnC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAG,CAAC,GAAG,EAAE,CAC7F;AACQ,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAChC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;AAClC,cAAE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAG;cACvE,EAAE,CACX;AACQ,QAAA,IAAA,CAAA,6BAA6B,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,6BAA6B,CAAC;AACnH,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AACzC,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB;iBAChD,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;AACvB,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;iBACtF,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,kCAAkC,CAAC;AACrF,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB;iBAC9C,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AACxB,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;iBACtF,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,kCAAkC,CAAC;YAErF,OAAO;AACH,gBAAA,GAAG,mBAAmB;AACtB,gBAAA,GAAG;AACN,aAAA,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,kCAAkC,CAAC;AACtF,SAAC,CAAC;AACO,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC;AAE3B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC5D,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE;AAC7D,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa;AAC9D,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAgE,6DAAA,EAAA,IAAI,CAAC,KAAK,EAAE,CAAA,CAAE,CAAC;;AAGvH,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;AAmD1E;AAtIG,IAAA,IAA0B,OAAO,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE;;IAoFhC,QAAQ,GAAA;QACJ,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,WAAW,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;;QAGpC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,mBAAmB,EAAE;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAG,CAAC,mBAAoB;AAE5D,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC;;;IAIjD,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;;AAGvC,IAAA,cAAc,CAAC,IAAkB,EAAA;QAC7B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QACvG,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;AAErD,QAAA,IAAI,CAAC,8BAA8B,GAAG,KAAK;;AAG/C,IAAA,wBAAwB,CAAC,IAAkB,EAAA;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAG,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAEpG,QAAA,IAAI,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE;AACtB,YAAA,GAAG,CAAC,aAAc,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;;;AAIrD,IAAA,gBAAgB,CAAC,YAA+B,EAAA;AAC5C,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YACxB,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;;AAGzD,QAAA,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,YAAY,CAAC;;AAG/D,IAAA,kBAAkB,CAAC,YAA+B,EAAA;QAC9C,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,CAAC;;IAGlE,qBAAqB,GAAA;QACjB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;;8GArIpD,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,gVAKuC,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAChB,UAAU,EAChB,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,oEClCjE,ylPA0HA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kCAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FD/Fa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;+BACI,YAAY,EAAA,aAAA,EAGP,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,ylPAAA,EAAA;8BAGX,OAAO,EAAA,CAAA;sBAAhC,WAAW;uBAAC,OAAO;;;MEJX,YAAY,CAAA;8GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAZ,YAAY,EAAA,YAAA,EAAA,CANjB,eAAe,CAAA,EAAA,OAAA,EAAA,CAPf,YAAY;YACZ,eAAe;YACf,cAAc;YACd,iBAAiB;AACjB,YAAA,aAAa,aAMb,eAAe,CAAA,EAAA,CAAA,CAAA;AAGV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAbjB,YAAY;YACZ,eAAe;YACf,cAAc;YACd,iBAAiB;YACjB,aAAa,CAAA,EAAA,CAAA,CAAA;;2FASR,YAAY,EAAA,UAAA,EAAA,CAAA;kBAfxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,eAAe;wBACf,cAAc;wBACd,iBAAiB;wBACjB;AACH,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACV;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL;AACH;AACJ,iBAAA;;;AClBD;;AAEG;MACU,oBAAoB,CAAA;AA+C7B,IAAA,WAAA,CAAY,IAAsB,EAAA;AALlC;;AAEG;QACH,IAAkB,CAAA,kBAAA,GAAkB,EAAE;AAGlC,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;QAEzB,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,cAAc;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,SAAS;QACjD,IAAI,CAAC,iBAAiB,GAAG,IAAI,EAAE,iBAAiB,IAAI,SAAS;QAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC,iBAAiB;AAE5D,QAAA,IAAI,IAAI,EAAE,kBAAkB,EAAE;AAC1B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;;;AAG5D;;AChED;;AAEG;MACU,yBAAyB,CAAA;AAMlC,IAAA,WAAA,CAAY,IAA2B,EAAA;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC;;AAEjE;;ACZD;;AAEG;MACU,oBAAoB,CAAA;AA0C7B,IAAA,WAAA,CAAY,IAAsB,EAAA;AAC9B,QAAA,IAAI,IAAI,EAAE,QAAQ,KAAK,SAAS,EAAE;;;AAIlC,QAAA,IAAI,IAAI,EAAE,SAAS,KAAK,SAAS,EAAE;;;AAInC,QAAA,IAAI,IAAI,EAAE,mBAAmB,KAAK,SAAS,EAAE;;;QAI7C,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,QAAQ;QAC5C,IAAI,CAAC,uBAAuB,GAAG,IAAI,EAAE,uBAAuB,IAAI,IAAI;QACpE,IAAI,CAAC,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,IAAI;QAC9C,IAAI,CAAC,wBAAwB,GAAG,IAAI,EAAE,wBAAwB,IAAI,KAAK;QACvE,IAAI,CAAC,cAAc,GAAG,IAAI,EAAE,cAAc,IAAI,KAAK;QACnD,IAAI,CAAC,oBAAoB,GAAG,IAAI,yBAAyB,CAAC,IAAI,EAAE,oBAAoB,CAAC;;AAE5F;;AChED;;AAEG;MACU,eAAe,CAAA;AACxB;;AAEG;aACI,IAAiB,CAAA,iBAAA,GAAG,4BAA4B,CAAC;AAExD;;AAEG;aACI,IAA4B,CAAA,4BAAA,GAAG,IAAI,cAAc,CAAkB,eAAe,CAAC,iBAAiB,CAAC,CAAC;;;ACVjH;;AAEG;MAEU,sBAAsB,CAAA;AAM/B,IAAA,WAAA,CAAkE,YAA6B,EAAA;QAC3F,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAoB,CAAC,YAAY,CAAC;;8GAP/C,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAMX,eAAe,CAAC,4BAA4B,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHANvD,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;0BAOgB,MAAM;AAAC,oBAAA,IAAA,EAAA,CAAA,eAAe,CAAC,4BAA4B;;;ACXpE;;AAEG;AAEG,MAAgB,UAAW,SAAQ,aAAa,CAAA;AADtD,IAAA,WAAA,GAAA;;AAEuB,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACrD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AAe5D;IAbG,QAAQ,GAAA;QACJ,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,cAAc,EAAE;AACjD,YAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC;;;IAIjD,WAAW,GAAA;QAChB,KAAK,CAAC,WAAW,EAAE;QAEnB,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,cAAc,EAAE;AACjD,YAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,cAAc,CAAC;;;8GAd3C,UAAU,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAV,UAAU,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;ACCK,MAAO,oBAAqB,SAAQ,UAAU,CAAA;AALpD,IAAA,WAAA,GAAA;;AAMa,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;AAK3E;IAHY,QAAQ,GAAA;;;8GAHR,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,+ECTjC,yVAWA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDFa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACI,kBAAkB,EAAA,QAAA,EAAA,yVAAA,EAAA;;;MEyBnB,iBAAiB,CAAA;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAjB,iBAAiB,EAAA,YAAA,EAAA,CANtB,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAVpB,YAAY;YACZ,YAAY;YACZ,aAAa;YACb,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,YAAY;AACZ,YAAA,YAAY,aAMZ,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAGf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAhBtB,YAAY;YAGZ,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,YAAY;YACZ,YAAY,CAAA,EAAA,CAAA,CAAA;;2FASP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlB7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,YAAY;wBACZ,aAAa;wBACb,iBAAiB;wBACjB,cAAc;wBACd,aAAa;wBACb,YAAY;wBACZ;AACH,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACV;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL;AACH;AACJ,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbK,MAAO,gBAAiB,SAAQ,aAAa,CAAA;AANnD,IAAA,WAAA,GAAA;;QAO0B,IAAc,CAAA,cAAA,GAAG,yCAAyC;QAC7C,IAAK,CAAA,KAAA,GAAG,MAAM;QAEjD,IAAS,CAAA,SAAA,GAAqB,EAAE;QAChC,IAAwB,CAAA,wBAAA,GAAG,KAAK;QAEvB,IAAa,CAAA,aAAA,GAAG,SAAS,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAChE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;AAC9D,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;AAC7D,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MACnC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAG,CAAC,GAAG,EAAE,CAC7F;AACQ,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAChC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;AAClC,cAAE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAG;cACvE,EAAE,CACX;AACQ,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAiB,MAAK;YACvD,MAAM,WAAW,GAAmB,EAAE;AAEtC,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC;AACtF,gBAAA,EAAE,EAAE,GAAG,CAAC,EAAG,EAAE;AACb,gBAAA,IAAI,EAAE,GAAG,CAAC,IAAK,EAAE;AACjB,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,IAAI,EAAE,GAAG,CAAC,SAAS;AACtB,aAAA,CAAC,CAAC;AAEH,YAAA,OAAO,WAAW;AACtB,SAAC,CAAC;AACO,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAS,MAAK;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YACrD,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;YACjE,MAAM,mBAAmB,GAAG,cAAc,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,EAAE;AAE7G,YAAA,OAAO,CAAG,EAAA,SAAS,CAAG,EAAA,mBAAmB,EAAE;AAC/C,SAAC,CAAC;QAEM,IAAY,CAAA,YAAA,GAAG,EAAE;QACjB,IAAe,CAAA,eAAA,GAAqB,EAAE;AAE7B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAiOhF;IA/NG,QAAQ,GAAA;QACJ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;QAChD,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,MAAK;AAClE,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;YACrD,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAE1C,IAAI,CAAC,iBAAiB,EAAE;AAC5B,SAAC,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACrC,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,eAAe,CAAC,CACpD,CAAC,SAAS,CAAC,KAAK,IAAG;AAChB,YAAA,IAAI,CAAC,YAAY,GAAqB,KAAM,CAAC,GAAG;YAChD,IAAI,CAAC,iBAAiB,EAAE;AAC5B,SAAC,CAAC;QAEF,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC;;AAGpD,IAAA,eAAe,CAAC,IAAoB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC5B,IAAI,CAAC,mBAAmB,EAAE;;YAG9B;;QAGJ,IAAI,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtD,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrG,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC;AACrD,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY;AAE7B,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,EAAE;YACpB;;AAGJ,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACxB;;AAGJ,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAE,CAAC,WAAW,EAAE;QAEhF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;;AAGzC,IAAA,WAAW,CAAC,IAAoB,EAAA;QAC5B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;;AAG3C,IAAA,UAAU,CAAC,IAAS,EAAA;AAChB,QAAA,OAAO,IAAsB;;AAGjC,IAAA,cAAc,CAAC,IAAoB,EAAE,WAAmB,EAAE,GAAG,OAAiB,EAAA;QAC1E,OAAO;AACH,YAAA,GAAG,OAAO;YACV,IAAI,CAAC,QAAQ,GAAG,WAAW,GAAG,EAAE;YAChC,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG;SAChC;;IAGL,qBAAqB,GAAA;QACjB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;;AAG7D,IAAA,wBAAwB,CAAC,IAAkB,EAAA;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAG,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAEpG,QAAA,IAAI,CAAC,CAAC,GAAG,EAAE,aAAa,EAAE;AACtB,YAAA,GAAG,CAAC,aAAc,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;;;IAI7C,cAAc,CAAC,IAAoB,EAAE,QAAgB,EAAA;AACzD,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC5B,YAAA,OAAO,IAAI;;AAGf,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC;YAElD,IAAI,KAAK,EAAE;AACP,gBAAA,OAAO,KAAK;;;AAIpB,QAAA,OAAO,SAAS;;IAGZ,iBAAiB,GAAA;QACrB,IAAI,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;QACnD,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,UAAU,CAAC;AAC3D,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY;;IAGzB,aAAa,CAAC,KAAuB,EAAE,IAAsB,EAAA;AACjE,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,YAAA,OAAO,KAAK;;AAGhB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;AACpB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAEjD,IAAI,CAAC,QAAQ,EAAE;AACX,gBAAA,OAAO,IAAI;;YAGf,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAoB;AAE7D,YAAA,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE;AAC1B,gBAAA,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CACjC,OAAO,CAAC,QAAQ,EAChB,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAChD;AACD,gBAAA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;;AAG7D,YAAA,OAAO,OAAO;AAClB,SAAC,CAAC;;AAGE,IAAA,aAAa,CAAC,KAAuB,EAAA;AACzC,QAAA,IAAI,UAAwC;;AAG5C,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;YAEzD,IAAI,UAAU,EAAE;gBACZ;;;;QAKR,MAAM,IAAI,GAAqB,EAAE;QAEjC,OAAO,UAAU,EAAE;AACf,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AACxB,YAAA,UAAU,GAAG,UAAU,CAAC,MAAM;;AAGlC,QAAA,OAAO,IAAI;;AAGP,IAAA,cAAc,CAAC,KAAuB,EAAA;AAC1C,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;YACpB,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAoB;AAE9D,YAAA,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE;gBAC1B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;AACxD,gBAAA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;;AAG7D,YAAA,OAAO,OAAO;AAClB,SAAC,CAAC;;AAGE,IAAA,aAAa,CAAC,KAAuB,EAAE,MAAsB,EAAE,QAAiB,EAAA;AACpF,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;YACpB,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,EAAE;gBACvB,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAoB;AAEvD,gBAAA,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE;AAC1B,oBAAA,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;AACzE,oBAAA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;;AAG7D,gBAAA,OAAO,OAAO;;AAGlB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACvB,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;gBACvE,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAoB;AAEpE,gBAAA,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;AAEpD,gBAAA,OAAO,OAAO;;AAGlB,YAAA,OAAO,IAAI;AACf,SAAC,CAAC;;IAGE,aAAa,CAAC,KAAuB,EAAE,SAAyB,EAAA;AACpE,QAAA,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM;AAC7B,QAAA,IAAI,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC;QAE7B,OAAO,MAAM,EAAE;AACX,YAAA,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,IAAG;gBACnC,IAAI,IAAI,CAAC,EAAE,KAAK,MAAO,CAAC,EAAE,EAAE;oBACxB,OAAO,EAAE,GAAG,MAAO,EAAE,QAAQ,EAAE,IAAI,EAAoB;;AAG3D,gBAAA,OAAO,IAAI;AACf,aAAC,CAAC;AACF,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM;;AAG1B,QAAA,OAAO,YAAY;;IAGf,YAAY,CAAC,KAAuB,EAAE,QAAa,EAAA;AACvD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE;AACtB,gBAAA,OAAO,IAAI;;AAGf,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACvB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAExD,gBAAA,IAAI,CAAC,CAAC,KAAK,EAAE;AACT,oBAAA,OAAO,KAAK;;;;AAKxB,QAAA,OAAO,SAAS;;8GA9QX,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAOmC,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvB1E,2tKAoGA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kCAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDpFa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;+BACI,aAAa,EAAA,aAAA,EAGR,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,2tKAAA,EAAA;8BAGf,cAAc,EAAA,CAAA;sBAAnC,WAAW;uBAAC,OAAO;gBACe,KAAK,EAAA,CAAA;sBAAvC,WAAW;uBAAC,oBAAoB;;;MEVxB,mBAAmB,CAAA;AALhC,IAAA,WAAA,GAAA;AAMI,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAmB;AAC5C;8GAFY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,0LCRhC,80BAuBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDfa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACI,iBAAiB,EAAA,QAAA,EAAA,80BAAA,EAAA;;;AEMzB,MAAO,8BAA+B,SAAQ,UAAU,CAAA;8GAAjD,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,0FCV3C,yeAgBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDNa,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAN1C,SAAS;+BACI,6BAA6B,EAAA,aAAA,EAGxB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,yeAAA,EAAA;;;MEkC5B,2BAA2B,CAAA;AACpC,IAAA,WAAA,CAAY,gBAAkC,EAAA;QAC1C,gBAAgB,CAAC,oCAAoC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAC7E,QAAA,gBAAgB,CAAC,cAAc,CAACC,IAAE,EAAE,IAAI,CAAC;AACzC,QAAA,gBAAgB,CAAC,cAAc,CAACC,IAAE,EAAE,IAAI,CAAC;;8GAJpC,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,iBAVhC,8BAA8B;YAC9B,gBAAgB;AAChB,YAAA,mBAAmB,aAdnB,YAAY;YACZ,YAAY;YACZ,eAAe;YACf,cAAc;YACd,mBAAmB;YACnB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,YAAY;AACZ,YAAA,YAAY,aAQZ,8BAA8B;YAC9B,gBAAgB;YAChB,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAGd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAtBhC,YAAY;YACZ,YAAY;YACZ,eAAe;YACf,cAAc;YACd,mBAAmB;YACnB,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,YAAY;YACZ,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAaP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAxBvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,YAAY;wBACZ,eAAe;wBACf,cAAc;wBACd,mBAAmB;wBACnB,eAAe;wBACf,aAAa;wBACb,iBAAiB;wBACjB,YAAY;wBACZ;AACH,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACV,8BAA8B;wBAC9B,gBAAgB;wBAChB;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,8BAA8B;wBAC9B,gBAAgB;wBAChB;AACH;AACJ,iBAAA;;;MClCY,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,sDCP/B,4BACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDMa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACI,gBAAgB,EAAA,QAAA,EAAA,4BAAA,EAAA;;;MEYjB,cAAc,CAAA;AAL3B,IAAA,WAAA,GAAA;QAMI,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;QACpC,IAAQ,CAAA,QAAA,GAAmB,EAAE;AAC7B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;AAClB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;QACpD,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,oBAAoB,CAAC,SAAS;AAc/D,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC;AACvE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAwEzD;AAvFG,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,UAAU,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;;AAG9C,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAE,CAAA,CAAC;;AAG7C,IAAA,IAAY,UAAU,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAM,GAAA,EAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA,CAAE,GAAG,EAAE,CAAC,IAAI,UAAU;;IAQ1G,QAAQ,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QAElD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;;QAG1D,IAAI,CAAC,QAAQ,GAAG;AACZ,YAAA;AACI,gBAAA,MAAM,EAAE;AACJ,oBAAA;AACI,wBAAA,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,gBAAgB,CAAC,KAAK;AAC5B,wBAAA,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;wBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,KAAK,EAAE;AAC1D,wBAAA,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1D,wBAAA,mBAAmB,EAAE;AACL;AACvB;AACJ,aAAA;AACD,YAAA;AACI,gBAAA,MAAM,EAAE;AACJ,oBAAA;AACI,wBAAA,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,gBAAgB,CAAC,KAAK;AAC5B,wBAAA,SAAS,EAAE,UAAU;AACrB,wBAAA,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;wBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,YAAY,EAAE,KAAK,EAAE;AAC7D,wBAAA,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1D,wBAAA,mBAAmB,EAAE;AACL;AACvB;AACJ,aAAA;AACD,YAAA;AACI,gBAAA,MAAM,EAAE;AACJ,oBAAA;AACI,wBAAA,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,gBAAgB,CAAC,QAAQ;AAC/B,wBAAA,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;wBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,YAAY,EAAE,KAAK,EAAE;AAC/D,wBAAA,SAAS,EAAE;AACd;AACJ;AACJ;SACJ;;IAGL,WAAW,GAAA;QACP,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QAErD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;;;IAIjE,KAAK,GAAA;;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAa,CAAC,QAAQ,EAAG,IAAI,CAAC,SAAS,EAAE,CAAC,KAAa,CAAC,QAAQ;AACpG,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChD,aAAA,SAAS,EAAE;;IAGpB,uBAAuB,GAAA;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,EAAE;;IAGnE,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE;;8GA5FjD,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,4OCf3B,+2JAiHA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAS,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDlGa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;+BACI,WAAW,EAAA,QAAA,EAAA,+2JAAA,EAAA;;;MEJZ,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,0DCPnC,gCACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDMa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACI,oBAAoB,EAAA,QAAA,EAAA,gCAAA,EAAA;;;AEIlC;;AAEG;AACU,MAAA,MAAM,GAAW;AAC1B,IAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,sBAAsB,EAAE;AAC7D,IAAA,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE;AACrD,IAAA,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc;;MAOjC,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,0CAFpB,YAAY,CAAA,EAAA,CAAA,CAAA;AAEb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAHpB,OAAA,EAAA,CAAA,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAC/C,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAEb,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC1D,OAAO,EAAE,CAAC,YAAY;AACzB,iBAAA;;;MCuBY,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,iBAVnB,cAAc;YACd,sBAAsB;AACtB,YAAA,kBAAkB,aAflB,YAAY;YACZ,qBAAqB;YACrB,eAAe;YACf,cAAc;YACd,WAAW;YACX,kBAAkB;YAClB,aAAa;YACb,aAAa;YACb,aAAa;YACb,YAAY;AACZ,YAAA,YAAY,aAQZ,cAAc;YACd,sBAAsB;YACtB,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAGb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAvBnB,YAAY;YACZ,qBAAqB;YACrB,eAAe;YACf,cAAc;YACd,WAAW;YAEX,aAAa;YACb,aAAa;YACb,aAAa;YACb,YAAY;YACZ,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAaP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAzB1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,qBAAqB;wBACrB,eAAe;wBACf,cAAc;wBACd,WAAW;wBACX,kBAAkB;wBAClB,aAAa;wBACb,aAAa;wBACb,aAAa;wBACb,YAAY;wBACZ;AACH,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACV,cAAc;wBACd,sBAAsB;wBACtB;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,cAAc;wBACd,sBAAsB;wBACtB;AACH;AACJ,iBAAA;;;AChCD;;AAEG;MAWU,eAAe,CAAA;AACxB;;;AAGG;IACH,OAAO,OAAO,CAAC,MAAuB,EAAA;QAClC,OAAO;AACH,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,SAAS,EAAE;gBACP,EAAE,OAAO,EAAE,eAAe,CAAC,4BAA4B,EAAE,QAAQ,EAAE,MAAM;AAC5E;SACJ;;8GAXI,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YARpB,YAAY;YACZ,mBAAmB;YACnB,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAMjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAJb,SAAA,EAAA;YACP;AACH,SAAA,EAAA,OAAA,EAAA,CANG,YAAY;YACZ,mBAAmB;YACnB,sBAAsB,CAAA,EAAA,CAAA,CAAA;;2FAMjB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAV3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,mBAAmB;wBACnB;AACH,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACP;AACH;AACJ,iBAAA;;;ACrBD;;AAEG;;;;"}
@@ -105,6 +105,7 @@ class PopoverDirective {
105
105
  initPopover() {
106
106
  this.setupPopover();
107
107
  this.popoverComponentRef.instance.setVisible(true);
108
+ this.popoverComponentRef.changeDetectorRef.detectChanges();
108
109
  this.ngZone.runOutsideAngular(() => this.positioningService
109
110
  .computePosition(this.elementRef, this.popoverComponentRef.location, { placement: this.placement })
110
111
  .subscribe(resp => this.updatePosition(resp)));
@@ -126,6 +127,10 @@ class PopoverDirective {
126
127
  updatePosition(result) {
127
128
  const nativeElement = this.popoverComponentRef.location.nativeElement;
128
129
  const arrowElement = this.popoverComponentRef.location.nativeElement.querySelector('.popover-arrow');
130
+ if (!arrowElement) {
131
+ console.warn('Popover arrow element not found. Positioning may be incorrect.');
132
+ return;
133
+ }
129
134
  const popoverBox = nativeElement.getBoundingClientRect();
130
135
  const arrowBox = arrowElement.getBoundingClientRect();
131
136
  switch (this.placement) {
@@ -1 +1 @@
1
- {"version":3,"file":"updevs-components-popover.mjs","sources":["../../../../libs/components/popover/src/popover.component.ts","../../../../libs/components/popover/src/popover.component.html","../../../../libs/components/popover/src/popover.directive.ts","../../../../libs/components/popover/src/upd-popover.module.ts","../../../../libs/components/popover/src/updevs-components-popover.ts"],"sourcesContent":["import { Component, Input, HostBinding, OnInit, OnChanges, ViewEncapsulation, TemplateRef } from '@angular/core';\nimport { TopBottomLeftRightType } from '@updevs/sdk/types';\n\n@Component({\n selector: 'upd-popover',\n templateUrl: './popover.component.html',\n styleUrls: ['./popover.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class PopoverComponent implements OnInit, OnChanges {\n @HostBinding('class') classes = '';\n @HostBinding('attr.data-popper-placement') popperPlacement = '';\n @HostBinding('role') readonly role = 'tooltip';\n\n @Input() title?: string;\n @Input() text?: string;\n @Input() titleTemplate?: TemplateRef<any>;\n @Input() template?: TemplateRef<any>;\n @Input() placement: TopBottomLeftRightType = 'top';\n @Input() customClasses?: string;\n\n get isVisible(): boolean {\n return this._isVisible;\n }\n\n private _isVisible = false;\n\n ngOnInit(): void {\n this.updateClasses();\n }\n\n ngOnChanges(): void {\n this.updateClasses();\n }\n\n setVisible(isVisible: boolean): void {\n this._isVisible = isVisible;\n this.updateClasses();\n }\n\n private updateClasses(): void {\n this.popperPlacement = this.placement;\n this.classes = [\n 'popover',\n 'bs-popover-auto',\n !this._isVisible ? 'fade' : '',\n this._isVisible ? 'show' : '',\n 'upd-popover',\n `-${this.placement}`,\n ...(this.customClasses?.split(' ') || [])\n ].join(' ');\n }\n}\n","<div class=\"popover-arrow upd-popover-arrow -{{placement}}\"></div>\n@if (!!title || !!titleTemplate) {\n @if (!!title) {\n <h3 [innerHTML]=\"title\" class=\"popover-header\"></h3>\n } @else {\n <div class=\"popover-header\">\n <ng-template [ngTemplateOutlet]=\"titleTemplate!\"></ng-template>\n </div>\n }\n}\n<div class=\"popover-body\">\n @if (!!text) {\n <span [innerHTML]=\"text\"></span>\n } @else {\n @if (!template) {\n <ng-content></ng-content>\n } @else {\n <ng-template [ngTemplateOutlet]=\"template!\"></ng-template>\n }\n }\n</div>\n","import {\n Directive,\n Input,\n TemplateRef,\n ViewContainerRef,\n Renderer2,\n ElementRef,\n Injector,\n NgZone,\n ComponentRef,\n HostListener, inject\n} from '@angular/core';\nimport { TopBottomLeftRightType } from '@updevs/sdk/types';\nimport { PositioningService, ComputePositionResult, DynamicComponentLoaderService } from '@updevs/sdk/layout';\n\nimport { PopoverComponent } from './popover.component';\n\n@Directive({\n selector: '[updPopover]'\n})\nexport class PopoverDirective {\n @Input('updPopover') text?: string;\n @Input('updPopoverTitle') title?: string;\n @Input('updPopoverTitleTemplate') popoverTitleTemplate?: TemplateRef<any>;\n @Input('updPopoverTemplate') popoverTemplate?: TemplateRef<any>;\n @Input('updPopoverPlacement') placement: TopBottomLeftRightType = 'top';\n @Input('updPopoverCustomClasses') customClasses?: string;\n /**\n * This makes the popover behave like a tooltip.\n * It means it'll show/hide depending on whether the mouse is over or not the element.\n */\n @Input('updPopoverActAsTooltip') actAsTooltip = false;\n\n private popoverComponentRef?: ComponentRef<PopoverComponent>;\n\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly ngZone = inject(NgZone);\n private readonly injector = inject(Injector);\n private readonly positioningService = inject(PositioningService);\n private readonly dynamicComponentLoaderService = inject(DynamicComponentLoaderService);\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.actAsTooltip) {\n this.initPopover();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.actAsTooltip) {\n this.disposePopover();\n }\n }\n\n @HostListener('click')\n onClick(): void {\n if (!this.actAsTooltip) {\n if (this.popoverComponentRef?.instance.isVisible) {\n this.disposePopover();\n } else {\n this.initPopover();\n }\n }\n }\n\n private initPopover(): void {\n this.setupPopover();\n this.popoverComponentRef!.instance.setVisible(true);\n this.ngZone.runOutsideAngular(() =>\n this.positioningService\n .computePosition(this.elementRef, this.popoverComponentRef!.location, { placement: this.placement })\n .subscribe(resp => this.updatePosition(resp))\n );\n }\n\n private disposePopover(): void {\n this.viewContainerRef.clear();\n this.popoverComponentRef!.instance.setVisible(false);\n }\n\n private setupPopover(): void {\n this.viewContainerRef.clear();\n\n this.popoverComponentRef = this.dynamicComponentLoaderService.load(PopoverComponent, this.viewContainerRef, this.injector);\n this.popoverComponentRef!.instance.title = this.title;\n this.popoverComponentRef!.instance.text = this.text;\n this.popoverComponentRef!.instance.titleTemplate = this.popoverTitleTemplate;\n this.popoverComponentRef!.instance.template = this.popoverTemplate;\n this.popoverComponentRef!.instance.placement = this.placement;\n this.popoverComponentRef!.instance.customClasses = this.customClasses;\n }\n\n private updatePosition(result: ComputePositionResult): void {\n const nativeElement = this.popoverComponentRef!.location.nativeElement;\n const arrowElement = this.popoverComponentRef!.location.nativeElement.querySelector('.popover-arrow');\n const popoverBox = nativeElement.getBoundingClientRect();\n const arrowBox = arrowElement.getBoundingClientRect();\n\n switch (this.placement) {\n case 'top':\n this.renderer.setStyle(nativeElement, 'top', `${result.y - arrowBox.height}px`);\n this.renderer.setStyle(nativeElement, 'left', `${result.x}px`);\n this.renderer.setStyle(arrowElement, 'left', `${(popoverBox.width / 2) - (arrowBox.width / 2)}px`);\n break;\n case 'bottom':\n this.renderer.setStyle(nativeElement, 'top', `${result.y + arrowBox.height}px`);\n this.renderer.setStyle(nativeElement, 'left', `${result.x}px`);\n this.renderer.setStyle(arrowElement, 'left', `${(popoverBox.width / 2) - (arrowBox.width / 2)}px`);\n break;\n case 'left':\n this.renderer.setStyle(nativeElement, 'top', `${result.y}px`);\n this.renderer.setStyle(nativeElement, 'left', `${result.x - arrowBox.width}px`);\n this.renderer.setStyle(arrowElement, 'top', `${(popoverBox.height / 2) - (arrowBox.height / 2)}px`);\n break;\n case 'right':\n this.renderer.setStyle(nativeElement, 'top', `${result.y}px`);\n this.renderer.setStyle(nativeElement, 'left', `${result.x + arrowBox.width}px`);\n this.renderer.setStyle(arrowElement, 'top', `${(popoverBox.height / 2) - (arrowBox.height / 2)}px`);\n break;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PopoverComponent } from './popover.component';\nimport { PopoverDirective } from './popover.directive';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n PopoverComponent,\n PopoverDirective\n ],\n exports: [\n PopoverComponent,\n PopoverDirective\n ]\n})\nexport class UpdPopoverModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updevs-components-popover.mjs","sources":["../../../../libs/components/popover/src/popover.component.ts","../../../../libs/components/popover/src/popover.component.html","../../../../libs/components/popover/src/popover.directive.ts","../../../../libs/components/popover/src/upd-popover.module.ts","../../../../libs/components/popover/src/updevs-components-popover.ts"],"sourcesContent":["import { Component, Input, HostBinding, OnInit, OnChanges, ViewEncapsulation, TemplateRef } from '@angular/core';\nimport { TopBottomLeftRightType } from '@updevs/sdk/types';\n\n@Component({\n selector: 'upd-popover',\n templateUrl: './popover.component.html',\n styleUrls: ['./popover.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class PopoverComponent implements OnInit, OnChanges {\n @HostBinding('class') classes = '';\n @HostBinding('attr.data-popper-placement') popperPlacement = '';\n @HostBinding('role') readonly role = 'tooltip';\n\n @Input() title?: string;\n @Input() text?: string;\n @Input() titleTemplate?: TemplateRef<any>;\n @Input() template?: TemplateRef<any>;\n @Input() placement: TopBottomLeftRightType = 'top';\n @Input() customClasses?: string;\n\n get isVisible(): boolean {\n return this._isVisible;\n }\n\n private _isVisible = false;\n\n ngOnInit(): void {\n this.updateClasses();\n }\n\n ngOnChanges(): void {\n this.updateClasses();\n }\n\n setVisible(isVisible: boolean): void {\n this._isVisible = isVisible;\n this.updateClasses();\n }\n\n private updateClasses(): void {\n this.popperPlacement = this.placement;\n this.classes = [\n 'popover',\n 'bs-popover-auto',\n !this._isVisible ? 'fade' : '',\n this._isVisible ? 'show' : '',\n 'upd-popover',\n `-${this.placement}`,\n ...(this.customClasses?.split(' ') || [])\n ].join(' ');\n }\n}\n","<div class=\"popover-arrow upd-popover-arrow -{{placement}}\"></div>\n@if (!!title || !!titleTemplate) {\n @if (!!title) {\n <h3 [innerHTML]=\"title\" class=\"popover-header\"></h3>\n } @else {\n <div class=\"popover-header\">\n <ng-template [ngTemplateOutlet]=\"titleTemplate!\"></ng-template>\n </div>\n }\n}\n<div class=\"popover-body\">\n @if (!!text) {\n <span [innerHTML]=\"text\"></span>\n } @else {\n @if (!template) {\n <ng-content></ng-content>\n } @else {\n <ng-template [ngTemplateOutlet]=\"template!\"></ng-template>\n }\n }\n</div>\n","import {\n Directive,\n Input,\n TemplateRef,\n ViewContainerRef,\n Renderer2,\n ElementRef,\n Injector,\n NgZone,\n ComponentRef,\n HostListener, inject\n} from '@angular/core';\nimport { TopBottomLeftRightType } from '@updevs/sdk/types';\nimport { PositioningService, ComputePositionResult, DynamicComponentLoaderService } from '@updevs/sdk/layout';\n\nimport { PopoverComponent } from './popover.component';\n\n@Directive({\n selector: '[updPopover]'\n})\nexport class PopoverDirective {\n @Input('updPopover') text?: string;\n @Input('updPopoverTitle') title?: string;\n @Input('updPopoverTitleTemplate') popoverTitleTemplate?: TemplateRef<any>;\n @Input('updPopoverTemplate') popoverTemplate?: TemplateRef<any>;\n @Input('updPopoverPlacement') placement: TopBottomLeftRightType = 'top';\n @Input('updPopoverCustomClasses') customClasses?: string;\n /**\n * This makes the popover behave like a tooltip.\n * It means it'll show/hide depending on whether the mouse is over or not the element.\n */\n @Input('updPopoverActAsTooltip') actAsTooltip = false;\n\n private popoverComponentRef?: ComponentRef<PopoverComponent>;\n\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly ngZone = inject(NgZone);\n private readonly injector = inject(Injector);\n private readonly positioningService = inject(PositioningService);\n private readonly dynamicComponentLoaderService = inject(DynamicComponentLoaderService);\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.actAsTooltip) {\n this.initPopover();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.actAsTooltip) {\n this.disposePopover();\n }\n }\n\n @HostListener('click')\n onClick(): void {\n if (!this.actAsTooltip) {\n if (this.popoverComponentRef?.instance.isVisible) {\n this.disposePopover();\n } else {\n this.initPopover();\n }\n }\n }\n\n private initPopover(): void {\n this.setupPopover();\n this.popoverComponentRef!.instance.setVisible(true);\n this.popoverComponentRef!.changeDetectorRef.detectChanges();\n this.ngZone.runOutsideAngular(() =>\n this.positioningService\n .computePosition(this.elementRef, this.popoverComponentRef!.location, { placement: this.placement })\n .subscribe(resp => this.updatePosition(resp))\n );\n }\n\n private disposePopover(): void {\n this.viewContainerRef.clear();\n this.popoverComponentRef!.instance.setVisible(false);\n }\n\n private setupPopover(): void {\n this.viewContainerRef.clear();\n\n this.popoverComponentRef = this.dynamicComponentLoaderService.load(PopoverComponent, this.viewContainerRef, this.injector);\n this.popoverComponentRef!.instance.title = this.title;\n this.popoverComponentRef!.instance.text = this.text;\n this.popoverComponentRef!.instance.titleTemplate = this.popoverTitleTemplate;\n this.popoverComponentRef!.instance.template = this.popoverTemplate;\n this.popoverComponentRef!.instance.placement = this.placement;\n this.popoverComponentRef!.instance.customClasses = this.customClasses;\n }\n\n private updatePosition(result: ComputePositionResult): void {\n const nativeElement = this.popoverComponentRef!.location.nativeElement;\n const arrowElement = this.popoverComponentRef!.location.nativeElement.querySelector('.popover-arrow');\n\n if (!arrowElement) {\n console.warn('Popover arrow element not found. Positioning may be incorrect.');\n return;\n }\n\n const popoverBox = nativeElement.getBoundingClientRect();\n const arrowBox = arrowElement.getBoundingClientRect();\n\n switch (this.placement) {\n case 'top':\n this.renderer.setStyle(nativeElement, 'top', `${result.y - arrowBox.height}px`);\n this.renderer.setStyle(nativeElement, 'left', `${result.x}px`);\n this.renderer.setStyle(arrowElement, 'left', `${(popoverBox.width / 2) - (arrowBox.width / 2)}px`);\n break;\n case 'bottom':\n this.renderer.setStyle(nativeElement, 'top', `${result.y + arrowBox.height}px`);\n this.renderer.setStyle(nativeElement, 'left', `${result.x}px`);\n this.renderer.setStyle(arrowElement, 'left', `${(popoverBox.width / 2) - (arrowBox.width / 2)}px`);\n break;\n case 'left':\n this.renderer.setStyle(nativeElement, 'top', `${result.y}px`);\n this.renderer.setStyle(nativeElement, 'left', `${result.x - arrowBox.width}px`);\n this.renderer.setStyle(arrowElement, 'top', `${(popoverBox.height / 2) - (arrowBox.height / 2)}px`);\n break;\n case 'right':\n this.renderer.setStyle(nativeElement, 'top', `${result.y}px`);\n this.renderer.setStyle(nativeElement, 'left', `${result.x + arrowBox.width}px`);\n this.renderer.setStyle(arrowElement, 'top', `${(popoverBox.height / 2) - (arrowBox.height / 2)}px`);\n break;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PopoverComponent } from './popover.component';\nimport { PopoverDirective } from './popover.directive';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n PopoverComponent,\n PopoverDirective\n ],\n exports: [\n PopoverComponent,\n PopoverDirective\n ]\n})\nexport class UpdPopoverModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,24 +1,38 @@
1
- import { OnInit } from '@angular/core';
1
+ import { OnInit, ElementRef } from '@angular/core';
2
2
  import { TextService } from '@updevs/sdk';
3
3
  import { RouteDataModel } from '@updevs/sdk/routes';
4
4
  import { BaseComponent } from '@updevs/sdk/layout';
5
+ import { OptionalType } from '@updevs/sdk/types';
6
+ import { DropdownItem } from '@updevs/components/dropdown';
5
7
  import * as i0 from "@angular/core";
6
8
  export declare class SidebarComponent extends BaseComponent implements OnInit {
7
9
  wrapperClasses: string;
8
10
  theme: string;
9
11
  menuItems: RouteDataModel[];
12
+ isLoggedUserDropdownOpen: boolean;
13
+ readonly loggedUserRef: import("@angular/core").Signal<ElementRef<any> | undefined>;
10
14
  readonly textService: TextService;
11
15
  readonly isSidebarMobileOpen: import("@angular/core").WritableSignal<boolean>;
16
+ readonly config: import("@angular/core").Signal<import("@updevs/sdk/layout/models/main-header.config").MainHeaderConfig>;
17
+ readonly userInfo: import("@angular/core").Signal<OptionalType<import("@updevs/sdk/core").UserInfoModel>>;
18
+ readonly userIdentification: import("@angular/core").Signal<string>;
19
+ readonly userDescription: import("@angular/core").Signal<string>;
20
+ readonly loggedUserOptions: import("@angular/core").Signal<DropdownItem[]>;
21
+ readonly userInitials: import("@angular/core").Signal<string>;
12
22
  private currentRoute;
13
23
  private menuItemsBackup;
14
24
  private readonly router;
15
25
  private readonly menuService;
26
+ private readonly layoutService;
27
+ private readonly securityStorage;
28
+ private readonly coreLayoutConfigService;
16
29
  ngOnInit(): void;
17
30
  onMenuItemClick(item: RouteDataModel): void;
18
31
  hasChildren(item: RouteDataModel): boolean;
19
32
  asMenuItem(item: any): RouteDataModel;
20
33
  getItemClasses(item: RouteDataModel, activeClass: string, ...classes: string[]): string[];
21
34
  toggleSidebarOnMobile(): void;
35
+ selectLoggedUserMenuItem(item: DropdownItem): void;
22
36
  private findActiveNode;
23
37
  private updateActiveRoute;
24
38
  private setActivePath;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@updevs/components",
3
- "version": "1.0.0-alpha.43",
3
+ "version": "1.0.0-alpha.45",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.0.1 || ^19.0.0",
6
6
  "@angular/core": "^18.0.1 || ^19.0.0",
@@ -40,6 +40,12 @@
40
40
  "esm": "./esm2022/button/updevs-components-button.mjs",
41
41
  "default": "./fesm2022/updevs-components-button.mjs"
42
42
  },
43
+ "./drag-and-drop": {
44
+ "types": "./drag-and-drop/index.d.ts",
45
+ "esm2022": "./esm2022/drag-and-drop/updevs-components-drag-and-drop.mjs",
46
+ "esm": "./esm2022/drag-and-drop/updevs-components-drag-and-drop.mjs",
47
+ "default": "./fesm2022/updevs-components-drag-and-drop.mjs"
48
+ },
43
49
  "./calendar": {
44
50
  "types": "./calendar/index.d.ts",
45
51
  "esm2022": "./esm2022/calendar/updevs-components-calendar.mjs",
@@ -52,12 +58,6 @@
52
58
  "esm": "./esm2022/card/updevs-components-card.mjs",
53
59
  "default": "./fesm2022/updevs-components-card.mjs"
54
60
  },
55
- "./drag-and-drop": {
56
- "types": "./drag-and-drop/index.d.ts",
57
- "esm2022": "./esm2022/drag-and-drop/updevs-components-drag-and-drop.mjs",
58
- "esm": "./esm2022/drag-and-drop/updevs-components-drag-and-drop.mjs",
59
- "default": "./fesm2022/updevs-components-drag-and-drop.mjs"
60
- },
61
61
  "./dropdown": {
62
62
  "types": "./dropdown/index.d.ts",
63
63
  "esm2022": "./esm2022/dropdown/updevs-components-dropdown.mjs",
@@ -82,18 +82,18 @@
82
82
  "esm": "./esm2022/link/updevs-components-link.mjs",
83
83
  "default": "./fesm2022/updevs-components-link.mjs"
84
84
  },
85
- "./modal": {
86
- "types": "./modal/index.d.ts",
87
- "esm2022": "./esm2022/modal/updevs-components-modal.mjs",
88
- "esm": "./esm2022/modal/updevs-components-modal.mjs",
89
- "default": "./fesm2022/updevs-components-modal.mjs"
90
- },
91
85
  "./list": {
92
86
  "types": "./list/index.d.ts",
93
87
  "esm2022": "./esm2022/list/updevs-components-list.mjs",
94
88
  "esm": "./esm2022/list/updevs-components-list.mjs",
95
89
  "default": "./fesm2022/updevs-components-list.mjs"
96
90
  },
91
+ "./modal": {
92
+ "types": "./modal/index.d.ts",
93
+ "esm2022": "./esm2022/modal/updevs-components-modal.mjs",
94
+ "esm": "./esm2022/modal/updevs-components-modal.mjs",
95
+ "default": "./fesm2022/updevs-components-modal.mjs"
96
+ },
97
97
  "./paginator": {
98
98
  "types": "./paginator/index.d.ts",
99
99
  "esm2022": "./esm2022/paginator/updevs-components-paginator.mjs",