@c8y/ngx-components 1021.21.0 → 1021.24.1

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 (97) hide show
  1. package/alarms/alarm-details.component.d.ts +1 -3
  2. package/alarms/alarm-details.component.d.ts.map +1 -1
  3. package/alarms/alarm-info.component.d.ts +9 -14
  4. package/alarms/alarm-info.component.d.ts.map +1 -1
  5. package/alarms/alarms-date-filter.component.d.ts +22 -10
  6. package/alarms/alarms-date-filter.component.d.ts.map +1 -1
  7. package/alarms/alarms-type-filter.component.d.ts +21 -14
  8. package/alarms/alarms-type-filter.component.d.ts.map +1 -1
  9. package/alarms/alarms-view.service.d.ts +7 -0
  10. package/alarms/alarms-view.service.d.ts.map +1 -1
  11. package/alarms/alarms.component.d.ts.map +1 -1
  12. package/alarms/alarms.helper.d.ts +5 -0
  13. package/alarms/alarms.helper.d.ts.map +1 -0
  14. package/alarms/alarms.model.d.ts +1 -6
  15. package/alarms/alarms.model.d.ts.map +1 -1
  16. package/alarms/alarms.module.d.ts +1 -1
  17. package/alarms/alarms.module.d.ts.map +1 -1
  18. package/alarms/cockpit/index.d.ts.map +1 -1
  19. package/alarms/devicemanagement/index.d.ts.map +1 -1
  20. package/alarms/index.d.ts +6 -4
  21. package/alarms/index.d.ts.map +1 -1
  22. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  23. package/core/router/context-route.component.d.ts +8 -3
  24. package/core/router/context-route.component.d.ts.map +1 -1
  25. package/core/router/context-route.service.d.ts +29 -3
  26. package/core/router/context-route.service.d.ts.map +1 -1
  27. package/core/router/router-tabs.resolver.d.ts +4 -1
  28. package/core/router/router-tabs.resolver.d.ts.map +1 -1
  29. package/core/router/router.model.d.ts +40 -3
  30. package/core/router/router.model.d.ts.map +1 -1
  31. package/core/router/router.module.d.ts +2 -1
  32. package/core/router/router.module.d.ts.map +1 -1
  33. package/core/router/router.service.d.ts +5 -4
  34. package/core/router/router.service.d.ts.map +1 -1
  35. package/core/router/scoped-context-route.service.d.ts +57 -0
  36. package/core/router/scoped-context-route.service.d.ts.map +1 -0
  37. package/core/router/view-context.service.d.ts +8 -18
  38. package/core/router/view-context.service.d.ts.map +1 -1
  39. package/esm2022/alarms/alarm-details.component.mjs +7 -9
  40. package/esm2022/alarms/alarm-info.component.mjs +23 -33
  41. package/esm2022/alarms/alarm-severity-to-label.pipe.mjs +2 -2
  42. package/esm2022/alarms/alarms-date-filter.component.mjs +92 -42
  43. package/esm2022/alarms/alarms-type-filter.component.mjs +102 -72
  44. package/esm2022/alarms/alarms-view.service.mjs +17 -3
  45. package/esm2022/alarms/alarms.component.mjs +12 -5
  46. package/esm2022/alarms/alarms.helper.mjs +32 -0
  47. package/esm2022/alarms/alarms.model.mjs +1 -1
  48. package/esm2022/alarms/alarms.module.mjs +7 -7
  49. package/esm2022/alarms/cockpit/index.mjs +13 -17
  50. package/esm2022/alarms/devicemanagement/index.mjs +15 -18
  51. package/esm2022/alarms/index.mjs +7 -5
  52. package/esm2022/context-dashboard/context-dashboard.service.mjs +18 -5
  53. package/esm2022/core/router/context-route.component.mjs +23 -13
  54. package/esm2022/core/router/context-route.service.mjs +37 -5
  55. package/esm2022/core/router/router-tabs.resolver.mjs +46 -15
  56. package/esm2022/core/router/router.model.mjs +6 -1
  57. package/esm2022/core/router/router.module.mjs +20 -13
  58. package/esm2022/core/router/router.service.mjs +24 -10
  59. package/esm2022/core/router/scoped-context-route.service.mjs +157 -0
  60. package/esm2022/core/router/view-context.service.mjs +59 -16
  61. package/esm2022/core/tabs/tabs-outlet.component.mjs +3 -3
  62. package/esm2022/interval-picker/interval-picker.component.mjs +1 -1
  63. package/esm2022/interval-picker/interval-picker.model.mjs +1 -1
  64. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +2 -1
  65. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +73 -4
  66. package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +29 -5
  67. package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +7 -1
  68. package/esm2022/widgets/implementations/alarms/alarm-widget.service.mjs +11 -1
  69. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +12 -16
  70. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
  71. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +14 -17
  72. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
  73. package/fesm2022/c8y-ngx-components-alarms.mjs +388 -268
  74. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  75. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +17 -4
  76. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  77. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
  78. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +1 -0
  79. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  80. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +123 -14
  81. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components.mjs +410 -133
  83. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  84. package/interval-picker/interval-picker.component.d.ts +2 -2
  85. package/interval-picker/interval-picker.component.d.ts.map +1 -1
  86. package/interval-picker/interval-picker.model.d.ts +5 -0
  87. package/interval-picker/interval-picker.model.d.ts.map +1 -1
  88. package/locales/locales.pot +18 -6
  89. package/package.json +1 -1
  90. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  91. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +12 -1
  92. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  93. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +12 -1
  94. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  95. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +11 -1
  96. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  97. package/widgets/implementations/alarms/alarm-widget.service.d.ts.map +1 -1
@@ -8,10 +8,10 @@ import { castArray, flatten, uniq, sortBy, groupBy, camelCase, isEqual, isUndefi
8
8
  import { merge, of, defer, combineLatest, race, isObservable, from, Subject, BehaviorSubject, NEVER, Observable, firstValueFrom, fromEvent, pipe, throwError, concat, map as map$2, EMPTY, timer, fromEventPattern, startWith as startWith$1, switchMap as switchMap$1, distinctUntilChanged as distinctUntilChanged$1, takeUntil as takeUntil$1, empty, forkJoin, ReplaySubject, interval, shareReplay as shareReplay$1, mergeMap as mergeMap$1 } from 'rxjs';
9
9
  import { map, distinctUntilChanged, filter, startWith, switchMap, take, shareReplay, scan, debounceTime, share, takeUntil, tap, catchError, first as first$1, retryWhen, delay, concatMap, debounce, sample, withLatestFrom, mergeMap, every as every$1, toArray, merge as merge$1, expand, skip, mapTo, finalize, reduce as reduce$1, combineLatestWith } from 'rxjs/operators';
10
10
  import * as i1 from '@c8y/client';
11
- import { ApplicationAvailability, OperationStatus, TenantLoginOptionType, UserManagementSource, GrantType, ApplicationType, aggregationType, BearerAuthFromSessionStorage, FetchClient, Client, PasswordStrength, QueriesUtil, InventoryService, UserService, ApplicationService, TenantService, Service } from '@c8y/client';
11
+ import { ApplicationAvailability, OperationStatus, TenantLoginOptionType, UserManagementSource, GrantType, ApplicationType, aggregationType, BearerAuthFromSessionStorage, FetchClient, Client, PasswordStrength, QueriesUtil, InventoryService, UserService, ApplicationService, TenantService, AlarmService, Service } from '@c8y/client';
12
12
  import { __decorate, __metadata } from 'tslib';
13
13
  import * as i1$3 from '@angular/router';
14
- import { NavigationEnd, RouterModule as RouterModule$1, ActivationEnd, NavigationStart, PRIMARY_OUTLET, ActivatedRoute, ROUTES, Router, NavigationCancel, NavigationError } from '@angular/router';
14
+ import { NavigationEnd, RouterModule as RouterModule$1, ActivationEnd, NavigationStart, PRIMARY_OUTLET, ActivatedRoute, ActivationStart, ChildActivationEnd, ROUTES, Router, NavigationCancel, NavigationError } from '@angular/router';
15
15
  import * as i4 from '@c8y/ngx-components/api';
16
16
  import { DataModule } from '@c8y/ngx-components/api';
17
17
  import { satisfies, compare, coerce } from 'semver';
@@ -52,6 +52,7 @@ import { CdkStepper, STEP_STATE, CdkStepperModule, CdkStep, STEPPER_GLOBAL_OPTIO
52
52
  import * as i1$5 from '@angular/cdk/bidi';
53
53
  import { getThemePreference, setThemePreference, applyTheme } from '@c8y/bootstrap';
54
54
  import * as mimeDB from 'mime-db';
55
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
55
56
  import * as i6 from '@ngx-formly/core';
56
57
  import { FormlyModule, FieldArrayType, FieldType, FieldWrapper, FORMLY_CONFIG, ɵdefineHiddenProp as _defineHiddenProp } from '@ngx-formly/core';
57
58
  import * as i5$2 from '@ngx-formly/core/select';
@@ -66,7 +67,6 @@ import * as i9 from '@angular/cdk/table';
66
67
  import { CdkTable, CdkHeaderCell, CdkTableModule } from '@angular/cdk/table';
67
68
  import * as i19 from 'ngx-bootstrap/pagination';
68
69
  import { PaginationModule } from 'ngx-bootstrap/pagination';
69
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
70
70
 
71
71
  /**
72
72
  * Allows to set a icon. Switches between c8y default icons
@@ -16949,11 +16949,11 @@ class TabsOutletComponent {
16949
16949
  return { widthScroll, width, scrollLeft };
16950
16950
  }
16951
16951
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TabsOutletComponent, deps: [{ token: i1$3.Router }, { token: i0.Renderer2 }, { token: HeaderService }, { token: TabsService }], target: i0.ɵɵFactoryTarget.Component }); }
16952
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: { tabs: "tabs", orientation: "orientation", navigatorOpen: "navigatorOpen", outletName: "outletName", context: "context", hasHeader: "hasHeader" }, host: { properties: { "class.has-header": "this.hasHeader", "class.navigator-open": "this.isNavigatorOpen", "class.page-tabs": "this.hasTabs", "class.page-tabs-horizontal": "this.isHorizontal", "class.page-tabs-vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }, { propertyName: "tabsContainer", first: true, predicate: ["tabsContainer"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"tabContainer\"\n [ngClass]=\"{ 'hidden-xs': !outletName }\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <ng-container *ngIf=\"!outletName\">\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component && !tab.hide\"\n >\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [ngClass]=\"{ 'p-r-24': !tab.template && tab?.badge }\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span\n title=\"{{ tab?.label | translate }}\"\n *ngIf=\"!tab.template && !tab.component\"\n >\n {{ tab?.label | translate }}\n </span>\n <span\n class=\"dashboard-template-marker\"\n tooltip=\"{{ tab?.tooltipText | translate }}\"\n placement=\"bottom\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n [delay]=\"300\"\n *ngIf=\"!tab.template && tab?.badge\"\n ></span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n </ng-container>\n\n <div\n class=\"component-tabs nav nav-tabs nav-tabsc8y\"\n *ngIf=\"outletName\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs; trackBy: trackByPath\">\n <div\n [ngClass]=\"{ active: tab.isActive }\"\n [routerLink]=\"tab.path\"\n [routerLinkActive]=\"tab.path ? 'active' : ''\"\n >\n <a\n class=\"pointer\"\n title=\"{{ tab?.label | translate }}\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i [c8yIcon]=\"tab?.icon\"></i>\n <span>\n {{ tab?.label | translate }}\n </span>\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div\n class=\"visible-xs mobile-tabs\"\n *ngIf=\"!outletName\"\n>\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container\n *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: C8yComponentOutlet, selector: "[c8yComponentOutlet]", inputs: ["c8yComponentOutlet", "c8yComponentOutletInjector", "c8yComponentOutletEnvironmentInjector"] }, { kind: "directive", type: i1$3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i2$3.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
16952
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TabsOutletComponent, selector: "c8y-tabs-outlet,c8y-ui-tabs", inputs: { tabs: "tabs", orientation: "orientation", navigatorOpen: "navigatorOpen", outletName: "outletName", context: "context", hasHeader: "hasHeader" }, host: { properties: { "class.has-header": "this.hasHeader", "class.navigator-open": "this.isNavigatorOpen", "class.page-tabs": "this.hasTabs", "class.page-tabs-horizontal": "this.isHorizontal", "class.page-tabs-vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef, static: true }, { propertyName: "tabsContainer", first: true, predicate: ["tabsContainer"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"tabContainer\"\n [ngClass]=\"{ 'hidden-xs': !outletName }\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <ng-container *ngIf=\"!outletName\">\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component && !tab.hide\"\n >\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n [queryParamsHandling]=\"'preserve'\"\n #rla=\"routerLinkActive\"\n [ngClass]=\"{ 'p-r-24': !tab.template && tab?.badge }\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span\n title=\"{{ tab?.label | translate }}\"\n *ngIf=\"!tab.template && !tab.component\"\n >\n {{ tab?.label | translate }}\n </span>\n <span\n class=\"dashboard-template-marker\"\n tooltip=\"{{ tab?.tooltipText | translate }}\"\n placement=\"bottom\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n [delay]=\"300\"\n *ngIf=\"!tab.template && tab?.badge\"\n ></span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n </ng-container>\n\n <div\n class=\"component-tabs nav nav-tabs nav-tabsc8y\"\n *ngIf=\"outletName\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs; trackBy: trackByPath\">\n <div\n [ngClass]=\"{ active: tab.isActive }\"\n [routerLink]=\"tab.path\"\n [routerLinkActive]=\"tab.path ? 'active' : ''\"\n [queryParamsHandling]=\"'preserve'\"\n >\n <a\n class=\"pointer\"\n title=\"{{ tab?.label | translate }}\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i [c8yIcon]=\"tab?.icon\"></i>\n <span>\n {{ tab?.label | translate }}\n </span>\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div\n class=\"visible-xs mobile-tabs\"\n *ngIf=\"!outletName\"\n>\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container\n *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: C8yComponentOutlet, selector: "[c8yComponentOutlet]", inputs: ["c8yComponentOutlet", "c8yComponentOutletInjector", "c8yComponentOutletEnvironmentInjector"] }, { kind: "directive", type: i1$3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i2$3.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
16953
16953
  }
16954
16954
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TabsOutletComponent, decorators: [{
16955
16955
  type: Component,
16956
- args: [{ selector: 'c8y-tabs-outlet,c8y-ui-tabs', template: "<div\n class=\"tabContainer\"\n [ngClass]=\"{ 'hidden-xs': !outletName }\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <ng-container *ngIf=\"!outletName\">\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component && !tab.hide\"\n >\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [ngClass]=\"{ 'p-r-24': !tab.template && tab?.badge }\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span\n title=\"{{ tab?.label | translate }}\"\n *ngIf=\"!tab.template && !tab.component\"\n >\n {{ tab?.label | translate }}\n </span>\n <span\n class=\"dashboard-template-marker\"\n tooltip=\"{{ tab?.tooltipText | translate }}\"\n placement=\"bottom\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n [delay]=\"300\"\n *ngIf=\"!tab.template && tab?.badge\"\n ></span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n </ng-container>\n\n <div\n class=\"component-tabs nav nav-tabs nav-tabsc8y\"\n *ngIf=\"outletName\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs; trackBy: trackByPath\">\n <div\n [ngClass]=\"{ active: tab.isActive }\"\n [routerLink]=\"tab.path\"\n [routerLinkActive]=\"tab.path ? 'active' : ''\"\n >\n <a\n class=\"pointer\"\n title=\"{{ tab?.label | translate }}\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i [c8yIcon]=\"tab?.icon\"></i>\n <span>\n {{ tab?.label | translate }}\n </span>\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div\n class=\"visible-xs mobile-tabs\"\n *ngIf=\"!outletName\"\n>\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container\n *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n" }]
16956
+ args: [{ selector: 'c8y-tabs-outlet,c8y-ui-tabs', template: "<div\n class=\"tabContainer\"\n [ngClass]=\"{ 'hidden-xs': !outletName }\"\n #container\n>\n <button\n class=\"tabs-slider tabs-slider-left\"\n title=\"{{ 'Scroll to the left' | translate }}\"\n type=\"button\"\n #left\n *ngIf=\"showLeft || showRight\"\n [disabled]=\"!showLeft\"\n (click)=\"scroll('left')\"\n >\n <i [c8yIcon]=\"'chevron-left'\"></i>\n </button>\n <button\n class=\"tabs-slider tabs-slider-right\"\n title=\"{{ 'Scroll to the right' | translate }}\"\n type=\"button\"\n #right\n *ngIf=\"showRight || showLeft\"\n [disabled]=\"!showRight\"\n (click)=\"scroll('right')\"\n >\n <i [c8yIcon]=\"'chevron-right'\"></i>\n </button>\n <ng-container *ngIf=\"!outletName\">\n <div\n class=\"nav nav-tabs nav-tabsc8y\"\n role=\"list\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <div\n role=\"listitem\"\n [ngClass]=\"{ active: rla?.isActive }\"\n *ngIf=\"!tab.component && !tab.hide\"\n >\n <a\n [routerLink]=\"tab.path\"\n routerLinkActive\n [queryParamsHandling]=\"'preserve'\"\n #rla=\"routerLinkActive\"\n [ngClass]=\"{ 'p-r-24': !tab.template && tab?.badge }\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i\n [c8yIcon]=\"tab?.icon\"\n *ngIf=\"!tab.template && tab?.icon\"\n ></i>\n <span\n title=\"{{ tab?.label | translate }}\"\n *ngIf=\"!tab.template && !tab.component\"\n >\n {{ tab?.label | translate }}\n </span>\n <span\n class=\"dashboard-template-marker\"\n tooltip=\"{{ tab?.tooltipText | translate }}\"\n placement=\"bottom\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n [delay]=\"300\"\n *ngIf=\"!tab.template && tab?.badge\"\n ></span>\n </a>\n <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n </div>\n <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n </ng-container>\n </div>\n </ng-container>\n\n <div\n class=\"component-tabs nav nav-tabs nav-tabsc8y\"\n *ngIf=\"outletName\"\n #tabsContainer\n >\n <ng-container *ngFor=\"let tab of tabs; trackBy: trackByPath\">\n <div\n [ngClass]=\"{ active: tab.isActive }\"\n [routerLink]=\"tab.path\"\n [routerLinkActive]=\"tab.path ? 'active' : ''\"\n [queryParamsHandling]=\"'preserve'\"\n >\n <a\n class=\"pointer\"\n title=\"{{ tab?.label | translate }}\"\n (click)=\"tab.onSelect?.emit()\"\n >\n <i [c8yIcon]=\"tab?.icon\"></i>\n <span>\n {{ tab?.label | translate }}\n </span>\n </a>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div\n class=\"visible-xs mobile-tabs\"\n *ngIf=\"!outletName\"\n>\n <ul class=\"list-unstyled d-flex m-b-0\">\n <li class=\"c8y-select-wrapper flex-grow\">\n <select\n (change)=\"navigateTo($event.target.value)\"\n #select\n >\n <ng-container *ngFor=\"let tab of tabs\">\n <option\n *ngIf=\"!tab.component\"\n [value]=\"tab.path\"\n [selected]=\"isActive(tab)\"\n >\n {{ tab?.label | translate }}\n </option>\n </ng-container>\n </select>\n </li>\n <ng-container *ngFor=\"let tab of tabs\">\n <ng-container *ngIf=\"tab.component\">\n <ng-container\n *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </ul>\n</div>\n" }]
16957
16957
  }], ctorParameters: () => [{ type: i1$3.Router }, { type: i0.Renderer2 }, { type: HeaderService }, { type: TabsService }], propDecorators: { tabs: [{
16958
16958
  type: Input
16959
16959
  }], orientation: [{
@@ -24148,6 +24148,11 @@ var ViewContext;
24148
24148
  ViewContext["Service"] = "service/:id";
24149
24149
  ViewContext["DatapointLibrary"] = "datapointlibrary/:id";
24150
24150
  ViewContext["Simulators"] = "simulators/:id";
24151
+ ViewContext["Alarms"] = "alarms/:id";
24152
+ ViewContext["GroupAlarms"] = "group/:id/alarms/:id";
24153
+ ViewContext["DeviceAlarms"] = "device/:id/alarms/:id";
24154
+ ViewContext["ServiceAlarms"] = "service/:id/alarms/:id";
24155
+ ViewContext["SimulatorsAlarms"] = "simulators/:id/alarms/:id";
24151
24156
  })(ViewContext || (ViewContext = {}));
24152
24157
 
24153
24158
  class RouterTabsResolver {
@@ -24158,9 +24163,10 @@ class RouterTabsResolver {
24158
24163
  get routerStateSnapshot() {
24159
24164
  return this.router.routerState.snapshot;
24160
24165
  }
24161
- resolve(route) {
24162
- const latestChildren = this.router.config.find(r => route.routeConfig.path === r.path).children;
24163
- return from(latestChildren || []).pipe(mergeMap((child) => from(this.getGuards(child)).pipe(map((guard) => guard.canActivate(route, this.routerStateSnapshot)), mergeMap((result) => {
24166
+ resolve(currentRoute) {
24167
+ const routeConfig = currentRoute.routeConfig;
24168
+ const latestChildren = this.getLatestChildRoutes(routeConfig.rootContext);
24169
+ return from(latestChildren || []).pipe(mergeMap((child) => from(this.getGuards(child)).pipe(map((guard) => guard.canActivate(currentRoute, this.routerStateSnapshot)), mergeMap((result) => {
24164
24170
  if (isObservable(result)) {
24165
24171
  return result;
24166
24172
  }
@@ -24172,18 +24178,48 @@ class RouterTabsResolver {
24172
24178
  if (Array.isArray(result)) {
24173
24179
  child.tabs = result;
24174
24180
  }
24175
- }), every$1(result => !!result), filter(result => result), mergeMap(() => (Array.isArray(child.tabs) ? from(child.tabs) : of(child))), map(result => result.label || result.path
24176
- ? {
24177
- label: result.label,
24178
- icon: result.icon,
24179
- path: `${decodeURIComponent(route.url.join('/'))}/${result.path}`,
24180
- priority: result.priority,
24181
- hide: result.hide,
24182
- badge: result.badge,
24183
- tooltipText: result.tooltipText,
24184
- featureId: result.featureId
24181
+ }), every$1(result => !!result), filter(result => result), mergeMap(() => (Array.isArray(child.tabs) ? from(child.tabs) : of(child))), map(result => {
24182
+ const url = this.getBaselUrl(currentRoute).join('/');
24183
+ return result.label || result.path
24184
+ ? {
24185
+ label: result.label,
24186
+ icon: result.icon,
24187
+ path: `/${decodeURIComponent(url)}/${result.path}`,
24188
+ priority: result.priority,
24189
+ hide: result.hide,
24190
+ badge: result.badge,
24191
+ tooltipText: result.tooltipText,
24192
+ featureId: result.featureId,
24193
+ tabsOutlet: result.tabsOutlet,
24194
+ showAlways: result.showAlways
24195
+ }
24196
+ : undefined;
24197
+ }))), filter(tabs => !!tabs), toArray());
24198
+ }
24199
+ getBaselUrl(currentRoute) {
24200
+ let prefix = [];
24201
+ if (currentRoute.parent?.url.length > 0) {
24202
+ prefix = this.getBaselUrl(currentRoute.parent);
24203
+ }
24204
+ return [...prefix, ...currentRoute.url];
24205
+ }
24206
+ getLatestChildRoutes(context) {
24207
+ const thisContextRoute = this.findRootContextRoutes(this.router.config, context);
24208
+ return thisContextRoute?.children || [];
24209
+ }
24210
+ findRootContextRoutes(routes, context) {
24211
+ for (const route of routes) {
24212
+ if (route.rootContext === context) {
24213
+ return route;
24185
24214
  }
24186
- : undefined))), filter(tabs => !!tabs), toArray());
24215
+ if (route.children) {
24216
+ const childResult = this.findRootContextRoutes(route.children, context);
24217
+ if (childResult) {
24218
+ return childResult;
24219
+ }
24220
+ }
24221
+ }
24222
+ return null;
24187
24223
  }
24188
24224
  getGuards(child) {
24189
24225
  const guards = (child.canActivate || []).map(guard => {
@@ -24206,22 +24242,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
24206
24242
 
24207
24243
  class ViewContextServices {
24208
24244
  static { this.services = {
24209
- [ViewContext.Device]: InventoryService,
24210
- [ViewContext.Group]: InventoryService,
24211
- [ViewContext.User]: UserService,
24212
- [ViewContext.Application]: ApplicationService,
24213
- [ViewContext.Microservice]: ApplicationService,
24214
- [ViewContext.Extension]: ApplicationService,
24215
- [ViewContext.Feature]: ApplicationService,
24216
- [ViewContext.SubscribedApplications]: ApplicationService,
24217
- [ViewContext.Tenant]: TenantService,
24218
- [ViewContext.Report]: InventoryService,
24219
- [ViewContext.Service]: InventoryService,
24220
- [ViewContext.DatapointLibrary]: InventoryService,
24221
- [ViewContext.Simulators]: InventoryService
24245
+ [ViewContext.Device]: { service: InventoryService, path: ViewContext.Device, autoRoute: true },
24246
+ [ViewContext.Group]: { service: InventoryService, path: ViewContext.Group, autoRoute: true },
24247
+ [ViewContext.User]: { service: UserService, path: ViewContext.User, autoRoute: true },
24248
+ [ViewContext.Application]: {
24249
+ service: ApplicationService,
24250
+ path: ViewContext.Application,
24251
+ autoRoute: true
24252
+ },
24253
+ [ViewContext.Microservice]: {
24254
+ service: ApplicationService,
24255
+ path: ViewContext.Microservice,
24256
+ autoRoute: true
24257
+ },
24258
+ [ViewContext.Extension]: {
24259
+ service: ApplicationService,
24260
+ path: ViewContext.Extension,
24261
+ autoRoute: true
24262
+ },
24263
+ [ViewContext.Feature]: {
24264
+ service: ApplicationService,
24265
+ path: ViewContext.Feature,
24266
+ autoRoute: true
24267
+ },
24268
+ [ViewContext.SubscribedApplications]: {
24269
+ service: ApplicationService,
24270
+ path: ViewContext.SubscribedApplications,
24271
+ autoRoute: true
24272
+ },
24273
+ [ViewContext.Tenant]: { service: TenantService, path: ViewContext.Tenant, autoRoute: true },
24274
+ [ViewContext.Report]: { service: InventoryService, path: ViewContext.Report, autoRoute: true },
24275
+ [ViewContext.Service]: {
24276
+ service: InventoryService,
24277
+ path: ViewContext.Service,
24278
+ autoRoute: true
24279
+ },
24280
+ [ViewContext.DatapointLibrary]: {
24281
+ service: InventoryService,
24282
+ path: ViewContext.DatapointLibrary,
24283
+ autoRoute: true
24284
+ },
24285
+ [ViewContext.Simulators]: {
24286
+ service: InventoryService,
24287
+ path: ViewContext.Simulators,
24288
+ autoRoute: true
24289
+ },
24290
+ [ViewContext.Alarms]: { service: AlarmService, path: ':id', autoRoute: false },
24291
+ [ViewContext.GroupAlarms]: { service: AlarmService, path: ':id', autoRoute: false },
24292
+ [ViewContext.DeviceAlarms]: { service: AlarmService, path: ':id', autoRoute: false },
24293
+ [ViewContext.SimulatorsAlarms]: { service: AlarmService, path: ':id', autoRoute: false },
24294
+ [ViewContext.ServiceAlarms]: { service: AlarmService, path: ':id', autoRoute: false }
24222
24295
  }; }
24223
24296
  static contextToService(context) {
24224
- return ViewContextServices.services[context];
24297
+ return ViewContextServices.services[context]?.service;
24298
+ }
24299
+ static getPath(context) {
24300
+ return ViewContextServices.services[context]?.path;
24301
+ }
24302
+ static isAutoRoute(context) {
24303
+ return ViewContextServices.services[context]?.autoRoute;
24225
24304
  }
24226
24305
  }
24227
24306
 
@@ -24233,8 +24312,8 @@ class ContextRouteService {
24233
24312
  this.apiService = apiService;
24234
24313
  this.injector = injector;
24235
24314
  this.lastAddedTabs = [];
24236
- this.refreshTrigger = new Subject();
24237
24315
  this.ID_REGEX = /([0-9]+)/;
24316
+ this.refreshTrigger$ = new Subject();
24238
24317
  /**
24239
24318
  * Last context data snapshot
24240
24319
  */
@@ -24260,24 +24339,53 @@ class ContextRouteService {
24260
24339
  }
24261
24340
  return null;
24262
24341
  }
24342
+ /**
24343
+ * Returns a route for the given ContextData.
24344
+ *
24345
+ * @param contextData The ContextData object.
24346
+ * @returns A route with the ids set correctly.
24347
+ */
24263
24348
  getContextRoute(contextData) {
24264
- return contextData.context.replace(':id', contextData.contextData.id);
24349
+ return contextData.context.replace(/:id/g, contextData.contextData.id);
24265
24350
  }
24351
+ /**
24352
+ * Verifies if a given url is a view context route.
24353
+ *
24354
+ * @param url A route url.
24355
+ * @param contextToCheck The view context(s) to check. If not provided, all contexts are checked.
24356
+ * @returns true if the given url is a view context route.
24357
+ */
24358
+ isContextRoute(url, contextToCheck = []) {
24359
+ const viewContexts = contextToCheck.length === 0 ? Object.values(ViewContext) : contextToCheck;
24360
+ // replace all :id placeholders with a regex matcher for a number
24361
+ const regexMatchers = viewContexts.map(context => `/${context.replace(/:id/g, '([0-9]+)')}`);
24362
+ const matchingRegexContext = regexMatchers.find(context => new RegExp(context).test(url));
24363
+ return !!matchingRegexContext;
24364
+ }
24365
+ /**
24366
+ * @deprecated: Use ScopedContextRouteService instead. Will be removed in 10.22
24367
+ */
24266
24368
  init(route) {
24267
24369
  this.routerSubscription = this.router.events
24268
24370
  .pipe(filter(e => e instanceof NavigationEnd))
24269
24371
  .subscribe(() => this.redirectToFirstTab());
24270
24372
  this.dataSubscription = route.data
24271
- .pipe(merge$1(this.updatedContext(route), this.refreshTrigger), switchMap(() => this.tabsResolver.resolve(route.snapshot)))
24373
+ .pipe(merge$1(this.updatedContext(route), this.refreshTrigger$), switchMap(() => this.tabsResolver.resolve(route.snapshot)))
24272
24374
  .subscribe(tabs => this.updateTabs(tabs));
24273
24375
  }
24376
+ /**
24377
+ * @deprecated: Use ScopedContextRouteService instead. Will be removed in 10.22
24378
+ */
24274
24379
  destroy() {
24275
24380
  this.dataSubscription.unsubscribe();
24276
24381
  this.routerSubscription.unsubscribe();
24277
24382
  this.lastAddedTabs.forEach(t => this.tabsService.remove(t));
24278
24383
  }
24384
+ /**
24385
+ * Reloads all ViewContexts.
24386
+ */
24279
24387
  refreshContext() {
24280
- this.refreshTrigger.next();
24388
+ this.refreshTrigger$.next();
24281
24389
  }
24282
24390
  /**
24283
24391
  * Sets a new contextData in the ActivatedRoute.
@@ -24293,6 +24401,9 @@ class ContextRouteService {
24293
24401
  }
24294
24402
  data.contextData = { ...contextData };
24295
24403
  }
24404
+ /**
24405
+ * @deprecated: Use ScopedContextRouteService instead. Will be removed in 10.21
24406
+ */
24296
24407
  updatedContext(route) {
24297
24408
  const { data } = route.snapshot;
24298
24409
  const serviceInstance = ViewContextServices.contextToService(data.context);
@@ -24372,6 +24483,237 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
24372
24483
  }]
24373
24484
  }], ctorParameters: () => [{ type: RouterTabsResolver }, { type: TabsService }, { type: i1$3.Router }, { type: i4.ApiService }, { type: i0.Injector }] });
24374
24485
 
24486
+ /**
24487
+ * A service which is injected into the context route component to handle the context data.
24488
+ */
24489
+ class ScopedContextRouteService {
24490
+ constructor(tabsResolver, tabsService, router, apiService, injector, destroyRef) {
24491
+ this.tabsResolver = tabsResolver;
24492
+ this.tabsService = tabsService;
24493
+ this.router = router;
24494
+ this.apiService = apiService;
24495
+ this.injector = injector;
24496
+ this.destroyRef = destroyRef;
24497
+ this.lastAddedTabs = [];
24498
+ this.refreshTrigger$ = new Subject();
24499
+ this.ID_REGEX = /([0-9]+)/;
24500
+ }
24501
+ /**
24502
+ * Indicates that the data is loading
24503
+ * @returns An boolean observable which indicates if the data is loading.
24504
+ */
24505
+ isLoading$() {
24506
+ return this.router.events.pipe(filter(e => (e instanceof ActivationStart || e instanceof ChildActivationEnd) &&
24507
+ e.snapshot.routeConfig?.rootContext === this.currentContext), map(e => e instanceof ActivationStart), takeUntilDestroyed(this.destroyRef));
24508
+ }
24509
+ /**
24510
+ * Initializes the context route.
24511
+ * @param route The current activated route.
24512
+ */
24513
+ init(route) {
24514
+ this.currentContext = route.routeConfig.rootContext;
24515
+ if (!this.currentContext) {
24516
+ throw new Error(`${ScopedContextRouteService.name} should not be used on a route without a rootContext`);
24517
+ }
24518
+ this.router.events
24519
+ .pipe(filter(e => e instanceof ActivationEnd), takeUntilDestroyed(this.destroyRef))
24520
+ .subscribe((e) => this.redirectToFirstTab(e));
24521
+ route.data
24522
+ .pipe(merge$1(this.updatedContext(route), this.refreshTrigger$), switchMap(() => this.tabsResolver.resolve(route.snapshot)), takeUntilDestroyed(this.destroyRef))
24523
+ .subscribe(tabs => this.updateTabs(tabs));
24524
+ }
24525
+ /**
24526
+ * Destroys the service.
24527
+ */
24528
+ ngOnDestroy() {
24529
+ this.lastAddedTabs.forEach(t => this.tabsService.remove(t));
24530
+ }
24531
+ /**
24532
+ * Refreshes the context.
24533
+ */
24534
+ refreshContext() {
24535
+ this.refreshTrigger$.next();
24536
+ }
24537
+ /**
24538
+ * Sets an API hook to refresh the contextData on changes.
24539
+ * @param activatedRoute The current activated route.
24540
+ */
24541
+ updatedContext(route) {
24542
+ const { data } = route.snapshot;
24543
+ const serviceInstance = ViewContextServices.contextToService(data.context);
24544
+ if (serviceInstance) {
24545
+ const service = this.injector.get(serviceInstance);
24546
+ const detailsUrlRegex = service
24547
+ .getDetailUrl(data.contextData)
24548
+ .replace(/\d+/g, '?\\d*');
24549
+ const contextRegex = new RegExp(detailsUrlRegex, 'i');
24550
+ const childrenRegex = new RegExp(`${detailsUrlRegex}/child`, 'i');
24551
+ const filterResponse = ({ url, method }) => {
24552
+ const contextChanged = contextRegex.test(url) && ['POST', 'PUT'].includes(method);
24553
+ const childrenAffected = childrenRegex.test(url) && ['POST', 'DELETE'].includes(method);
24554
+ return contextChanged || childrenAffected;
24555
+ };
24556
+ return this.apiService.hookResponse(filterResponse);
24557
+ }
24558
+ return NEVER;
24559
+ }
24560
+ updateTabs(tabs = []) {
24561
+ this.lastAddedTabs.forEach(t => this.tabsService.remove(t));
24562
+ this.lastAddedTabs = tabs;
24563
+ tabs.forEach(t => this.tabsService.add(t));
24564
+ this.redirectToFirstTab();
24565
+ }
24566
+ redirectToFirstTab(event) {
24567
+ const currentQueryParams = this.router.routerState.snapshot.root.queryParams;
24568
+ const queryParamsString = new URLSearchParams(currentQueryParams).toString();
24569
+ const queryParamsSuffix = queryParamsString ? `?${queryParamsString}` : '';
24570
+ if (event) {
24571
+ if (this.needsRedirect(event)) {
24572
+ const tab = this.tabsService.sortTabs(event.snapshot.data.tabs)?.[0];
24573
+ if (!tab) {
24574
+ return;
24575
+ }
24576
+ const currentContextId = (this.router.url.match(this.ID_REGEX) || []).shift();
24577
+ const tabPathId = (tab.path.match(this.ID_REGEX) || []).shift();
24578
+ if (currentContextId === tabPathId) {
24579
+ this.router.navigateByUrl(`${tab.path}${queryParamsSuffix}`, {
24580
+ replaceUrl: true
24581
+ });
24582
+ }
24583
+ }
24584
+ }
24585
+ else {
24586
+ const currentContextId = (this.router.url.match(this.ID_REGEX) || []).shift();
24587
+ if (this.needsRedirectLegacy()) {
24588
+ this.tabsService.firstTab$.pipe(filter((tab) => !!tab?.path)).subscribe((tab) => {
24589
+ const tabPathId = (tab.path.match(this.ID_REGEX) || []).shift();
24590
+ if (currentContextId === tabPathId) {
24591
+ this.router.navigateByUrl(`${tab.path}${queryParamsSuffix}`, { replaceUrl: true });
24592
+ }
24593
+ });
24594
+ }
24595
+ }
24596
+ }
24597
+ needsRedirectLegacy() {
24598
+ const tree = this.router.parseUrl(this.router.url);
24599
+ const groups = tree.root.children[PRIMARY_OUTLET];
24600
+ const context = this.getMatchingContextRoute(this.router.url);
24601
+ if (!context) {
24602
+ return groups.segments.length === 2;
24603
+ }
24604
+ return context.split('/').length === groups.segments.length;
24605
+ }
24606
+ needsRedirect(event) {
24607
+ const contextRoute = event.snapshot.routeConfig;
24608
+ if (!contextRoute.rootContext) {
24609
+ return false;
24610
+ }
24611
+ const contextRouteFromUrl = this.getMatchingContextRoute(this.router.url);
24612
+ return contextRoute.rootContext === contextRouteFromUrl;
24613
+ }
24614
+ getMatchingContextRoute(url) {
24615
+ const viewContexts = Object.values(ViewContext);
24616
+ // replace all :id placeholders with a regex matcher for a number
24617
+ const regexMatchers = viewContexts.map(context => `^/${context.replace(/:id/g, '([0-9]+)')}(\\?.*)?$`);
24618
+ const matchingRegexContext = regexMatchers.find(context => new RegExp(context).test(url));
24619
+ return matchingRegexContext ? viewContexts[regexMatchers.indexOf(matchingRegexContext)] : null;
24620
+ }
24621
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ScopedContextRouteService, deps: [{ token: RouterTabsResolver }, { token: TabsService }, { token: i1$3.Router }, { token: i4.ApiService }, { token: i0.Injector }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
24622
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ScopedContextRouteService }); }
24623
+ }
24624
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ScopedContextRouteService, decorators: [{
24625
+ type: Injectable
24626
+ }], ctorParameters: () => [{ type: RouterTabsResolver }, { type: TabsService }, { type: i1$3.Router }, { type: i4.ApiService }, { type: i0.Injector }, { type: i0.DestroyRef }] });
24627
+
24628
+ class ContextRouteComponent {
24629
+ constructor(route, scopedContextRouteService, contextRouteService, destroyRef) {
24630
+ this.route = route;
24631
+ this.scopedContextRouteService = scopedContextRouteService;
24632
+ this.contextRouteService = contextRouteService;
24633
+ this.destroyRef = destroyRef;
24634
+ this.isLoading$ = this.scopedContextRouteService.isLoading$();
24635
+ }
24636
+ ngOnInit() {
24637
+ this.contextRouteService.refreshTrigger$
24638
+ .pipe(takeUntilDestroyed(this.destroyRef))
24639
+ .subscribe(() => {
24640
+ this.refreshTabs();
24641
+ });
24642
+ this.scopedContextRouteService.init(this.route);
24643
+ }
24644
+ refreshTabs() {
24645
+ this.scopedContextRouteService.refreshContext();
24646
+ }
24647
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteComponent, deps: [{ token: i1$3.ActivatedRoute }, { token: ScopedContextRouteService }, { token: ContextRouteService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
24648
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ContextRouteComponent, selector: "c8y-context-route", providers: [ScopedContextRouteService], ngImport: i0, template: "<router-outlet *ngIf=\"!(isLoading$ | async); else loading\"></router-outlet>\n\n<ng-template #loading>\n <div class=\"d-flex d-col a-i-center j-c-center fit-h\">\n <c8y-loading></c8y-loading>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$3.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
24649
+ }
24650
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteComponent, decorators: [{
24651
+ type: Component,
24652
+ args: [{ selector: 'c8y-context-route', providers: [ScopedContextRouteService], template: "<router-outlet *ngIf=\"!(isLoading$ | async); else loading\"></router-outlet>\n\n<ng-template #loading>\n <div class=\"d-flex d-col a-i-center j-c-center fit-h\">\n <c8y-loading></c8y-loading>\n </div>\n</ng-template>\n" }]
24653
+ }], ctorParameters: () => [{ type: i1$3.ActivatedRoute }, { type: ScopedContextRouteService }, { type: ContextRouteService }, { type: i0.DestroyRef }] });
24654
+
24655
+ class ContextRouteGuard {
24656
+ constructor(injector) {
24657
+ this.injector = injector;
24658
+ this.caches = new Map();
24659
+ }
24660
+ canActivate(route) {
24661
+ const id = route.paramMap.get('id');
24662
+ const service = this.service(route);
24663
+ this.clearDetailCached(service, id);
24664
+ return this.detailCached(service, id).pipe(tap(contextData => {
24665
+ Object.keys(route.data.contextData).forEach(key => delete route.data.contextData[key]);
24666
+ Object.assign(route.data.contextData, contextData);
24667
+ }), map(() => true), catchError(() => of(false)));
24668
+ }
24669
+ service(route) {
24670
+ const serviceInstance = ViewContextServices.contextToService(route.data.context);
24671
+ return this.injector.get(serviceInstance);
24672
+ }
24673
+ detailCached(service, id) {
24674
+ if (id === 'new') {
24675
+ return of(undefined);
24676
+ }
24677
+ const cache = this.getCache(service);
24678
+ let cached = cache[id];
24679
+ if (!cached) {
24680
+ const params = service instanceof InventoryService ? { withChildren: false } : undefined;
24681
+ cached = from(service.detail(id, params)).pipe(map(({ data }) => data), shareReplay(1));
24682
+ cache[id] = cached;
24683
+ }
24684
+ return cached;
24685
+ }
24686
+ clearDetailCached(service, id) {
24687
+ const cache = this.getCache(service);
24688
+ delete cache[id];
24689
+ }
24690
+ getCache(service) {
24691
+ let cache = this.caches.get(service);
24692
+ if (!cache) {
24693
+ cache = {};
24694
+ this.caches.set(service, cache);
24695
+ }
24696
+ return cache;
24697
+ }
24698
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteGuard, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
24699
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteGuard, providedIn: 'root' }); }
24700
+ }
24701
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteGuard, decorators: [{
24702
+ type: Injectable,
24703
+ args: [{
24704
+ providedIn: 'root'
24705
+ }]
24706
+ }], ctorParameters: () => [{ type: i0.Injector }] });
24707
+
24708
+ class EmptyComponent {
24709
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: EmptyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24710
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: EmptyComponent, selector: "empty", ngImport: i0, template: '', isInline: true }); }
24711
+ }
24712
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: EmptyComponent, decorators: [{
24713
+ type: Component,
24714
+ args: [{ selector: 'empty', template: '' }]
24715
+ }] });
24716
+
24375
24717
  /**
24376
24718
  * A hook to use for Multi Provider extension.
24377
24719
  * @deprecated Consider using the `hookRoute` function instead.
@@ -24474,16 +24816,17 @@ class RouterService extends ExtensionPointWithoutStateForPlugins {
24474
24816
  // Empty route needs to be last as of navigation to angularjs routes
24475
24817
  // if ** route hit, the angularjs routes are loaded.
24476
24818
  const emptyRoute = this.router.config.find(r => r.path === '**');
24819
+ const rootContextRoutes = this.findAllRootContextRoutes([...this.router.config, ...routes]);
24477
24820
  this.router.resetConfig([
24478
24821
  ...this.router.config.filter(r => r.path !== '**'),
24479
- ...routes.map((r) => this.convertRoute(this.router.config, r)),
24822
+ ...routes.map((r) => this.convertRoute(rootContextRoutes, r)),
24480
24823
  emptyRoute
24481
24824
  ].filter(Boolean));
24482
24825
  }
24483
- convertRoute(initialConfig, route) {
24826
+ convertRoute(rootContextRoutes, route) {
24484
24827
  if (route.context) {
24485
- initialConfig.forEach((r) => {
24486
- if (r.data && r.data.context === route.context) {
24828
+ rootContextRoutes.forEach((r) => {
24829
+ if (r.rootContext === route.context) {
24487
24830
  r.children = [route, ...(r.children || [])];
24488
24831
  }
24489
24832
  });
@@ -24491,6 +24834,19 @@ class RouterService extends ExtensionPointWithoutStateForPlugins {
24491
24834
  }
24492
24835
  return route;
24493
24836
  }
24837
+ findAllRootContextRoutes(routes) {
24838
+ const result = [];
24839
+ routes.forEach(route => {
24840
+ if (route.rootContext) {
24841
+ result.push(route);
24842
+ }
24843
+ if (route.children) {
24844
+ const childRoutes = this.findAllRootContextRoutes(route.children);
24845
+ result.push(...childRoutes);
24846
+ }
24847
+ });
24848
+ return result;
24849
+ }
24494
24850
  resolveRouterForChildRoutes(moduleRef, remoteNgModule) {
24495
24851
  // NOTE: stolen from lazy loaded routes from Angular itself.
24496
24852
  // https://github.com/angular/angular/blob/da58801f95c66c201e332189af25702bdd722f3f/packages/router/src/router_config_loader.ts#L103-L108
@@ -24513,90 +24869,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
24513
24869
  }]
24514
24870
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1$3.Router }, { type: ContextRouteService }, { type: PluginsResolveService }, { type: OptionsService }] });
24515
24871
 
24516
- class ContextRouteComponent {
24517
- constructor(route, contextRouteService) {
24518
- this.route = route;
24519
- this.contextRouteService = contextRouteService;
24520
- }
24521
- ngOnInit() {
24522
- this.contextRouteService.init(this.route);
24523
- }
24524
- ngOnDestroy() {
24525
- this.contextRouteService.destroy();
24526
- }
24527
- refreshTabs() {
24528
- this.contextRouteService.refreshContext();
24529
- }
24530
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteComponent, deps: [{ token: i1$3.ActivatedRoute }, { token: ContextRouteService }], target: i0.ɵɵFactoryTarget.Component }); }
24531
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ContextRouteComponent, selector: "c8y-context-route", ngImport: i0, template: "<router-outlet></router-outlet>\n", dependencies: [{ kind: "directive", type: i1$3.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
24532
- }
24533
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteComponent, decorators: [{
24534
- type: Component,
24535
- args: [{ selector: 'c8y-context-route', template: "<router-outlet></router-outlet>\n" }]
24536
- }], ctorParameters: () => [{ type: i1$3.ActivatedRoute }, { type: ContextRouteService }] });
24537
-
24538
- class ContextRouteGuard {
24539
- constructor(injector) {
24540
- this.injector = injector;
24541
- this.caches = new Map();
24542
- }
24543
- canActivate(route) {
24544
- const id = route.paramMap.get('id');
24545
- const service = this.service(route);
24546
- this.clearDetailCached(service, id);
24547
- return this.detailCached(service, id).pipe(tap(contextData => {
24548
- Object.keys(route.data.contextData).forEach(key => delete route.data.contextData[key]);
24549
- Object.assign(route.data.contextData, contextData);
24550
- }), map(() => true), catchError(() => of(false)));
24551
- }
24552
- service(route) {
24553
- const serviceInstance = ViewContextServices.contextToService(route.data.context);
24554
- return this.injector.get(serviceInstance);
24555
- }
24556
- detailCached(service, id) {
24557
- if (id === 'new') {
24558
- return of(undefined);
24559
- }
24560
- const cache = this.getCache(service);
24561
- let cached = cache[id];
24562
- if (!cached) {
24563
- const params = service instanceof InventoryService ? { withChildren: false } : undefined;
24564
- cached = from(service.detail(id, params)).pipe(map(({ data }) => data), shareReplay(1));
24565
- cache[id] = cached;
24566
- }
24567
- return cached;
24568
- }
24569
- clearDetailCached(service, id) {
24570
- const cache = this.getCache(service);
24571
- delete cache[id];
24572
- }
24573
- getCache(service) {
24574
- let cache = this.caches.get(service);
24575
- if (!cache) {
24576
- cache = {};
24577
- this.caches.set(service, cache);
24578
- }
24579
- return cache;
24580
- }
24581
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteGuard, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
24582
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteGuard, providedIn: 'root' }); }
24583
- }
24584
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteGuard, decorators: [{
24585
- type: Injectable,
24586
- args: [{
24587
- providedIn: 'root'
24588
- }]
24589
- }], ctorParameters: () => [{ type: i0.Injector }] });
24590
-
24591
- class EmptyComponent {
24592
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: EmptyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24593
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: EmptyComponent, selector: "empty", ngImport: i0, template: '', isInline: true }); }
24594
- }
24595
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: EmptyComponent, decorators: [{
24596
- type: Component,
24597
- args: [{ selector: 'empty', template: '' }]
24598
- }] });
24599
-
24600
24872
  const extraRoutes = [
24601
24873
  {
24602
24874
  path: 'users/new',
@@ -24607,17 +24879,21 @@ const extraRoutes = [
24607
24879
  component: EmptyComponent
24608
24880
  }
24609
24881
  ];
24882
+ const viewContextRoutes = [];
24610
24883
  // tslint:disable-next-line: forin
24611
24884
  for (const key in ViewContext) {
24612
24885
  const context = ViewContext[key];
24613
- extraRoutes.push({
24614
- path: context,
24886
+ if (!ViewContextServices.isAutoRoute(context)) {
24887
+ continue;
24888
+ }
24889
+ viewContextRoutes.push({
24890
+ path: ViewContextServices.getPath(context),
24891
+ rootContext: context,
24615
24892
  component: ContextRouteComponent,
24616
24893
  canActivate: [ContextRouteGuard],
24617
24894
  data: { context, contextData: {} },
24618
24895
  resolve: {
24619
24896
  tabs: RouterTabsResolver
24620
- // contextData: ContextRouteGuard
24621
24897
  }
24622
24898
  });
24623
24899
  }
@@ -24646,10 +24922,10 @@ class RouterModule {
24646
24922
  // initialNavigation disabled by default because of MTM-44047 (routes triggered before the actual login)
24647
24923
  config.initialNavigation = config.initialNavigation ?? 'disabled';
24648
24924
  config.useHash = config.useHash ?? true;
24649
- const ngRouterModule = RouterModule$1.forRoot([...routes, ...extraRoutes], config);
24925
+ const ngRouterModule = RouterModule$1.forRoot([...routes, ...extraRoutes, ...viewContextRoutes], config);
24650
24926
  return {
24651
24927
  ngModule: RouterModule,
24652
- providers: [...ngRouterModule.providers]
24928
+ providers: [...ngRouterModule.providers, ScopedContextRouteService]
24653
24929
  };
24654
24930
  }
24655
24931
  constructor(
@@ -24659,13 +24935,14 @@ class RouterModule {
24659
24935
  }
24660
24936
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: RouterModule, deps: [{ token: RouterService }], target: i0.ɵɵFactoryTarget.NgModule }); }
24661
24937
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: RouterModule, declarations: [ContextRouteComponent, EmptyComponent], imports: [RouterModule$1, HeaderModule, CommonModule] }); }
24662
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: RouterModule, imports: [RouterModule$1, HeaderModule, CommonModule] }); }
24938
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: RouterModule, providers: [ScopedContextRouteService], imports: [RouterModule$1, HeaderModule, CommonModule] }); }
24663
24939
  }
24664
24940
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: RouterModule, decorators: [{
24665
24941
  type: NgModule,
24666
24942
  args: [{
24667
24943
  declarations: [ContextRouteComponent, EmptyComponent],
24668
- imports: [RouterModule$1, HeaderModule, CommonModule]
24944
+ imports: [RouterModule$1, HeaderModule, CommonModule],
24945
+ providers: [ScopedContextRouteService]
24669
24946
  }]
24670
24947
  }], ctorParameters: () => [{ type: RouterService }] });
24671
24948
 
@@ -34970,5 +35247,5 @@ function colorValidator(allowedModes) {
34970
35247
  * Generated bundle index. Do not edit.
34971
35248
  */
34972
35249
 
34973
- export { ACTIONS_STEPPER, AGGREGATIONS, AGGREGATION_ICONS, AGGREGATION_LABELS, AGGREGATION_LIMITS, AGGREGATION_TEXTS, AGGREGATION_VALUES, AGGREGATION_VALUES_ARR, ARRAY_VALIDATION_PREFIX, ASSET_PATH, AbstractConfigurationStrategy, ActionBarComponent, ActionBarItemComponent, ActionBarModule, ActionBarService, ActionComponent, ActionControlsExtensionService, ActionModule, ActionOutletComponent, ActionService, AggregationService, AlarmRealtimeService, AlarmWithChildrenRealtimeService, AlertComponent, AlertDetailsComponent, AlertModule, AlertOutletBase, AlertOutletComponent, AlertService, AlertTextComponent, AppIconComponent, AppStateService, AppSwitcherComponent, AppSwitcherInlineComponent, AppSwitcherService, ApplicationModule, ApplicationPluginStatus, AssetLinkPipe, AssetTypesRealtimeService, AssetTypesService, AuditLogComponent, AuditLogModule, AuthenticationModule, BackendVersionFactory, BaseColumn, BaseFilteringFormRendererComponent, BooleanFilterMapper, BootstrapComponent, BootstrapModule, BottomDrawerComponent, BottomDrawerRef, BottomDrawerService, BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbModule, BreadcrumbOutletComponent, BreadcrumbService, BuiltInActionType, BytesPipe, C8yComponentOutlet, C8yJSONSchema, C8yStepper, C8yStepperButtons, C8yStepperIcon, C8yStepperProgress, C8yTranslateDirective, C8yTranslateModule, C8yTranslatePipe, C8yValidators, CUSTOM, CachedLocaleDictionaryService, CellRendererComponent, CellRendererContext, CellRendererDefDirective, ChangePasswordComponent, ClipboardModule, ClipboardService, ColorInputComponent, ColorService, ColumnDirective, CommonModule, ConditionalTabsOutletComponent, ConfigureCustomColumnComponent, ConfirmModalComponent, ContextRouteComponent, ContextRouteGuard, ContextRouteService, CookieBannerComponent, CopyDashboardDisabledReason, CoreModule, CoreSearchModule, CountdownIntervalComponent, CountdownIntervalModule, CredentialsComponent, CurrentPasswordModalComponent, CustomColumn, DATA_GRID_CONFIGURATION_CONTEXT, DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER, DATA_GRID_CONFIGURATION_STRATEGY, DEFAULT_INTERVAL_STATE, DEFAULT_INTERVAL_VALUE, DEFAULT_INTERVAL_VALUES, DRAWER_ANIMATION_TIME, DashboardChildActionComponent, DashboardChildChange, DashboardChildComponent, DashboardChildTitleComponent, DashboardComponent, DashboardModule, DataGridComponent, DataGridModule, DataGridService, DatapointLibraryValidationErrors, DateContextQueryParamNames, DateFilterMapper, DatePickerComponent, DatePickerModule, DatePipe, DateTimePickerComponent, DateTimePickerModule, DefaultValidationDirective, DeviceBootstrapRealtimeService, DeviceService, DeviceStatusComponent, DeviceStatusModule, DismissAlertStrategy, DocsModule, DocsService, DrawerModule, DrawerOutletComponent, DrawerService, DropAreaComponent, DropAreaModule, DropdownDirectionDirective, DynamicBulkDetailsResolver, DynamicBulkIIdentifiedResolver, DynamicComponentAlert, DynamicComponentAlertAggregator, DynamicComponentAlertsComponent, DynamicComponentComponent, DynamicComponentErrorStrategy, DynamicComponentModule, DynamicComponentService, DynamicDatapointsResolver, DynamicFormsModule, DynamicManagedObjectResolver, DynamicResolverService, ES_MAX_TIME_MILLISECONDS, EmailsValidatorDirective, EmptyComponent, EmptyStateComponent, EmptyStateContextDirective, EventRealtimeService, ExpandableRowDirective, ExtensionPointForPlugins, ExtensionPointWithoutStateForPlugins, ExtractArrayValidationErrorsPipe, FilePickerComponent, FilePickerFormControlComponent, FilePickerFormControlModule, FilePickerModule, FilesService, FilterInputComponent, FilterMapperFactory, FilterMapperModule, FilterMapperPipe, FilterMapperService, FilterNonArrayValidationErrorsPipe, FilteringActionType, FilteringFormRendererComponent, FilteringFormRendererContext, FilteringFormRendererDefDirective, ForOfDirective, FormGroupComponent, FormsModule, GENERIC_FILE_TYPE, GLOBAL_CONTEXT_AUTO_REFRESH, GainsightService, GenericFileIconPipe, GeoService, GetGroupIconPipe, GlobalConfigService, GridDataSource, GroupFragment, GroupService, GroupedFilterChips, GuideDocsComponent, GuideHrefDirective, HOOK_ACTION, HOOK_ACTION_BAR, HOOK_BREADCRUMB, HOOK_COMPONENTS, HOOK_DOCS, HOOK_DYNAMIC_PROVIDER_CONFIG, HOOK_NAVIGATOR_NODES, HOOK_OPTIONS, HOOK_PATTERN_MESSAGES, HOOK_ROUTE, HOOK_SEARCH, HOOK_STEPPER, HOOK_TABS, HOOK_VERSION, HOOK_WIZARD, HeaderBarComponent, HeaderCellRendererDefDirective, HeaderModule, HeaderService, HelpComponent, HelpModule, HighlightComponent, HookProviderTypes, HumanizeAppNamePipe, HumanizePipe, HumanizeValidationMessagePipe, I18nModule, INTERVAL_OPTIONS, IconDirective, IfAllowedDirective, InjectionType, InputGroupListComponent, InputGroupListContainerDirective, InterAppService, IntervalBasedReload, InventorySearchService, IpRangeInputListComponent, JsonValidationPrettifierDirective, LANGUAGES, LAST_DAY, LAST_HOUR, LAST_MINUTE, LAST_MONTH, LAST_WEEK, LOCALE_PATH, LegacyGridConfigMapperService, LegendFieldWrapper, ListDisplaySwitchComponent, ListDisplaySwitchModule, ListGroupComponent, ListGroupModule, ListItemActionComponent, ListItemBodyComponent, ListItemCheckboxComponent, ListItemCollapseComponent, ListItemComponent, ListItemDragHandleComponent, ListItemFooterComponent, ListItemIconComponent, ListItemRadioComponent, ListItemTimelineComponent, LoadMoreComponent, LoadingComponent, LoginComponent, LoginModule, LoginService, LoginViews, MAX_PAGE_SIZE, MESSAGES_CORE_I18N, ManagedObjectRealtimeService, ManagedObjectType, MapFunctionPipe, MarkdownToHtmlPipe, MaxValidationDirective, MeasurementRealtimeService, MessageBannerService, MessageDirective, MessagesComponent, MinValidationDirective, MissingTranslationCustomHandler, MoNamePipe, ModalComponent, ModalModule, ModalSelectionMode, ModalService, NEEDED_ROLE_FOR_SETUP, NEW_DASHBOARD_QUERY_PARAM, NULL_VALUE_PLACEHOLDER, NUMBER_FORMAT_REGEXP, NameTransformPipe, NavigatorBottomModule, NavigatorIconComponent, NavigatorModule, NavigatorNode, NavigatorNodeComponent, NavigatorNodeRoot, NavigatorOutletComponent, NavigatorService, NavigatorTopModule, NewPasswordComponent, NumberPipe, OperationBulkRealtimeService, OperationRealtimeService, OperationResultComponent, OptionsService, OutletDirective, PRODUCT_EXPERIENCE_EVENT_SOURCE, PX_ACTIONS, PX_EVENT_NAME, PackageType, PasswordCheckListComponent, PasswordConfirm, PasswordConfirmModalComponent, PasswordInputComponent, PasswordService, PasswordStrengthCheckerService, PasswordStrengthComponent, PasswordStrengthValidatorDirective, PatternMessagesService, Permissions, PhoneValidationDirective, PlatformDetailsService, PluginsExportScopes, PluginsModule, PluginsResolveService, PluginsService, PopoverConfirmComponent, ProductExperienceDirective, ProductExperienceModule, ProgressBarComponent, PropertiesListComponent, PropertiesListModule, PropertyValueTransformService, ProvidePhoneNumberComponent, ProviderConfigurationComponent, ProviderConfigurationModule, ProviderConfigurationNodeFactory, ProviderConfigurationRouteFactory, ProviderConfigurationService, ProviderDefinitionsService, PushStatus, PushStatusLabels, QuickLinkComponent, QuickLinkModule, RESOLVING_COMPONENT_WAIT_TIME, RadioFilterMapper, RangeComponent, RangeDirective, RangeDisplayComponent, RangeDisplayModule, RealtimeButtonComponent, RealtimeMessage, RealtimeModule, RealtimeService, RealtimeSubjectService, RecoverPasswordComponent, RelativeTimePipe, RequiredInputPlaceholderDirective, RouterModule, RouterService, RouterTabsResolver, SETUP_FINISHED_STEP_ID, SearchComponent, SearchFilters, SearchInputComponent, SearchOutletComponent, SearchResultEmptyComponent, SearchService, SelectComponent, SelectFilterMapper, SelectItemDirective, SelectKeyboardService, SelectLegacyComponent, SelectModalComponent, SelectModalFilterPipe, SelectModalModule, SelectModule, SelectedItemsComponent, SelectedItemsDirective, SendStatus, SendStatusLabels, ServiceRegistry, SetupCompletedComponent, SetupComponent, SetupModule, SetupService, SetupState, SetupStepperFactory, ShortenUserNamePipe, ShouldShowMoPipe, ShowIfFilterPipe, SimpleJsonPathValidatorDirective, SkipLinkDirective, SmsChallengeComponent, StandalonePluginInjector, StateService, Status, StepperModule, StepperOutletComponent, StepperService, Steppers, StrengthValidatorService, StringFilterMapper, StringifyObjectPipe, SupportedApps, TabComponent, TabsModule, TabsOutletComponent, TabsService, TabsetAriaDirective, TenantUiService, TextAreaRowHeightDirective, TextareaAutoresizeDirective, ThemeSwitcherService, TimeIntervalComponent, TimePickerComponent, TimePickerModule, TitleComponent, TitleOutletComponent, TotpAuthComponent, TotpChallengeComponent, TotpSetupComponent, TranslateParserCustom, TranslateService, TranslationLoaderService, TypeaheadComponent, TypeaheadFilterMapper, UiSettingsComponent, UiSettingsModule, UniqueInCollectionByPathValidationDirective, UserEditComponent, UserEditModalComponent, UserEngagementsService, UserMenuItemComponent, UserMenuOutletComponent, UserMenuService, UserModule, UserNameInitialsPipe, UserPreferencesConfigurationStrategy, UserPreferencesService, UserPreferencesStorageInventory, UserPreferencesStorageLocal, UserTotpRevokeComponent, UserTotpSetupComponent, VERSION_MODULE_CONFIG, ValidationPattern, VersionListComponent, VersionModule, VersionService, ViewContext, ViewContextServices, VirtualScrollWindowDirective, VirtualScrollWindowStrategy, VirtualScrollerWrapperComponent, VisibleControlsPipe, WebSDKVersionFactory, WidgetGlobalAutoRefreshService, WidgetTimeContextActionBarPriority, WidgetTimeContextComponent, WidgetsDashboardComponent, WizardBodyComponent, WizardComponent, WizardFooterComponent, WizardHeaderComponent, WizardModalService, WizardModule, WizardOutletComponent, WizardService, ZipService, _virtualScrollWindowStrategyFactory, alertOnError, allEntriesAreEqual, asyncValidateArrayElements, colorValidator, deviceAvailabilityIconMap, extraRoutes, fromFactories, fromTrigger, fromTriggerOnce, getActivatedRoute, getAngularLocalesLanguageString, getBasicInputArrayFormFieldConfig, getDictionaryWithTrimmedKeys, getInjectedHooks, globalAutoRefreshLoading, hookAction, hookActionBar, hookBreadcrumb, hookComponent, hookDataGridActionControls, hookDocs, hookDrawer, hookDynamicProviderConfig, hookFilterMapper, hookGeneric, hookNavigator, hookOptions, hookPatternMessages, hookRoute, hookSearch, hookService, hookStepper, hookTab, hookVersion, hookWidget, hookWizard, initializeServices, internalApps, isEagerDynamicComponents, isExtensionFactory, isLazyDynamicComponents, isPromise, languagesFactory, loadLocale, localeId, localePathFactory, memoize, minColumnGridTrackSize, operationStatusClasses, operationStatusIcons, ratiosByColumnTypes, removeDuplicatesIds, resolveInjectedFactories, retryWithDelay, simpleJsonPathValidator, sortByPriority, stateToFactory, statusAlert, statusClasses, statusIcons, throttle, toObservable, toObservableOfArrays, tooltips, trimTranslationKey, uniqueInCollectionByPathValidator, validateArrayElements, wrapperLegendFieldConfig };
35250
+ export { ACTIONS_STEPPER, AGGREGATIONS, AGGREGATION_ICONS, AGGREGATION_LABELS, AGGREGATION_LIMITS, AGGREGATION_TEXTS, AGGREGATION_VALUES, AGGREGATION_VALUES_ARR, ARRAY_VALIDATION_PREFIX, ASSET_PATH, AbstractConfigurationStrategy, ActionBarComponent, ActionBarItemComponent, ActionBarModule, ActionBarService, ActionComponent, ActionControlsExtensionService, ActionModule, ActionOutletComponent, ActionService, AggregationService, AlarmRealtimeService, AlarmWithChildrenRealtimeService, AlertComponent, AlertDetailsComponent, AlertModule, AlertOutletBase, AlertOutletComponent, AlertService, AlertTextComponent, AppIconComponent, AppStateService, AppSwitcherComponent, AppSwitcherInlineComponent, AppSwitcherService, ApplicationModule, ApplicationPluginStatus, AssetLinkPipe, AssetTypesRealtimeService, AssetTypesService, AuditLogComponent, AuditLogModule, AuthenticationModule, BackendVersionFactory, BaseColumn, BaseFilteringFormRendererComponent, BooleanFilterMapper, BootstrapComponent, BootstrapModule, BottomDrawerComponent, BottomDrawerRef, BottomDrawerService, BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbModule, BreadcrumbOutletComponent, BreadcrumbService, BuiltInActionType, BytesPipe, C8yComponentOutlet, C8yJSONSchema, C8yStepper, C8yStepperButtons, C8yStepperIcon, C8yStepperProgress, C8yTranslateDirective, C8yTranslateModule, C8yTranslatePipe, C8yValidators, CUSTOM, CachedLocaleDictionaryService, CellRendererComponent, CellRendererContext, CellRendererDefDirective, ChangePasswordComponent, ClipboardModule, ClipboardService, ColorInputComponent, ColorService, ColumnDirective, CommonModule, ConditionalTabsOutletComponent, ConfigureCustomColumnComponent, ConfirmModalComponent, ContextRouteComponent, ContextRouteGuard, ContextRouteService, CookieBannerComponent, CopyDashboardDisabledReason, CoreModule, CoreSearchModule, CountdownIntervalComponent, CountdownIntervalModule, CredentialsComponent, CurrentPasswordModalComponent, CustomColumn, DATA_GRID_CONFIGURATION_CONTEXT, DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER, DATA_GRID_CONFIGURATION_STRATEGY, DEFAULT_INTERVAL_STATE, DEFAULT_INTERVAL_VALUE, DEFAULT_INTERVAL_VALUES, DRAWER_ANIMATION_TIME, DashboardChildActionComponent, DashboardChildChange, DashboardChildComponent, DashboardChildTitleComponent, DashboardComponent, DashboardModule, DataGridComponent, DataGridModule, DataGridService, DatapointLibraryValidationErrors, DateContextQueryParamNames, DateFilterMapper, DatePickerComponent, DatePickerModule, DatePipe, DateTimePickerComponent, DateTimePickerModule, DefaultValidationDirective, DeviceBootstrapRealtimeService, DeviceService, DeviceStatusComponent, DeviceStatusModule, DismissAlertStrategy, DocsModule, DocsService, DrawerModule, DrawerOutletComponent, DrawerService, DropAreaComponent, DropAreaModule, DropdownDirectionDirective, DynamicBulkDetailsResolver, DynamicBulkIIdentifiedResolver, DynamicComponentAlert, DynamicComponentAlertAggregator, DynamicComponentAlertsComponent, DynamicComponentComponent, DynamicComponentErrorStrategy, DynamicComponentModule, DynamicComponentService, DynamicDatapointsResolver, DynamicFormsModule, DynamicManagedObjectResolver, DynamicResolverService, ES_MAX_TIME_MILLISECONDS, EmailsValidatorDirective, EmptyComponent, EmptyStateComponent, EmptyStateContextDirective, EventRealtimeService, ExpandableRowDirective, ExtensionPointForPlugins, ExtensionPointWithoutStateForPlugins, ExtractArrayValidationErrorsPipe, FilePickerComponent, FilePickerFormControlComponent, FilePickerFormControlModule, FilePickerModule, FilesService, FilterInputComponent, FilterMapperFactory, FilterMapperModule, FilterMapperPipe, FilterMapperService, FilterNonArrayValidationErrorsPipe, FilteringActionType, FilteringFormRendererComponent, FilteringFormRendererContext, FilteringFormRendererDefDirective, ForOfDirective, FormGroupComponent, FormsModule, GENERIC_FILE_TYPE, GLOBAL_CONTEXT_AUTO_REFRESH, GainsightService, GenericFileIconPipe, GeoService, GetGroupIconPipe, GlobalConfigService, GridDataSource, GroupFragment, GroupService, GroupedFilterChips, GuideDocsComponent, GuideHrefDirective, HOOK_ACTION, HOOK_ACTION_BAR, HOOK_BREADCRUMB, HOOK_COMPONENTS, HOOK_DOCS, HOOK_DYNAMIC_PROVIDER_CONFIG, HOOK_NAVIGATOR_NODES, HOOK_OPTIONS, HOOK_PATTERN_MESSAGES, HOOK_ROUTE, HOOK_SEARCH, HOOK_STEPPER, HOOK_TABS, HOOK_VERSION, HOOK_WIZARD, HeaderBarComponent, HeaderCellRendererDefDirective, HeaderModule, HeaderService, HelpComponent, HelpModule, HighlightComponent, HookProviderTypes, HumanizeAppNamePipe, HumanizePipe, HumanizeValidationMessagePipe, I18nModule, INTERVAL_OPTIONS, IconDirective, IfAllowedDirective, InjectionType, InputGroupListComponent, InputGroupListContainerDirective, InterAppService, IntervalBasedReload, InventorySearchService, IpRangeInputListComponent, JsonValidationPrettifierDirective, LANGUAGES, LAST_DAY, LAST_HOUR, LAST_MINUTE, LAST_MONTH, LAST_WEEK, LOCALE_PATH, LegacyGridConfigMapperService, LegendFieldWrapper, ListDisplaySwitchComponent, ListDisplaySwitchModule, ListGroupComponent, ListGroupModule, ListItemActionComponent, ListItemBodyComponent, ListItemCheckboxComponent, ListItemCollapseComponent, ListItemComponent, ListItemDragHandleComponent, ListItemFooterComponent, ListItemIconComponent, ListItemRadioComponent, ListItemTimelineComponent, LoadMoreComponent, LoadingComponent, LoginComponent, LoginModule, LoginService, LoginViews, MAX_PAGE_SIZE, MESSAGES_CORE_I18N, ManagedObjectRealtimeService, ManagedObjectType, MapFunctionPipe, MarkdownToHtmlPipe, MaxValidationDirective, MeasurementRealtimeService, MessageBannerService, MessageDirective, MessagesComponent, MinValidationDirective, MissingTranslationCustomHandler, MoNamePipe, ModalComponent, ModalModule, ModalSelectionMode, ModalService, NEEDED_ROLE_FOR_SETUP, NEW_DASHBOARD_QUERY_PARAM, NULL_VALUE_PLACEHOLDER, NUMBER_FORMAT_REGEXP, NameTransformPipe, NavigatorBottomModule, NavigatorIconComponent, NavigatorModule, NavigatorNode, NavigatorNodeComponent, NavigatorNodeRoot, NavigatorOutletComponent, NavigatorService, NavigatorTopModule, NewPasswordComponent, NumberPipe, OperationBulkRealtimeService, OperationRealtimeService, OperationResultComponent, OptionsService, OutletDirective, PRODUCT_EXPERIENCE_EVENT_SOURCE, PX_ACTIONS, PX_EVENT_NAME, PackageType, PasswordCheckListComponent, PasswordConfirm, PasswordConfirmModalComponent, PasswordInputComponent, PasswordService, PasswordStrengthCheckerService, PasswordStrengthComponent, PasswordStrengthValidatorDirective, PatternMessagesService, Permissions, PhoneValidationDirective, PlatformDetailsService, PluginsExportScopes, PluginsModule, PluginsResolveService, PluginsService, PopoverConfirmComponent, ProductExperienceDirective, ProductExperienceModule, ProgressBarComponent, PropertiesListComponent, PropertiesListModule, PropertyValueTransformService, ProvidePhoneNumberComponent, ProviderConfigurationComponent, ProviderConfigurationModule, ProviderConfigurationNodeFactory, ProviderConfigurationRouteFactory, ProviderConfigurationService, ProviderDefinitionsService, PushStatus, PushStatusLabels, QuickLinkComponent, QuickLinkModule, RESOLVING_COMPONENT_WAIT_TIME, RadioFilterMapper, RangeComponent, RangeDirective, RangeDisplayComponent, RangeDisplayModule, RealtimeButtonComponent, RealtimeMessage, RealtimeModule, RealtimeService, RealtimeSubjectService, RecoverPasswordComponent, RelativeTimePipe, RequiredInputPlaceholderDirective, RouterModule, RouterService, RouterTabsResolver, SETUP_FINISHED_STEP_ID, SearchComponent, SearchFilters, SearchInputComponent, SearchOutletComponent, SearchResultEmptyComponent, SearchService, SelectComponent, SelectFilterMapper, SelectItemDirective, SelectKeyboardService, SelectLegacyComponent, SelectModalComponent, SelectModalFilterPipe, SelectModalModule, SelectModule, SelectedItemsComponent, SelectedItemsDirective, SendStatus, SendStatusLabels, ServiceRegistry, SetupCompletedComponent, SetupComponent, SetupModule, SetupService, SetupState, SetupStepperFactory, ShortenUserNamePipe, ShouldShowMoPipe, ShowIfFilterPipe, SimpleJsonPathValidatorDirective, SkipLinkDirective, SmsChallengeComponent, StandalonePluginInjector, StateService, Status, StepperModule, StepperOutletComponent, StepperService, Steppers, StrengthValidatorService, StringFilterMapper, StringifyObjectPipe, SupportedApps, TabComponent, TabsModule, TabsOutletComponent, TabsService, TabsetAriaDirective, TenantUiService, TextAreaRowHeightDirective, TextareaAutoresizeDirective, ThemeSwitcherService, TimeIntervalComponent, TimePickerComponent, TimePickerModule, TitleComponent, TitleOutletComponent, TotpAuthComponent, TotpChallengeComponent, TotpSetupComponent, TranslateParserCustom, TranslateService, TranslationLoaderService, TypeaheadComponent, TypeaheadFilterMapper, UiSettingsComponent, UiSettingsModule, UniqueInCollectionByPathValidationDirective, UserEditComponent, UserEditModalComponent, UserEngagementsService, UserMenuItemComponent, UserMenuOutletComponent, UserMenuService, UserModule, UserNameInitialsPipe, UserPreferencesConfigurationStrategy, UserPreferencesService, UserPreferencesStorageInventory, UserPreferencesStorageLocal, UserTotpRevokeComponent, UserTotpSetupComponent, VERSION_MODULE_CONFIG, ValidationPattern, VersionListComponent, VersionModule, VersionService, ViewContext, ViewContextServices, VirtualScrollWindowDirective, VirtualScrollWindowStrategy, VirtualScrollerWrapperComponent, VisibleControlsPipe, WebSDKVersionFactory, WidgetGlobalAutoRefreshService, WidgetTimeContextActionBarPriority, WidgetTimeContextComponent, WidgetsDashboardComponent, WizardBodyComponent, WizardComponent, WizardFooterComponent, WizardHeaderComponent, WizardModalService, WizardModule, WizardOutletComponent, WizardService, ZipService, _virtualScrollWindowStrategyFactory, alertOnError, allEntriesAreEqual, asyncValidateArrayElements, colorValidator, deviceAvailabilityIconMap, extraRoutes, fromFactories, fromTrigger, fromTriggerOnce, getActivatedRoute, getAngularLocalesLanguageString, getBasicInputArrayFormFieldConfig, getDictionaryWithTrimmedKeys, getInjectedHooks, globalAutoRefreshLoading, hookAction, hookActionBar, hookBreadcrumb, hookComponent, hookDataGridActionControls, hookDocs, hookDrawer, hookDynamicProviderConfig, hookFilterMapper, hookGeneric, hookNavigator, hookOptions, hookPatternMessages, hookRoute, hookSearch, hookService, hookStepper, hookTab, hookVersion, hookWidget, hookWizard, initializeServices, internalApps, isEagerDynamicComponents, isExtensionFactory, isLazyDynamicComponents, isPromise, languagesFactory, loadLocale, localeId, localePathFactory, memoize, minColumnGridTrackSize, operationStatusClasses, operationStatusIcons, ratiosByColumnTypes, removeDuplicatesIds, resolveInjectedFactories, retryWithDelay, simpleJsonPathValidator, sortByPriority, stateToFactory, statusAlert, statusClasses, statusIcons, throttle, toObservable, toObservableOfArrays, tooltips, trimTranslationKey, uniqueInCollectionByPathValidator, validateArrayElements, viewContextRoutes, wrapperLegendFieldConfig };
34974
35251
  //# sourceMappingURL=c8y-ngx-components.mjs.map