aril 1.0.72 → 1.0.73

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.
@@ -6,6 +6,7 @@ import { RouterLink } from '@angular/router';
6
6
  import { NavigationEnd } from '@angular/router';
7
7
  import { ScrollPanelModule } from 'primeng/scrollpanel';
8
8
  import { TooltipModule } from 'primeng/tooltip';
9
+ import { TranslocoModule } from '@ngneat/transloco';
9
10
  import { filter } from 'rxjs';
10
11
  import { Apps } from 'aril/boot/config/apps';
11
12
  import { TextComponent } from 'aril/ui/text';
@@ -181,10 +182,10 @@ export class StaticSidebarComponent {
181
182
  return filtered;
182
183
  }
183
184
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: StaticSidebarComponent, deps: [{ token: i1.AppMenuService }, { token: i2.Router }, { token: i3.LayoutService }, { token: i4.TranslateJsonPipe }, { token: i5.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
184
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: StaticSidebarComponent, isStandalone: true, selector: "app-static-sidebar", providers: [TranslateJsonPipe], ngImport: i0, template: "<div class=\"static-sidebar\">\r\n\t<div class=\"static-sidebar-header\">\r\n\t\t<div class=\"header-logo\">\r\n\t\t\t<img [src]=\"filePath()\" alt=\"Logo\" class=\"logo-image\" />\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t<div class=\"mx-4 mt-2\">\r\n\t\t\t<aril-text\r\n\t\t\t\tplaceholder='...'\r\n\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\ticon=\"SEARCH\">\r\n\t\t\t</aril-text>\r\n\t\t</div>\r\n\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</p-scrollPanel>\r\n\t</div>\r\n\r\n\t<!-- Recursive Tree Node Template -->\r\n\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t<div class=\"tree-node\" [style.margin-left.px]=\"level * 10\">\r\n\t\t\t@if (node.routerLink) {\r\n\t\t\t\t<a\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"onMenuItemClick()\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</a>\r\n\t\t\t} @else {\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"toggleNode(node)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Recursive Children -->\r\n\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".static-sidebar{width:250px;height:100vh;background:#fff;border-right:1px solid var(--surface-border);display:flex;flex-direction:column;position:fixed;left:0;top:0;z-index:999;overflow-y:auto}.static-sidebar .static-sidebar-header{min-height:70px;background:#fff;color:var(--text-color);display:flex;align-items:center;justify-content:center;box-sizing:border-box;border-bottom:1px solid var(--surface-border)}.static-sidebar .static-sidebar-header .header-logo{display:flex;align-items:center;gap:.75rem}.static-sidebar .static-sidebar-header .header-logo .logo-image{height:5rem;width:auto;transform:scale(.8);transform-origin:left center;object-fit:contain}.static-sidebar .static-sidebar-header .header-logo .logo-text{font-size:1.5rem;font-weight:700;color:var(--text-color);letter-spacing:.5px}.static-sidebar .static-sidebar-content{flex:1;background:#fff;overflow:hidden}.static-sidebar .tree-container{padding:.5rem 0}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:.5rem 1rem;border-radius:6px;margin:.1rem .5rem;cursor:pointer;transition:all .2s ease;border:1px solid transparent;text-decoration:none;color:var(--text-color)}.static-sidebar .tree-node .node-item:hover{background:#00000008;border-color:var(--surface-border)}.static-sidebar .tree-node .node-item.is-page:hover{background:#1a365d0a;border-color:var(--primary-200)}.static-sidebar .tree-node .node-item.has-children{font-weight:600}.static-sidebar .tree-node .node-item.active{background:var(--primary-color)!important;color:#fff!important;border-color:var(--primary-color);font-weight:600;box-shadow:0 2px 5px #0000001a}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon{color:#fff!important}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;border-radius:4px;color:var(--text-color-secondary);cursor:pointer;transition:all .2s ease;flex-shrink:0}.static-sidebar .tree-node .toggle-btn:hover{background:#00000008;color:var(--primary-color)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem}.static-sidebar .tree-node .node-icon{color:var(--primary-color);font-size:.9rem;flex-shrink:0}.static-sidebar .tree-node .node-label{flex:1;font-size:.9rem;color:var(--text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ScrollPanelModule }, { kind: "component", type: i6.ScrollPanel, selector: "p-scrollPanel", inputs: ["style", "styleClass", "step"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TextComponent, selector: "aril-text[ngModel], aril-text[formControl], aril-text[formControlName]", inputs: ["placeholder", "tabindex", "icon", "iconPos", "size"] }] }); }
185
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: StaticSidebarComponent, isStandalone: true, selector: "app-static-sidebar", providers: [TranslateJsonPipe], ngImport: i0, template: "<div class=\"static-sidebar\">\r\n\t<div class=\"static-sidebar-header\">\r\n\t\t<div class=\"header-logo\">\r\n\t\t\t<img [src]=\"filePath()\" alt=\"Logo\" class=\"logo-image\" />\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t<div class=\"mx-4 mt-2\" *transloco=\"let t; read: ''\">\r\n\t\t\t<aril-text\r\n\t\t\t\t[placeholder]=\"t('search')\"\r\n\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\ticon=\"SEARCH\">\r\n\t\t\t</aril-text>\r\n\t\t</div>\r\n\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</p-scrollPanel>\r\n\t</div>\r\n\r\n\t<!-- Recursive Tree Node Template -->\r\n\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t<div class=\"tree-node\" [style.margin-left.px]=\"level * 10\">\r\n\t\t\t@if (node.routerLink) {\r\n\t\t\t\t<a\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"onMenuItemClick()\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</a>\r\n\t\t\t} @else {\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"toggleNode(node)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Recursive Children -->\r\n\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".static-sidebar{width:250px;height:100vh;background:#fff;border-right:1px solid var(--surface-border);display:flex;flex-direction:column;position:fixed;left:0;top:0;z-index:999;overflow-y:auto}.static-sidebar .static-sidebar-header{min-height:70px;background:#fff;color:var(--text-color);display:flex;align-items:center;justify-content:center;box-sizing:border-box;border-bottom:1px solid var(--surface-border)}.static-sidebar .static-sidebar-header .header-logo{display:flex;align-items:center;gap:.75rem}.static-sidebar .static-sidebar-header .header-logo .logo-image{height:5rem;width:auto;transform:scale(.8);transform-origin:left center;object-fit:contain}.static-sidebar .static-sidebar-header .header-logo .logo-text{font-size:1.5rem;font-weight:700;color:var(--text-color);letter-spacing:.5px}.static-sidebar .static-sidebar-content{flex:1;background:#fff;overflow:hidden}.static-sidebar .tree-container{padding:.5rem 0}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:.5rem 1rem;border-radius:6px;margin:.1rem .5rem;cursor:pointer;transition:all .2s ease;border:1px solid transparent;text-decoration:none;color:var(--text-color)}.static-sidebar .tree-node .node-item:hover{background:#00000008;border-color:var(--surface-border)}.static-sidebar .tree-node .node-item.is-page:hover{background:#1a365d0a;border-color:var(--primary-200)}.static-sidebar .tree-node .node-item.has-children{font-weight:600}.static-sidebar .tree-node .node-item.active{background:var(--primary-color)!important;color:#fff!important;border-color:var(--primary-color);font-weight:600;box-shadow:0 2px 5px #0000001a}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon{color:#fff!important}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;border-radius:4px;color:var(--text-color-secondary);cursor:pointer;transition:all .2s ease;flex-shrink:0}.static-sidebar .tree-node .toggle-btn:hover{background:#00000008;color:var(--primary-color)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem}.static-sidebar .tree-node .node-icon{color:var(--primary-color);font-size:.9rem;flex-shrink:0}.static-sidebar .tree-node .node-label{flex:1;font-size:.9rem;color:var(--text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ScrollPanelModule }, { kind: "component", type: i6.ScrollPanel, selector: "p-scrollPanel", inputs: ["style", "styleClass", "step"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TextComponent, selector: "aril-text[ngModel], aril-text[formControl], aril-text[formControlName]", inputs: ["placeholder", "tabindex", "icon", "iconPos", "size"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }] }); }
185
186
  }
186
187
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: StaticSidebarComponent, decorators: [{
187
188
  type: Component,
188
- args: [{ standalone: true, selector: 'app-static-sidebar', imports: [RouterLink, NgTemplateOutlet, ScrollPanelModule, TooltipModule, FormsModule, TextComponent], providers: [TranslateJsonPipe], template: "<div class=\"static-sidebar\">\r\n\t<div class=\"static-sidebar-header\">\r\n\t\t<div class=\"header-logo\">\r\n\t\t\t<img [src]=\"filePath()\" alt=\"Logo\" class=\"logo-image\" />\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t<div class=\"mx-4 mt-2\">\r\n\t\t\t<aril-text\r\n\t\t\t\tplaceholder='...'\r\n\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\ticon=\"SEARCH\">\r\n\t\t\t</aril-text>\r\n\t\t</div>\r\n\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</p-scrollPanel>\r\n\t</div>\r\n\r\n\t<!-- Recursive Tree Node Template -->\r\n\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t<div class=\"tree-node\" [style.margin-left.px]=\"level * 10\">\r\n\t\t\t@if (node.routerLink) {\r\n\t\t\t\t<a\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"onMenuItemClick()\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</a>\r\n\t\t\t} @else {\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"toggleNode(node)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Recursive Children -->\r\n\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".static-sidebar{width:250px;height:100vh;background:#fff;border-right:1px solid var(--surface-border);display:flex;flex-direction:column;position:fixed;left:0;top:0;z-index:999;overflow-y:auto}.static-sidebar .static-sidebar-header{min-height:70px;background:#fff;color:var(--text-color);display:flex;align-items:center;justify-content:center;box-sizing:border-box;border-bottom:1px solid var(--surface-border)}.static-sidebar .static-sidebar-header .header-logo{display:flex;align-items:center;gap:.75rem}.static-sidebar .static-sidebar-header .header-logo .logo-image{height:5rem;width:auto;transform:scale(.8);transform-origin:left center;object-fit:contain}.static-sidebar .static-sidebar-header .header-logo .logo-text{font-size:1.5rem;font-weight:700;color:var(--text-color);letter-spacing:.5px}.static-sidebar .static-sidebar-content{flex:1;background:#fff;overflow:hidden}.static-sidebar .tree-container{padding:.5rem 0}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:.5rem 1rem;border-radius:6px;margin:.1rem .5rem;cursor:pointer;transition:all .2s ease;border:1px solid transparent;text-decoration:none;color:var(--text-color)}.static-sidebar .tree-node .node-item:hover{background:#00000008;border-color:var(--surface-border)}.static-sidebar .tree-node .node-item.is-page:hover{background:#1a365d0a;border-color:var(--primary-200)}.static-sidebar .tree-node .node-item.has-children{font-weight:600}.static-sidebar .tree-node .node-item.active{background:var(--primary-color)!important;color:#fff!important;border-color:var(--primary-color);font-weight:600;box-shadow:0 2px 5px #0000001a}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon{color:#fff!important}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;border-radius:4px;color:var(--text-color-secondary);cursor:pointer;transition:all .2s ease;flex-shrink:0}.static-sidebar .tree-node .toggle-btn:hover{background:#00000008;color:var(--primary-color)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem}.static-sidebar .tree-node .node-icon{color:var(--primary-color);font-size:.9rem;flex-shrink:0}.static-sidebar .tree-node .node-label{flex:1;font-size:.9rem;color:var(--text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"] }]
189
+ args: [{ standalone: true, selector: 'app-static-sidebar', imports: [RouterLink, NgTemplateOutlet, ScrollPanelModule, TooltipModule, FormsModule, TextComponent, TranslocoModule], providers: [TranslateJsonPipe], template: "<div class=\"static-sidebar\">\r\n\t<div class=\"static-sidebar-header\">\r\n\t\t<div class=\"header-logo\">\r\n\t\t\t<img [src]=\"filePath()\" alt=\"Logo\" class=\"logo-image\" />\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t<div class=\"mx-4 mt-2\" *transloco=\"let t; read: ''\">\r\n\t\t\t<aril-text\r\n\t\t\t\t[placeholder]=\"t('search')\"\r\n\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\ticon=\"SEARCH\">\r\n\t\t\t</aril-text>\r\n\t\t</div>\r\n\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</p-scrollPanel>\r\n\t</div>\r\n\r\n\t<!-- Recursive Tree Node Template -->\r\n\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t<div class=\"tree-node\" [style.margin-left.px]=\"level * 10\">\r\n\t\t\t@if (node.routerLink) {\r\n\t\t\t\t<a\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"onMenuItemClick()\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</a>\r\n\t\t\t} @else {\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"toggleNode(node)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Recursive Children -->\r\n\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".static-sidebar{width:250px;height:100vh;background:#fff;border-right:1px solid var(--surface-border);display:flex;flex-direction:column;position:fixed;left:0;top:0;z-index:999;overflow-y:auto}.static-sidebar .static-sidebar-header{min-height:70px;background:#fff;color:var(--text-color);display:flex;align-items:center;justify-content:center;box-sizing:border-box;border-bottom:1px solid var(--surface-border)}.static-sidebar .static-sidebar-header .header-logo{display:flex;align-items:center;gap:.75rem}.static-sidebar .static-sidebar-header .header-logo .logo-image{height:5rem;width:auto;transform:scale(.8);transform-origin:left center;object-fit:contain}.static-sidebar .static-sidebar-header .header-logo .logo-text{font-size:1.5rem;font-weight:700;color:var(--text-color);letter-spacing:.5px}.static-sidebar .static-sidebar-content{flex:1;background:#fff;overflow:hidden}.static-sidebar .tree-container{padding:.5rem 0}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:.5rem 1rem;border-radius:6px;margin:.1rem .5rem;cursor:pointer;transition:all .2s ease;border:1px solid transparent;text-decoration:none;color:var(--text-color)}.static-sidebar .tree-node .node-item:hover{background:#00000008;border-color:var(--surface-border)}.static-sidebar .tree-node .node-item.is-page:hover{background:#1a365d0a;border-color:var(--primary-200)}.static-sidebar .tree-node .node-item.has-children{font-weight:600}.static-sidebar .tree-node .node-item.active{background:var(--primary-color)!important;color:#fff!important;border-color:var(--primary-color);font-weight:600;box-shadow:0 2px 5px #0000001a}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon{color:#fff!important}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;border-radius:4px;color:var(--text-color-secondary);cursor:pointer;transition:all .2s ease;flex-shrink:0}.static-sidebar .tree-node .toggle-btn:hover{background:#00000008;color:var(--primary-color)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem}.static-sidebar .tree-node .node-icon{color:var(--primary-color);font-size:.9rem;flex-shrink:0}.static-sidebar .tree-node .node-label{flex:1;font-size:.9rem;color:var(--text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"] }]
189
190
  }], ctorParameters: () => [{ type: i1.AppMenuService }, { type: i2.Router }, { type: i3.LayoutService }, { type: i4.TranslateJsonPipe }, { type: i5.TranslocoService }] });
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLXNpZGViYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL3N0YXRpYy1zaWRlYmFyL3N0YXRpYy1zaWRlYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdGhlbWUvbGF5b3V0L2FwcC9zdGF0aWMtc2lkZWJhci9zdGF0aWMtc2lkZWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdoRCxPQUFPLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QyxPQUFPLEVBQUUsSUFBSSxFQUFrQixNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7QUFzQnBELE1BQU0sT0FBTyxzQkFBc0I7SUFXbEMsWUFDUyxXQUEyQixFQUMzQixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsaUJB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QWEsQ0FBQyxhQUcxRixDQUFDLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgU2Nyb2xsUGFuZWxNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Njcm9sbHBhbmVsJztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgQXBwcywgUGx1Z2luTWVudUl0ZW0gfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwcHMnO1xyXG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnYXJpbC91aS90ZXh0JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlSnNvblBpcGUgfSBmcm9tICdhcmlsL3V0aWwvcGlwZXMnO1xyXG5cclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYXBwLmxheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FwcC5tZW51LnNlcnZpY2UnO1xyXG5cclxuaW50ZXJmYWNlIE1lbnVOb2RlIHtcclxuXHRrZXk6IHN0cmluZztcclxuXHRsYWJlbDogYW55O1xyXG5cdGljb24/OiBzdHJpbmc7XHJcblx0cm91dGVyTGluaz86IHN0cmluZztcclxuXHRjaGlsZHJlbj86IE1lbnVOb2RlW107XHJcblx0ZXhwYW5kZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0c2VsZWN0b3I6ICdhcHAtc3RhdGljLXNpZGViYXInLFxyXG5cdGltcG9ydHM6IFtSb3V0ZXJMaW5rLCBOZ1RlbXBsYXRlT3V0bGV0LCBTY3JvbGxQYW5lbE1vZHVsZSwgVG9vbHRpcE1vZHVsZSwgRm9ybXNNb2R1bGUsIFRleHRDb21wb25lbnRdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9zdGF0aWMtc2lkZWJhci5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmw6ICcuL3N0YXRpYy1zaWRlYmFyLmNvbXBvbmVudC5zY3NzJyxcclxuXHRwcm92aWRlcnM6IFtUcmFuc2xhdGVKc29uUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFN0YXRpY1NpZGViYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblx0YWN0aXZlTGFuZyA9IHRvU2lnbmFsKHRoaXMudHJhbnNsb2NvU2VydmljZS5sYW5nQ2hhbmdlcyQsIHsgaW5pdGlhbFZhbHVlOiAndHInIH0pO1xyXG5cdGZpbGVQYXRoID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG5cdG1lbnVOb2RlcyA9IHNpZ25hbDxNZW51Tm9kZVtdPihbXSk7XHJcblx0ZmlsdGVyZWROb2RlcyA9IHNpZ25hbDxNZW51Tm9kZVtdPihbXSk7XHJcblx0c2VhcmNoVGVybSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuXHJcblx0cHJpdmF0ZSByb3V0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRwcml2YXRlIHJlYWRvbmx5IE1BWF9MRU5HVEggPSB7IGxldmVsMDogMjUsIGxldmVsMTogMjAsIGxldmVsMjogMTYsIGxldmVsMzogMTMgfTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIG1lbnVTZXJ2aWNlOiBBcHBNZW51U2VydmljZSxcclxuXHRcdHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcblx0XHRwcml2YXRlIGxheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRyYW5zbGF0ZUpzb25QaXBlOiBUcmFuc2xhdGVKc29uUGlwZSxcclxuXHRcdHByaXZhdGUgdHJhbnNsb2NvU2VydmljZTogVHJhbnNsb2NvU2VydmljZVxyXG5cdCkge1xyXG5cdFx0dGhpcy5pbml0aWFsaXplTG9nb1BhdGgoKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0dGhpcy5idWlsZE1lbnVUcmVlKCk7XHJcblx0XHR0aGlzLnJvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xyXG5cdFx0XHQucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMuYnVpbGRNZW51VHJlZSgpKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0dGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGluaXRpYWxpemVMb2dvUGF0aCgpIHtcclxuXHRcdGlmICgoPGFueT5nbG9iYWxUaGlzKS5hY3RpdmVIb3N0KSB7XHJcblx0XHRcdHN3aXRjaCAoKDxhbnk+Z2xvYmFsVGhpcykuYWN0aXZlSG9zdCkge1xyXG5cdFx0XHRcdGNhc2UgQXBwcy5ZRUFQOlxyXG5cdFx0XHRcdFx0dGhpcy5maWxlUGF0aC51cGRhdGUoKCkgPT4gJ2Fzc2V0cy9pbWFnZXMveWVhcC1sb2dvLWRhcmsucG5nJyk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIEFwcHMuVEhPUjpcclxuXHRcdFx0XHRcdHRoaXMuZmlsZVBhdGgudXBkYXRlKCgpID0+ICdhc3NldHMvaW1hZ2VzL3Rob3ItbG9nby1kYXJrLnBuZycpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBBcHBzLkxFTkE6XHJcblx0XHRcdFx0XHR0aGlzLmZpbGVQYXRoLnVwZGF0ZSgoKSA9PiAnYXNzZXRzL2ltYWdlcy9sZW5hLWxvZ28tZGFyay5wbmcnKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHR0aGlzLmZpbGVQYXRoLnVwZGF0ZSgoKSA9PiAnYXNzZXRzL2ltYWdlcy95ZWFwLWxvZ28tZGFyay5wbmcnKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0c3dpdGNoICgoPGFueT5nbG9iYWxUaGlzKS5hY3RpdmVNRikge1xyXG5cdFx0XHRcdGNhc2UgQXBwcy5IRVM6XHJcblx0XHRcdFx0Y2FzZSBBcHBzLkNUUzpcclxuXHRcdFx0XHRjYXNlIEFwcHMuU0lTOlxyXG5cdFx0XHRcdFx0dGhpcy5maWxlUGF0aC51cGRhdGUoKCkgPT4gJ2Fzc2V0cy9pbWFnZXMvbGVuYS1sb2dvLWRhcmsucG5nJyk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIEFwcHMuQ1JNOlxyXG5cdFx0XHRcdGNhc2UgQXBwcy5CSUxMSU5HOlxyXG5cdFx0XHRcdGNhc2UgQXBwcy5QQVlNRU5UOlxyXG5cdFx0XHRcdGNhc2UgQXBwcy5XRE06XHJcblx0XHRcdFx0Y2FzZSBBcHBzLk1ORzpcclxuXHRcdFx0XHRcdHRoaXMuZmlsZVBhdGgudXBkYXRlKCgpID0+ICdhc3NldHMvaW1hZ2VzL3Rob3ItbG9nby1kYXJrLnBuZycpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBBcHBzLk1XOlxyXG5cdFx0XHRcdFx0dGhpcy5maWxlUGF0aC51cGRhdGUoKCkgPT4gJ2Fzc2V0cy9pbWFnZXMveWVhcC1sb2dvLWRhcmsucG5nJyk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0dGhpcy5maWxlUGF0aC51cGRhdGUoKCkgPT4gJ2Fzc2V0cy9pbWFnZXMveWVhcC1sb2dvLWRhcmsucG5nJyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzVGV4dFRydW5jYXRlZChsYWJlbDogYW55LCBsYW5nOiBzdHJpbmcgfCBudWxsLCBsZXZlbDogbnVtYmVyID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFsYWJlbCB8fCAhbGFuZyB8fCAhbGFiZWxbbGFuZ10pIHJldHVybiBmYWxzZTtcclxuXHRcdGNvbnN0IHRleHQgPSBsYWJlbFtsYW5nXTtcclxuXHRcdGNvbnN0IGxlbiA9IHRleHQubGVuZ3RoO1xyXG5cdFx0Y29uc3QgbGltaXRzID0gW3RoaXMuTUFYX0xFTkdUSC5sZXZlbDAsIHRoaXMuTUFYX0xFTkdUSC5sZXZlbDEsIHRoaXMuTUFYX0xFTkdUSC5sZXZlbDIsIHRoaXMuTUFYX0xFTkdUSC5sZXZlbDNdO1xyXG5cdFx0cmV0dXJuIGxlbiA+IGxpbWl0c1tNYXRoLm1pbihsZXZlbCwgMyldO1xyXG5cdH1cclxuXHJcblx0aXNNb2JpbGUoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLmlzTW9iaWxlKCk7XHJcblx0fVxyXG5cclxuXHRidWlsZE1lbnVUcmVlKCkge1xyXG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gdGhpcy5nZXRNZW51SXRlbXMoKTtcclxuXHRcdGNvbnN0IG5vZGVzID0gdGhpcy5jb252ZXJ0VG9NZW51Tm9kZXMobWVudUl0ZW1zKTtcclxuXHRcdHRoaXMubWVudU5vZGVzLnNldChub2Rlcyk7XHJcblx0XHR0aGlzLmZpbHRlcmVkTm9kZXMuc2V0KFsuLi5ub2Rlc10pO1xyXG5cdH1cclxuXHJcblx0Y29udmVydFRvTWVudU5vZGVzKGl0ZW1zOiBQbHVnaW5NZW51SXRlbVtdLCBwYXJlbnRLZXkgPSAnJyk6IE1lbnVOb2RlW10ge1xyXG5cdFx0cmV0dXJuIGl0ZW1zXHJcblx0XHRcdC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLnNlcGFyYXRvcilcclxuXHRcdFx0Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBrZXkgPSBwYXJlbnRLZXkgPyBgJHtwYXJlbnRLZXl9LSR7aW5kZXh9YCA6IGAke2luZGV4fWA7XHJcblx0XHRcdFx0Y29uc3Qgbm9kZTogTWVudU5vZGUgPSB7XHJcblx0XHRcdFx0XHRrZXksXHJcblx0XHRcdFx0XHRsYWJlbDogaXRlbS5sYWJlbCxcclxuXHRcdFx0XHRcdGljb246IGl0ZW0uaWNvbixcclxuXHRcdFx0XHRcdHJvdXRlckxpbms6IGl0ZW0ucm91dGVyTGluayxcclxuXHRcdFx0XHRcdGV4cGFuZGVkOiB0cnVlXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdG5vZGUuY2hpbGRyZW4gPSB0aGlzLmNvbnZlcnRUb01lbnVOb2RlcyhpdGVtLml0ZW1zLCBrZXkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gbm9kZTtcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRnZXRNZW51SXRlbXMoKTogUGx1Z2luTWVudUl0ZW1bXSB7XHJcblx0XHRjb25zdCBpc0hvc3RNb2RlID0gKDxhbnk+Z2xvYmFsVGhpcykuaXNIb3N0TW9kZTtcclxuXHRcdGNvbnN0IGhvc3RNZW51SXRlbXMgPSAoPGFueT5nbG9iYWxUaGlzKS5ob3N0TWVudUl0ZW1zO1xyXG5cdFx0cmV0dXJuIGlzSG9zdE1vZGUgPyBob3N0TWVudUl0ZW1zKCkgOiB0aGlzLm1lbnVTZXJ2aWNlLm1lbnVJdGVtcygpO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxUZXh0KHRleHQ6IGFueSk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGVKc29uUGlwZS50cmFuc2Zvcm0odGV4dCk7XHJcblx0fVxyXG5cclxuXHRpc0FjdGl2ZVJvdXRlRm9yTm9kZShub2RlOiBNZW51Tm9kZSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFub2RlLnJvdXRlckxpbmspIHJldHVybiBmYWxzZTtcclxuXHRcdGNvbnN0IGN1cnJlbnRVcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcblx0XHRjb25zdCBoYXNoVXJsID0gY3VycmVudFVybC5pbmRleE9mKCcjJykgPiAtMSA/IGN1cnJlbnRVcmwuc3BsaXQoJyMnKVsxXSA6IGN1cnJlbnRVcmw7XHJcblx0XHRpZiAoaGFzaFVybCA9PT0gbm9kZS5yb3V0ZXJMaW5rIHx8IGhhc2hVcmwgPT09ICcvJyArIG5vZGUucm91dGVyTGluaykgcmV0dXJuIHRydWU7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRub2RlLnJvdXRlckxpbmsgIT09ICcvJyAmJlxyXG5cdFx0XHQoaGFzaFVybC5zdGFydHNXaXRoKG5vZGUucm91dGVyTGluayArICcvJykgfHwgaGFzaFVybC5zdGFydHNXaXRoKCcvJyArIG5vZGUucm91dGVyTGluayArICcvJykpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0dG9nZ2xlTm9kZShub2RlOiBNZW51Tm9kZSkge1xyXG5cdFx0bm9kZS5leHBhbmRlZCA9ICFub2RlLmV4cGFuZGVkO1xyXG5cdFx0dGhpcy5maWx0ZXJlZE5vZGVzLnNldChbLi4udGhpcy5maWx0ZXJlZE5vZGVzKCldKTtcclxuXHR9XHJcblxyXG5cdHRyYWNrQnlLZXkoaW5kZXg6IG51bWJlciwgbm9kZTogTWVudU5vZGUpOiBhbnkge1xyXG5cdFx0cmV0dXJuIG5vZGUua2V5O1xyXG5cdH1cclxuXHJcblx0b25NZW51SXRlbUNsaWNrKCkge1xyXG5cdFx0aWYgKHRoaXMuaXNNb2JpbGUoKSkge1xyXG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2UuY2xvc2VNb2JpbGVNZW51KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zZWFyY2hUZXJtLnNldCgnJyk7XHJcblx0XHR0aGlzLmZpbHRlcmVkTm9kZXMuc2V0KHRoaXMubWVudU5vZGVzKCkgfHwgW10pO1xyXG5cdH1cclxuXHJcblx0b25TZWFyY2hDaGFuZ2UoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjdXJyZW50U2VhcmNoVGVybSA9IHRoaXMuc2VhcmNoVGVybSgpPy50b0xvd2VyQ2FzZSgpPy50cmltKCk7XHJcblx0XHRpZiAoIWN1cnJlbnRTZWFyY2hUZXJtKSB7XHJcblx0XHRcdHRoaXMuZmlsdGVyZWROb2Rlcy5zZXQodGhpcy5tZW51Tm9kZXMoKSB8fCBbXSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuZmlsdGVyZWROb2Rlcy5zZXQodGhpcy5maWx0ZXJOb2Rlcyh0aGlzLm1lbnVOb2RlcygpLCBjdXJyZW50U2VhcmNoVGVybSkpO1xyXG5cdH1cclxuXHJcblx0XHRwcml2YXRlIGZpbHRlck5vZGVzKG5vZGVzOiBNZW51Tm9kZVtdLCBzZWFyY2hUZXJtOiBzdHJpbmcpOiBNZW51Tm9kZVtdIHtcclxuXHRcdGNvbnN0IGZpbHRlcmVkOiBNZW51Tm9kZVtdID0gW107XHJcblx0XHRjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMudHJhbnNsb2NvU2VydmljZS5nZXRBY3RpdmVMYW5nKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcblx0XHRcdC8vIENvbnZlcnQgbGFiZWwgdG8gc3RyaW5nIGZvciBzZWFyY2ggYmFzZWQgb24gYWN0aXZlIGxhbmd1YWdlXHJcblx0XHRcdGNvbnN0IGxhYmVsVGV4dCA9XHJcblx0XHRcdFx0dHlwZW9mIG5vZGUubGFiZWwgPT09ICdzdHJpbmcnID9cclxuXHRcdFx0XHRcdG5vZGUubGFiZWxcclxuXHRcdFx0XHQ6XHQobm9kZS5sYWJlbCBhcyBhbnkpPy5bY3VycmVudExhbmddIHx8IChub2RlLmxhYmVsIGFzIGFueSk/LnRyIHx8IChub2RlLmxhYmVsIGFzIGFueSk/LmVuIHx8ICcnO1xyXG5cclxuXHRcdFx0Y29uc3QgbWF0Y2hlcyA9IGxhYmVsVGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pO1xyXG5cdFx0XHRsZXQgZmlsdGVyZWRDaGlsZHJlbjogTWVudU5vZGVbXSA9IFtdO1xyXG5cclxuXHRcdFx0aWYgKG5vZGUuY2hpbGRyZW4pIHtcclxuXHRcdFx0XHRmaWx0ZXJlZENoaWxkcmVuID0gdGhpcy5maWx0ZXJOb2Rlcyhub2RlLmNoaWxkcmVuLCBzZWFyY2hUZXJtKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKG1hdGNoZXMgfHwgZmlsdGVyZWRDaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0ZmlsdGVyZWQucHVzaCh7XHJcblx0XHRcdFx0XHQuLi5ub2RlLFxyXG5cdFx0XHRcdFx0Y2hpbGRyZW46IGZpbHRlcmVkQ2hpbGRyZW4ubGVuZ3RoID4gMCA/IGZpbHRlcmVkQ2hpbGRyZW4gOiBub2RlLmNoaWxkcmVuLFxyXG5cdFx0XHRcdFx0ZXhwYW5kZWQ6IGZpbHRlcmVkQ2hpbGRyZW4ubGVuZ3RoID4gMFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZpbHRlcmVkO1xyXG5cdH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInN0YXRpYy1zaWRlYmFyXCI+XHJcblx0PGRpdiBjbGFzcz1cInN0YXRpYy1zaWRlYmFyLWhlYWRlclwiPlxyXG5cdFx0PGRpdiBjbGFzcz1cImhlYWRlci1sb2dvXCI+XHJcblx0XHRcdDxpbWcgW3NyY109XCJmaWxlUGF0aCgpXCIgYWx0PVwiTG9nb1wiIGNsYXNzPVwibG9nby1pbWFnZVwiIC8+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHJcblx0PGRpdiBjbGFzcz1cInN0YXRpYy1zaWRlYmFyLWNvbnRlbnRcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJteC00IG10LTJcIj5cclxuXHRcdFx0PGFyaWwtdGV4dFxyXG5cdFx0XHRcdHBsYWNlaG9sZGVyPScuLi4nXHJcblx0XHRcdFx0WyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcclxuXHRcdFx0XHQobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgpXCJcclxuXHRcdFx0XHRpY29uPVwiU0VBUkNIXCI+XHJcblx0XHRcdDwvYXJpbC10ZXh0PlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8cC1zY3JvbGxQYW5lbCBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICdjYWxjKDEwMHZoIC0gMTMwcHgpJyB9XCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ0cmVlLWNvbnRhaW5lclwiPlxyXG5cdFx0XHRcdEBmb3IgKG5vZGUgb2YgZmlsdGVyZWROb2RlcygpOyB0cmFjayB0cmFja0J5S2V5KCRpbmRleCwgbm9kZSkpIHtcclxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmVlTm9kZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSwgbGV2ZWw6IDAgfVwiPjwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L3Atc2Nyb2xsUGFuZWw+XHJcblx0PC9kaXY+XHJcblxyXG5cdDwhLS0gUmVjdXJzaXZlIFRyZWUgTm9kZSBUZW1wbGF0ZSAtLT5cclxuXHQ8bmctdGVtcGxhdGUgI3RyZWVOb2RlVGVtcGxhdGUgbGV0LW5vZGUgbGV0LWxldmVsPVwibGV2ZWxcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJ0cmVlLW5vZGVcIiBbc3R5bGUubWFyZ2luLWxlZnQucHhdPVwibGV2ZWwgKiAxMFwiPlxyXG5cdFx0XHRAaWYgKG5vZGUucm91dGVyTGluaykge1xyXG5cdFx0XHRcdDxhXHJcblx0XHRcdFx0XHRbcm91dGVyTGlua109XCJub2RlLnJvdXRlckxpbmtcIlxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJub2RlLWl0ZW1cIlxyXG5cdFx0XHRcdFx0W2NsYXNzLmhhcy1jaGlsZHJlbl09XCJub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMFwiXHJcblx0XHRcdFx0XHRbY2xhc3MuaXMtcGFnZV09XCJub2RlLnJvdXRlckxpbmtcIlxyXG5cdFx0XHRcdFx0W2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZVJvdXRlRm9yTm9kZShub2RlKVwiXHJcblx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKG5vZGUubGFiZWwsIGFjdGl2ZUxhbmcoKSwgbGV2ZWwpID8gZ2V0TG9jYWxUZXh0KG5vZGUubGFiZWwpIDogJydcIlxyXG5cdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxyXG5cdFx0XHRcdFx0KGNsaWNrKT1cIm9uTWVudUl0ZW1DbGljaygpXCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibm9kZS1jb250ZW50XCI+XHJcblx0XHRcdFx0XHRcdEBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidG9nZ2xlLWJ0blwiXHJcblx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGVOb2RlKG5vZGUpXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cInBpXCIgW2NsYXNzLnBpLWNoZXZyb24tcmlnaHRdPVwiIW5vZGUuZXhwYW5kZWRcIiBbY2xhc3MucGktY2hldnJvbi1kb3duXT1cIm5vZGUuZXhwYW5kZWRcIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdEBpZiAobm9kZS5pY29uKSB7XHJcblx0XHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJub2RlLWljb25cIiBbY2xhc3NdPVwibm9kZS5pY29uXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwibm9kZS1sYWJlbFwiPnt7IGdldExvY2FsVGV4dChub2RlLmxhYmVsKSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvYT5cclxuXHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJub2RlLWl0ZW1cIlxyXG5cdFx0XHRcdFx0W2NsYXNzLmhhcy1jaGlsZHJlbl09XCJub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMFwiXHJcblx0XHRcdFx0XHRbY2xhc3MuaXMtcGFnZV09XCJub2RlLnJvdXRlckxpbmtcIlxyXG5cdFx0XHRcdFx0W2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZVJvdXRlRm9yTm9kZShub2RlKVwiXHJcblx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKG5vZGUubGFiZWwsIGFjdGl2ZUxhbmcoKSwgbGV2ZWwpID8gZ2V0TG9jYWxUZXh0KG5vZGUubGFiZWwpIDogJydcIlxyXG5cdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxyXG5cdFx0XHRcdFx0KGNsaWNrKT1cInRvZ2dsZU5vZGUobm9kZSlcIj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJub2RlLWNvbnRlbnRcIj5cclxuXHRcdFx0XHRcdFx0QGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0b2dnbGUtYnRuXCJcclxuXHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRvZ2dsZU5vZGUobm9kZSlcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxpIGNsYXNzPVwicGlcIiBbY2xhc3MucGktY2hldnJvbi1yaWdodF09XCIhbm9kZS5leHBhbmRlZFwiIFtjbGFzcy5waS1jaGV2cm9uLWRvd25dPVwibm9kZS5leHBhbmRlZFwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0QGlmIChub2RlLmljb24pIHtcclxuXHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cIm5vZGUtaWNvblwiIFtjbGFzc109XCJub2RlLmljb25cIj48L2k+XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJub2RlLWxhYmVsXCI+e3sgZ2V0TG9jYWxUZXh0KG5vZGUubGFiZWwpIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdDwhLS0gUmVjdXJzaXZlIENoaWxkcmVuIC0tPlxyXG5cdFx0XHRAaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5leHBhbmRlZCkge1xyXG5cdFx0XHRcdEBmb3IgKGNoaWxkIG9mIG5vZGUuY2hpbGRyZW47IHRyYWNrIHRyYWNrQnlLZXkoJGluZGV4LCBjaGlsZCkpIHtcclxuXHRcdFx0XHRcdDxuZy1jb250YWluZXJcclxuXHRcdFx0XHRcdFx0Km5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmVlTm9kZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY2hpbGQsIGxldmVsOiBsZXZlbCArIDEgfVwiPjwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0PC9kaXY+XHJcblx0PC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+ICJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLXNpZGViYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL3N0YXRpYy1zaWRlYmFyL3N0YXRpYy1zaWRlYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdGhlbWUvbGF5b3V0L2FwcC9zdGF0aWMtc2lkZWJhci9zdGF0aWMtc2lkZWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLG1CQUFtQixDQUFDO0FBQ3RFLE9BQU8sRUFBZ0IsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxJQUFJLEVBQWtCLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQXNCcEQsTUFBTSxPQUFPLHNCQUFzQjtJQVds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QUFVLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUMsZUFBZSxDQUFDLGFBRzFHLENBQUMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUm91dGVyLCBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBTY3JvbGxQYW5lbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc2Nyb2xscGFuZWwnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbG9jb01vZHVsZSwgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0BuZ25lYXQvdHJhbnNsb2NvJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEFwcHMsIFBsdWdpbk1lbnVJdGVtIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJ2FyaWwvdWkvdGV4dCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUpzb25QaXBlIH0gZnJvbSAnYXJpbC91dGlsL3BpcGVzJztcclxuXHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FwcC5sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAubWVudS5zZXJ2aWNlJztcclxuXHJcbmludGVyZmFjZSBNZW51Tm9kZSB7XHJcblx0a2V5OiBzdHJpbmc7XHJcblx0bGFiZWw6IGFueTtcclxuXHRpY29uPzogc3RyaW5nO1xyXG5cdHJvdXRlckxpbms/OiBzdHJpbmc7XHJcblx0Y2hpbGRyZW4/OiBNZW51Tm9kZVtdO1xyXG5cdGV4cGFuZGVkOiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHNlbGVjdG9yOiAnYXBwLXN0YXRpYy1zaWRlYmFyJyxcclxuXHRpbXBvcnRzOiBbUm91dGVyTGluaywgTmdUZW1wbGF0ZU91dGxldCwgU2Nyb2xsUGFuZWxNb2R1bGUsIFRvb2x0aXBNb2R1bGUsIEZvcm1zTW9kdWxlLCBUZXh0Q29tcG9uZW50LFRyYW5zbG9jb01vZHVsZV0sXHJcblx0dGVtcGxhdGVVcmw6ICcuL3N0YXRpYy1zaWRlYmFyLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vc3RhdGljLXNpZGViYXIuY29tcG9uZW50LnNjc3MnLFxyXG5cdHByb3ZpZGVyczogW1RyYW5zbGF0ZUpzb25QaXBlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RhdGljU2lkZWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHRhY3RpdmVMYW5nID0gdG9TaWduYWwodGhpcy50cmFuc2xvY29TZXJ2aWNlLmxhbmdDaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6ICd0cicgfSk7XHJcblx0ZmlsZVBhdGggPSBzaWduYWw8c3RyaW5nPignJyk7XHJcblx0bWVudU5vZGVzID0gc2lnbmFsPE1lbnVOb2RlW10+KFtdKTtcclxuXHRmaWx0ZXJlZE5vZGVzID0gc2lnbmFsPE1lbnVOb2RlW10+KFtdKTtcclxuXHRzZWFyY2hUZXJtID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG5cclxuXHRwcml2YXRlIHJvdXRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdHByaXZhdGUgcmVhZG9ubHkgTUFYX0xFTkdUSCA9IHsgbGV2ZWwwOiAyNSwgbGV2ZWwxOiAyMCwgbGV2ZWwyOiAxNiwgbGV2ZWwzOiAxMyB9O1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgbWVudVNlcnZpY2U6IEFwcE1lbnVTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuXHRcdHByaXZhdGUgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuXHRcdHByaXZhdGUgdHJhbnNsYXRlSnNvblBpcGU6IFRyYW5zbGF0ZUpzb25QaXBlLFxyXG5cdFx0cHJpdmF0ZSB0cmFuc2xvY29TZXJ2aWNlOiBUcmFuc2xvY29TZXJ2aWNlXHJcblx0KSB7XHJcblx0XHR0aGlzLmluaXRpYWxpemVMb2dvUGF0aCgpO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHR0aGlzLmJ1aWxkTWVudVRyZWUoKTtcclxuXHRcdHRoaXMucm91dGVyU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzXHJcblx0XHRcdC5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXHJcblx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5idWlsZE1lbnVUcmVlKCkpO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLnJvdXRlclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaW5pdGlhbGl6ZUxvZ29QYXRoKCkge1xyXG5cdFx0aWYgKCg8YW55Pmdsb2JhbFRoaXMpLmFjdGl2ZUhvc3QpIHtcclxuXHRcdFx0c3dpdGNoICgoPGFueT5nbG9iYWxUaGlzKS5hY3RpdmVIb3N0KSB7XHJcblx0XHRcdFx0Y2FzZSBBcHBzLllFQVA6XHJcblx0XHRcdFx0XHR0aGlzLmZpbGVQYXRoLnVwZGF0ZSgoKSA9PiAnYXNzZXRzL2ltYWdlcy95ZWFwLWxvZ28tZGFyay5wbmcnKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgQXBwcy5USE9SOlxyXG5cdFx0XHRcdFx0dGhpcy5maWxlUGF0aC51cGRhdGUoKCkgPT4gJ2Fzc2V0cy9pbWFnZXMvdGhvci1sb2dvLWRhcmsucG5nJyk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIEFwcHMuTEVOQTpcclxuXHRcdFx0XHRcdHRoaXMuZmlsZVBhdGgudXBkYXRlKCgpID0+ICdhc3NldHMvaW1hZ2VzL2xlbmEtbG9nby1kYXJrLnBuZycpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdHRoaXMuZmlsZVBhdGgudXBkYXRlKCgpID0+ICdhc3NldHMvaW1hZ2VzL3llYXAtbG9nby1kYXJrLnBuZycpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRzd2l0Y2ggKCg8YW55Pmdsb2JhbFRoaXMpLmFjdGl2ZU1GKSB7XHJcblx0XHRcdFx0Y2FzZSBBcHBzLkhFUzpcclxuXHRcdFx0XHRjYXNlIEFwcHMuQ1RTOlxyXG5cdFx0XHRcdGNhc2UgQXBwcy5TSVM6XHJcblx0XHRcdFx0XHR0aGlzLmZpbGVQYXRoLnVwZGF0ZSgoKSA9PiAnYXNzZXRzL2ltYWdlcy9sZW5hLWxvZ28tZGFyay5wbmcnKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgQXBwcy5DUk06XHJcblx0XHRcdFx0Y2FzZSBBcHBzLkJJTExJTkc6XHJcblx0XHRcdFx0Y2FzZSBBcHBzLlBBWU1FTlQ6XHJcblx0XHRcdFx0Y2FzZSBBcHBzLldETTpcclxuXHRcdFx0XHRjYXNlIEFwcHMuTU5HOlxyXG5cdFx0XHRcdFx0dGhpcy5maWxlUGF0aC51cGRhdGUoKCkgPT4gJ2Fzc2V0cy9pbWFnZXMvdGhvci1sb2dvLWRhcmsucG5nJyk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIEFwcHMuTVc6XHJcblx0XHRcdFx0XHR0aGlzLmZpbGVQYXRoLnVwZGF0ZSgoKSA9PiAnYXNzZXRzL2ltYWdlcy95ZWFwLWxvZ28tZGFyay5wbmcnKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHR0aGlzLmZpbGVQYXRoLnVwZGF0ZSgoKSA9PiAnYXNzZXRzL2ltYWdlcy95ZWFwLWxvZ28tZGFyay5wbmcnKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNUZXh0VHJ1bmNhdGVkKGxhYmVsOiBhbnksIGxhbmc6IHN0cmluZyB8IG51bGwsIGxldmVsOiBudW1iZXIgPSAwKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWxhYmVsIHx8ICFsYW5nIHx8ICFsYWJlbFtsYW5nXSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0Y29uc3QgdGV4dCA9IGxhYmVsW2xhbmddO1xyXG5cdFx0Y29uc3QgbGVuID0gdGV4dC5sZW5ndGg7XHJcblx0XHRjb25zdCBsaW1pdHMgPSBbdGhpcy5NQVhfTEVOR1RILmxldmVsMCwgdGhpcy5NQVhfTEVOR1RILmxldmVsMSwgdGhpcy5NQVhfTEVOR1RILmxldmVsMiwgdGhpcy5NQVhfTEVOR1RILmxldmVsM107XHJcblx0XHRyZXR1cm4gbGVuID4gbGltaXRzW01hdGgubWluKGxldmVsLCAzKV07XHJcblx0fVxyXG5cclxuXHRpc01vYmlsZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2UuaXNNb2JpbGUoKTtcclxuXHR9XHJcblxyXG5cdGJ1aWxkTWVudVRyZWUoKSB7XHJcblx0XHRjb25zdCBtZW51SXRlbXMgPSB0aGlzLmdldE1lbnVJdGVtcygpO1xyXG5cdFx0Y29uc3Qgbm9kZXMgPSB0aGlzLmNvbnZlcnRUb01lbnVOb2RlcyhtZW51SXRlbXMpO1xyXG5cdFx0dGhpcy5tZW51Tm9kZXMuc2V0KG5vZGVzKTtcclxuXHRcdHRoaXMuZmlsdGVyZWROb2Rlcy5zZXQoWy4uLm5vZGVzXSk7XHJcblx0fVxyXG5cclxuXHRjb252ZXJ0VG9NZW51Tm9kZXMoaXRlbXM6IFBsdWdpbk1lbnVJdGVtW10sIHBhcmVudEtleSA9ICcnKTogTWVudU5vZGVbXSB7XHJcblx0XHRyZXR1cm4gaXRlbXNcclxuXHRcdFx0LmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uc2VwYXJhdG9yKVxyXG5cdFx0XHQubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGtleSA9IHBhcmVudEtleSA/IGAke3BhcmVudEtleX0tJHtpbmRleH1gIDogYCR7aW5kZXh9YDtcclxuXHRcdFx0XHRjb25zdCBub2RlOiBNZW51Tm9kZSA9IHtcclxuXHRcdFx0XHRcdGtleSxcclxuXHRcdFx0XHRcdGxhYmVsOiBpdGVtLmxhYmVsLFxyXG5cdFx0XHRcdFx0aWNvbjogaXRlbS5pY29uLFxyXG5cdFx0XHRcdFx0cm91dGVyTGluazogaXRlbS5yb3V0ZXJMaW5rLFxyXG5cdFx0XHRcdFx0ZXhwYW5kZWQ6IHRydWVcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0bm9kZS5jaGlsZHJlbiA9IHRoaXMuY29udmVydFRvTWVudU5vZGVzKGl0ZW0uaXRlbXMsIGtleSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBub2RlO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGdldE1lbnVJdGVtcygpOiBQbHVnaW5NZW51SXRlbVtdIHtcclxuXHRcdGNvbnN0IGlzSG9zdE1vZGUgPSAoPGFueT5nbG9iYWxUaGlzKS5pc0hvc3RNb2RlO1xyXG5cdFx0Y29uc3QgaG9zdE1lbnVJdGVtcyA9ICg8YW55Pmdsb2JhbFRoaXMpLmhvc3RNZW51SXRlbXM7XHJcblx0XHRyZXR1cm4gaXNIb3N0TW9kZSA/IGhvc3RNZW51SXRlbXMoKSA6IHRoaXMubWVudVNlcnZpY2UubWVudUl0ZW1zKCk7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbFRleHQodGV4dDogYW55KTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0ZUpzb25QaXBlLnRyYW5zZm9ybSh0ZXh0KTtcclxuXHR9XHJcblxyXG5cdGlzQWN0aXZlUm91dGVGb3JOb2RlKG5vZGU6IE1lbnVOb2RlKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIW5vZGUucm91dGVyTGluaykgcmV0dXJuIGZhbHNlO1xyXG5cdFx0Y29uc3QgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDtcclxuXHRcdGNvbnN0IGhhc2hVcmwgPSBjdXJyZW50VXJsLmluZGV4T2YoJyMnKSA+IC0xID8gY3VycmVudFVybC5zcGxpdCgnIycpWzFdIDogY3VycmVudFVybDtcclxuXHRcdGlmIChoYXNoVXJsID09PSBub2RlLnJvdXRlckxpbmsgfHwgaGFzaFVybCA9PT0gJy8nICsgbm9kZS5yb3V0ZXJMaW5rKSByZXR1cm4gdHJ1ZTtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdG5vZGUucm91dGVyTGluayAhPT0gJy8nICYmXHJcblx0XHRcdChoYXNoVXJsLnN0YXJ0c1dpdGgobm9kZS5yb3V0ZXJMaW5rICsgJy8nKSB8fCBoYXNoVXJsLnN0YXJ0c1dpdGgoJy8nICsgbm9kZS5yb3V0ZXJMaW5rICsgJy8nKSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHR0b2dnbGVOb2RlKG5vZGU6IE1lbnVOb2RlKSB7XHJcblx0XHRub2RlLmV4cGFuZGVkID0gIW5vZGUuZXhwYW5kZWQ7XHJcblx0XHR0aGlzLmZpbHRlcmVkTm9kZXMuc2V0KFsuLi50aGlzLmZpbHRlcmVkTm9kZXMoKV0pO1xyXG5cdH1cclxuXHJcblx0dHJhY2tCeUtleShpbmRleDogbnVtYmVyLCBub2RlOiBNZW51Tm9kZSk6IGFueSB7XHJcblx0XHRyZXR1cm4gbm9kZS5rZXk7XHJcblx0fVxyXG5cclxuXHRvbk1lbnVJdGVtQ2xpY2soKSB7XHJcblx0XHRpZiAodGhpcy5pc01vYmlsZSgpKSB7XHJcblx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5jbG9zZU1vYmlsZU1lbnUoKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNlYXJjaFRlcm0uc2V0KCcnKTtcclxuXHRcdHRoaXMuZmlsdGVyZWROb2Rlcy5zZXQodGhpcy5tZW51Tm9kZXMoKSB8fCBbXSk7XHJcblx0fVxyXG5cclxuXHRvblNlYXJjaENoYW5nZSgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGN1cnJlbnRTZWFyY2hUZXJtID0gdGhpcy5zZWFyY2hUZXJtKCk/LnRvTG93ZXJDYXNlKCk/LnRyaW0oKTtcclxuXHRcdGlmICghY3VycmVudFNlYXJjaFRlcm0pIHtcclxuXHRcdFx0dGhpcy5maWx0ZXJlZE5vZGVzLnNldCh0aGlzLm1lbnVOb2RlcygpIHx8IFtdKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5maWx0ZXJlZE5vZGVzLnNldCh0aGlzLmZpbHRlck5vZGVzKHRoaXMubWVudU5vZGVzKCksIGN1cnJlbnRTZWFyY2hUZXJtKSk7XHJcblx0fVxyXG5cclxuXHRcdHByaXZhdGUgZmlsdGVyTm9kZXMobm9kZXM6IE1lbnVOb2RlW10sIHNlYXJjaFRlcm06IHN0cmluZyk6IE1lbnVOb2RlW10ge1xyXG5cdFx0Y29uc3QgZmlsdGVyZWQ6IE1lbnVOb2RlW10gPSBbXTtcclxuXHRcdGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy50cmFuc2xvY29TZXJ2aWNlLmdldEFjdGl2ZUxhbmcoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuXHRcdFx0Ly8gQ29udmVydCBsYWJlbCB0byBzdHJpbmcgZm9yIHNlYXJjaCBiYXNlZCBvbiBhY3RpdmUgbGFuZ3VhZ2VcclxuXHRcdFx0Y29uc3QgbGFiZWxUZXh0ID1cclxuXHRcdFx0XHR0eXBlb2Ygbm9kZS5sYWJlbCA9PT0gJ3N0cmluZycgP1xyXG5cdFx0XHRcdFx0bm9kZS5sYWJlbFxyXG5cdFx0XHRcdDpcdChub2RlLmxhYmVsIGFzIGFueSk/LltjdXJyZW50TGFuZ10gfHwgKG5vZGUubGFiZWwgYXMgYW55KT8udHIgfHwgKG5vZGUubGFiZWwgYXMgYW55KT8uZW4gfHwgJyc7XHJcblxyXG5cdFx0XHRjb25zdCBtYXRjaGVzID0gbGFiZWxUZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybSk7XHJcblx0XHRcdGxldCBmaWx0ZXJlZENoaWxkcmVuOiBNZW51Tm9kZVtdID0gW107XHJcblxyXG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbikge1xyXG5cdFx0XHRcdGZpbHRlcmVkQ2hpbGRyZW4gPSB0aGlzLmZpbHRlck5vZGVzKG5vZGUuY2hpbGRyZW4sIHNlYXJjaFRlcm0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAobWF0Y2hlcyB8fCBmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRmaWx0ZXJlZC5wdXNoKHtcclxuXHRcdFx0XHRcdC4uLm5vZGUsXHJcblx0XHRcdFx0XHRjaGlsZHJlbjogZmlsdGVyZWRDaGlsZHJlbi5sZW5ndGggPiAwID8gZmlsdGVyZWRDaGlsZHJlbiA6IG5vZGUuY2hpbGRyZW4sXHJcblx0XHRcdFx0XHRleHBhbmRlZDogZmlsdGVyZWRDaGlsZHJlbi5sZW5ndGggPiAwXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmlsdGVyZWQ7XHJcblx0fVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic3RhdGljLXNpZGViYXJcIj5cclxuXHQ8ZGl2IGNsYXNzPVwic3RhdGljLXNpZGViYXItaGVhZGVyXCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwiaGVhZGVyLWxvZ29cIj5cclxuXHRcdFx0PGltZyBbc3JjXT1cImZpbGVQYXRoKClcIiBhbHQ9XCJMb2dvXCIgY2xhc3M9XCJsb2dvLWltYWdlXCIgLz5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG5cclxuXHQ8ZGl2IGNsYXNzPVwic3RhdGljLXNpZGViYXItY29udGVudFwiPlxyXG5cdFx0PGRpdiBjbGFzcz1cIm14LTQgbXQtMlwiICp0cmFuc2xvY289XCJsZXQgdDsgcmVhZDogJydcIj5cclxuXHRcdFx0PGFyaWwtdGV4dFxyXG5cdFx0XHRcdFtwbGFjZWhvbGRlcl09XCJ0KCdzZWFyY2gnKVwiXHJcblx0XHRcdFx0WyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcclxuXHRcdFx0XHQobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgpXCJcclxuXHRcdFx0XHRpY29uPVwiU0VBUkNIXCI+XHJcblx0XHRcdDwvYXJpbC10ZXh0PlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8cC1zY3JvbGxQYW5lbCBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICdjYWxjKDEwMHZoIC0gMTMwcHgpJyB9XCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ0cmVlLWNvbnRhaW5lclwiPlxyXG5cdFx0XHRcdEBmb3IgKG5vZGUgb2YgZmlsdGVyZWROb2RlcygpOyB0cmFjayB0cmFja0J5S2V5KCRpbmRleCwgbm9kZSkpIHtcclxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmVlTm9kZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSwgbGV2ZWw6IDAgfVwiPjwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L3Atc2Nyb2xsUGFuZWw+XHJcblx0PC9kaXY+XHJcblxyXG5cdDwhLS0gUmVjdXJzaXZlIFRyZWUgTm9kZSBUZW1wbGF0ZSAtLT5cclxuXHQ8bmctdGVtcGxhdGUgI3RyZWVOb2RlVGVtcGxhdGUgbGV0LW5vZGUgbGV0LWxldmVsPVwibGV2ZWxcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJ0cmVlLW5vZGVcIiBbc3R5bGUubWFyZ2luLWxlZnQucHhdPVwibGV2ZWwgKiAxMFwiPlxyXG5cdFx0XHRAaWYgKG5vZGUucm91dGVyTGluaykge1xyXG5cdFx0XHRcdDxhXHJcblx0XHRcdFx0XHRbcm91dGVyTGlua109XCJub2RlLnJvdXRlckxpbmtcIlxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJub2RlLWl0ZW1cIlxyXG5cdFx0XHRcdFx0W2NsYXNzLmhhcy1jaGlsZHJlbl09XCJub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMFwiXHJcblx0XHRcdFx0XHRbY2xhc3MuaXMtcGFnZV09XCJub2RlLnJvdXRlckxpbmtcIlxyXG5cdFx0XHRcdFx0W2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZVJvdXRlRm9yTm9kZShub2RlKVwiXHJcblx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKG5vZGUubGFiZWwsIGFjdGl2ZUxhbmcoKSwgbGV2ZWwpID8gZ2V0TG9jYWxUZXh0KG5vZGUubGFiZWwpIDogJydcIlxyXG5cdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxyXG5cdFx0XHRcdFx0KGNsaWNrKT1cIm9uTWVudUl0ZW1DbGljaygpXCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibm9kZS1jb250ZW50XCI+XHJcblx0XHRcdFx0XHRcdEBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidG9nZ2xlLWJ0blwiXHJcblx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGVOb2RlKG5vZGUpXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cInBpXCIgW2NsYXNzLnBpLWNoZXZyb24tcmlnaHRdPVwiIW5vZGUuZXhwYW5kZWRcIiBbY2xhc3MucGktY2hldnJvbi1kb3duXT1cIm5vZGUuZXhwYW5kZWRcIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdEBpZiAobm9kZS5pY29uKSB7XHJcblx0XHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJub2RlLWljb25cIiBbY2xhc3NdPVwibm9kZS5pY29uXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwibm9kZS1sYWJlbFwiPnt7IGdldExvY2FsVGV4dChub2RlLmxhYmVsKSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvYT5cclxuXHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJub2RlLWl0ZW1cIlxyXG5cdFx0XHRcdFx0W2NsYXNzLmhhcy1jaGlsZHJlbl09XCJub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMFwiXHJcblx0XHRcdFx0XHRbY2xhc3MuaXMtcGFnZV09XCJub2RlLnJvdXRlckxpbmtcIlxyXG5cdFx0XHRcdFx0W2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZVJvdXRlRm9yTm9kZShub2RlKVwiXHJcblx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKG5vZGUubGFiZWwsIGFjdGl2ZUxhbmcoKSwgbGV2ZWwpID8gZ2V0TG9jYWxUZXh0KG5vZGUubGFiZWwpIDogJydcIlxyXG5cdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxyXG5cdFx0XHRcdFx0KGNsaWNrKT1cInRvZ2dsZU5vZGUobm9kZSlcIj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJub2RlLWNvbnRlbnRcIj5cclxuXHRcdFx0XHRcdFx0QGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0b2dnbGUtYnRuXCJcclxuXHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRvZ2dsZU5vZGUobm9kZSlcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxpIGNsYXNzPVwicGlcIiBbY2xhc3MucGktY2hldnJvbi1yaWdodF09XCIhbm9kZS5leHBhbmRlZFwiIFtjbGFzcy5waS1jaGV2cm9uLWRvd25dPVwibm9kZS5leHBhbmRlZFwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0QGlmIChub2RlLmljb24pIHtcclxuXHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cIm5vZGUtaWNvblwiIFtjbGFzc109XCJub2RlLmljb25cIj48L2k+XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJub2RlLWxhYmVsXCI+e3sgZ2V0TG9jYWxUZXh0KG5vZGUubGFiZWwpIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdDwhLS0gUmVjdXJzaXZlIENoaWxkcmVuIC0tPlxyXG5cdFx0XHRAaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5leHBhbmRlZCkge1xyXG5cdFx0XHRcdEBmb3IgKGNoaWxkIG9mIG5vZGUuY2hpbGRyZW47IHRyYWNrIHRyYWNrQnlLZXkoJGluZGV4LCBjaGlsZCkpIHtcclxuXHRcdFx0XHRcdDxuZy1jb250YWluZXJcclxuXHRcdFx0XHRcdFx0Km5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmVlTm9kZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY2hpbGQsIGxldmVsOiBsZXZlbCArIDEgfVwiPjwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0PC9kaXY+XHJcblx0PC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+ICJdfQ==
@@ -2258,11 +2258,11 @@ class StaticSidebarComponent {
2258
2258
  return filtered;
2259
2259
  }
2260
2260
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: StaticSidebarComponent, deps: [{ token: AppMenuService }, { token: i1$1.Router }, { token: LayoutService }, { token: i1$3.TranslateJsonPipe }, { token: i5.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
2261
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: StaticSidebarComponent, isStandalone: true, selector: "app-static-sidebar", providers: [TranslateJsonPipe], ngImport: i0, template: "<div class=\"static-sidebar\">\r\n\t<div class=\"static-sidebar-header\">\r\n\t\t<div class=\"header-logo\">\r\n\t\t\t<img [src]=\"filePath()\" alt=\"Logo\" class=\"logo-image\" />\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t<div class=\"mx-4 mt-2\">\r\n\t\t\t<aril-text\r\n\t\t\t\tplaceholder='...'\r\n\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\ticon=\"SEARCH\">\r\n\t\t\t</aril-text>\r\n\t\t</div>\r\n\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</p-scrollPanel>\r\n\t</div>\r\n\r\n\t<!-- Recursive Tree Node Template -->\r\n\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t<div class=\"tree-node\" [style.margin-left.px]=\"level * 10\">\r\n\t\t\t@if (node.routerLink) {\r\n\t\t\t\t<a\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"onMenuItemClick()\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</a>\r\n\t\t\t} @else {\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"toggleNode(node)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Recursive Children -->\r\n\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".static-sidebar{width:250px;height:100vh;background:#fff;border-right:1px solid var(--surface-border);display:flex;flex-direction:column;position:fixed;left:0;top:0;z-index:999;overflow-y:auto}.static-sidebar .static-sidebar-header{min-height:70px;background:#fff;color:var(--text-color);display:flex;align-items:center;justify-content:center;box-sizing:border-box;border-bottom:1px solid var(--surface-border)}.static-sidebar .static-sidebar-header .header-logo{display:flex;align-items:center;gap:.75rem}.static-sidebar .static-sidebar-header .header-logo .logo-image{height:5rem;width:auto;transform:scale(.8);transform-origin:left center;object-fit:contain}.static-sidebar .static-sidebar-header .header-logo .logo-text{font-size:1.5rem;font-weight:700;color:var(--text-color);letter-spacing:.5px}.static-sidebar .static-sidebar-content{flex:1;background:#fff;overflow:hidden}.static-sidebar .tree-container{padding:.5rem 0}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:.5rem 1rem;border-radius:6px;margin:.1rem .5rem;cursor:pointer;transition:all .2s ease;border:1px solid transparent;text-decoration:none;color:var(--text-color)}.static-sidebar .tree-node .node-item:hover{background:#00000008;border-color:var(--surface-border)}.static-sidebar .tree-node .node-item.is-page:hover{background:#1a365d0a;border-color:var(--primary-200)}.static-sidebar .tree-node .node-item.has-children{font-weight:600}.static-sidebar .tree-node .node-item.active{background:var(--primary-color)!important;color:#fff!important;border-color:var(--primary-color);font-weight:600;box-shadow:0 2px 5px #0000001a}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon{color:#fff!important}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;border-radius:4px;color:var(--text-color-secondary);cursor:pointer;transition:all .2s ease;flex-shrink:0}.static-sidebar .tree-node .toggle-btn:hover{background:#00000008;color:var(--primary-color)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem}.static-sidebar .tree-node .node-icon{color:var(--primary-color);font-size:.9rem;flex-shrink:0}.static-sidebar .tree-node .node-label{flex:1;font-size:.9rem;color:var(--text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ScrollPanelModule }, { kind: "component", type: i7$1.ScrollPanel, selector: "p-scrollPanel", inputs: ["style", "styleClass", "step"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TextComponent, selector: "aril-text[ngModel], aril-text[formControl], aril-text[formControlName]", inputs: ["placeholder", "tabindex", "icon", "iconPos", "size"] }] }); }
2261
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: StaticSidebarComponent, isStandalone: true, selector: "app-static-sidebar", providers: [TranslateJsonPipe], ngImport: i0, template: "<div class=\"static-sidebar\">\r\n\t<div class=\"static-sidebar-header\">\r\n\t\t<div class=\"header-logo\">\r\n\t\t\t<img [src]=\"filePath()\" alt=\"Logo\" class=\"logo-image\" />\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t<div class=\"mx-4 mt-2\" *transloco=\"let t; read: ''\">\r\n\t\t\t<aril-text\r\n\t\t\t\t[placeholder]=\"t('search')\"\r\n\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\ticon=\"SEARCH\">\r\n\t\t\t</aril-text>\r\n\t\t</div>\r\n\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</p-scrollPanel>\r\n\t</div>\r\n\r\n\t<!-- Recursive Tree Node Template -->\r\n\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t<div class=\"tree-node\" [style.margin-left.px]=\"level * 10\">\r\n\t\t\t@if (node.routerLink) {\r\n\t\t\t\t<a\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"onMenuItemClick()\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</a>\r\n\t\t\t} @else {\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"toggleNode(node)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Recursive Children -->\r\n\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".static-sidebar{width:250px;height:100vh;background:#fff;border-right:1px solid var(--surface-border);display:flex;flex-direction:column;position:fixed;left:0;top:0;z-index:999;overflow-y:auto}.static-sidebar .static-sidebar-header{min-height:70px;background:#fff;color:var(--text-color);display:flex;align-items:center;justify-content:center;box-sizing:border-box;border-bottom:1px solid var(--surface-border)}.static-sidebar .static-sidebar-header .header-logo{display:flex;align-items:center;gap:.75rem}.static-sidebar .static-sidebar-header .header-logo .logo-image{height:5rem;width:auto;transform:scale(.8);transform-origin:left center;object-fit:contain}.static-sidebar .static-sidebar-header .header-logo .logo-text{font-size:1.5rem;font-weight:700;color:var(--text-color);letter-spacing:.5px}.static-sidebar .static-sidebar-content{flex:1;background:#fff;overflow:hidden}.static-sidebar .tree-container{padding:.5rem 0}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:.5rem 1rem;border-radius:6px;margin:.1rem .5rem;cursor:pointer;transition:all .2s ease;border:1px solid transparent;text-decoration:none;color:var(--text-color)}.static-sidebar .tree-node .node-item:hover{background:#00000008;border-color:var(--surface-border)}.static-sidebar .tree-node .node-item.is-page:hover{background:#1a365d0a;border-color:var(--primary-200)}.static-sidebar .tree-node .node-item.has-children{font-weight:600}.static-sidebar .tree-node .node-item.active{background:var(--primary-color)!important;color:#fff!important;border-color:var(--primary-color);font-weight:600;box-shadow:0 2px 5px #0000001a}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon{color:#fff!important}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;border-radius:4px;color:var(--text-color-secondary);cursor:pointer;transition:all .2s ease;flex-shrink:0}.static-sidebar .tree-node .toggle-btn:hover{background:#00000008;color:var(--primary-color)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem}.static-sidebar .tree-node .node-icon{color:var(--primary-color);font-size:.9rem;flex-shrink:0}.static-sidebar .tree-node .node-label{flex:1;font-size:.9rem;color:var(--text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ScrollPanelModule }, { kind: "component", type: i7$1.ScrollPanel, selector: "p-scrollPanel", inputs: ["style", "styleClass", "step"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TextComponent, selector: "aril-text[ngModel], aril-text[formControl], aril-text[formControlName]", inputs: ["placeholder", "tabindex", "icon", "iconPos", "size"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }] }); }
2262
2262
  }
2263
2263
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: StaticSidebarComponent, decorators: [{
2264
2264
  type: Component,
2265
- args: [{ standalone: true, selector: 'app-static-sidebar', imports: [RouterLink, NgTemplateOutlet, ScrollPanelModule, TooltipModule, FormsModule, TextComponent], providers: [TranslateJsonPipe], template: "<div class=\"static-sidebar\">\r\n\t<div class=\"static-sidebar-header\">\r\n\t\t<div class=\"header-logo\">\r\n\t\t\t<img [src]=\"filePath()\" alt=\"Logo\" class=\"logo-image\" />\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t<div class=\"mx-4 mt-2\">\r\n\t\t\t<aril-text\r\n\t\t\t\tplaceholder='...'\r\n\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\ticon=\"SEARCH\">\r\n\t\t\t</aril-text>\r\n\t\t</div>\r\n\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</p-scrollPanel>\r\n\t</div>\r\n\r\n\t<!-- Recursive Tree Node Template -->\r\n\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t<div class=\"tree-node\" [style.margin-left.px]=\"level * 10\">\r\n\t\t\t@if (node.routerLink) {\r\n\t\t\t\t<a\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"onMenuItemClick()\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</a>\r\n\t\t\t} @else {\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"toggleNode(node)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Recursive Children -->\r\n\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".static-sidebar{width:250px;height:100vh;background:#fff;border-right:1px solid var(--surface-border);display:flex;flex-direction:column;position:fixed;left:0;top:0;z-index:999;overflow-y:auto}.static-sidebar .static-sidebar-header{min-height:70px;background:#fff;color:var(--text-color);display:flex;align-items:center;justify-content:center;box-sizing:border-box;border-bottom:1px solid var(--surface-border)}.static-sidebar .static-sidebar-header .header-logo{display:flex;align-items:center;gap:.75rem}.static-sidebar .static-sidebar-header .header-logo .logo-image{height:5rem;width:auto;transform:scale(.8);transform-origin:left center;object-fit:contain}.static-sidebar .static-sidebar-header .header-logo .logo-text{font-size:1.5rem;font-weight:700;color:var(--text-color);letter-spacing:.5px}.static-sidebar .static-sidebar-content{flex:1;background:#fff;overflow:hidden}.static-sidebar .tree-container{padding:.5rem 0}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:.5rem 1rem;border-radius:6px;margin:.1rem .5rem;cursor:pointer;transition:all .2s ease;border:1px solid transparent;text-decoration:none;color:var(--text-color)}.static-sidebar .tree-node .node-item:hover{background:#00000008;border-color:var(--surface-border)}.static-sidebar .tree-node .node-item.is-page:hover{background:#1a365d0a;border-color:var(--primary-200)}.static-sidebar .tree-node .node-item.has-children{font-weight:600}.static-sidebar .tree-node .node-item.active{background:var(--primary-color)!important;color:#fff!important;border-color:var(--primary-color);font-weight:600;box-shadow:0 2px 5px #0000001a}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon{color:#fff!important}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;border-radius:4px;color:var(--text-color-secondary);cursor:pointer;transition:all .2s ease;flex-shrink:0}.static-sidebar .tree-node .toggle-btn:hover{background:#00000008;color:var(--primary-color)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem}.static-sidebar .tree-node .node-icon{color:var(--primary-color);font-size:.9rem;flex-shrink:0}.static-sidebar .tree-node .node-label{flex:1;font-size:.9rem;color:var(--text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"] }]
2265
+ args: [{ standalone: true, selector: 'app-static-sidebar', imports: [RouterLink, NgTemplateOutlet, ScrollPanelModule, TooltipModule, FormsModule, TextComponent, TranslocoModule], providers: [TranslateJsonPipe], template: "<div class=\"static-sidebar\">\r\n\t<div class=\"static-sidebar-header\">\r\n\t\t<div class=\"header-logo\">\r\n\t\t\t<img [src]=\"filePath()\" alt=\"Logo\" class=\"logo-image\" />\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t<div class=\"mx-4 mt-2\" *transloco=\"let t; read: ''\">\r\n\t\t\t<aril-text\r\n\t\t\t\t[placeholder]=\"t('search')\"\r\n\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\ticon=\"SEARCH\">\r\n\t\t\t</aril-text>\r\n\t\t</div>\r\n\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</p-scrollPanel>\r\n\t</div>\r\n\r\n\t<!-- Recursive Tree Node Template -->\r\n\t<ng-template #treeNodeTemplate let-node let-level=\"level\">\r\n\t\t<div class=\"tree-node\" [style.margin-left.px]=\"level * 10\">\r\n\t\t\t@if (node.routerLink) {\r\n\t\t\t\t<a\r\n\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"onMenuItemClick()\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</a>\r\n\t\t\t} @else {\r\n\t\t\t\t<div\r\n\t\t\t\t\tclass=\"node-item\"\r\n\t\t\t\t\t[class.has-children]=\"node.children && node.children.length > 0\"\r\n\t\t\t\t\t[class.is-page]=\"node.routerLink\"\r\n\t\t\t\t\t[class.active]=\"isActiveRouteForNode(node)\"\r\n\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(node.label, activeLang(), level) ? getLocalText(node.label) : ''\"\r\n\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t(click)=\"toggleNode(node)\">\r\n\t\t\t\t\t<div class=\"node-content\">\r\n\t\t\t\t\t\t@if (node.children && node.children.length > 0) {\r\n\t\t\t\t\t\t\t<div class=\"toggle-btn\"\r\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation(); toggleNode(node)\">\r\n\t\t\t\t\t\t\t\t<i class=\"pi\" [class.pi-chevron-right]=\"!node.expanded\" [class.pi-chevron-down]=\"node.expanded\"></i>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t<i class=\"node-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t<span class=\"node-label\">{{ getLocalText(node.label) }}</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\r\n\t\t\t<!-- Recursive Children -->\r\n\t\t\t@if (node.children && node.expanded) {\r\n\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".static-sidebar{width:250px;height:100vh;background:#fff;border-right:1px solid var(--surface-border);display:flex;flex-direction:column;position:fixed;left:0;top:0;z-index:999;overflow-y:auto}.static-sidebar .static-sidebar-header{min-height:70px;background:#fff;color:var(--text-color);display:flex;align-items:center;justify-content:center;box-sizing:border-box;border-bottom:1px solid var(--surface-border)}.static-sidebar .static-sidebar-header .header-logo{display:flex;align-items:center;gap:.75rem}.static-sidebar .static-sidebar-header .header-logo .logo-image{height:5rem;width:auto;transform:scale(.8);transform-origin:left center;object-fit:contain}.static-sidebar .static-sidebar-header .header-logo .logo-text{font-size:1.5rem;font-weight:700;color:var(--text-color);letter-spacing:.5px}.static-sidebar .static-sidebar-content{flex:1;background:#fff;overflow:hidden}.static-sidebar .tree-container{padding:.5rem 0}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:.5rem 1rem;border-radius:6px;margin:.1rem .5rem;cursor:pointer;transition:all .2s ease;border:1px solid transparent;text-decoration:none;color:var(--text-color)}.static-sidebar .tree-node .node-item:hover{background:#00000008;border-color:var(--surface-border)}.static-sidebar .tree-node .node-item.is-page:hover{background:#1a365d0a;border-color:var(--primary-200)}.static-sidebar .tree-node .node-item.has-children{font-weight:600}.static-sidebar .tree-node .node-item.active{background:var(--primary-color)!important;color:#fff!important;border-color:var(--primary-color);font-weight:600;box-shadow:0 2px 5px #0000001a}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon{color:#fff!important}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:.5rem;width:100%;min-width:0}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;border-radius:4px;color:var(--text-color-secondary);cursor:pointer;transition:all .2s ease;flex-shrink:0}.static-sidebar .tree-node .toggle-btn:hover{background:#00000008;color:var(--primary-color)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem}.static-sidebar .tree-node .node-icon{color:var(--primary-color);font-size:.9rem;flex-shrink:0}.static-sidebar .tree-node .node-label{flex:1;font-size:.9rem;color:var(--text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .p-scrollpanel-bar-y{background:var(--primary-200);width:4px;border-radius:2px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:var(--primary-300)}\n"] }]
2266
2266
  }], ctorParameters: () => [{ type: AppMenuService }, { type: i1$1.Router }, { type: LayoutService }, { type: i1$3.TranslateJsonPipe }, { type: i5.TranslocoService }] });
2267
2267
 
2268
2268
  class AppLayoutComponent {