@c8y/ngx-components 1021.22.67 → 1021.22.69

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 (32) hide show
  1. package/alarms/alarm-details.component.d.ts +0 -4
  2. package/alarms/alarm-details.component.d.ts.map +1 -1
  3. package/core/common/interval-based-reload.abstract.d.ts +12 -1
  4. package/core/common/interval-based-reload.abstract.d.ts.map +1 -1
  5. package/esm2022/alarms/alarm-details.component.mjs +10 -10
  6. package/esm2022/core/common/interval-based-reload.abstract.mjs +50 -2
  7. package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +9 -7
  8. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +9 -7
  9. package/fesm2022/c8y-ngx-components-alarms.mjs +5 -5
  10. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  11. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +8 -6
  12. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +8 -6
  14. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components.mjs +392 -346
  16. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  17. package/locales/de.po +9 -0
  18. package/locales/es.po +9 -0
  19. package/locales/fr.po +9 -0
  20. package/locales/ja_JP.po +9 -0
  21. package/locales/ko.po +9 -0
  22. package/locales/locales.pot +9 -0
  23. package/locales/nl.po +9 -0
  24. package/locales/pl.po +9 -0
  25. package/locales/pt_BR.po +9 -0
  26. package/locales/zh_CN.po +9 -0
  27. package/locales/zh_TW.po +9 -0
  28. package/package.json +1 -1
  29. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +7 -2
  30. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  31. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +7 -2
  32. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
@@ -4,7 +4,7 @@ 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$2, find, negate, upperFirst, memoize as memoize$1, property, some, entries, omitBy, isDate, orderBy, flatMap, isEmpty, filter as filter$2, 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';
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, flatMap, orderBy, isEmpty, filter as filter$2, 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
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, filter as filter$1, tap as tap$1, 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';
@@ -9438,157 +9438,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
9438
9438
  args: [{ providedIn: 'root' }]
9439
9439
  }] });
9440
9440
 
9441
- /**
9442
- * Abstract class representing an interval reload functionality.
9443
- * This class provides methods and properties for managing an interval-based reload mechanism.
9444
- */
9445
- class IntervalBasedReload {
9446
- /**
9447
- * Stops the countdown and triggers a refresh action.
9448
- * This function is responsible for halting the countdown interval component's operation.
9449
- * After stopping the countdown, it emits an `onCountdownEnded` event.
9450
- * This event is used to inform external components that the countdown has ended,
9451
- * typically prompting them to reload or refresh their data.
9452
- */
9453
- autoRefreshList() {
9454
- if (this.isIntervalRefreshToggleOn && this.isAutoRefreshEnabled) {
9455
- this.countdownIntervalComponent.stop();
9456
- }
9457
- this.onCountdownEnded.emit();
9458
- }
9459
- /**
9460
- * Manages the countdown timer's visibility and state in response to user scrolling.
9461
- *
9462
- * This method toggles the countdown timer based on the user's scrolling behavior. It uses
9463
- * the `disableCountdown` and `enableCountdown` methods for handling the countdown state.
9464
- *
9465
- * - If the user is scrolling down while the countdown is visible (`isScrolling` is true and
9466
- * `hideCountdown` is false), `disableCountdown` is called to stop and hide the countdown,
9467
- * and `isIntervalRefreshToggleOn` is set to false.
9468
- *
9469
- * - If the user has stopped scrolling, the countdown subscription is closed, and the countdown
9470
- * is hidden (`!isScrolling`, `countdownSubscription?.closed`, `hideCountdown`), `enableCountdown`
9471
- * is called to show and restart the countdown, and `isIntervalRefreshToggleOn` is set to true.
9472
- */
9473
- handleScrolling() {
9474
- // Checks if the user has scrolled down while the countdown is visible
9475
- const onUserScrollDownHide = this.isScrolling && !this.hideCountdown;
9476
- if (onUserScrollDownHide) {
9477
- this.disableCountdown();
9478
- this.isIntervalRefreshToggleOn = false;
9479
- return;
9480
- }
9481
- // Checks if the user has stopped scrolling and the countdown is currently hidden
9482
- const onUserScrollTopShow = !this.isScrolling && this.countdownSubscription?.closed && this.hideCountdown;
9483
- if (onUserScrollTopShow) {
9484
- this.isIntervalRefreshToggleOn = true;
9485
- this.enableCountdown();
9486
- }
9487
- }
9488
- /**
9489
- * Handles the toggle state of the countdown on button click.
9490
- *
9491
- * This method is triggered by a mouse event, typically a click on the countdown toggle button.
9492
- * It toggles `isIntervalRefreshToggleOn` to reflect the current state of the countdown timer.
9493
- *
9494
- * - If `isIntervalRefreshToggleOn` is set to false, indicating that the countdown should be stopped,
9495
- * `disableCountdown` is called, and `manuallyDisabledCountdown` is set to true.
9496
- *
9497
- * - If `isIntervalRefreshToggleOn` is true and the countdown subscription is closed, indicating that
9498
- * the countdown can be started, `enableCountdown` is called, and `manuallyDisabledCountdown`
9499
- * is set to false.
9500
- *
9501
- * @param $event - The MouseEvent that triggered this method.
9502
- */
9503
- onToggleCountdownButtonState($event) {
9504
- $event.preventDefault();
9505
- this.isIntervalRefreshToggleOn = !this.isRefreshDisabled && !this.isIntervalRefreshToggleOn;
9506
- this.updateCountdownButtonTooltipText();
9507
- if (!this.isIntervalRefreshToggleOn) {
9508
- this.disableCountdown();
9509
- this.manuallyDisabledCountdown = true;
9510
- return;
9511
- }
9512
- const onRefreshToggleOn = this.isIntervalRefreshToggleOn && this.countdownSubscription.closed;
9513
- if (onRefreshToggleOn) {
9514
- this.enableCountdown();
9515
- this.manuallyDisabledCountdown = false;
9516
- }
9517
- }
9518
- /**
9519
- * This function listens for changes in the `isLoading` observable, filtering out any truthy values.
9520
- * Once a falsy value is detected (indicating that loading has finished), it attempts to start the countdown.
9521
- *
9522
- * IMPORTANT: If the widget's configuration (refreshInterval, check template) is not set prior to executing countdownIntervalComponent?.start,
9523
- * the countdown interval will not start!
9524
- *
9525
- * @param injector - The injector used to provide necessary dependencies
9526
- * within the `runInInjectionContext`.
9527
- */
9528
- startCountdown() {
9529
- this.countdownSubscription = this.isLoading
9530
- .pipe(filter$1(isLoading => !Boolean(isLoading)), tap$1(() => {
9531
- this.countdownIntervalComponent?.start();
9532
- }))
9533
- .subscribe();
9534
- }
9535
- /**
9536
- * Disables and hides the countdown timer.
9537
- *
9538
- * This method stops the ongoing countdown process by
9539
- * stopping the `countdownIntervalComponent` if it exists. It then hides the countdown timer
9540
- * by setting `hideCountdown` to true. This method encapsulates the logic required to halt and
9541
- * conceal the countdown timer.
9542
- */
9543
- disableCountdown() {
9544
- this.countdownSubscription.unsubscribe();
9545
- this.countdownIntervalComponent?.stop();
9546
- this.hideCountdown = true;
9547
- }
9548
- }
9549
-
9550
- class AppSwitcherService {
9551
- constructor(ui) {
9552
- this.ui = ui;
9553
- this.visibleApplicationTypes = ['HOSTED', 'EXTERNAL'];
9554
- const { currentTenant } = this.ui;
9555
- this.appsOfCurrentUser$ = this.ui.currentAppsOfUser.pipe(map(apps => this.filterVisible(apps)), shareReplay(1));
9556
- this.oneCloudApps$ = this.appsOfCurrentUser$.pipe(map(apps => apps.filter(app => this.isCloudApp(app))), map(cloudApps => this.orderApps(cloudApps)), shareReplay(1));
9557
- const nonCloudApps$ = this.appsOfCurrentUser$.pipe(map(apps => apps.filter(app => !this.isCloudApp(app))));
9558
- this.apps$ = combineLatest([nonCloudApps$, currentTenant]).pipe(map(([apps, tenant]) => this.filterDuplicates(apps, tenant)), map(apps => this.orderApps(apps)), shareReplay(1));
9559
- this.finishedLoading$ = combineLatest([this.apps$, this.oneCloudApps$]).pipe(map(() => true), take(1), shareReplay(1));
9560
- }
9561
- filterVisible(apps) {
9562
- return apps.filter(app => this.visibleApplicationTypes.includes(app.type) &&
9563
- !app.noAppSwitcher &&
9564
- !this.isPackage(app) &&
9565
- !get(app, 'manifest.noAppSwitcher'));
9566
- }
9567
- isPackage(app) {
9568
- return !!app.manifest?.isPackage;
9569
- }
9570
- isCloudApp(app) {
9571
- return !!app.cloud;
9572
- }
9573
- filterDuplicates(apps, tenant) {
9574
- // Filter out apps that have duplicate contextpaths and are not own owned by the current tenant;
9575
- const filterFn = app => !apps.some(otherApp => app !== otherApp &&
9576
- app.contextPath &&
9577
- app.contextPath === otherApp.contextPath &&
9578
- app.owner.tenant.id !== tenant.name);
9579
- return apps.filter(filterFn);
9580
- }
9581
- orderApps(apps) {
9582
- return orderBy(apps, ({ name }) => name.toLowerCase());
9583
- }
9584
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, deps: [{ token: AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
9585
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, providedIn: 'root' }); }
9586
- }
9587
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, decorators: [{
9588
- type: Injectable,
9589
- args: [{ providedIn: 'root' }]
9590
- }], ctorParameters: () => [{ type: AppStateService }] });
9591
-
9592
9441
  /**
9593
9442
  * This service is handling the cookie banner and cookie preferences related logic.
9594
9443
  */
@@ -10219,199 +10068,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
10219
10068
  args: ['click']
10220
10069
  }] } });
10221
10070
 
10222
- class AppIconComponent {
10223
- constructor(options) {
10224
- this.options = options;
10225
- /** Application name. */
10226
- this.name = '';
10227
- this.model = this.emptyModel();
10228
- this.c8yAppIconsList = {
10229
- analyticsbuilder: 'analytics-builder',
10230
- 'analytics-builder': 'analytics-builder',
10231
- cockpit: 'cockpit',
10232
- devicemanagement: 'device-management',
10233
- administration: 'administration',
10234
- apamaepl: 'apama-epl'
10235
- };
10236
- this.white = false;
10237
- this.defaultIconStyle = {
10238
- 'background-repeat': 'no-repeat',
10239
- 'background-size': 'contain',
10240
- 'background-position': 'center',
10241
- 'aspect-ratio': '1'
10242
- };
10243
- this.faIconMatch = /fa-/;
10244
- this.c8yMatch = /^c8y-/;
10245
- this.dltC8yMatch = /^dlt-c8y-/;
10246
- }
10247
- ngOnInit() {
10248
- this.loadSetup();
10249
- }
10250
- ngOnChanges() {
10251
- this.loadSetup();
10252
- }
10253
- emptyModel() {
10254
- return {
10255
- appIcon: '',
10256
- configIcon: '',
10257
- showIcon: true,
10258
- iconClass: ['c8y-icon'],
10259
- appNameAbbr: '',
10260
- iconStyle: {}
10261
- };
10262
- }
10263
- isC8y(icon) {
10264
- return this.c8yMatch.test(icon);
10265
- }
10266
- isFaIcon(icon) {
10267
- return this.faIconMatch.test(icon);
10268
- }
10269
- isDltC8y(icon) {
10270
- return this.dltC8yMatch.test(icon);
10271
- }
10272
- loadSetup() {
10273
- this.model = this.emptyModel();
10274
- this.model.configIcon = this.getPropertyFromAppOrOptions(['config', 'icon']);
10275
- if (!this.model.configIcon) {
10276
- this.model.appIcon = this.iconFromAppDefinition();
10277
- const iconUrl = this.iconUrlFromAppDefinition();
10278
- if (iconUrl) {
10279
- this.model.iconStyle = Object.assign({ 'background-image': iconUrl }, this.defaultIconStyle);
10280
- }
10281
- else if (!this.model.appIcon) {
10282
- // only set static icon if no icon is set in the app definition
10283
- this.model.appIcon = this.findStaticIcon();
10284
- }
10285
- }
10286
- this.model.showIcon =
10287
- !!this.model.appIcon || !isEmpty(this.model.iconStyle) || !!this.model.configIcon;
10288
- this.model.iconClass = [
10289
- 'c8y-icon',
10290
- this.mapFontAwesomeToDelightIcons(this.model.appIcon),
10291
- this.white ? 'c8y-icon-white' : 'c8y-icon-duocolor',
10292
- !isEmpty(this.model.iconStyle) ? 'app-img-icon' : ''
10293
- ].filter(c => !!c);
10294
- const name = this.name || this.app?.name || '';
10295
- this.model.appNameAbbr = name.substring(0, 2);
10296
- }
10297
- iconFromAppDefinition() {
10298
- return (this.getPropertyFromAppOrOptions(['icon', 'class']) ||
10299
- this.getPropertyFromAppOrOptions(['manifest', 'icon', 'class']));
10300
- }
10301
- iconUrlFromAppDefinition() {
10302
- return this.getPropertyFromAppOrOptions(['icon', 'url']);
10303
- }
10304
- getPropertyFromAppOrOptions(path) {
10305
- const app = this.app || this.options;
10306
- return get(app, ['manifest', ...path]) || get(app, path);
10307
- }
10308
- findStaticIcon() {
10309
- const contextPath = this.contextPath || this.name || this.app?.contextPath || this.app?.name;
10310
- if (!contextPath) {
10311
- return undefined;
10312
- }
10313
- const appContextPathNormalized = find(keys(this.c8yAppIconsList), cp => {
10314
- return contextPath.indexOf(cp) > -1;
10315
- });
10316
- const appIcon = this.c8yAppIconsList[appContextPathNormalized];
10317
- return appIcon ? `c8y-icon-${appIcon}` : undefined;
10318
- }
10319
- mapFontAwesomeToDelightIcons(iconClasses) {
10320
- if (!iconClasses) {
10321
- return;
10322
- }
10323
- if (this.isFaIcon(iconClasses)) {
10324
- const regex = /fa-/gi;
10325
- return iconClasses.replace(regex, 'dlt-c8y-icon-');
10326
- }
10327
- return this.isC8y(iconClasses) || this.isDltC8y(iconClasses)
10328
- ? iconClasses
10329
- : `dlt-c8y-icon-${iconClasses}`;
10330
- }
10331
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppIconComponent, deps: [{ token: OptionsService }], target: i0.ɵɵFactoryTarget.Component }); }
10332
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppIconComponent, isStandalone: true, selector: "c8y-app-icon", inputs: { contextPath: "contextPath", name: "name", app: "app" }, host: { classAttribute: "c8y-app-icon" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"model.showIcon; else noIcon\">\n <i\n [ngStyle]=\"model.iconStyle\"\n *ngIf=\"!model.configIcon\"\n [ngClass]=\"model.iconClass\"\n ></i>\n <i\n [c8yIcon]=\"model.configIcon\"\n *ngIf=\"model.configIcon\"\n ></i>\n</ng-container>\n\n<ng-template #noIcon>\n <span class=\"app-noicon\">{{ model.appNameAbbr }}</span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
10333
- }
10334
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppIconComponent, decorators: [{
10335
- type: Component,
10336
- args: [{ selector: 'c8y-app-icon', host: { class: 'c8y-app-icon' }, standalone: true, imports: [IconDirective, NgStyle, NgIf, NgClass], template: "<ng-container *ngIf=\"model.showIcon; else noIcon\">\n <i\n [ngStyle]=\"model.iconStyle\"\n *ngIf=\"!model.configIcon\"\n [ngClass]=\"model.iconClass\"\n ></i>\n <i\n [c8yIcon]=\"model.configIcon\"\n *ngIf=\"model.configIcon\"\n ></i>\n</ng-container>\n\n<ng-template #noIcon>\n <span class=\"app-noicon\">{{ model.appNameAbbr }}</span>\n</ng-template>\n" }]
10337
- }], ctorParameters: () => [{ type: OptionsService }], propDecorators: { contextPath: [{
10338
- type: Input
10339
- }], name: [{
10340
- type: Input
10341
- }], app: [{
10342
- type: Input
10343
- }] } });
10344
-
10345
- class AppHrefPipe {
10346
- constructor(applications) {
10347
- this.applications = applications;
10348
- this.dynamicOptionsUrlKey = 'dynamicOptionsUrl';
10349
- }
10350
- transform(app, addDynamicOptionsUrlIfSet = false) {
10351
- let href = this.applications.getHref(app);
10352
- if (!addDynamicOptionsUrlIfSet) {
10353
- return href;
10354
- }
10355
- const searchParams = new URLSearchParams(window.location.search);
10356
- const dynamicOptionsUrlValue = searchParams.get(this.dynamicOptionsUrlKey);
10357
- if (!dynamicOptionsUrlValue) {
10358
- return href;
10359
- }
10360
- if (!href.endsWith('/')) {
10361
- href += '/';
10362
- }
10363
- href += `index.html?${searchParams.toString()}`;
10364
- return href;
10365
- }
10366
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, deps: [{ token: i1.ApplicationService }], target: i0.ɵɵFactoryTarget.Pipe }); }
10367
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, name: "appHref" }); }
10368
- }
10369
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, decorators: [{
10370
- type: Pipe,
10371
- args: [{
10372
- name: 'appHref'
10373
- }]
10374
- }], ctorParameters: () => [{ type: i1.ApplicationService }] });
10375
-
10376
- class IsActiveAppPipe {
10377
- constructor(ui) {
10378
- this.ui = ui;
10379
- }
10380
- transform(app) {
10381
- const { contextPath } = app;
10382
- return this.ui.state$.pipe(map(state => get(state, 'app.contextPath')), distinctUntilChanged(), map(currentContextPath => contextPath === currentContextPath));
10383
- }
10384
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, deps: [{ token: AppStateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
10385
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, name: "isActiveApp" }); }
10386
- }
10387
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, decorators: [{
10388
- type: Pipe,
10389
- args: [{
10390
- name: 'isActiveApp'
10391
- }]
10392
- }], ctorParameters: () => [{ type: AppStateService }] });
10393
-
10394
- class AppSwitcherInlineComponent {
10395
- constructor(switcherService) {
10396
- this.switcherService = switcherService;
10397
- }
10398
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherInlineComponent, deps: [{ token: AppSwitcherService }], target: i0.ɵɵFactoryTarget.Component }); }
10399
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppSwitcherInlineComponent, selector: "c8y-app-switcher-inline", ngImport: i0, template: "<div\n class=\"d-flex a-i-center j-c-center p-4\"\n *ngIf=\"!(switcherService.finishedLoading$ | async)\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<ng-container *ngIf=\"switcherService.oneCloudApps$ | async as oneCloudApps\">\n <div\n class=\"app-switcher-sagcloud\"\n *ngIf=\"oneCloudApps.length > 0\"\n >\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n *ngFor=\"let app of oneCloudApps\"\n [href]=\"app | appHref\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n </div>\n</ng-container>\n<div\n class=\"app-switcher\"\n *ngIf=\"switcherService.apps$ | async as apps\"\n>\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n [ngClass]=\"(app | isActiveApp | async) ? 'active' : ''\"\n *ngFor=\"let app of apps\"\n [href]=\"app | appHref : true\"\n [rel]=\"app.type === 'EXTERNAL' ? 'noopener noreferrer' : ''\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: HumanizeAppNamePipe, name: "humanizeAppName" }, { kind: "pipe", type: AppHrefPipe, name: "appHref" }, { kind: "pipe", type: IsActiveAppPipe, name: "isActiveApp" }] }); }
10400
- }
10401
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherInlineComponent, decorators: [{
10402
- type: Component,
10403
- args: [{ selector: 'c8y-app-switcher-inline', template: "<div\n class=\"d-flex a-i-center j-c-center p-4\"\n *ngIf=\"!(switcherService.finishedLoading$ | async)\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<ng-container *ngIf=\"switcherService.oneCloudApps$ | async as oneCloudApps\">\n <div\n class=\"app-switcher-sagcloud\"\n *ngIf=\"oneCloudApps.length > 0\"\n >\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n *ngFor=\"let app of oneCloudApps\"\n [href]=\"app | appHref\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n </div>\n</ng-container>\n<div\n class=\"app-switcher\"\n *ngIf=\"switcherService.apps$ | async as apps\"\n>\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n [ngClass]=\"(app | isActiveApp | async) ? 'active' : ''\"\n *ngFor=\"let app of apps\"\n [href]=\"app | appHref : true\"\n [rel]=\"app.type === 'EXTERNAL' ? 'noopener noreferrer' : ''\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n</div>\n" }]
10404
- }], ctorParameters: () => [{ type: AppSwitcherService }] });
10405
-
10406
- class AppSwitcherComponent {
10407
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10408
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppSwitcherComponent, selector: "c8y-app-switcher", ngImport: i0, template: "<div\n class=\"app-switcher-dropdown\"\n dropdown\n #appSwitcherDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"appSwitcherDropdown.isOpen\"\n>\n <button\n class=\"main-header-button c8y-dropdown dropdown-toggle\"\n title=\"{{ 'Application switcher' | translate }}\"\n id=\"appSwitcherDropdown\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"icon-2x\"\n c8yIcon=\"th\"\n ></i>\n </button>\n <div\n class=\"app-switcher-dropdown-menu dropdown-menu\"\n aria-labelledby=\"appSwitcherDropdown\"\n role=\"group\"\n *dropdownMenu\n >\n <c8y-app-switcher-inline></c8y-app-switcher-inline>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2$2.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i2$2.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i2$2.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i3$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: AppSwitcherInlineComponent, selector: "c8y-app-switcher-inline" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
10409
- }
10410
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherComponent, decorators: [{
10411
- type: Component,
10412
- args: [{ selector: 'c8y-app-switcher', template: "<div\n class=\"app-switcher-dropdown\"\n dropdown\n #appSwitcherDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"appSwitcherDropdown.isOpen\"\n>\n <button\n class=\"main-header-button c8y-dropdown dropdown-toggle\"\n title=\"{{ 'Application switcher' | translate }}\"\n id=\"appSwitcherDropdown\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"icon-2x\"\n c8yIcon=\"th\"\n ></i>\n </button>\n <div\n class=\"app-switcher-dropdown-menu dropdown-menu\"\n aria-labelledby=\"appSwitcherDropdown\"\n role=\"group\"\n *dropdownMenu\n >\n <c8y-app-switcher-inline></c8y-app-switcher-inline>\n </div>\n</div>\n" }]
10413
- }] });
10414
-
10415
10071
  class UserEngagementsService {
10416
10072
  constructor(document, userPreferencesService, gainsightService) {
10417
10073
  this.document = document;
@@ -10643,6 +10299,396 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
10643
10299
  }]
10644
10300
  }], ctorParameters: () => [{ type: AppStateService }, { type: GainsightService }, { type: CookieBannerService }, { type: UserEngagementsService }] });
10645
10301
 
10302
+ const PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD = {
10303
+ EVENTS: {
10304
+ INTERVAL_BASED_RELOAD: 'intervalBasedReload'
10305
+ },
10306
+ COMPONENTS: {
10307
+ ALARM_WIDGET_ALARM_RELOAD: 'alarm-widget-alarms-reload',
10308
+ DATAPOINTS_RELOAD: 'datapoints-reload'
10309
+ },
10310
+ ACTIONS: {
10311
+ MANUALLY_CHANGED_COUNTDOWN_STATE: 'manuallyChangedCountdownState'
10312
+ },
10313
+ RESULT: {
10314
+ MANUALLY_PAUSED_COUNTDOWN: 'manuallyPausedCountdown',
10315
+ MANUALLY_RESUMED_COUNTDOWN: 'manuallyResumedCountdown'
10316
+ }
10317
+ };
10318
+ const WIDGET_TYPE_VALUES = {
10319
+ ALARMS: 'alarms',
10320
+ DATA_POINTS_TABLE: 'dataPointsTable'
10321
+ };
10322
+ /**
10323
+ * Abstract class representing an interval reload functionality.
10324
+ * This class provides methods and properties for managing an interval-based reload mechanism.
10325
+ */
10326
+ class IntervalBasedReload {
10327
+ constructor() {
10328
+ this.gainsightService = inject(GainsightService);
10329
+ }
10330
+ /**
10331
+ * Stops the countdown and triggers a refresh action.
10332
+ * This function is responsible for halting the countdown interval component's operation.
10333
+ * After stopping the countdown, it emits an `onCountdownEnded` event.
10334
+ * This event is used to inform external components that the countdown has ended,
10335
+ * typically prompting them to reload or refresh their data.
10336
+ */
10337
+ autoRefreshList() {
10338
+ if (this.isIntervalRefreshToggleOn && this.isAutoRefreshEnabled) {
10339
+ this.countdownIntervalComponent.stop();
10340
+ }
10341
+ this.onCountdownEnded.emit();
10342
+ }
10343
+ /**
10344
+ * Manages the countdown timer's visibility and state in response to user scrolling.
10345
+ *
10346
+ * This method toggles the countdown timer based on the user's scrolling behavior. It uses
10347
+ * the `disableCountdown` and `enableCountdown` methods for handling the countdown state.
10348
+ *
10349
+ * - If the user is scrolling down while the countdown is visible (`isScrolling` is true and
10350
+ * `hideCountdown` is false), `disableCountdown` is called to stop and hide the countdown,
10351
+ * and `isIntervalRefreshToggleOn` is set to false.
10352
+ *
10353
+ * - If the user has stopped scrolling, the countdown subscription is closed, and the countdown
10354
+ * is hidden (`!isScrolling`, `countdownSubscription?.closed`, `hideCountdown`), `enableCountdown`
10355
+ * is called to show and restart the countdown, and `isIntervalRefreshToggleOn` is set to true.
10356
+ */
10357
+ handleScrolling() {
10358
+ // Checks if the user has scrolled down while the countdown is visible
10359
+ const onUserScrollDownHide = this.isScrolling && !this.hideCountdown;
10360
+ if (onUserScrollDownHide) {
10361
+ this.disableCountdown();
10362
+ this.isIntervalRefreshToggleOn = false;
10363
+ return;
10364
+ }
10365
+ // Checks if the user has stopped scrolling and the countdown is currently hidden
10366
+ const onUserScrollTopShow = !this.isScrolling && this.countdownSubscription?.closed && this.hideCountdown;
10367
+ if (onUserScrollTopShow) {
10368
+ this.isIntervalRefreshToggleOn = true;
10369
+ this.enableCountdown();
10370
+ }
10371
+ }
10372
+ /**
10373
+ * Handles the toggle state of the countdown on button click.
10374
+ *
10375
+ * This method is triggered by a mouse event, typically a click on the countdown toggle button.
10376
+ * It toggles `isIntervalRefreshToggleOn` to reflect the current state of the countdown timer.
10377
+ *
10378
+ * - If `isIntervalRefreshToggleOn` is set to false, indicating that the countdown should be stopped,
10379
+ * `disableCountdown` is called, and `manuallyDisabledCountdown` is set to true.
10380
+ *
10381
+ * - If `isIntervalRefreshToggleOn` is true and the countdown subscription is closed, indicating that
10382
+ * the countdown can be started, `enableCountdown` is called, and `manuallyDisabledCountdown`
10383
+ * is set to false.
10384
+ *
10385
+ * @param $event - The MouseEvent that triggered this method.
10386
+ * @param widgetType - The type of the widget that triggered the event
10387
+ */
10388
+ onToggleCountdownButtonState($event, widgetType) {
10389
+ $event.preventDefault();
10390
+ this.isIntervalRefreshToggleOn = !this.isRefreshDisabled && !this.isIntervalRefreshToggleOn;
10391
+ this.updateCountdownButtonTooltipText();
10392
+ if (!this.isIntervalRefreshToggleOn) {
10393
+ this.disableCountdown();
10394
+ this.manuallyDisabledCountdown = true;
10395
+ this.triggerGainsightEvent(widgetType, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.ACTIONS.MANUALLY_CHANGED_COUNTDOWN_STATE, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.RESULT.MANUALLY_PAUSED_COUNTDOWN);
10396
+ return;
10397
+ }
10398
+ const onRefreshToggleOn = this.isIntervalRefreshToggleOn && this.countdownSubscription.closed;
10399
+ if (onRefreshToggleOn) {
10400
+ this.enableCountdown();
10401
+ this.manuallyDisabledCountdown = false;
10402
+ this.triggerGainsightEvent(widgetType, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.ACTIONS.MANUALLY_CHANGED_COUNTDOWN_STATE, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.RESULT.MANUALLY_RESUMED_COUNTDOWN);
10403
+ }
10404
+ }
10405
+ /**
10406
+ * This function listens for changes in the `isLoading` observable, filtering out any truthy values.
10407
+ * Once a falsy value is detected (indicating that loading has finished), it attempts to start the countdown.
10408
+ *
10409
+ * IMPORTANT: If the widget's configuration (refreshInterval, check template) is not set prior to executing countdownIntervalComponent?.start,
10410
+ * the countdown interval will not start!
10411
+ *
10412
+ * @param injector - The injector used to provide necessary dependencies
10413
+ * within the `runInInjectionContext`.
10414
+ */
10415
+ startCountdown() {
10416
+ this.countdownSubscription = this.isLoading
10417
+ .pipe(filter$1(isLoading => !Boolean(isLoading)), tap$1(() => {
10418
+ this.countdownIntervalComponent?.start();
10419
+ }))
10420
+ .subscribe();
10421
+ }
10422
+ /**
10423
+ * Disables and hides the countdown timer.
10424
+ *
10425
+ * This method stops the ongoing countdown process by
10426
+ * stopping the `countdownIntervalComponent` if it exists. It then hides the countdown timer
10427
+ * by setting `hideCountdown` to true. This method encapsulates the logic required to halt and
10428
+ * conceal the countdown timer.
10429
+ */
10430
+ disableCountdown() {
10431
+ this.countdownSubscription.unsubscribe();
10432
+ this.countdownIntervalComponent?.stop();
10433
+ this.hideCountdown = true;
10434
+ }
10435
+ triggerGainsightEvent(widgetType, action, result) {
10436
+ if (widgetType) {
10437
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.EVENTS.INTERVAL_BASED_RELOAD, {
10438
+ action,
10439
+ result,
10440
+ component: this.determineComponentName(widgetType),
10441
+ widget: widgetType
10442
+ });
10443
+ }
10444
+ }
10445
+ determineComponentName(widgetType) {
10446
+ switch (widgetType) {
10447
+ case WIDGET_TYPE_VALUES.ALARMS:
10448
+ return PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.COMPONENTS.ALARM_WIDGET_ALARM_RELOAD;
10449
+ case WIDGET_TYPE_VALUES.DATA_POINTS_TABLE:
10450
+ return PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.COMPONENTS.DATAPOINTS_RELOAD;
10451
+ default:
10452
+ return '';
10453
+ }
10454
+ }
10455
+ }
10456
+
10457
+ class AppSwitcherService {
10458
+ constructor(ui) {
10459
+ this.ui = ui;
10460
+ this.visibleApplicationTypes = ['HOSTED', 'EXTERNAL'];
10461
+ const { currentTenant } = this.ui;
10462
+ this.appsOfCurrentUser$ = this.ui.currentAppsOfUser.pipe(map(apps => this.filterVisible(apps)), shareReplay(1));
10463
+ this.oneCloudApps$ = this.appsOfCurrentUser$.pipe(map(apps => apps.filter(app => this.isCloudApp(app))), map(cloudApps => this.orderApps(cloudApps)), shareReplay(1));
10464
+ const nonCloudApps$ = this.appsOfCurrentUser$.pipe(map(apps => apps.filter(app => !this.isCloudApp(app))));
10465
+ this.apps$ = combineLatest([nonCloudApps$, currentTenant]).pipe(map(([apps, tenant]) => this.filterDuplicates(apps, tenant)), map(apps => this.orderApps(apps)), shareReplay(1));
10466
+ this.finishedLoading$ = combineLatest([this.apps$, this.oneCloudApps$]).pipe(map(() => true), take(1), shareReplay(1));
10467
+ }
10468
+ filterVisible(apps) {
10469
+ return apps.filter(app => this.visibleApplicationTypes.includes(app.type) &&
10470
+ !app.noAppSwitcher &&
10471
+ !this.isPackage(app) &&
10472
+ !get(app, 'manifest.noAppSwitcher'));
10473
+ }
10474
+ isPackage(app) {
10475
+ return !!app.manifest?.isPackage;
10476
+ }
10477
+ isCloudApp(app) {
10478
+ return !!app.cloud;
10479
+ }
10480
+ filterDuplicates(apps, tenant) {
10481
+ // Filter out apps that have duplicate contextpaths and are not own owned by the current tenant;
10482
+ const filterFn = app => !apps.some(otherApp => app !== otherApp &&
10483
+ app.contextPath &&
10484
+ app.contextPath === otherApp.contextPath &&
10485
+ app.owner.tenant.id !== tenant.name);
10486
+ return apps.filter(filterFn);
10487
+ }
10488
+ orderApps(apps) {
10489
+ return orderBy(apps, ({ name }) => name.toLowerCase());
10490
+ }
10491
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, deps: [{ token: AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
10492
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, providedIn: 'root' }); }
10493
+ }
10494
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, decorators: [{
10495
+ type: Injectable,
10496
+ args: [{ providedIn: 'root' }]
10497
+ }], ctorParameters: () => [{ type: AppStateService }] });
10498
+
10499
+ class AppIconComponent {
10500
+ constructor(options) {
10501
+ this.options = options;
10502
+ /** Application name. */
10503
+ this.name = '';
10504
+ this.model = this.emptyModel();
10505
+ this.c8yAppIconsList = {
10506
+ analyticsbuilder: 'analytics-builder',
10507
+ 'analytics-builder': 'analytics-builder',
10508
+ cockpit: 'cockpit',
10509
+ devicemanagement: 'device-management',
10510
+ administration: 'administration',
10511
+ apamaepl: 'apama-epl'
10512
+ };
10513
+ this.white = false;
10514
+ this.defaultIconStyle = {
10515
+ 'background-repeat': 'no-repeat',
10516
+ 'background-size': 'contain',
10517
+ 'background-position': 'center',
10518
+ 'aspect-ratio': '1'
10519
+ };
10520
+ this.faIconMatch = /fa-/;
10521
+ this.c8yMatch = /^c8y-/;
10522
+ this.dltC8yMatch = /^dlt-c8y-/;
10523
+ }
10524
+ ngOnInit() {
10525
+ this.loadSetup();
10526
+ }
10527
+ ngOnChanges() {
10528
+ this.loadSetup();
10529
+ }
10530
+ emptyModel() {
10531
+ return {
10532
+ appIcon: '',
10533
+ configIcon: '',
10534
+ showIcon: true,
10535
+ iconClass: ['c8y-icon'],
10536
+ appNameAbbr: '',
10537
+ iconStyle: {}
10538
+ };
10539
+ }
10540
+ isC8y(icon) {
10541
+ return this.c8yMatch.test(icon);
10542
+ }
10543
+ isFaIcon(icon) {
10544
+ return this.faIconMatch.test(icon);
10545
+ }
10546
+ isDltC8y(icon) {
10547
+ return this.dltC8yMatch.test(icon);
10548
+ }
10549
+ loadSetup() {
10550
+ this.model = this.emptyModel();
10551
+ this.model.configIcon = this.getPropertyFromAppOrOptions(['config', 'icon']);
10552
+ if (!this.model.configIcon) {
10553
+ this.model.appIcon = this.iconFromAppDefinition();
10554
+ const iconUrl = this.iconUrlFromAppDefinition();
10555
+ if (iconUrl) {
10556
+ this.model.iconStyle = Object.assign({ 'background-image': iconUrl }, this.defaultIconStyle);
10557
+ }
10558
+ else if (!this.model.appIcon) {
10559
+ // only set static icon if no icon is set in the app definition
10560
+ this.model.appIcon = this.findStaticIcon();
10561
+ }
10562
+ }
10563
+ this.model.showIcon =
10564
+ !!this.model.appIcon || !isEmpty(this.model.iconStyle) || !!this.model.configIcon;
10565
+ this.model.iconClass = [
10566
+ 'c8y-icon',
10567
+ this.mapFontAwesomeToDelightIcons(this.model.appIcon),
10568
+ this.white ? 'c8y-icon-white' : 'c8y-icon-duocolor',
10569
+ !isEmpty(this.model.iconStyle) ? 'app-img-icon' : ''
10570
+ ].filter(c => !!c);
10571
+ const name = this.name || this.app?.name || '';
10572
+ this.model.appNameAbbr = name.substring(0, 2);
10573
+ }
10574
+ iconFromAppDefinition() {
10575
+ return (this.getPropertyFromAppOrOptions(['icon', 'class']) ||
10576
+ this.getPropertyFromAppOrOptions(['manifest', 'icon', 'class']));
10577
+ }
10578
+ iconUrlFromAppDefinition() {
10579
+ return this.getPropertyFromAppOrOptions(['icon', 'url']);
10580
+ }
10581
+ getPropertyFromAppOrOptions(path) {
10582
+ const app = this.app || this.options;
10583
+ return get(app, ['manifest', ...path]) || get(app, path);
10584
+ }
10585
+ findStaticIcon() {
10586
+ const contextPath = this.contextPath || this.name || this.app?.contextPath || this.app?.name;
10587
+ if (!contextPath) {
10588
+ return undefined;
10589
+ }
10590
+ const appContextPathNormalized = find(keys(this.c8yAppIconsList), cp => {
10591
+ return contextPath.indexOf(cp) > -1;
10592
+ });
10593
+ const appIcon = this.c8yAppIconsList[appContextPathNormalized];
10594
+ return appIcon ? `c8y-icon-${appIcon}` : undefined;
10595
+ }
10596
+ mapFontAwesomeToDelightIcons(iconClasses) {
10597
+ if (!iconClasses) {
10598
+ return;
10599
+ }
10600
+ if (this.isFaIcon(iconClasses)) {
10601
+ const regex = /fa-/gi;
10602
+ return iconClasses.replace(regex, 'dlt-c8y-icon-');
10603
+ }
10604
+ return this.isC8y(iconClasses) || this.isDltC8y(iconClasses)
10605
+ ? iconClasses
10606
+ : `dlt-c8y-icon-${iconClasses}`;
10607
+ }
10608
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppIconComponent, deps: [{ token: OptionsService }], target: i0.ɵɵFactoryTarget.Component }); }
10609
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppIconComponent, isStandalone: true, selector: "c8y-app-icon", inputs: { contextPath: "contextPath", name: "name", app: "app" }, host: { classAttribute: "c8y-app-icon" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"model.showIcon; else noIcon\">\n <i\n [ngStyle]=\"model.iconStyle\"\n *ngIf=\"!model.configIcon\"\n [ngClass]=\"model.iconClass\"\n ></i>\n <i\n [c8yIcon]=\"model.configIcon\"\n *ngIf=\"model.configIcon\"\n ></i>\n</ng-container>\n\n<ng-template #noIcon>\n <span class=\"app-noicon\">{{ model.appNameAbbr }}</span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
10610
+ }
10611
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppIconComponent, decorators: [{
10612
+ type: Component,
10613
+ args: [{ selector: 'c8y-app-icon', host: { class: 'c8y-app-icon' }, standalone: true, imports: [IconDirective, NgStyle, NgIf, NgClass], template: "<ng-container *ngIf=\"model.showIcon; else noIcon\">\n <i\n [ngStyle]=\"model.iconStyle\"\n *ngIf=\"!model.configIcon\"\n [ngClass]=\"model.iconClass\"\n ></i>\n <i\n [c8yIcon]=\"model.configIcon\"\n *ngIf=\"model.configIcon\"\n ></i>\n</ng-container>\n\n<ng-template #noIcon>\n <span class=\"app-noicon\">{{ model.appNameAbbr }}</span>\n</ng-template>\n" }]
10614
+ }], ctorParameters: () => [{ type: OptionsService }], propDecorators: { contextPath: [{
10615
+ type: Input
10616
+ }], name: [{
10617
+ type: Input
10618
+ }], app: [{
10619
+ type: Input
10620
+ }] } });
10621
+
10622
+ class AppHrefPipe {
10623
+ constructor(applications) {
10624
+ this.applications = applications;
10625
+ this.dynamicOptionsUrlKey = 'dynamicOptionsUrl';
10626
+ }
10627
+ transform(app, addDynamicOptionsUrlIfSet = false) {
10628
+ let href = this.applications.getHref(app);
10629
+ if (!addDynamicOptionsUrlIfSet) {
10630
+ return href;
10631
+ }
10632
+ const searchParams = new URLSearchParams(window.location.search);
10633
+ const dynamicOptionsUrlValue = searchParams.get(this.dynamicOptionsUrlKey);
10634
+ if (!dynamicOptionsUrlValue) {
10635
+ return href;
10636
+ }
10637
+ if (!href.endsWith('/')) {
10638
+ href += '/';
10639
+ }
10640
+ href += `index.html?${searchParams.toString()}`;
10641
+ return href;
10642
+ }
10643
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, deps: [{ token: i1.ApplicationService }], target: i0.ɵɵFactoryTarget.Pipe }); }
10644
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, name: "appHref" }); }
10645
+ }
10646
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, decorators: [{
10647
+ type: Pipe,
10648
+ args: [{
10649
+ name: 'appHref'
10650
+ }]
10651
+ }], ctorParameters: () => [{ type: i1.ApplicationService }] });
10652
+
10653
+ class IsActiveAppPipe {
10654
+ constructor(ui) {
10655
+ this.ui = ui;
10656
+ }
10657
+ transform(app) {
10658
+ const { contextPath } = app;
10659
+ return this.ui.state$.pipe(map(state => get(state, 'app.contextPath')), distinctUntilChanged(), map(currentContextPath => contextPath === currentContextPath));
10660
+ }
10661
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, deps: [{ token: AppStateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
10662
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, name: "isActiveApp" }); }
10663
+ }
10664
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, decorators: [{
10665
+ type: Pipe,
10666
+ args: [{
10667
+ name: 'isActiveApp'
10668
+ }]
10669
+ }], ctorParameters: () => [{ type: AppStateService }] });
10670
+
10671
+ class AppSwitcherInlineComponent {
10672
+ constructor(switcherService) {
10673
+ this.switcherService = switcherService;
10674
+ }
10675
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherInlineComponent, deps: [{ token: AppSwitcherService }], target: i0.ɵɵFactoryTarget.Component }); }
10676
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppSwitcherInlineComponent, selector: "c8y-app-switcher-inline", ngImport: i0, template: "<div\n class=\"d-flex a-i-center j-c-center p-4\"\n *ngIf=\"!(switcherService.finishedLoading$ | async)\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<ng-container *ngIf=\"switcherService.oneCloudApps$ | async as oneCloudApps\">\n <div\n class=\"app-switcher-sagcloud\"\n *ngIf=\"oneCloudApps.length > 0\"\n >\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n *ngFor=\"let app of oneCloudApps\"\n [href]=\"app | appHref\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n </div>\n</ng-container>\n<div\n class=\"app-switcher\"\n *ngIf=\"switcherService.apps$ | async as apps\"\n>\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n [ngClass]=\"(app | isActiveApp | async) ? 'active' : ''\"\n *ngFor=\"let app of apps\"\n [href]=\"app | appHref : true\"\n [rel]=\"app.type === 'EXTERNAL' ? 'noopener noreferrer' : ''\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: HumanizeAppNamePipe, name: "humanizeAppName" }, { kind: "pipe", type: AppHrefPipe, name: "appHref" }, { kind: "pipe", type: IsActiveAppPipe, name: "isActiveApp" }] }); }
10677
+ }
10678
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherInlineComponent, decorators: [{
10679
+ type: Component,
10680
+ args: [{ selector: 'c8y-app-switcher-inline', template: "<div\n class=\"d-flex a-i-center j-c-center p-4\"\n *ngIf=\"!(switcherService.finishedLoading$ | async)\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<ng-container *ngIf=\"switcherService.oneCloudApps$ | async as oneCloudApps\">\n <div\n class=\"app-switcher-sagcloud\"\n *ngIf=\"oneCloudApps.length > 0\"\n >\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n *ngFor=\"let app of oneCloudApps\"\n [href]=\"app | appHref\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n </div>\n</ng-container>\n<div\n class=\"app-switcher\"\n *ngIf=\"switcherService.apps$ | async as apps\"\n>\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n [ngClass]=\"(app | isActiveApp | async) ? 'active' : ''\"\n *ngFor=\"let app of apps\"\n [href]=\"app | appHref : true\"\n [rel]=\"app.type === 'EXTERNAL' ? 'noopener noreferrer' : ''\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n</div>\n" }]
10681
+ }], ctorParameters: () => [{ type: AppSwitcherService }] });
10682
+
10683
+ class AppSwitcherComponent {
10684
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10685
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppSwitcherComponent, selector: "c8y-app-switcher", ngImport: i0, template: "<div\n class=\"app-switcher-dropdown\"\n dropdown\n #appSwitcherDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"appSwitcherDropdown.isOpen\"\n>\n <button\n class=\"main-header-button c8y-dropdown dropdown-toggle\"\n title=\"{{ 'Application switcher' | translate }}\"\n id=\"appSwitcherDropdown\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"icon-2x\"\n c8yIcon=\"th\"\n ></i>\n </button>\n <div\n class=\"app-switcher-dropdown-menu dropdown-menu\"\n aria-labelledby=\"appSwitcherDropdown\"\n role=\"group\"\n *dropdownMenu\n >\n <c8y-app-switcher-inline></c8y-app-switcher-inline>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2$2.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i2$2.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i2$2.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i3$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: AppSwitcherInlineComponent, selector: "c8y-app-switcher-inline" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
10686
+ }
10687
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherComponent, decorators: [{
10688
+ type: Component,
10689
+ args: [{ selector: 'c8y-app-switcher', template: "<div\n class=\"app-switcher-dropdown\"\n dropdown\n #appSwitcherDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"appSwitcherDropdown.isOpen\"\n>\n <button\n class=\"main-header-button c8y-dropdown dropdown-toggle\"\n title=\"{{ 'Application switcher' | translate }}\"\n id=\"appSwitcherDropdown\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"icon-2x\"\n c8yIcon=\"th\"\n ></i>\n </button>\n <div\n class=\"app-switcher-dropdown-menu dropdown-menu\"\n aria-labelledby=\"appSwitcherDropdown\"\n role=\"group\"\n *dropdownMenu\n >\n <c8y-app-switcher-inline></c8y-app-switcher-inline>\n </div>\n</div>\n" }]
10690
+ }] });
10691
+
10646
10692
  class ApplicationModule {
10647
10693
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ApplicationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10648
10694
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: ApplicationModule, declarations: [AppSwitcherComponent, AppSwitcherInlineComponent, AppHrefPipe, IsActiveAppPipe], imports: [CommonModule, BsDropdownModule, A11yModule, ProductExperienceModule, AppIconComponent], exports: [AppIconComponent, AppSwitcherComponent, AppSwitcherInlineComponent] }); }
@@ -35397,5 +35443,5 @@ function colorValidator(allowedModes) {
35397
35443
  * Generated bundle index. Do not edit.
35398
35444
  */
35399
35445
 
35400
- 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_ROUTER_STATE_PROP, 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 };
35446
+ 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_ROUTER_STATE_PROP, 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, WIDGET_TYPE_VALUES, 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 };
35401
35447
  //# sourceMappingURL=c8y-ngx-components.mjs.map