aril 1.1.70 → 1.1.72

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.
Files changed (40) hide show
  1. package/boot/config/api/src/interfaces.d.ts +1 -0
  2. package/boot/config/plugins/src/interfaces.d.ts +1 -0
  3. package/esm2022/boot/config/api/src/interfaces.mjs +2 -1
  4. package/esm2022/boot/config/plugins/src/interfaces.mjs +2 -1
  5. package/esm2022/theme/layout/app/static-sidebar/static-sidebar.component.mjs +3 -3
  6. package/esm2022/util/loaders/index.mjs +1 -2
  7. package/fesm2022/aril-boot-config-api.mjs +1 -0
  8. package/fesm2022/aril-boot-config-api.mjs.map +1 -1
  9. package/fesm2022/aril-boot-config-plugins.mjs +1 -0
  10. package/fesm2022/aril-boot-config-plugins.mjs.map +1 -1
  11. package/fesm2022/aril-theme-layout.mjs +2 -2
  12. package/fesm2022/aril-theme-layout.mjs.map +1 -1
  13. package/fesm2022/aril-util-loaders.mjs +1 -59
  14. package/fesm2022/aril-util-loaders.mjs.map +1 -1
  15. package/package.json +96 -102
  16. package/theme/layout/app/static-sidebar/static-sidebar.component.scss +5 -2
  17. package/util/loaders/index.d.ts +0 -1
  18. package/esm2022/util/init-event/aril-util-init-event.mjs +0 -5
  19. package/esm2022/util/init-event/index.mjs +0 -2
  20. package/esm2022/util/init-event/src/init-event.directive.mjs +0 -22
  21. package/esm2022/util/loaders/script/script.loader.service.mjs +0 -61
  22. package/fesm2022/aril-util-init-event.mjs +0 -29
  23. package/fesm2022/aril-util-init-event.mjs.map +0 -1
  24. package/theme/layout/app/menu/app.menu.component.html +0 -14
  25. package/theme/layout/app/menu/app.menu.component.ts +0 -350
  26. package/theme/layout/app/sidebar/app.sidebar.component.html +0 -24
  27. package/theme/layout/app/sidebar/app.sidebar.component.ts +0 -44
  28. package/theme/styles/theme/dark/blue/theme.scss +0 -14
  29. package/theme/styles/theme/dark/lena/theme.scss +0 -14
  30. package/theme/styles/theme/dark/orange/theme.scss +0 -14
  31. package/theme/styles/theme/dark/thor/theme.scss +0 -14
  32. package/theme/styles/theme/dark/yeap/theme.scss +0 -14
  33. package/theme/styles/theme/light/blue/theme.scss +0 -14
  34. package/theme/styles/theme/light/lena/theme.scss +0 -14
  35. package/theme/styles/theme/light/orange/theme.scss +0 -14
  36. package/theme/styles/theme/light/thor/theme.scss +0 -15
  37. package/theme/styles/theme/light/yeap/theme.scss +0 -14
  38. package/util/init-event/index.d.ts +0 -1
  39. package/util/init-event/src/init-event.directive.d.ts +0 -8
  40. package/util/loaders/script/script.loader.service.d.ts +0 -13
@@ -2460,11 +2460,11 @@ class StaticSidebarComponent {
2460
2460
  return filtered;
2461
2461
  }
2462
2462
  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 }); }
2463
- 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\" [class.collapsed]=\"isCollapsed\">\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t@if (!isCollapsed) {\r\n\t\t\t<div class=\"search-container\" *transloco=\"let t; read: ''\">\r\n\t\t\t\t<div class=\"search-wrapper\">\r\n\t\t\t\t\t<i class=\"pi pi-search search-icon\"></i>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tpInputText\r\n\t\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\t\t[placeholder]=\"t('search')\"\r\n\t\t\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\t\t\tclass=\"search-static-sidebar\" />\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t</p-scrollPanel>\r\n\t\t} @else {\r\n\t\t\t<!-- Collapsed mode - only icons -->\r\n\t\t\t<div class=\"collapsed-container\">\r\n\t\t\t\t@for (node of topLevelNodes; track trackByKey($index, node)) {\r\n\t\t\t\t\t@if (node.routerLink && (!node.children || node.children.length === 0)) {\r\n\t\t\t\t\t\t<a \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t<div \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t}\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\" [ngClass]=\"'level-' + level\">\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]=\"isChildNodeActive(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, level)\">\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]=\"isChildNodeActive(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, level)\">\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, level)\">\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<div class=\"children-container\" [attr.data-level]=\"level\">\r\n\t\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".search-container{padding:12px 8px;margin:0}.search-wrapper{position:relative;width:100%}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#64748b;font-size:14px;z-index:10;pointer-events:none;transition:color .2s ease}.search-static-sidebar{background:#1e293b!important;border:1px solid rgba(148,163,184,.1)!important;height:36px!important;font-size:13px!important;font-weight:400;color:#cbd5e1!important;padding:0 12px 0 36px!important;border-radius:4px!important;width:100%!important;box-sizing:border-box!important;transition:all .25s ease!important}.search-static-sidebar::placeholder{font-size:12px!important}.search-static-sidebar:hover{background:#0f172ab3!important;border-color:#94a3b826!important}.search-static-sidebar:focus{outline:none!important;border:1px solid rgba(15,23,42,.8)!important;background:#0f172acc!important}.search-wrapper:focus-within .search-icon{color:#cbd5e1}.static-sidebar{width:260px;height:100vh;background:#1e293b;border-right:1px solid #0f172a;display:flex;flex-direction:column;position:fixed;left:0;top:55px;z-index:999;overflow-y:auto;overflow-x:hidden;transition:width .3s ease;box-shadow:2px 0 5px #0000000d}.static-sidebar.collapsed{width:64px;box-shadow:none}.static-sidebar .static-sidebar-content{flex:1;background:transparent;overflow:hidden}.static-sidebar .tree-container{padding:5px 0;overflow-x:hidden}.static-sidebar .tree-node{margin-bottom:4px;position:relative}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:10px 12px;border-radius:4px;margin:0 5px;cursor:pointer;transition:all .25s ease;text-decoration:none;color:#cbd5e1!important;overflow:hidden;position:relative;white-space:nowrap}.static-sidebar .tree-node .node-item:before{content:\"\";position:absolute;width:0;height:100%;top:0;left:0;background-color:var(--primary-color);opacity:.08;transition:width .25s ease-in-out}.static-sidebar .tree-node .node-item:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover:before{width:100%}.static-sidebar .tree-node .node-item:hover .node-label{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover .node-icon{color:#e8e7e7!important;transform:translate(2px)}.static-sidebar .tree-node .node-item.is-page:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.is-page:hover:before{width:100%}.static-sidebar .tree-node .node-item.active{background-color:#495465!important;color:#e8e7e7!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.static-sidebar .tree-node .node-item.active:before{display:none}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon,.static-sidebar .tree-node .node-item.active .toggle-btn i{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.active:hover{background-color:var(--primary-color)}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:8px;width:100%;min-width:0;position:relative;z-index:2}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:3px;color:#cbd5e1;cursor:pointer;transition:all .25s ease;flex-shrink:0;z-index:3}.static-sidebar .tree-node .toggle-btn:hover{transform:scale(1.1)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem;transition:transform .2s ease}.static-sidebar .tree-node .node-icon{color:#cbd5e1;font-size:16px;flex-shrink:0;transition:transform .25s ease,color .25s ease;position:relative}.static-sidebar .tree-node .node-label{flex:1;font-size:13px;font-weight:500;color:#cbd5e1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .25s ease;position:relative}.static-sidebar .collapsed-container{padding:8px 0;display:flex;flex-direction:column;align-items:center;width:100%}.static-sidebar .collapsed-item{width:100%;display:flex;flex-direction:column;align-items:center;padding:12px 0;cursor:pointer;transition:all .25s ease;text-decoration:none;position:relative;overflow:hidden;margin-bottom:4px;color:#cbd5e1}.static-sidebar .collapsed-item:hover{color:#e8e7e7}.static-sidebar .collapsed-item:hover .collapsed-icon{transform:scale(1.15);color:#e8e7e7}.static-sidebar .collapsed-item:hover:after{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a;opacity:.7}.static-sidebar .collapsed-item.active{background-color:#495465!important}.static-sidebar .collapsed-item.active:before{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a}.static-sidebar .collapsed-item.active .collapsed-icon{color:#fff!important}.static-sidebar .collapsed-item .collapsed-icon{font-size:22px;color:#cbd5e1;transition:all .2s ease}.static-sidebar .children-container{position:relative}.static-sidebar .children-container:before{content:\"\";position:absolute;left:25px;top:0;bottom:0;width:1px;background-color:#4755694d;z-index:1}.static-sidebar .tree-node{position:relative}.static-sidebar .tree-node.level-0 .node-item{margin-right:20px;width:240px;max-width:240px}.static-sidebar .tree-node.level-0 .node-label{font-size:13px;font-weight:500;color:#cbd5e1}.static-sidebar .tree-node.level-0 .node-icon{font-size:16px}.static-sidebar .tree-node.level-1 .node-item{margin-left:36px;margin-right:20px;padding:8px 12px;width:204px;max-width:204px}.static-sidebar .tree-node.level-1 .node-label{font-size:12px;font-weight:400}.static-sidebar .tree-node.level-1 .node-icon{font-size:15px}.static-sidebar .tree-node.level-2 .node-item{margin-left:52px;margin-right:20px;width:188px;max-width:188px}.static-sidebar .tree-node.level-2 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-2 .node-icon{font-size:14px}.static-sidebar .tree-node.level-2.active .node-item{background-color:#495465!important}.static-sidebar .tree-node.level-2.active .node-item .node-label{color:#e8e7e7!important}.static-sidebar .tree-node.level-3 .node-item{margin-left:68px;margin-right:20px;padding:6px 12px;width:172px;max-width:172px}.static-sidebar .tree-node.level-3 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-3 .node-icon{font-size:13px}:host ::ng-deep .p-scrollpanel .p-scrollpanel-wrapper{border:none}:host ::ng-deep .p-scrollpanel .p-scrollpanel-content{padding-right:5px}:host ::ng-deep .p-scrollpanel-bar-y{background:#1e293b;width:4px;border-radius:4px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:#1e293b}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: 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: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }] }); }
2463
+ 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\" [class.collapsed]=\"isCollapsed\">\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t@if (!isCollapsed) {\r\n\t\t\t<div class=\"search-container\" *transloco=\"let t; read: ''\">\r\n\t\t\t\t<div class=\"search-wrapper\">\r\n\t\t\t\t\t<i class=\"pi pi-search search-icon\"></i>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tpInputText\r\n\t\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\t\t[placeholder]=\"t('search')\"\r\n\t\t\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\t\t\tclass=\"search-static-sidebar\" />\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t</p-scrollPanel>\r\n\t\t} @else {\r\n\t\t\t<!-- Collapsed mode - only icons -->\r\n\t\t\t<div class=\"collapsed-container\">\r\n\t\t\t\t@for (node of topLevelNodes; track trackByKey($index, node)) {\r\n\t\t\t\t\t@if (node.routerLink && (!node.children || node.children.length === 0)) {\r\n\t\t\t\t\t\t<a \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t<div \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t}\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\" [ngClass]=\"'level-' + level\">\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]=\"isChildNodeActive(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, level)\">\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]=\"isChildNodeActive(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, level)\">\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, level)\">\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<div class=\"children-container\" [attr.data-level]=\"level\">\r\n\t\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".search-container{padding:12px 8px;margin:0}.search-wrapper{position:relative;width:100%}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#64748b;font-size:14px;z-index:10;pointer-events:none;transition:color .2s ease}.search-static-sidebar{background:#1e293b!important;border:1px solid rgba(148,163,184,.1)!important;height:36px!important;font-size:13px!important;font-weight:400;color:#cbd5e1!important;padding:0 12px 0 36px!important;border-radius:4px!important;width:100%!important;box-sizing:border-box!important;transition:all .25s ease!important}.search-static-sidebar::placeholder{font-size:12px!important}.search-static-sidebar:hover{background:#0f172ab3!important;border-color:#94a3b826!important}.search-static-sidebar:focus{outline:none!important;border:1px solid rgba(15,23,42,.8)!important;background:#0f172acc!important}.search-wrapper:focus-within .search-icon{color:#cbd5e1}.static-sidebar{width:260px;height:100vh;background:#1e293b;border-right:1px solid #0f172a;display:flex;flex-direction:column;position:fixed;left:0;top:55px;z-index:999;overflow-y:auto;overflow-x:hidden;transition:width .3s ease;box-shadow:2px 0 5px #0000000d}.static-sidebar.collapsed{width:64px;box-shadow:none}.static-sidebar .static-sidebar-content{flex:1;background:transparent;overflow:hidden}.static-sidebar .tree-container{padding:5px 0;overflow-x:hidden}.static-sidebar .tree-node{margin-bottom:4px;position:relative}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:10px 12px;border-radius:4px;margin:0 5px;cursor:pointer;transition:all .25s ease;text-decoration:none;color:#cbd5e1!important;overflow:visible;position:relative;white-space:nowrap}.static-sidebar .tree-node .node-item:before{content:\"\";position:absolute;width:0;height:100%;top:0;left:0;background-color:var(--primary-color);opacity:.08;transition:width .25s ease-in-out}.static-sidebar .tree-node .node-item:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover:before{width:100%}.static-sidebar .tree-node .node-item:hover .node-label{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover .node-icon{color:#e8e7e7!important;transform:translate(2px)}.static-sidebar .tree-node .node-item.is-page:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.is-page:hover:before{width:100%}.static-sidebar .tree-node .node-item.active{background-color:#495465!important;color:#e8e7e7!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.static-sidebar .tree-node .node-item.active:before{display:none}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon,.static-sidebar .tree-node .node-item.active .toggle-btn i{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.active:hover{background-color:var(--primary-color)}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:8px;width:100%;min-width:0;position:relative;z-index:2;padding-left:24px}.static-sidebar .tree-node .toggle-btn{position:absolute;left:0;display:flex;align-items:center;justify-content:center;width:20px;height:16px;border:none;border-radius:3px;color:#cbd5e1;cursor:pointer;transition:all .25s ease;flex-shrink:0;z-index:3}.static-sidebar .tree-node .toggle-btn:hover{transform:scale(1.1)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem;transition:transform .2s ease}.static-sidebar .tree-node .node-icon{color:#cbd5e1;font-size:16px;flex-shrink:0;transition:transform .25s ease,color .25s ease;position:relative}.static-sidebar .tree-node .node-label{flex:1;font-size:13px;font-weight:500;color:#cbd5e1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .25s ease;position:relative}.static-sidebar .collapsed-container{padding:8px 0;display:flex;flex-direction:column;align-items:center;width:100%}.static-sidebar .collapsed-item{width:100%;display:flex;flex-direction:column;align-items:center;padding:12px 0;cursor:pointer;transition:all .25s ease;text-decoration:none;position:relative;overflow:hidden;margin-bottom:4px;color:#cbd5e1}.static-sidebar .collapsed-item:hover{color:#e8e7e7}.static-sidebar .collapsed-item:hover .collapsed-icon{transform:scale(1.15);color:#e8e7e7}.static-sidebar .collapsed-item:hover:after{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a;opacity:.7}.static-sidebar .collapsed-item.active{background-color:#495465!important}.static-sidebar .collapsed-item.active:before{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a}.static-sidebar .collapsed-item.active .collapsed-icon{color:#fff!important}.static-sidebar .collapsed-item .collapsed-icon{font-size:22px;color:#cbd5e1;transition:all .2s ease}.static-sidebar .children-container{position:relative}.static-sidebar .children-container:before{content:\"\";position:absolute;left:25px;top:0;bottom:0;width:1px;background-color:#4755694d;z-index:1}.static-sidebar .tree-node{position:relative}.static-sidebar .tree-node.level-0 .node-item{margin-right:20px;width:240px;max-width:240px}.static-sidebar .tree-node.level-0 .node-label{font-size:13px;font-weight:500;color:#cbd5e1}.static-sidebar .tree-node.level-0 .node-icon{font-size:16px}.static-sidebar .tree-node.level-1 .node-item{margin-left:36px;margin-right:20px;padding:8px 12px;width:204px;max-width:204px}.static-sidebar .tree-node.level-1 .node-label{font-size:12px;font-weight:400}.static-sidebar .tree-node.level-1 .node-icon{font-size:15px}.static-sidebar .tree-node.level-2 .node-item{margin-left:52px;margin-right:20px;width:188px;max-width:188px}.static-sidebar .tree-node.level-2 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-2 .node-icon{font-size:14px}.static-sidebar .tree-node.level-2.active .node-item{background-color:#495465!important}.static-sidebar .tree-node.level-2.active .node-item .node-label{color:#e8e7e7!important}.static-sidebar .tree-node.level-3 .node-item{margin-left:68px;margin-right:20px;padding:6px 12px;width:172px;max-width:172px}.static-sidebar .tree-node.level-3 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-3 .node-icon{font-size:13px}:host ::ng-deep .p-scrollpanel .p-scrollpanel-wrapper{border:none}:host ::ng-deep .p-scrollpanel .p-scrollpanel-content{padding-right:5px}:host ::ng-deep .p-scrollpanel-bar-y{background:#1e293b;width:4px;border-radius:4px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:#1e293b}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: 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: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }] }); }
2464
2464
  }
2465
2465
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: StaticSidebarComponent, decorators: [{
2466
2466
  type: Component,
2467
- args: [{ standalone: true, selector: 'app-static-sidebar', imports: [RouterLink, NgClass, NgTemplateOutlet, ScrollPanelModule, TooltipModule, FormsModule, TranslocoModule], providers: [TranslateJsonPipe], template: "<div class=\"static-sidebar\" [class.collapsed]=\"isCollapsed\">\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t@if (!isCollapsed) {\r\n\t\t\t<div class=\"search-container\" *transloco=\"let t; read: ''\">\r\n\t\t\t\t<div class=\"search-wrapper\">\r\n\t\t\t\t\t<i class=\"pi pi-search search-icon\"></i>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tpInputText\r\n\t\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\t\t[placeholder]=\"t('search')\"\r\n\t\t\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\t\t\tclass=\"search-static-sidebar\" />\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t</p-scrollPanel>\r\n\t\t} @else {\r\n\t\t\t<!-- Collapsed mode - only icons -->\r\n\t\t\t<div class=\"collapsed-container\">\r\n\t\t\t\t@for (node of topLevelNodes; track trackByKey($index, node)) {\r\n\t\t\t\t\t@if (node.routerLink && (!node.children || node.children.length === 0)) {\r\n\t\t\t\t\t\t<a \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t<div \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t}\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\" [ngClass]=\"'level-' + level\">\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]=\"isChildNodeActive(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, level)\">\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]=\"isChildNodeActive(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, level)\">\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, level)\">\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<div class=\"children-container\" [attr.data-level]=\"level\">\r\n\t\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".search-container{padding:12px 8px;margin:0}.search-wrapper{position:relative;width:100%}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#64748b;font-size:14px;z-index:10;pointer-events:none;transition:color .2s ease}.search-static-sidebar{background:#1e293b!important;border:1px solid rgba(148,163,184,.1)!important;height:36px!important;font-size:13px!important;font-weight:400;color:#cbd5e1!important;padding:0 12px 0 36px!important;border-radius:4px!important;width:100%!important;box-sizing:border-box!important;transition:all .25s ease!important}.search-static-sidebar::placeholder{font-size:12px!important}.search-static-sidebar:hover{background:#0f172ab3!important;border-color:#94a3b826!important}.search-static-sidebar:focus{outline:none!important;border:1px solid rgba(15,23,42,.8)!important;background:#0f172acc!important}.search-wrapper:focus-within .search-icon{color:#cbd5e1}.static-sidebar{width:260px;height:100vh;background:#1e293b;border-right:1px solid #0f172a;display:flex;flex-direction:column;position:fixed;left:0;top:55px;z-index:999;overflow-y:auto;overflow-x:hidden;transition:width .3s ease;box-shadow:2px 0 5px #0000000d}.static-sidebar.collapsed{width:64px;box-shadow:none}.static-sidebar .static-sidebar-content{flex:1;background:transparent;overflow:hidden}.static-sidebar .tree-container{padding:5px 0;overflow-x:hidden}.static-sidebar .tree-node{margin-bottom:4px;position:relative}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:10px 12px;border-radius:4px;margin:0 5px;cursor:pointer;transition:all .25s ease;text-decoration:none;color:#cbd5e1!important;overflow:hidden;position:relative;white-space:nowrap}.static-sidebar .tree-node .node-item:before{content:\"\";position:absolute;width:0;height:100%;top:0;left:0;background-color:var(--primary-color);opacity:.08;transition:width .25s ease-in-out}.static-sidebar .tree-node .node-item:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover:before{width:100%}.static-sidebar .tree-node .node-item:hover .node-label{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover .node-icon{color:#e8e7e7!important;transform:translate(2px)}.static-sidebar .tree-node .node-item.is-page:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.is-page:hover:before{width:100%}.static-sidebar .tree-node .node-item.active{background-color:#495465!important;color:#e8e7e7!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.static-sidebar .tree-node .node-item.active:before{display:none}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon,.static-sidebar .tree-node .node-item.active .toggle-btn i{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.active:hover{background-color:var(--primary-color)}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:8px;width:100%;min-width:0;position:relative;z-index:2}.static-sidebar .tree-node .toggle-btn{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:3px;color:#cbd5e1;cursor:pointer;transition:all .25s ease;flex-shrink:0;z-index:3}.static-sidebar .tree-node .toggle-btn:hover{transform:scale(1.1)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem;transition:transform .2s ease}.static-sidebar .tree-node .node-icon{color:#cbd5e1;font-size:16px;flex-shrink:0;transition:transform .25s ease,color .25s ease;position:relative}.static-sidebar .tree-node .node-label{flex:1;font-size:13px;font-weight:500;color:#cbd5e1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .25s ease;position:relative}.static-sidebar .collapsed-container{padding:8px 0;display:flex;flex-direction:column;align-items:center;width:100%}.static-sidebar .collapsed-item{width:100%;display:flex;flex-direction:column;align-items:center;padding:12px 0;cursor:pointer;transition:all .25s ease;text-decoration:none;position:relative;overflow:hidden;margin-bottom:4px;color:#cbd5e1}.static-sidebar .collapsed-item:hover{color:#e8e7e7}.static-sidebar .collapsed-item:hover .collapsed-icon{transform:scale(1.15);color:#e8e7e7}.static-sidebar .collapsed-item:hover:after{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a;opacity:.7}.static-sidebar .collapsed-item.active{background-color:#495465!important}.static-sidebar .collapsed-item.active:before{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a}.static-sidebar .collapsed-item.active .collapsed-icon{color:#fff!important}.static-sidebar .collapsed-item .collapsed-icon{font-size:22px;color:#cbd5e1;transition:all .2s ease}.static-sidebar .children-container{position:relative}.static-sidebar .children-container:before{content:\"\";position:absolute;left:25px;top:0;bottom:0;width:1px;background-color:#4755694d;z-index:1}.static-sidebar .tree-node{position:relative}.static-sidebar .tree-node.level-0 .node-item{margin-right:20px;width:240px;max-width:240px}.static-sidebar .tree-node.level-0 .node-label{font-size:13px;font-weight:500;color:#cbd5e1}.static-sidebar .tree-node.level-0 .node-icon{font-size:16px}.static-sidebar .tree-node.level-1 .node-item{margin-left:36px;margin-right:20px;padding:8px 12px;width:204px;max-width:204px}.static-sidebar .tree-node.level-1 .node-label{font-size:12px;font-weight:400}.static-sidebar .tree-node.level-1 .node-icon{font-size:15px}.static-sidebar .tree-node.level-2 .node-item{margin-left:52px;margin-right:20px;width:188px;max-width:188px}.static-sidebar .tree-node.level-2 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-2 .node-icon{font-size:14px}.static-sidebar .tree-node.level-2.active .node-item{background-color:#495465!important}.static-sidebar .tree-node.level-2.active .node-item .node-label{color:#e8e7e7!important}.static-sidebar .tree-node.level-3 .node-item{margin-left:68px;margin-right:20px;padding:6px 12px;width:172px;max-width:172px}.static-sidebar .tree-node.level-3 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-3 .node-icon{font-size:13px}:host ::ng-deep .p-scrollpanel .p-scrollpanel-wrapper{border:none}:host ::ng-deep .p-scrollpanel .p-scrollpanel-content{padding-right:5px}:host ::ng-deep .p-scrollpanel-bar-y{background:#1e293b;width:4px;border-radius:4px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:#1e293b}\n"] }]
2467
+ args: [{ standalone: true, selector: 'app-static-sidebar', imports: [RouterLink, NgClass, NgTemplateOutlet, ScrollPanelModule, TooltipModule, FormsModule, TranslocoModule], providers: [TranslateJsonPipe], template: "<div class=\"static-sidebar\" [class.collapsed]=\"isCollapsed\">\r\n\t<div class=\"static-sidebar-content\">\r\n\t\t@if (!isCollapsed) {\r\n\t\t\t<div class=\"search-container\" *transloco=\"let t; read: ''\">\r\n\t\t\t\t<div class=\"search-wrapper\">\r\n\t\t\t\t\t<i class=\"pi pi-search search-icon\"></i>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tpInputText\r\n\t\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\t\t[placeholder]=\"t('search')\"\r\n\t\t\t\t\t\t[(ngModel)]=\"searchTerm\"\r\n\t\t\t\t\t\t(ngModelChange)=\"onSearchChange()\"\r\n\t\t\t\t\t\tclass=\"search-static-sidebar\" />\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: 'calc(100vh - 130px)' }\">\r\n\t\t\t\t<div class=\"tree-container\">\r\n\t\t\t\t\t@for (node of filteredNodes(); track trackByKey($index, node)) {\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: node, level: 0 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t</p-scrollPanel>\r\n\t\t} @else {\r\n\t\t\t<!-- Collapsed mode - only icons -->\r\n\t\t\t<div class=\"collapsed-container\">\r\n\t\t\t\t@for (node of topLevelNodes; track trackByKey($index, node)) {\r\n\t\t\t\t\t@if (node.routerLink && (!node.children || node.children.length === 0)) {\r\n\t\t\t\t\t\t<a \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[routerLink]=\"node.routerLink\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t<div \r\n\t\t\t\t\t\t\tclass=\"collapsed-item\" \r\n\t\t\t\t\t\t\t[pTooltip]=\"getLocalText(node.label)\" \r\n\t\t\t\t\t\t\ttooltipPosition=\"right\"\r\n\t\t\t\t\t\t\t[class.active]=\"isTopLevelNodeActive(node)\"\r\n\t\t\t\t\t\t\t(click)=\"onCollapsedItemClick(node)\">\r\n\t\t\t\t\t\t\t@if (node.icon) {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon\" [class]=\"node.icon\"></i>\r\n\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<i class=\"collapsed-icon pi pi-circle\"></i>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t}\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\" [ngClass]=\"'level-' + level\">\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]=\"isChildNodeActive(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, level)\">\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]=\"isChildNodeActive(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, level)\">\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, level)\">\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<div class=\"children-container\" [attr.data-level]=\"level\">\r\n\t\t\t\t\t@for (child of node.children; track trackByKey($index, child)) {\r\n\t\t\t\t\t\t<ng-container\r\n\t\t\t\t\t\t\t*ngTemplateOutlet=\"treeNodeTemplate; context: { $implicit: child, level: level + 1 }\"></ng-container>\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\t</ng-template>\r\n</div> ", styles: [".search-container{padding:12px 8px;margin:0}.search-wrapper{position:relative;width:100%}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:#64748b;font-size:14px;z-index:10;pointer-events:none;transition:color .2s ease}.search-static-sidebar{background:#1e293b!important;border:1px solid rgba(148,163,184,.1)!important;height:36px!important;font-size:13px!important;font-weight:400;color:#cbd5e1!important;padding:0 12px 0 36px!important;border-radius:4px!important;width:100%!important;box-sizing:border-box!important;transition:all .25s ease!important}.search-static-sidebar::placeholder{font-size:12px!important}.search-static-sidebar:hover{background:#0f172ab3!important;border-color:#94a3b826!important}.search-static-sidebar:focus{outline:none!important;border:1px solid rgba(15,23,42,.8)!important;background:#0f172acc!important}.search-wrapper:focus-within .search-icon{color:#cbd5e1}.static-sidebar{width:260px;height:100vh;background:#1e293b;border-right:1px solid #0f172a;display:flex;flex-direction:column;position:fixed;left:0;top:55px;z-index:999;overflow-y:auto;overflow-x:hidden;transition:width .3s ease;box-shadow:2px 0 5px #0000000d}.static-sidebar.collapsed{width:64px;box-shadow:none}.static-sidebar .static-sidebar-content{flex:1;background:transparent;overflow:hidden}.static-sidebar .tree-container{padding:5px 0;overflow-x:hidden}.static-sidebar .tree-node{margin-bottom:4px;position:relative}.static-sidebar .tree-node .node-item{display:flex;align-items:center;padding:10px 12px;border-radius:4px;margin:0 5px;cursor:pointer;transition:all .25s ease;text-decoration:none;color:#cbd5e1!important;overflow:visible;position:relative;white-space:nowrap}.static-sidebar .tree-node .node-item:before{content:\"\";position:absolute;width:0;height:100%;top:0;left:0;background-color:var(--primary-color);opacity:.08;transition:width .25s ease-in-out}.static-sidebar .tree-node .node-item:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover:before{width:100%}.static-sidebar .tree-node .node-item:hover .node-label{color:#e8e7e7!important}.static-sidebar .tree-node .node-item:hover .node-icon{color:#e8e7e7!important;transform:translate(2px)}.static-sidebar .tree-node .node-item.is-page:hover{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.is-page:hover:before{width:100%}.static-sidebar .tree-node .node-item.active{background-color:#495465!important;color:#e8e7e7!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.static-sidebar .tree-node .node-item.active:before{display:none}.static-sidebar .tree-node .node-item.active .node-label,.static-sidebar .tree-node .node-item.active .node-icon,.static-sidebar .tree-node .node-item.active .toggle-btn i{color:#e8e7e7!important}.static-sidebar .tree-node .node-item.active:hover{background-color:var(--primary-color)}.static-sidebar .tree-node .node-content{display:flex;align-items:center;gap:8px;width:100%;min-width:0;position:relative;z-index:2;padding-left:24px}.static-sidebar .tree-node .toggle-btn{position:absolute;left:0;display:flex;align-items:center;justify-content:center;width:20px;height:16px;border:none;border-radius:3px;color:#cbd5e1;cursor:pointer;transition:all .25s ease;flex-shrink:0;z-index:3}.static-sidebar .tree-node .toggle-btn:hover{transform:scale(1.1)}.static-sidebar .tree-node .toggle-btn i{font-size:.7rem;transition:transform .2s ease}.static-sidebar .tree-node .node-icon{color:#cbd5e1;font-size:16px;flex-shrink:0;transition:transform .25s ease,color .25s ease;position:relative}.static-sidebar .tree-node .node-label{flex:1;font-size:13px;font-weight:500;color:#cbd5e1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .25s ease;position:relative}.static-sidebar .collapsed-container{padding:8px 0;display:flex;flex-direction:column;align-items:center;width:100%}.static-sidebar .collapsed-item{width:100%;display:flex;flex-direction:column;align-items:center;padding:12px 0;cursor:pointer;transition:all .25s ease;text-decoration:none;position:relative;overflow:hidden;margin-bottom:4px;color:#cbd5e1}.static-sidebar .collapsed-item:hover{color:#e8e7e7}.static-sidebar .collapsed-item:hover .collapsed-icon{transform:scale(1.15);color:#e8e7e7}.static-sidebar .collapsed-item:hover:after{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a;opacity:.7}.static-sidebar .collapsed-item.active{background-color:#495465!important}.static-sidebar .collapsed-item.active:before{content:\"\";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#0f172a}.static-sidebar .collapsed-item.active .collapsed-icon{color:#fff!important}.static-sidebar .collapsed-item .collapsed-icon{font-size:22px;color:#cbd5e1;transition:all .2s ease}.static-sidebar .children-container{position:relative}.static-sidebar .children-container:before{content:\"\";position:absolute;left:25px;top:0;bottom:0;width:1px;background-color:#4755694d;z-index:1}.static-sidebar .tree-node{position:relative}.static-sidebar .tree-node.level-0 .node-item{margin-right:20px;width:240px;max-width:240px}.static-sidebar .tree-node.level-0 .node-label{font-size:13px;font-weight:500;color:#cbd5e1}.static-sidebar .tree-node.level-0 .node-icon{font-size:16px}.static-sidebar .tree-node.level-1 .node-item{margin-left:36px;margin-right:20px;padding:8px 12px;width:204px;max-width:204px}.static-sidebar .tree-node.level-1 .node-label{font-size:12px;font-weight:400}.static-sidebar .tree-node.level-1 .node-icon{font-size:15px}.static-sidebar .tree-node.level-2 .node-item{margin-left:52px;margin-right:20px;width:188px;max-width:188px}.static-sidebar .tree-node.level-2 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-2 .node-icon{font-size:14px}.static-sidebar .tree-node.level-2.active .node-item{background-color:#495465!important}.static-sidebar .tree-node.level-2.active .node-item .node-label{color:#e8e7e7!important}.static-sidebar .tree-node.level-3 .node-item{margin-left:68px;margin-right:20px;padding:6px 12px;width:172px;max-width:172px}.static-sidebar .tree-node.level-3 .node-label{font-size:11px;font-weight:400;color:#cbd5e1}.static-sidebar .tree-node.level-3 .node-icon{font-size:13px}:host ::ng-deep .p-scrollpanel .p-scrollpanel-wrapper{border:none}:host ::ng-deep .p-scrollpanel .p-scrollpanel-content{padding-right:5px}:host ::ng-deep .p-scrollpanel-bar-y{background:#1e293b;width:4px;border-radius:4px}:host ::ng-deep .p-scrollpanel-bar-y:hover{background:#1e293b}\n"] }]
2468
2468
  }], ctorParameters: () => [{ type: AppMenuService }, { type: i1$1.Router }, { type: LayoutService }, { type: i1$3.TranslateJsonPipe }, { type: i5.TranslocoService }] });
2469
2469
 
2470
2470
  class NotificationsService extends RestClient {