@c8y/ngx-components 1021.21.0 → 1021.22.26

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 (185) 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 +23 -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/branding/shared/data/branding-tracking.service.d.ts +20 -0
  23. package/branding/shared/data/branding-tracking.service.d.ts.map +1 -0
  24. package/branding/shared/data/branding-version.service.d.ts.map +1 -1
  25. package/branding/shared/data/index.d.ts +1 -0
  26. package/branding/shared/data/index.d.ts.map +1 -1
  27. package/branding/shared/data/store-branding.service.d.ts +8 -1
  28. package/branding/shared/data/store-branding.service.d.ts.map +1 -1
  29. package/branding/shared/lazy/branding/branding.component.d.ts +3 -2
  30. package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
  31. package/branding/shared/lazy/branding-theme-form/branding-theme-form.component.d.ts.map +1 -1
  32. package/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.d.ts.map +1 -1
  33. package/cockpit-config/cockpit-config.module.d.ts +1 -1
  34. package/cockpit-config/cockpit-config.module.d.ts.map +1 -1
  35. package/context-dashboard/context-dashboard.service.d.ts +1 -1
  36. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  37. package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
  38. package/core/common/service-registry.model.d.ts +2 -1
  39. package/core/common/service-registry.model.d.ts.map +1 -1
  40. package/core/common/ui-state.service.d.ts +0 -1
  41. package/core/common/ui-state.service.d.ts.map +1 -1
  42. package/core/i18n/missing-translation-custom.handler.d.ts +1 -0
  43. package/core/i18n/missing-translation-custom.handler.d.ts.map +1 -1
  44. package/core/plugins/index.d.ts +1 -0
  45. package/core/plugins/index.d.ts.map +1 -1
  46. package/core/plugins/plugin-loaded.pipe.d.ts +12 -0
  47. package/core/plugins/plugin-loaded.pipe.d.ts.map +1 -0
  48. package/core/plugins/plugins-resolve.service.d.ts +4 -2
  49. package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
  50. package/core/plugins/plugins.model.d.ts +3 -1
  51. package/core/plugins/plugins.model.d.ts.map +1 -1
  52. package/core/plugins/plugins.service.d.ts +3 -0
  53. package/core/plugins/plugins.service.d.ts.map +1 -1
  54. package/core/router/context-route.component.d.ts +8 -3
  55. package/core/router/context-route.component.d.ts.map +1 -1
  56. package/core/router/context-route.service.d.ts +29 -3
  57. package/core/router/context-route.service.d.ts.map +1 -1
  58. package/core/router/router-tabs.resolver.d.ts +6 -3
  59. package/core/router/router-tabs.resolver.d.ts.map +1 -1
  60. package/core/router/router.model.d.ts +40 -3
  61. package/core/router/router.model.d.ts.map +1 -1
  62. package/core/router/router.module.d.ts +2 -1
  63. package/core/router/router.module.d.ts.map +1 -1
  64. package/core/router/router.service.d.ts +5 -4
  65. package/core/router/router.service.d.ts.map +1 -1
  66. package/core/router/scoped-context-route.service.d.ts +57 -0
  67. package/core/router/scoped-context-route.service.d.ts.map +1 -0
  68. package/core/router/view-context.service.d.ts +8 -18
  69. package/core/router/view-context.service.d.ts.map +1 -1
  70. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  71. package/ecosystem/application-plugins/application-plugins.guard.d.ts.map +1 -1
  72. package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts.map +1 -1
  73. package/esm2022/alarms/alarm-details.component.mjs +7 -9
  74. package/esm2022/alarms/alarm-info.component.mjs +23 -33
  75. package/esm2022/alarms/alarm-severity-to-label.pipe.mjs +2 -2
  76. package/esm2022/alarms/alarms-date-filter.component.mjs +94 -42
  77. package/esm2022/alarms/alarms-type-filter.component.mjs +102 -72
  78. package/esm2022/alarms/alarms-view.service.mjs +17 -3
  79. package/esm2022/alarms/alarms.component.mjs +12 -5
  80. package/esm2022/alarms/alarms.helper.mjs +32 -0
  81. package/esm2022/alarms/alarms.model.mjs +1 -1
  82. package/esm2022/alarms/alarms.module.mjs +7 -7
  83. package/esm2022/alarms/cockpit/index.mjs +13 -17
  84. package/esm2022/alarms/devicemanagement/index.mjs +15 -18
  85. package/esm2022/alarms/index.mjs +7 -5
  86. package/esm2022/branding/shared/data/branding-tracking.service.mjs +58 -0
  87. package/esm2022/branding/shared/data/branding-version.service.mjs +9 -5
  88. package/esm2022/branding/shared/data/index.mjs +2 -1
  89. package/esm2022/branding/shared/data/store-branding.service.mjs +15 -4
  90. package/esm2022/branding/shared/lazy/branding/branding.component.mjs +16 -12
  91. package/esm2022/branding/shared/lazy/branding-theme-form/branding-theme-form.component.mjs +5 -2
  92. package/esm2022/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.mjs +2 -2
  93. package/esm2022/cockpit-config/cockpit-config.module.mjs +6 -3
  94. package/esm2022/cockpit-config/feature-config.component.mjs +5 -4
  95. package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -13
  96. package/esm2022/core/bootstrap/bootstrap.component.mjs +4 -3
  97. package/esm2022/core/common/service-registry.model.mjs +1 -1
  98. package/esm2022/core/common/ui-state.service.mjs +1 -19
  99. package/esm2022/core/i18n/missing-translation-custom.handler.mjs +5 -1
  100. package/esm2022/core/i18n/translation-loader.service.mjs +2 -2
  101. package/esm2022/core/plugins/index.mjs +2 -1
  102. package/esm2022/core/plugins/plugin-loaded.pipe.mjs +26 -0
  103. package/esm2022/core/plugins/plugins-resolve.service.mjs +5 -1
  104. package/esm2022/core/plugins/plugins.model.mjs +2 -1
  105. package/esm2022/core/plugins/plugins.service.mjs +13 -5
  106. package/esm2022/core/router/context-route.component.mjs +23 -13
  107. package/esm2022/core/router/context-route.service.mjs +37 -5
  108. package/esm2022/core/router/router-tabs.resolver.mjs +66 -21
  109. package/esm2022/core/router/router.model.mjs +6 -1
  110. package/esm2022/core/router/router.module.mjs +20 -13
  111. package/esm2022/core/router/router.service.mjs +24 -10
  112. package/esm2022/core/router/scoped-context-route.service.mjs +157 -0
  113. package/esm2022/core/router/view-context.service.mjs +59 -16
  114. package/esm2022/core/tabs/tabs-outlet.component.mjs +3 -3
  115. package/esm2022/core/version/websdk-plugin-version.factory.mjs +2 -2
  116. package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
  117. package/esm2022/ecosystem/activity-log/activity-log.component.mjs +3 -3
  118. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +67 -23
  119. package/esm2022/ecosystem/application-plugins/application-plugins.guard.mjs +8 -2
  120. package/esm2022/ecosystem/application-plugins/orphaned-status-cell-renderer.component.mjs +7 -1
  121. package/esm2022/interval-picker/interval-picker.component.mjs +1 -1
  122. package/esm2022/interval-picker/interval-picker.model.mjs +1 -1
  123. package/esm2022/protocol-lwm2m/ng1/plugin-checker.service.mjs +5 -1
  124. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +2 -1
  125. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +73 -4
  126. package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +29 -5
  127. package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +7 -1
  128. package/esm2022/widgets/implementations/alarms/alarm-widget.service.mjs +12 -2
  129. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +12 -16
  130. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
  131. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +14 -17
  132. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
  133. package/fesm2022/c8y-ngx-components-alarms.mjs +389 -268
  134. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  135. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +76 -9
  136. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
  137. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +19 -12
  138. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  139. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +7 -5
  140. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  141. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +46 -12
  142. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  143. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -2
  144. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  145. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +79 -23
  146. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  147. package/fesm2022/c8y-ngx-components-ecosystem.mjs +81 -25
  148. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  149. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
  150. package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs +4 -0
  151. package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs.map +1 -1
  152. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +1 -0
  153. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  154. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +124 -15
  155. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  156. package/fesm2022/c8y-ngx-components.mjs +489 -176
  157. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  158. package/interval-picker/interval-picker.component.d.ts +2 -2
  159. package/interval-picker/interval-picker.component.d.ts.map +1 -1
  160. package/interval-picker/interval-picker.model.d.ts +5 -0
  161. package/interval-picker/interval-picker.model.d.ts.map +1 -1
  162. package/locales/de.po +431 -538
  163. package/locales/en.po +2 -889
  164. package/locales/en_US.po +2 -880
  165. package/locales/es.po +462 -540
  166. package/locales/fr.po +470 -549
  167. package/locales/ja_JP.po +405 -598
  168. package/locales/ko.po +649 -502
  169. package/locales/locales.pot +27 -12
  170. package/locales/nl.po +463 -541
  171. package/locales/pl.po +504 -554
  172. package/locales/pt_BR.po +466 -543
  173. package/locales/zh_CN.po +650 -498
  174. package/locales/zh_TW.po +650 -498
  175. package/package.json +1 -1
  176. package/protocol-lwm2m/ng1/plugin-checker.service.d.ts +4 -0
  177. package/protocol-lwm2m/ng1/plugin-checker.service.d.ts.map +1 -1
  178. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  179. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +12 -1
  180. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  181. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +12 -1
  182. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  183. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +11 -1
  184. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  185. package/widgets/implementations/alarms/alarm-widget.service.d.ts.map +1 -1
@@ -4,17 +4,16 @@ import * as i2$2 from 'ngx-bootstrap/dropdown';
4
4
  import { BsDropdownModule, BsDropdownDirective } from 'ngx-bootstrap/dropdown';
5
5
  import * as i3$1 from '@angular/cdk/a11y';
6
6
  import { A11yModule } from '@angular/cdk/a11y';
7
- import { castArray, flatten, uniq, sortBy, groupBy, camelCase, isEqual, isUndefined, throttle as throttle$1, keys, get, isNaN as isNaN$1, isFinite, each, mapValues, mapKeys, forEach, reduce, union, cloneDeep, uniqBy, assign, min, every, first, map as map$1, find, negate, upperFirst, memoize as memoize$1, property, some, entries, omitBy, isDate, orderBy, flatMap, isEmpty, filter as filter$1, snakeCase, matches, isString, clone, toNumber, isEqualWith, escape as escape$1, escapeRegExp, assignWith, set, omit, pick, has, transform, identity, flow, isNil, chunk, values, without, indexOf, parseInt as parseInt$1, kebabCase, forOwn } from 'lodash-es';
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';
7
+ import { castArray, flatten, uniq, sortBy, groupBy, camelCase, isEqual, isUndefined, throttle as throttle$1, keys, get, isNaN as isNaN$1, isFinite, each, mapValues, mapKeys, forEach, reduce, union, cloneDeep, uniqBy, assign, min, every, first, map as map$2, find, negate, upperFirst, memoize as memoize$1, property, some, entries, omitBy, isDate, orderBy, flatMap, isEmpty, filter as filter$1, snakeCase, matches, isString, clone, toNumber, isEqualWith, escape as escape$1, escapeRegExp, assignWith, set, omit, pick, has, transform, identity, flow, isNil, chunk, values, without, indexOf, parseInt as parseInt$1, kebabCase, forOwn } from 'lodash-es';
8
+ import { merge, of, defer, combineLatest, race, isObservable, from, Subject, BehaviorSubject, NEVER, Observable, firstValueFrom, map as map$1, distinctUntilChanged as distinctUntilChanged$1, fromEvent, pipe, throwError, concat, EMPTY, timer, fromEventPattern, startWith as startWith$1, switchMap as switchMap$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
- import { satisfies, compare, coerce } from 'semver';
18
17
  import { coerceNumberProperty } from '@angular/cdk/coercion';
19
18
  import * as i2$1 from '@angular/cdk/scrolling';
20
19
  import { VIRTUAL_SCROLL_STRATEGY, ScrollingModule } from '@angular/cdk/scrolling';
@@ -30,6 +29,7 @@ export * from '@c8y/ngx-components/gettext';
30
29
  import * as i3 from 'ngx-bootstrap/datepicker';
31
30
  import { BsDatepickerModule, BsDatepickerDirective } from 'ngx-bootstrap/datepicker';
32
31
  import { defineLocale, enGbLocale, zhCnLocale, ptBrLocale, plLocale, nlLocale, koLocale, jaLocale, frLocale, esLocale, deLocale } from 'ngx-bootstrap/chronos';
32
+ import { compare, coerce } from 'semver';
33
33
  import saveAs$1, { saveAs } from 'file-saver';
34
34
  import * as i1$2 from '@angular/platform-browser';
35
35
  import { BlobReader, ZipReader, BlobWriter, ZipWriter } from '@zip.js/zip.js';
@@ -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
@@ -897,25 +897,8 @@ class AppStateService extends StateService {
897
897
  this.state.supportUrl = await this.options.getSupportUrl();
898
898
  this.state.activateSupportUserAvailable = await this.options.getActivateSupportUser();
899
899
  this.state.versions.backend = await this.options.getSystemOption('system', 'version');
900
- try {
901
- this.showIncompatibleVersionsError();
902
- }
903
- catch (ex) {
904
- // ignore this
905
- }
906
900
  this.emitNewState();
907
901
  }
908
- showIncompatibleVersionsError() {
909
- if (this.options.noVersionWarning) {
910
- return;
911
- }
912
- const uiVersion = this.state.versions.ui.ngx;
913
- const backendVersion = this.state.versions.backend;
914
- if (!satisfies(uiVersion, `<=${backendVersion} || ~${backendVersion}`)) {
915
- const errorContent = `You are running version ${uiVersion} of the UI and version ${backendVersion} of backend!`;
916
- console.log('%c ' + errorContent, 'font-weight: bold; font-size: 30px; color: red;');
917
- }
918
- }
919
902
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppStateService, deps: [{ token: i1.ApplicationService }, { token: i4.ApiService }, { token: OptionsService }, { token: i1.FetchClient }, { token: i1.TenantLoginOptionsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
920
903
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppStateService, providedIn: 'root' }); }
921
904
  }
@@ -1685,6 +1668,7 @@ class MissingTranslationCustomHandler {
1685
1668
  else {
1686
1669
  translation = this.parser.interpolate(messageKey, interpolateParams);
1687
1670
  }
1671
+ translation = this.removeContextIndicators(translation);
1688
1672
  this.addToCache(messageKey, interpolateParams, translation);
1689
1673
  }
1690
1674
  return translation;
@@ -1715,6 +1699,9 @@ class MissingTranslationCustomHandler {
1715
1699
  }
1716
1700
  return undefined;
1717
1701
  }
1702
+ removeContextIndicators(translation) {
1703
+ return translation.replace(/`[^`]*`/g, '');
1704
+ }
1718
1705
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: MissingTranslationCustomHandler, deps: [{ token: i1$1.TranslateParser }, { token: PatternMessagesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1719
1706
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: MissingTranslationCustomHandler }); }
1720
1707
  }
@@ -4476,6 +4463,7 @@ var ApplicationPluginStatus;
4476
4463
  ApplicationPluginStatus["LATEST"] = "LATEST";
4477
4464
  ApplicationPluginStatus["OUTDATED"] = "OUTDATED";
4478
4465
  ApplicationPluginStatus["REVOKED"] = "REVOKED";
4466
+ ApplicationPluginStatus["AUTO"] = "AUTO";
4479
4467
  })(ApplicationPluginStatus || (ApplicationPluginStatus = {}));
4480
4468
  var PackageType;
4481
4469
  (function (PackageType) {
@@ -4565,6 +4553,7 @@ class PluginsResolveService {
4565
4553
  this._pluginDetails$ = new Subject();
4566
4554
  this._allPluginsLoaded$ = new BehaviorSubject(false);
4567
4555
  this._contextPathsFromWhereRemotesHaveBeenLoaded$ = new BehaviorSubject([]);
4556
+ this._loadedPluginNames$ = new BehaviorSubject([]);
4568
4557
  this.injectors$ = this._injectors$.asObservable().pipe(
4569
4558
  // not specifying the bufferSize of shareReplay so all injectors are received on subscription
4570
4559
  shareReplay());
@@ -4575,6 +4564,7 @@ class PluginsResolveService {
4575
4564
  this.allPluginsLoaded$ = this._allPluginsLoaded$.asObservable();
4576
4565
  this.contextPathsFromWhereRemotesHaveBeenLoaded$ =
4577
4566
  this._contextPathsFromWhereRemotesHaveBeenLoaded$.asObservable();
4567
+ this.loadedPluginNames$ = this._loadedPluginNames$.asObservable();
4578
4568
  }
4579
4569
  /**
4580
4570
  * Loads plugins by resolving the remote NgModules and injecting it. Also attaching
@@ -4601,6 +4591,8 @@ class PluginsResolveService {
4601
4591
  else {
4602
4592
  this.loadModule(moduleOrProviders);
4603
4593
  }
4594
+ const newLoadedPluginNames = [...this._loadedPluginNames$.value, name];
4595
+ this._loadedPluginNames$.next(newLoadedPluginNames);
4604
4596
  }
4605
4597
  catch (ex) {
4606
4598
  console.error(`Failed to load ${name}`, ex);
@@ -4837,8 +4829,9 @@ class PluginsService {
4837
4829
  */
4838
4830
  async addRemotes(application, plugins) {
4839
4831
  const pluginsArray = Array.isArray(plugins) ? plugins : [plugins];
4840
- const appConfig = application?.config || { remotes: {} };
4841
- const appConfigRemotes = appConfig?.remotes || {};
4832
+ const manifestRemotes = application.manifest?.remotes || {};
4833
+ const appConfig = application?.config;
4834
+ const appConfigRemotes = appConfig?.remotes || manifestRemotes;
4842
4835
  const appConfigExcludedRemotes = appConfig?.excludedRemotes || {};
4843
4836
  // only normal and self optional scoped plugins should be added to remotes
4844
4837
  // self scoped plugins will be automatically added
@@ -4856,8 +4849,9 @@ class PluginsService {
4856
4849
  */
4857
4850
  async removeRemotes(application, plugins) {
4858
4851
  const pluginsArray = Array.isArray(plugins) ? plugins : [plugins];
4859
- const appConfig = application?.config || { remotes: {} };
4860
- const appConfigRemotes = appConfig?.remotes || {};
4852
+ const manifestRemotes = application.manifest?.remotes || {};
4853
+ const appConfig = application?.config;
4854
+ const appConfigRemotes = appConfig?.remotes || manifestRemotes;
4861
4855
  const appConfigExcludedRemotes = appConfig?.excludedRemotes || {};
4862
4856
  // app plugins need to be removed from remotes
4863
4857
  const newRemotes = this.removePluginsFromRemotesConfig(appConfigRemotes, plugins);
@@ -4907,6 +4901,12 @@ class PluginsService {
4907
4901
  return undefined;
4908
4902
  }
4909
4903
  }
4904
+ async resetRemotes(application) {
4905
+ return await this.applicationService.updateApplicationConfig(application, {
4906
+ remotes: undefined,
4907
+ excludedRemotes: undefined
4908
+ });
4909
+ }
4910
4910
  sortVersions(source, order) {
4911
4911
  const sourceCopy = cloneDeep(source);
4912
4912
  if (source.list && source.path) {
@@ -5173,6 +5173,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
5173
5173
  }]
5174
5174
  }] });
5175
5175
 
5176
+ class PluginLoadedPipe {
5177
+ constructor(pluginsResolve) {
5178
+ this.pluginsResolve = pluginsResolve;
5179
+ }
5180
+ transform(pluginName) {
5181
+ if (!pluginName) {
5182
+ return of(false);
5183
+ }
5184
+ return this.pluginsResolve.loadedPluginNames$.pipe(map$1(pluginNames => pluginNames.includes(pluginName)), distinctUntilChanged$1());
5185
+ }
5186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PluginLoadedPipe, deps: [{ token: PluginsResolveService }], target: i0.ɵɵFactoryTarget.Pipe }); }
5187
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: PluginLoadedPipe, isStandalone: true, name: "c8yPluginLoaded" }); }
5188
+ }
5189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PluginLoadedPipe, decorators: [{
5190
+ type: Pipe,
5191
+ args: [{
5192
+ name: 'c8yPluginLoaded',
5193
+ standalone: true
5194
+ }]
5195
+ }], ctorParameters: () => [{ type: PluginsResolveService }] });
5196
+
5176
5197
  /**
5177
5198
  * A service to load translations from different sources.
5178
5199
  * It combines translations from the app, user-defined translations, and plugins.
@@ -5194,7 +5215,7 @@ class TranslationLoaderService {
5194
5215
  this.translateService.onLangChange
5195
5216
  .pipe(map(event => event.lang), distinctUntilChanged(), switchMap(lang => this.getTranslation(lang).pipe(map(translations => ({ lang, translations })))))
5196
5217
  .subscribe(({ lang, translations }) => {
5197
- this.translateService.setTranslation(lang, translations, false);
5218
+ this.translateService.setTranslation(lang, translations, true);
5198
5219
  });
5199
5220
  }
5200
5221
  getTranslation(lang) {
@@ -6473,7 +6494,7 @@ class FilesService {
6473
6494
  * @returns Returns list of file extensions.
6474
6495
  */
6475
6496
  getFileExtensions() {
6476
- return uniq(flatten(map$1(this.fileTypeExtensionsMap, ({ exts }) => exts)));
6497
+ return uniq(flatten(map$2(this.fileTypeExtensionsMap, ({ exts }) => exts)));
6477
6498
  }
6478
6499
  /**
6479
6500
  * The list of generic file types.
@@ -9333,7 +9354,7 @@ class InterAppService {
9333
9354
  * @returns Observable of Application
9334
9355
  */
9335
9356
  getApp$(key) {
9336
- return this.stateService.currentAppsOfUser.pipe(map$2(apps => apps.find(app => app.key === key)));
9357
+ return this.stateService.currentAppsOfUser.pipe(map$1(apps => apps.find(app => app.key === key)));
9337
9358
  }
9338
9359
  /**
9339
9360
  * Checks if current application is the same as the one that key is provided
@@ -9341,7 +9362,7 @@ class InterAppService {
9341
9362
  * @returns Observable of boolean; true if current app matches provided key.
9342
9363
  */
9343
9364
  isCurrentApp$(key) {
9344
- return this.stateService.currentApplication.pipe(map$2(app => app?.key === key));
9365
+ return this.stateService.currentApplication.pipe(map$1(app => app?.key === key));
9345
9366
  }
9346
9367
  /**
9347
9368
  * Checks if other (other than current) application link should be displayed. It consists of two conditions:
@@ -9352,9 +9373,9 @@ class InterAppService {
9352
9373
  */
9353
9374
  shouldShowAppLink$(appKey) {
9354
9375
  return combineLatest([
9355
- this.getApp$(appKey).pipe(map$2(Boolean)),
9356
- this.isCurrentApp$(appKey).pipe(map$2(val => !val))
9357
- ]).pipe(map$2(([linkedAppIsAvailable, linkLeadsToOtherAppThanCurrent]) => linkedAppIsAvailable && linkLeadsToOtherAppThanCurrent));
9376
+ this.getApp$(appKey).pipe(map$1(Boolean)),
9377
+ this.isCurrentApp$(appKey).pipe(map$1(val => !val))
9378
+ ]).pipe(map$1(([linkedAppIsAvailable, linkLeadsToOtherAppThanCurrent]) => linkedAppIsAvailable && linkLeadsToOtherAppThanCurrent));
9358
9379
  }
9359
9380
  /**
9360
9381
  * Navigates to app by provided app key
@@ -9362,7 +9383,7 @@ class InterAppService {
9362
9383
  * @param path {string} - Additional path in target application.
9363
9384
  */
9364
9385
  async navigateToApp(appKey, path) {
9365
- const contextPath = await firstValueFrom(this.getApp$(appKey).pipe(map$2(app => app?.contextPath)));
9386
+ const contextPath = await firstValueFrom(this.getApp$(appKey).pipe(map$1(app => app?.contextPath)));
9366
9387
  if (!contextPath) {
9367
9388
  const msg = this.translateService.instant(gettext$1('Application with key "{{appKey}}" not found.'), { appKey });
9368
9389
  this.alertService.danger(msg);
@@ -16949,11 +16970,11 @@ class TabsOutletComponent {
16949
16970
  return { widthScroll, width, scrollLeft };
16950
16971
  }
16951
16972
  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" }] }); }
16973
+ 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
16974
  }
16954
16975
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TabsOutletComponent, decorators: [{
16955
16976
  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" }]
16977
+ 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
16978
  }], ctorParameters: () => [{ type: i1$3.Router }, { type: i0.Renderer2 }, { type: HeaderService }, { type: TabsService }], propDecorators: { tabs: [{
16958
16979
  type: Input
16959
16980
  }], orientation: [{
@@ -18079,8 +18100,9 @@ class BootstrapComponent {
18079
18100
  // Remotes in the URL are used in the development process.
18080
18101
  let remotes = PluginsResolveService.mergeRemotes([
18081
18102
  selfRemotes,
18082
- this.options?.remotes,
18083
- config?.remotes,
18103
+ // if the config remotes are not present we fall back to the application remotes
18104
+ config?.remotes || this.options?.remotes || {},
18105
+ // url remotes should always be loaded
18084
18106
  this.pluginsResolve.loadUrlRemotes()
18085
18107
  ]);
18086
18108
  // remove remotes that are on the exclude list
@@ -18998,7 +19020,7 @@ class SelectKeyboardService {
18998
19020
  return list.changes.pipe(startWith$1(list), switchMap$1((items) => combineLatest([
18999
19021
  merge(fromEvent(input, 'keyup'), fromEvent(input, 'keydown')),
19000
19022
  of(items.toArray())
19001
- ])), map$2(([e, items]) => this.handleKeyboard(e, input, items, dropdown)), distinctUntilChanged$1(), takeUntil$1(this.destroyed$));
19023
+ ])), map$1(([e, items]) => this.handleKeyboard(e, input, items, dropdown)), distinctUntilChanged$1(), takeUntil$1(this.destroyed$));
19002
19024
  }
19003
19025
  ngOnDestroy() {
19004
19026
  this.unregister();
@@ -22082,7 +22104,7 @@ class WebSDKPluginVersionFactory {
22082
22104
  const versionsBehindKey = modules.map(module => {
22083
22105
  return {
22084
22106
  label: `${contextPath} => ${module}`,
22085
- version: version || 'unspecified',
22107
+ version: version || 'latest',
22086
22108
  type: 'INSTALLED_MF_PLUGINS',
22087
22109
  hidden: true,
22088
22110
  custom: {
@@ -23148,7 +23170,7 @@ class DropAreaComponent {
23148
23170
  return maxFileSizeInMegaBytes * 1_048_576;
23149
23171
  }
23150
23172
  getFilesNamesAsString(files) {
23151
- return map$1(files, ({ name }) => name).join(', ');
23173
+ return map$2(files, ({ name }) => name).join(', ');
23152
23174
  }
23153
23175
  isFilesArrayEmpty() {
23154
23176
  return get(this, 'files.length', 0) === 0;
@@ -24148,6 +24170,11 @@ var ViewContext;
24148
24170
  ViewContext["Service"] = "service/:id";
24149
24171
  ViewContext["DatapointLibrary"] = "datapointlibrary/:id";
24150
24172
  ViewContext["Simulators"] = "simulators/:id";
24173
+ ViewContext["Alarms"] = "alarms/:id";
24174
+ ViewContext["GroupAlarms"] = "group/:id/alarms/:id";
24175
+ ViewContext["DeviceAlarms"] = "device/:id/alarms/:id";
24176
+ ViewContext["ServiceAlarms"] = "service/:id/alarms/:id";
24177
+ ViewContext["SimulatorsAlarms"] = "simulators/:id/alarms/:id";
24151
24178
  })(ViewContext || (ViewContext = {}));
24152
24179
 
24153
24180
  class RouterTabsResolver {
@@ -24158,39 +24185,84 @@ class RouterTabsResolver {
24158
24185
  get routerStateSnapshot() {
24159
24186
  return this.router.routerState.snapshot;
24160
24187
  }
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) => {
24188
+ resolve(currentRoute) {
24189
+ const routeConfig = currentRoute.routeConfig;
24190
+ const latestChildren = this.getLatestChildRoutes(routeConfig.rootContext);
24191
+ return from(latestChildren || []).pipe(mergeMap((child) => from(this.getGuards(child)).pipe(map(canActivate => canActivate(currentRoute, this.routerStateSnapshot)), mergeMap((result) => {
24164
24192
  if (isObservable(result)) {
24165
24193
  return result;
24166
24194
  }
24167
- if (result && typeof result.then === 'function') {
24168
- return from(result);
24195
+ const resultAsPromise = result;
24196
+ if (resultAsPromise && typeof resultAsPromise.then === 'function') {
24197
+ return from(resultAsPromise);
24169
24198
  }
24170
24199
  return of(result);
24171
24200
  }), tap(result => {
24172
24201
  if (Array.isArray(result)) {
24173
24202
  child.tabs = result;
24174
24203
  }
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
24204
+ }), every$1(result => !!result), filter(result => result), mergeMap(() => (Array.isArray(child.tabs) ? from(child.tabs) : of(child))), map(result => {
24205
+ const url = this.getBaselUrl(currentRoute).join('/');
24206
+ return result.label || result.path
24207
+ ? {
24208
+ label: result.label,
24209
+ icon: result.icon,
24210
+ path: `/${decodeURIComponent(url)}/${result.path}`,
24211
+ priority: result.priority,
24212
+ hide: result.hide,
24213
+ badge: result.badge,
24214
+ tooltipText: result.tooltipText,
24215
+ featureId: result.featureId,
24216
+ tabsOutlet: result.tabsOutlet,
24217
+ showAlways: result.showAlways
24218
+ }
24219
+ : undefined;
24220
+ }))), filter(tabs => !!tabs), toArray());
24221
+ }
24222
+ getBaselUrl(currentRoute) {
24223
+ let prefix = [];
24224
+ if (currentRoute.parent?.url.length > 0) {
24225
+ prefix = this.getBaselUrl(currentRoute.parent);
24226
+ }
24227
+ return [...prefix, ...currentRoute.url];
24228
+ }
24229
+ getLatestChildRoutes(context) {
24230
+ const thisContextRoute = this.findRootContextRoutes(this.router.config, context);
24231
+ return thisContextRoute?.children || [];
24232
+ }
24233
+ findRootContextRoutes(routes, context) {
24234
+ for (const route of routes) {
24235
+ if (route.rootContext === context) {
24236
+ return route;
24185
24237
  }
24186
- : undefined))), filter(tabs => !!tabs), toArray());
24238
+ if (route.children) {
24239
+ const childResult = this.findRootContextRoutes(route.children, context);
24240
+ if (childResult) {
24241
+ return childResult;
24242
+ }
24243
+ }
24244
+ }
24245
+ return null;
24187
24246
  }
24188
24247
  getGuards(child) {
24189
- const guards = (child.canActivate || []).map(guard => {
24190
- return this.injector.get(guard);
24248
+ const injector = child._injector || this.injector;
24249
+ const canActivates = child.canActivate || [];
24250
+ const guards = canActivates.map(guard => {
24251
+ return ((route, state) => {
24252
+ // for legacy CanActivate guards
24253
+ const instance = this.injector.get(guard, null);
24254
+ if (instance) {
24255
+ return instance.canActivate(route, state);
24256
+ }
24257
+ // for current CanActivateFn guards
24258
+ const canActivate = guard;
24259
+ return runInInjectionContext(injector, () => {
24260
+ return canActivate(route, state);
24261
+ });
24262
+ });
24191
24263
  });
24192
24264
  if (child.data && child.data.showIf) {
24193
- guards.push({ canActivate: child.data.showIf });
24265
+ guards.push((route, state) => child.data.showIf(route, state));
24194
24266
  }
24195
24267
  return guards;
24196
24268
  }
@@ -24206,22 +24278,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
24206
24278
 
24207
24279
  class ViewContextServices {
24208
24280
  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
24281
+ [ViewContext.Device]: { service: InventoryService, path: ViewContext.Device, autoRoute: true },
24282
+ [ViewContext.Group]: { service: InventoryService, path: ViewContext.Group, autoRoute: true },
24283
+ [ViewContext.User]: { service: UserService, path: ViewContext.User, autoRoute: true },
24284
+ [ViewContext.Application]: {
24285
+ service: ApplicationService,
24286
+ path: ViewContext.Application,
24287
+ autoRoute: true
24288
+ },
24289
+ [ViewContext.Microservice]: {
24290
+ service: ApplicationService,
24291
+ path: ViewContext.Microservice,
24292
+ autoRoute: true
24293
+ },
24294
+ [ViewContext.Extension]: {
24295
+ service: ApplicationService,
24296
+ path: ViewContext.Extension,
24297
+ autoRoute: true
24298
+ },
24299
+ [ViewContext.Feature]: {
24300
+ service: ApplicationService,
24301
+ path: ViewContext.Feature,
24302
+ autoRoute: true
24303
+ },
24304
+ [ViewContext.SubscribedApplications]: {
24305
+ service: ApplicationService,
24306
+ path: ViewContext.SubscribedApplications,
24307
+ autoRoute: true
24308
+ },
24309
+ [ViewContext.Tenant]: { service: TenantService, path: ViewContext.Tenant, autoRoute: true },
24310
+ [ViewContext.Report]: { service: InventoryService, path: ViewContext.Report, autoRoute: true },
24311
+ [ViewContext.Service]: {
24312
+ service: InventoryService,
24313
+ path: ViewContext.Service,
24314
+ autoRoute: true
24315
+ },
24316
+ [ViewContext.DatapointLibrary]: {
24317
+ service: InventoryService,
24318
+ path: ViewContext.DatapointLibrary,
24319
+ autoRoute: true
24320
+ },
24321
+ [ViewContext.Simulators]: {
24322
+ service: InventoryService,
24323
+ path: ViewContext.Simulators,
24324
+ autoRoute: true
24325
+ },
24326
+ [ViewContext.Alarms]: { service: AlarmService, path: ':id', autoRoute: false },
24327
+ [ViewContext.GroupAlarms]: { service: AlarmService, path: ':id', autoRoute: false },
24328
+ [ViewContext.DeviceAlarms]: { service: AlarmService, path: ':id', autoRoute: false },
24329
+ [ViewContext.SimulatorsAlarms]: { service: AlarmService, path: ':id', autoRoute: false },
24330
+ [ViewContext.ServiceAlarms]: { service: AlarmService, path: ':id', autoRoute: false }
24222
24331
  }; }
24223
24332
  static contextToService(context) {
24224
- return ViewContextServices.services[context];
24333
+ return ViewContextServices.services[context]?.service;
24334
+ }
24335
+ static getPath(context) {
24336
+ return ViewContextServices.services[context]?.path;
24337
+ }
24338
+ static isAutoRoute(context) {
24339
+ return ViewContextServices.services[context]?.autoRoute;
24225
24340
  }
24226
24341
  }
24227
24342
 
@@ -24233,8 +24348,8 @@ class ContextRouteService {
24233
24348
  this.apiService = apiService;
24234
24349
  this.injector = injector;
24235
24350
  this.lastAddedTabs = [];
24236
- this.refreshTrigger = new Subject();
24237
24351
  this.ID_REGEX = /([0-9]+)/;
24352
+ this.refreshTrigger$ = new Subject();
24238
24353
  /**
24239
24354
  * Last context data snapshot
24240
24355
  */
@@ -24260,24 +24375,53 @@ class ContextRouteService {
24260
24375
  }
24261
24376
  return null;
24262
24377
  }
24378
+ /**
24379
+ * Returns a route for the given ContextData.
24380
+ *
24381
+ * @param contextData The ContextData object.
24382
+ * @returns A route with the ids set correctly.
24383
+ */
24263
24384
  getContextRoute(contextData) {
24264
- return contextData.context.replace(':id', contextData.contextData.id);
24385
+ return contextData.context.replace(/:id/g, contextData.contextData.id);
24386
+ }
24387
+ /**
24388
+ * Verifies if a given url is a view context route.
24389
+ *
24390
+ * @param url A route url.
24391
+ * @param contextToCheck The view context(s) to check. If not provided, all contexts are checked.
24392
+ * @returns true if the given url is a view context route.
24393
+ */
24394
+ isContextRoute(url, contextToCheck = []) {
24395
+ const viewContexts = contextToCheck.length === 0 ? Object.values(ViewContext) : contextToCheck;
24396
+ // replace all :id placeholders with a regex matcher for a number
24397
+ const regexMatchers = viewContexts.map(context => `/${context.replace(/:id/g, '([0-9]+)')}`);
24398
+ const matchingRegexContext = regexMatchers.find(context => new RegExp(context).test(url));
24399
+ return !!matchingRegexContext;
24265
24400
  }
24401
+ /**
24402
+ * @deprecated: Use ScopedContextRouteService instead. Will be removed in 10.22
24403
+ */
24266
24404
  init(route) {
24267
24405
  this.routerSubscription = this.router.events
24268
24406
  .pipe(filter(e => e instanceof NavigationEnd))
24269
24407
  .subscribe(() => this.redirectToFirstTab());
24270
24408
  this.dataSubscription = route.data
24271
- .pipe(merge$1(this.updatedContext(route), this.refreshTrigger), switchMap(() => this.tabsResolver.resolve(route.snapshot)))
24409
+ .pipe(merge$1(this.updatedContext(route), this.refreshTrigger$), switchMap(() => this.tabsResolver.resolve(route.snapshot)))
24272
24410
  .subscribe(tabs => this.updateTabs(tabs));
24273
24411
  }
24412
+ /**
24413
+ * @deprecated: Use ScopedContextRouteService instead. Will be removed in 10.22
24414
+ */
24274
24415
  destroy() {
24275
24416
  this.dataSubscription.unsubscribe();
24276
24417
  this.routerSubscription.unsubscribe();
24277
24418
  this.lastAddedTabs.forEach(t => this.tabsService.remove(t));
24278
24419
  }
24420
+ /**
24421
+ * Reloads all ViewContexts.
24422
+ */
24279
24423
  refreshContext() {
24280
- this.refreshTrigger.next();
24424
+ this.refreshTrigger$.next();
24281
24425
  }
24282
24426
  /**
24283
24427
  * Sets a new contextData in the ActivatedRoute.
@@ -24293,6 +24437,9 @@ class ContextRouteService {
24293
24437
  }
24294
24438
  data.contextData = { ...contextData };
24295
24439
  }
24440
+ /**
24441
+ * @deprecated: Use ScopedContextRouteService instead. Will be removed in 10.21
24442
+ */
24296
24443
  updatedContext(route) {
24297
24444
  const { data } = route.snapshot;
24298
24445
  const serviceInstance = ViewContextServices.contextToService(data.context);
@@ -24372,6 +24519,237 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
24372
24519
  }]
24373
24520
  }], ctorParameters: () => [{ type: RouterTabsResolver }, { type: TabsService }, { type: i1$3.Router }, { type: i4.ApiService }, { type: i0.Injector }] });
24374
24521
 
24522
+ /**
24523
+ * A service which is injected into the context route component to handle the context data.
24524
+ */
24525
+ class ScopedContextRouteService {
24526
+ constructor(tabsResolver, tabsService, router, apiService, injector, destroyRef) {
24527
+ this.tabsResolver = tabsResolver;
24528
+ this.tabsService = tabsService;
24529
+ this.router = router;
24530
+ this.apiService = apiService;
24531
+ this.injector = injector;
24532
+ this.destroyRef = destroyRef;
24533
+ this.lastAddedTabs = [];
24534
+ this.refreshTrigger$ = new Subject();
24535
+ this.ID_REGEX = /([0-9]+)/;
24536
+ }
24537
+ /**
24538
+ * Indicates that the data is loading
24539
+ * @returns An boolean observable which indicates if the data is loading.
24540
+ */
24541
+ isLoading$() {
24542
+ return this.router.events.pipe(filter(e => (e instanceof ActivationStart || e instanceof ChildActivationEnd) &&
24543
+ e.snapshot.routeConfig?.rootContext === this.currentContext), map(e => e instanceof ActivationStart), takeUntilDestroyed(this.destroyRef));
24544
+ }
24545
+ /**
24546
+ * Initializes the context route.
24547
+ * @param route The current activated route.
24548
+ */
24549
+ init(route) {
24550
+ this.currentContext = route.routeConfig.rootContext;
24551
+ if (!this.currentContext) {
24552
+ throw new Error(`${ScopedContextRouteService.name} should not be used on a route without a rootContext`);
24553
+ }
24554
+ this.router.events
24555
+ .pipe(filter(e => e instanceof ActivationEnd), takeUntilDestroyed(this.destroyRef))
24556
+ .subscribe((e) => this.redirectToFirstTab(e));
24557
+ route.data
24558
+ .pipe(merge$1(this.updatedContext(route), this.refreshTrigger$), switchMap(() => this.tabsResolver.resolve(route.snapshot)), takeUntilDestroyed(this.destroyRef))
24559
+ .subscribe(tabs => this.updateTabs(tabs));
24560
+ }
24561
+ /**
24562
+ * Destroys the service.
24563
+ */
24564
+ ngOnDestroy() {
24565
+ this.lastAddedTabs.forEach(t => this.tabsService.remove(t));
24566
+ }
24567
+ /**
24568
+ * Refreshes the context.
24569
+ */
24570
+ refreshContext() {
24571
+ this.refreshTrigger$.next();
24572
+ }
24573
+ /**
24574
+ * Sets an API hook to refresh the contextData on changes.
24575
+ * @param activatedRoute The current activated route.
24576
+ */
24577
+ updatedContext(route) {
24578
+ const { data } = route.snapshot;
24579
+ const serviceInstance = ViewContextServices.contextToService(data.context);
24580
+ if (serviceInstance) {
24581
+ const service = this.injector.get(serviceInstance);
24582
+ const detailsUrlRegex = service
24583
+ .getDetailUrl(data.contextData)
24584
+ .replace(/\d+/g, '?\\d*');
24585
+ const contextRegex = new RegExp(detailsUrlRegex, 'i');
24586
+ const childrenRegex = new RegExp(`${detailsUrlRegex}/child`, 'i');
24587
+ const filterResponse = ({ url, method }) => {
24588
+ const contextChanged = contextRegex.test(url) && ['POST', 'PUT'].includes(method);
24589
+ const childrenAffected = childrenRegex.test(url) && ['POST', 'DELETE'].includes(method);
24590
+ return contextChanged || childrenAffected;
24591
+ };
24592
+ return this.apiService.hookResponse(filterResponse);
24593
+ }
24594
+ return NEVER;
24595
+ }
24596
+ updateTabs(tabs = []) {
24597
+ this.lastAddedTabs.forEach(t => this.tabsService.remove(t));
24598
+ this.lastAddedTabs = tabs;
24599
+ tabs.forEach(t => this.tabsService.add(t));
24600
+ this.redirectToFirstTab();
24601
+ }
24602
+ redirectToFirstTab(event) {
24603
+ const currentQueryParams = this.router.routerState.snapshot.root.queryParams;
24604
+ const queryParamsString = new URLSearchParams(currentQueryParams).toString();
24605
+ const queryParamsSuffix = queryParamsString ? `?${queryParamsString}` : '';
24606
+ if (event) {
24607
+ if (this.needsRedirect(event)) {
24608
+ const tab = this.tabsService.sortTabs(event.snapshot.data.tabs)?.[0];
24609
+ if (!tab) {
24610
+ return;
24611
+ }
24612
+ const currentContextId = (this.router.url.match(this.ID_REGEX) || []).shift();
24613
+ const tabPathId = (tab.path.match(this.ID_REGEX) || []).shift();
24614
+ if (currentContextId === tabPathId) {
24615
+ this.router.navigateByUrl(`${tab.path}${queryParamsSuffix}`, {
24616
+ replaceUrl: true
24617
+ });
24618
+ }
24619
+ }
24620
+ }
24621
+ else {
24622
+ const currentContextId = (this.router.url.match(this.ID_REGEX) || []).shift();
24623
+ if (this.needsRedirectLegacy()) {
24624
+ this.tabsService.firstTab$.pipe(filter((tab) => !!tab?.path)).subscribe((tab) => {
24625
+ const tabPathId = (tab.path.match(this.ID_REGEX) || []).shift();
24626
+ if (currentContextId === tabPathId) {
24627
+ this.router.navigateByUrl(`${tab.path}${queryParamsSuffix}`, { replaceUrl: true });
24628
+ }
24629
+ });
24630
+ }
24631
+ }
24632
+ }
24633
+ needsRedirectLegacy() {
24634
+ const tree = this.router.parseUrl(this.router.url);
24635
+ const groups = tree.root.children[PRIMARY_OUTLET];
24636
+ const context = this.getMatchingContextRoute(this.router.url);
24637
+ if (!context) {
24638
+ return groups.segments.length === 2;
24639
+ }
24640
+ return context.split('/').length === groups.segments.length;
24641
+ }
24642
+ needsRedirect(event) {
24643
+ const contextRoute = event.snapshot.routeConfig;
24644
+ if (!contextRoute.rootContext) {
24645
+ return false;
24646
+ }
24647
+ const contextRouteFromUrl = this.getMatchingContextRoute(this.router.url);
24648
+ return contextRoute.rootContext === contextRouteFromUrl;
24649
+ }
24650
+ getMatchingContextRoute(url) {
24651
+ const viewContexts = Object.values(ViewContext);
24652
+ // replace all :id placeholders with a regex matcher for a number
24653
+ const regexMatchers = viewContexts.map(context => `^/${context.replace(/:id/g, '([0-9]+)')}(\\?.*)?$`);
24654
+ const matchingRegexContext = regexMatchers.find(context => new RegExp(context).test(url));
24655
+ return matchingRegexContext ? viewContexts[regexMatchers.indexOf(matchingRegexContext)] : null;
24656
+ }
24657
+ 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 }); }
24658
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ScopedContextRouteService }); }
24659
+ }
24660
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ScopedContextRouteService, decorators: [{
24661
+ type: Injectable
24662
+ }], ctorParameters: () => [{ type: RouterTabsResolver }, { type: TabsService }, { type: i1$3.Router }, { type: i4.ApiService }, { type: i0.Injector }, { type: i0.DestroyRef }] });
24663
+
24664
+ class ContextRouteComponent {
24665
+ constructor(route, scopedContextRouteService, contextRouteService, destroyRef) {
24666
+ this.route = route;
24667
+ this.scopedContextRouteService = scopedContextRouteService;
24668
+ this.contextRouteService = contextRouteService;
24669
+ this.destroyRef = destroyRef;
24670
+ this.isLoading$ = this.scopedContextRouteService.isLoading$();
24671
+ }
24672
+ ngOnInit() {
24673
+ this.contextRouteService.refreshTrigger$
24674
+ .pipe(takeUntilDestroyed(this.destroyRef))
24675
+ .subscribe(() => {
24676
+ this.refreshTabs();
24677
+ });
24678
+ this.scopedContextRouteService.init(this.route);
24679
+ }
24680
+ refreshTabs() {
24681
+ this.scopedContextRouteService.refreshContext();
24682
+ }
24683
+ 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 }); }
24684
+ 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" }] }); }
24685
+ }
24686
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteComponent, decorators: [{
24687
+ type: Component,
24688
+ 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" }]
24689
+ }], ctorParameters: () => [{ type: i1$3.ActivatedRoute }, { type: ScopedContextRouteService }, { type: ContextRouteService }, { type: i0.DestroyRef }] });
24690
+
24691
+ class ContextRouteGuard {
24692
+ constructor(injector) {
24693
+ this.injector = injector;
24694
+ this.caches = new Map();
24695
+ }
24696
+ canActivate(route) {
24697
+ const id = route.paramMap.get('id');
24698
+ const service = this.service(route);
24699
+ this.clearDetailCached(service, id);
24700
+ return this.detailCached(service, id).pipe(tap(contextData => {
24701
+ Object.keys(route.data.contextData).forEach(key => delete route.data.contextData[key]);
24702
+ Object.assign(route.data.contextData, contextData);
24703
+ }), map(() => true), catchError(() => of(false)));
24704
+ }
24705
+ service(route) {
24706
+ const serviceInstance = ViewContextServices.contextToService(route.data.context);
24707
+ return this.injector.get(serviceInstance);
24708
+ }
24709
+ detailCached(service, id) {
24710
+ if (id === 'new') {
24711
+ return of(undefined);
24712
+ }
24713
+ const cache = this.getCache(service);
24714
+ let cached = cache[id];
24715
+ if (!cached) {
24716
+ const params = service instanceof InventoryService ? { withChildren: false } : undefined;
24717
+ cached = from(service.detail(id, params)).pipe(map(({ data }) => data), shareReplay(1));
24718
+ cache[id] = cached;
24719
+ }
24720
+ return cached;
24721
+ }
24722
+ clearDetailCached(service, id) {
24723
+ const cache = this.getCache(service);
24724
+ delete cache[id];
24725
+ }
24726
+ getCache(service) {
24727
+ let cache = this.caches.get(service);
24728
+ if (!cache) {
24729
+ cache = {};
24730
+ this.caches.set(service, cache);
24731
+ }
24732
+ return cache;
24733
+ }
24734
+ 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 }); }
24735
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteGuard, providedIn: 'root' }); }
24736
+ }
24737
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ContextRouteGuard, decorators: [{
24738
+ type: Injectable,
24739
+ args: [{
24740
+ providedIn: 'root'
24741
+ }]
24742
+ }], ctorParameters: () => [{ type: i0.Injector }] });
24743
+
24744
+ class EmptyComponent {
24745
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: EmptyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24746
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: EmptyComponent, selector: "empty", ngImport: i0, template: '', isInline: true }); }
24747
+ }
24748
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: EmptyComponent, decorators: [{
24749
+ type: Component,
24750
+ args: [{ selector: 'empty', template: '' }]
24751
+ }] });
24752
+
24375
24753
  /**
24376
24754
  * A hook to use for Multi Provider extension.
24377
24755
  * @deprecated Consider using the `hookRoute` function instead.
@@ -24474,16 +24852,17 @@ class RouterService extends ExtensionPointWithoutStateForPlugins {
24474
24852
  // Empty route needs to be last as of navigation to angularjs routes
24475
24853
  // if ** route hit, the angularjs routes are loaded.
24476
24854
  const emptyRoute = this.router.config.find(r => r.path === '**');
24855
+ const rootContextRoutes = this.findAllRootContextRoutes([...this.router.config, ...routes]);
24477
24856
  this.router.resetConfig([
24478
24857
  ...this.router.config.filter(r => r.path !== '**'),
24479
- ...routes.map((r) => this.convertRoute(this.router.config, r)),
24858
+ ...routes.map((r) => this.convertRoute(rootContextRoutes, r)),
24480
24859
  emptyRoute
24481
24860
  ].filter(Boolean));
24482
24861
  }
24483
- convertRoute(initialConfig, route) {
24862
+ convertRoute(rootContextRoutes, route) {
24484
24863
  if (route.context) {
24485
- initialConfig.forEach((r) => {
24486
- if (r.data && r.data.context === route.context) {
24864
+ rootContextRoutes.forEach((r) => {
24865
+ if (r.rootContext === route.context) {
24487
24866
  r.children = [route, ...(r.children || [])];
24488
24867
  }
24489
24868
  });
@@ -24491,6 +24870,19 @@ class RouterService extends ExtensionPointWithoutStateForPlugins {
24491
24870
  }
24492
24871
  return route;
24493
24872
  }
24873
+ findAllRootContextRoutes(routes) {
24874
+ const result = [];
24875
+ routes.forEach(route => {
24876
+ if (route.rootContext) {
24877
+ result.push(route);
24878
+ }
24879
+ if (route.children) {
24880
+ const childRoutes = this.findAllRootContextRoutes(route.children);
24881
+ result.push(...childRoutes);
24882
+ }
24883
+ });
24884
+ return result;
24885
+ }
24494
24886
  resolveRouterForChildRoutes(moduleRef, remoteNgModule) {
24495
24887
  // NOTE: stolen from lazy loaded routes from Angular itself.
24496
24888
  // https://github.com/angular/angular/blob/da58801f95c66c201e332189af25702bdd722f3f/packages/router/src/router_config_loader.ts#L103-L108
@@ -24513,90 +24905,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
24513
24905
  }]
24514
24906
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1$3.Router }, { type: ContextRouteService }, { type: PluginsResolveService }, { type: OptionsService }] });
24515
24907
 
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
24908
  const extraRoutes = [
24601
24909
  {
24602
24910
  path: 'users/new',
@@ -24607,17 +24915,21 @@ const extraRoutes = [
24607
24915
  component: EmptyComponent
24608
24916
  }
24609
24917
  ];
24918
+ const viewContextRoutes = [];
24610
24919
  // tslint:disable-next-line: forin
24611
24920
  for (const key in ViewContext) {
24612
24921
  const context = ViewContext[key];
24613
- extraRoutes.push({
24614
- path: context,
24922
+ if (!ViewContextServices.isAutoRoute(context)) {
24923
+ continue;
24924
+ }
24925
+ viewContextRoutes.push({
24926
+ path: ViewContextServices.getPath(context),
24927
+ rootContext: context,
24615
24928
  component: ContextRouteComponent,
24616
24929
  canActivate: [ContextRouteGuard],
24617
24930
  data: { context, contextData: {} },
24618
24931
  resolve: {
24619
24932
  tabs: RouterTabsResolver
24620
- // contextData: ContextRouteGuard
24621
24933
  }
24622
24934
  });
24623
24935
  }
@@ -24646,10 +24958,10 @@ class RouterModule {
24646
24958
  // initialNavigation disabled by default because of MTM-44047 (routes triggered before the actual login)
24647
24959
  config.initialNavigation = config.initialNavigation ?? 'disabled';
24648
24960
  config.useHash = config.useHash ?? true;
24649
- const ngRouterModule = RouterModule$1.forRoot([...routes, ...extraRoutes], config);
24961
+ const ngRouterModule = RouterModule$1.forRoot([...routes, ...extraRoutes, ...viewContextRoutes], config);
24650
24962
  return {
24651
24963
  ngModule: RouterModule,
24652
- providers: [...ngRouterModule.providers]
24964
+ providers: [...ngRouterModule.providers, ScopedContextRouteService]
24653
24965
  };
24654
24966
  }
24655
24967
  constructor(
@@ -24659,13 +24971,14 @@ class RouterModule {
24659
24971
  }
24660
24972
  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
24973
  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] }); }
24974
+ 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
24975
  }
24664
24976
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: RouterModule, decorators: [{
24665
24977
  type: NgModule,
24666
24978
  args: [{
24667
24979
  declarations: [ContextRouteComponent, EmptyComponent],
24668
- imports: [RouterModule$1, HeaderModule, CommonModule]
24980
+ imports: [RouterModule$1, HeaderModule, CommonModule],
24981
+ providers: [ScopedContextRouteService]
24669
24982
  }]
24670
24983
  }], ctorParameters: () => [{ type: RouterService }] });
24671
24984
 
@@ -31141,7 +31454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
31141
31454
 
31142
31455
  class VisibleControlsPipe {
31143
31456
  transform(actionControls, arg) {
31144
- return defer(() => of(actionControls ?? [])).pipe(mergeMap$1(controls => forkJoin(controls.map(control => toObservable(!control.showIf || control.showIf(arg)).pipe(map$2(visible => ({ control, visible }))))).pipe(map$2(evaluatedControls => evaluatedControls.filter(ec => ec.visible).map(ec => ec.control)))), map$2(visible => values(groupBy(visible, 'type'))
31457
+ return defer(() => of(actionControls ?? [])).pipe(mergeMap$1(controls => forkJoin(controls.map(control => toObservable(!control.showIf || control.showIf(arg)).pipe(map$1(visible => ({ control, visible }))))).pipe(map$1(evaluatedControls => evaluatedControls.filter(ec => ec.visible).map(ec => ec.control)))), map$1(visible => values(groupBy(visible, 'type'))
31145
31458
  .map((actionControls) => {
31146
31459
  if (actionControls?.length === 1) {
31147
31460
  return actionControls[0];
@@ -34970,5 +35283,5 @@ function colorValidator(allowedModes) {
34970
35283
  * Generated bundle index. Do not edit.
34971
35284
  */
34972
35285
 
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 };
35286
+ 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, PluginLoadedPipe, 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
35287
  //# sourceMappingURL=c8y-ngx-components.mjs.map