@c8y/ngx-components 1018.0.151 → 1018.0.159

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 (51) hide show
  1. package/NOTICES +1 -1
  2. package/core/range-display/range-display.component.d.ts +19 -1
  3. package/core/realtime/realtime-subject.service.d.ts +4 -0
  4. package/core/realtime/realtime.service.d.ts +10 -0
  5. package/device-protocols/device-protocols.guard.d.ts +12 -0
  6. package/device-protocols/device-protocols.module.d.ts +8 -0
  7. package/device-protocols/device-type-detail-edited.service.d.ts +8 -0
  8. package/device-protocols/device-type-detail.component.d.ts +12 -0
  9. package/device-protocols/device-type-detail.directive.d.ts +9 -0
  10. package/device-protocols/index.d.ts +5 -0
  11. package/esm2020/core/range-display/range-display.component.mjs +87 -4
  12. package/esm2020/core/realtime/realtime-subject.service.mjs +47 -4
  13. package/esm2020/core/realtime/realtime.service.mjs +15 -1
  14. package/esm2020/device-protocols/c8y-ngx-components-device-protocols.mjs +5 -0
  15. package/esm2020/device-protocols/device-protocols.guard.mjs +40 -0
  16. package/esm2020/device-protocols/device-protocols.module.mjs +46 -0
  17. package/esm2020/device-protocols/device-type-detail-edited.service.mjs +19 -0
  18. package/esm2020/device-protocols/device-type-detail.component.mjs +45 -0
  19. package/esm2020/device-protocols/device-type-detail.directive.mjs +19 -0
  20. package/esm2020/device-protocols/index.mjs +6 -0
  21. package/esm2020/ecosystem/application-properties/subscription-modal/subscription-modal.component.mjs +4 -1
  22. package/esm2020/icon-selector/icons/ecommerce/index.mjs +2 -2
  23. package/esm2020/upgrade/ng1/downgraded.services.mjs +6 -4
  24. package/esm2020/upgrade/ng1/index.mjs +6 -5
  25. package/esm2020/upgrade/upgrade.module.mjs +10 -10
  26. package/fesm2015/c8y-ngx-components-device-protocols.mjs +162 -0
  27. package/fesm2015/c8y-ngx-components-device-protocols.mjs.map +1 -0
  28. package/fesm2015/c8y-ngx-components-ecosystem.mjs +3 -0
  29. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  30. package/fesm2015/c8y-ngx-components-icon-selector-icons-ecommerce.mjs +1 -1
  31. package/fesm2015/c8y-ngx-components-icon-selector-icons-ecommerce.mjs.map +1 -1
  32. package/fesm2015/c8y-ngx-components-upgrade.mjs +91 -88
  33. package/fesm2015/c8y-ngx-components-upgrade.mjs.map +1 -1
  34. package/fesm2015/c8y-ngx-components.mjs +144 -4
  35. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  36. package/fesm2020/c8y-ngx-components-device-protocols.mjs +159 -0
  37. package/fesm2020/c8y-ngx-components-device-protocols.mjs.map +1 -0
  38. package/fesm2020/c8y-ngx-components-ecosystem.mjs +3 -0
  39. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  40. package/fesm2020/c8y-ngx-components-icon-selector-icons-ecommerce.mjs +1 -1
  41. package/fesm2020/c8y-ngx-components-icon-selector-icons-ecommerce.mjs.map +1 -1
  42. package/fesm2020/c8y-ngx-components-upgrade.mjs +90 -87
  43. package/fesm2020/c8y-ngx-components-upgrade.mjs.map +1 -1
  44. package/fesm2020/c8y-ngx-components.mjs +142 -4
  45. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  46. package/icon-selector/icons/ecommerce/index.d.ts +1 -1
  47. package/locales/de.po +3 -0
  48. package/locales/en.po +80 -8
  49. package/locales/locales.pot +4 -4
  50. package/package.json +1 -1
  51. package/upgrade/ng1/downgraded.services.d.ts +1 -0
package/NOTICES CHANGED
@@ -2342,7 +2342,7 @@ SOFTWARE
2342
2342
 
2343
2343
  -----
2344
2344
 
2345
- The following software may be included in this product: @types/babel__core, @types/babel__generator, @types/babel__template, @types/babel__traverse, @types/body-parser, @types/bonjour, @types/connect, @types/connect-history-api-fallback, @types/cron, @types/eslint, @types/eslint-scope, @types/estree, @types/express, @types/express-serve-static-core, @types/file-saver, @types/fs-extra, @types/geojson, @types/graceful-fs, @types/html-minifier-terser, @types/http-proxy, @types/istanbul-lib-coverage, @types/istanbul-reports, @types/jest, @types/jsdom, @types/json-schema, @types/jsonfile, @types/leaflet, @types/marked, @types/mime, @types/node, @types/parse5, @types/prettier, @types/qs, @types/range-parser, @types/resolve, @types/semver, @types/serve-index, @types/serve-static, @types/sinonjs__fake-timers, @types/sizzle, @types/sockjs, @types/stack-utils, @types/three, @types/tough-cookie, @types/webpack, @types/webpack-dev-server, @types/webxr, @types/ws, @types/yargs, @types/yargs-parser, @types/yauzl. A copy of the source code may be downloaded from https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__core), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__generator), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__template), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__traverse), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/body-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/bonjour), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/connect), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/connect-history-api-fallback), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/cron), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/eslint), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/eslint-scope), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/estree), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express-serve-static-core), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/file-saver), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/fs-extra), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/geojson), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/graceful-fs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/html-minifier-terser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/http-proxy), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/istanbul-lib-coverage), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/istanbul-reports), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/jest), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/jsdom), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/json-schema), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/jsonfile), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/leaflet), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/marked), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mime), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/node), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/parse5), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/prettier), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/qs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/range-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/resolve), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/semver), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/serve-index), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/serve-static), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sinonjs__fake-timers), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sizzle), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sockjs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/stack-utils), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/three), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/tough-cookie), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/webpack), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/webxr), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/ws), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yargs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yargs-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yauzl). This software contains the following license and notice below:
2345
+ The following software may be included in this product: @types/babel__core, @types/babel__generator, @types/babel__template, @types/babel__traverse, @types/body-parser, @types/bonjour, @types/cometd, @types/connect, @types/connect-history-api-fallback, @types/cron, @types/eslint, @types/eslint-scope, @types/estree, @types/express, @types/express-serve-static-core, @types/file-saver, @types/fs-extra, @types/geojson, @types/graceful-fs, @types/html-minifier-terser, @types/http-proxy, @types/istanbul-lib-coverage, @types/istanbul-reports, @types/jest, @types/jsdom, @types/json-schema, @types/jsonfile, @types/leaflet, @types/marked, @types/mime, @types/node, @types/parse5, @types/prettier, @types/qs, @types/range-parser, @types/resolve, @types/semver, @types/serve-index, @types/serve-static, @types/sinonjs__fake-timers, @types/sizzle, @types/sockjs, @types/stack-utils, @types/three, @types/tough-cookie, @types/webpack, @types/webpack-dev-server, @types/webxr, @types/ws, @types/yargs, @types/yargs-parser, @types/yauzl. A copy of the source code may be downloaded from https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__core), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__generator), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__template), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/babel__traverse), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/body-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/bonjour), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/cometd), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/connect), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/connect-history-api-fallback), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/cron), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/eslint), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/eslint-scope), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/estree), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/express-serve-static-core), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/file-saver), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/fs-extra), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/geojson), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/graceful-fs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/html-minifier-terser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/http-proxy), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/istanbul-lib-coverage), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/istanbul-reports), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/jest), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/jsdom), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/json-schema), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/jsonfile), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/leaflet), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/marked), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/mime), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/node), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/parse5), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/prettier), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/qs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/range-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/resolve), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/semver), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/serve-index), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/serve-static), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sinonjs__fake-timers), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sizzle), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/sockjs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/stack-utils), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/three), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/tough-cookie), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/webpack), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/webxr), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/ws), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yargs), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yargs-parser), https://github.com/DefinitelyTyped/DefinitelyTyped.git (@types/yauzl). This software contains the following license and notice below:
2346
2346
 
2347
2347
  MIT License
2348
2348
 
@@ -1,18 +1,36 @@
1
+ import { AfterViewInit, OnChanges, OnDestroy } from '@angular/core';
1
2
  import { DomSanitizer } from '@angular/platform-browser';
2
3
  import { RangeDisplay } from './range-display.model';
3
4
  import * as i0 from "@angular/core";
4
- export declare class RangeDisplayComponent {
5
+ export declare class RangeDisplayComponent implements AfterViewInit, OnDestroy, OnChanges {
5
6
  private sanitizer;
6
7
  config: RangeDisplay;
7
8
  display: 'full' | 'compact' | 'inline';
9
+ private currentRangeWidthObserver;
10
+ private currentRangeWidthChanged;
11
+ private readonly CURRENT_RANGE_WIDTH_TRANSITION_TIME;
12
+ private readonly DEFAULT_TOOLTIP_SHIFT;
13
+ private readonly MIN_TOOLTIP_SHIFT;
14
+ private tooltipShift;
8
15
  get inlineStyle(): import("@angular/platform-browser").SafeStyle;
16
+ private rangeDisplay;
17
+ private currentRangeElement;
18
+ private destroyed$;
9
19
  constructor(sanitizer: DomSanitizer);
20
+ ngOnChanges(): void;
21
+ ngAfterViewInit(): void;
22
+ ngOnDestroy(): void;
10
23
  checkTarget(): boolean;
11
24
  rulerCalc(index: any): number;
12
25
  trackByIndex(index: number): number;
13
26
  isRedRangeDisplayed(): any;
14
27
  isYellowRangeDisplayed(): any;
15
28
  isRangeDisplayed(rangeMin: any, rangeMax: any): any;
29
+ private setupTooltipShifting;
30
+ private setTooltipShiftValue;
31
+ private setupTooltipShiftingIfPossible;
32
+ private getTooltipBackground;
33
+ private isValueInRange;
16
34
  static ɵfac: i0.ɵɵFactoryDeclaration<RangeDisplayComponent, never>;
17
35
  static ɵcmp: i0.ɵɵComponentDeclaration<RangeDisplayComponent, "c8y-range-display", never, { "config": "config"; "display": "display"; }, {}, never, never, false>;
18
36
  }
@@ -7,10 +7,14 @@ import * as i0 from "@angular/core";
7
7
  */
8
8
  export declare class RealtimeSubjectService {
9
9
  protected realtime: Realtime;
10
+ reconnect$: Observable<void>;
11
+ connectionStatus$: Observable<'connected' | 'disconnected'>;
10
12
  private subjects$;
11
13
  constructor(realtime: Realtime);
12
14
  getObservableForChannel<T>(channel: string): Observable<RealtimeMessage<T>>;
13
15
  protected createObservableForChannel<T>(channel: string, realtime: Realtime): Observable<RealtimeMessage<T>>;
16
+ protected createObservableForReconnect(): Observable<void>;
17
+ protected createObservableForConnectionStatus(): Observable<"connected" | "disconnected">;
14
18
  static ɵfac: i0.ɵɵFactoryDeclaration<RealtimeSubjectService, never>;
15
19
  static ɵprov: i0.ɵɵInjectableDeclaration<RealtimeSubjectService>;
16
20
  }
@@ -11,6 +11,16 @@ export declare abstract class RealtimeService<T> {
11
11
  * A flag displaying if realtime notifications are currently active.
12
12
  */
13
13
  get active(): boolean;
14
+ /**
15
+ * An observable emitting a value in case the realtime connection has been interrupted.
16
+ * Can be used to reload data of e.g. a datapoint graph that wasn't received while realtime was interrupted.
17
+ */
18
+ get reconnect$(): Observable<void>;
19
+ /**
20
+ * An observable emitting either `connected` or `disconnected` depending on the state of the realtime connection.
21
+ * Can be used to e.g. inform the user about the interrupted realtime connection.
22
+ */
23
+ get connectionStatus$(): Observable<'connected' | 'disconnected'>;
14
24
  private isActive;
15
25
  constructor(realtimeSubject: RealtimeSubjectService);
16
26
  /**
@@ -0,0 +1,12 @@
1
+ import { AlertService, ModalService } from '@c8y/ngx-components';
2
+ import { DeviceTypeDetailEditedService } from './device-type-detail-edited.service';
3
+ import * as i0 from "@angular/core";
4
+ export declare class DeviceProtocolsGuard {
5
+ private modal;
6
+ private alert;
7
+ private deviceTypeDetailEditedService;
8
+ constructor(modal: ModalService, alert: AlertService, deviceTypeDetailEditedService: DeviceTypeDetailEditedService);
9
+ canDeactivate(): Promise<boolean>;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<DeviceProtocolsGuard, never>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<DeviceProtocolsGuard>;
12
+ }
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./device-type-detail.directive";
3
+ import * as i2 from "./device-type-detail.component";
4
+ export declare class DeviceProtocolsModule {
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<DeviceProtocolsModule, never>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DeviceProtocolsModule, [typeof i1.DeviceTypeDetail, typeof i2.DeviceTypeDetailComponent], never, [typeof i2.DeviceTypeDetailComponent]>;
7
+ static ɵinj: i0.ɵɵInjectorDeclaration<DeviceProtocolsModule>;
8
+ }
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class DeviceTypeDetailEditedService {
3
+ isDetailEdited: boolean;
4
+ getIsDetailEdited(): boolean;
5
+ setIsDetailEdited(value: any): void;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<DeviceTypeDetailEditedService, never>;
7
+ static ɵprov: i0.ɵɵInjectableDeclaration<DeviceTypeDetailEditedService>;
8
+ }
@@ -0,0 +1,12 @@
1
+ import { Injector, OnInit } from '@angular/core';
2
+ import { ActivatedRoute } from '@angular/router';
3
+ import * as i0 from "@angular/core";
4
+ export declare function rootScopeFactory($injector: Injector): any;
5
+ export declare class DeviceTypeDetailComponent implements OnInit {
6
+ private route;
7
+ deviceTypeId: string;
8
+ constructor(route: ActivatedRoute);
9
+ ngOnInit(): void;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<DeviceTypeDetailComponent, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<DeviceTypeDetailComponent, "c8y-device-type-detail", never, {}, {}, never, never, false>;
12
+ }
@@ -0,0 +1,9 @@
1
+ import { ElementRef, Injector } from '@angular/core';
2
+ import { UpgradeComponent } from '@angular/upgrade/static';
3
+ import * as i0 from "@angular/core";
4
+ export declare class DeviceTypeDetail extends UpgradeComponent {
5
+ id: string;
6
+ constructor(elementRef: ElementRef, injector: Injector);
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<DeviceTypeDetail, never>;
8
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DeviceTypeDetail, "c8y-device-type-detail-directive", never, { "id": "id"; }, {}, never, never, false>;
9
+ }
@@ -0,0 +1,5 @@
1
+ export * from './device-protocols.guard';
2
+ export * from './device-protocols.module';
3
+ export * from './device-type-detail-edited.service';
4
+ export * from './device-type-detail.component';
5
+ export * from './device-type-detail.directive';
@@ -1,5 +1,7 @@
1
- import { Component, Input, HostBinding } from '@angular/core';
1
+ import { Component, ElementRef, HostBinding, Input, ViewChild } from '@angular/core';
2
2
  import { DomSanitizer } from '@angular/platform-browser';
3
+ import { Subject } from 'rxjs';
4
+ import { debounceTime, distinctUntilChanged, map, takeUntil } from 'rxjs/operators';
3
5
  import * as i0 from "@angular/core";
4
6
  import * as i1 from "@angular/platform-browser";
5
7
  import * as i2 from "@angular/common";
@@ -10,6 +12,13 @@ export class RangeDisplayComponent {
10
12
  this.sanitizer = sanitizer;
11
13
  this.config = {};
12
14
  this.display = 'full';
15
+ this.currentRangeWidthChanged = new Subject();
16
+ // width of current range is changing within 150ms, see style declaration for .range-display__range__current
17
+ this.CURRENT_RANGE_WIDTH_TRANSITION_TIME = 150;
18
+ this.DEFAULT_TOOLTIP_SHIFT = '50%';
19
+ this.MIN_TOOLTIP_SHIFT = 10;
20
+ this.tooltipShift = this.DEFAULT_TOOLTIP_SHIFT;
21
+ this.destroyed$ = new Subject();
13
22
  }
14
23
  get inlineStyle() {
15
24
  this.config = this.config || {};
@@ -25,6 +34,8 @@ export class RangeDisplayComponent {
25
34
  return this.sanitizer.bypassSecurityTrustStyle(`
26
35
  --range-min: ${this.config.min};
27
36
  --range-max: ${this.config.max};
37
+ --range-display-tooltip-translate: translate(${this.tooltipShift}, -56px);
38
+ --range-display-tooltip-bg: var(${this.getTooltipBackground()});
28
39
  --full-range: ${this.config.max - this.config.min};
29
40
  --measurement-target: ${((this.config.target - this.config.min) * 100) / (this.config.max - this.config.min)}%;
30
41
  --measurement-current: ${((this.config.current - this.config.min) * 100) / (this.config.max - this.config.min)}%;
@@ -38,6 +49,20 @@ export class RangeDisplayComponent {
38
49
  100}%;
39
50
  `);
40
51
  }
52
+ ngOnChanges() {
53
+ // It's necessary to handle tooltip shifting both in OnChanges and AfterViewInit. In case of Linear gauge widget, view is
54
+ // rendered first (so as elements needed for calculating shifting) and config orientation is set later on.
55
+ // In other cases it's possible that orientation is defined on initialization of class and view elements are rendered later.
56
+ this.setupTooltipShiftingIfPossible();
57
+ }
58
+ ngAfterViewInit() {
59
+ this.setupTooltipShiftingIfPossible();
60
+ }
61
+ ngOnDestroy() {
62
+ this.currentRangeWidthObserver?.disconnect();
63
+ this.destroyed$.next();
64
+ this.destroyed$.complete();
65
+ }
41
66
  checkTarget() {
42
67
  return (this.config.target !== undefined &&
43
68
  this.config.target !== null &&
@@ -65,12 +90,64 @@ export class RangeDisplayComponent {
65
90
  isRangeDisplayed(rangeMin, rangeMax) {
66
91
  return rangeMin === 0 || rangeMax === 0 || (rangeMin && rangeMax);
67
92
  }
93
+ setupTooltipShifting() {
94
+ this.currentRangeWidthObserver = new ResizeObserver(([val]) => {
95
+ if (getComputedStyle(val.target, null).display === 'block') {
96
+ this.currentRangeWidthChanged.next(val.target);
97
+ }
98
+ });
99
+ this.currentRangeWidthObserver.observe(this.currentRangeElement.nativeElement);
100
+ this.currentRangeWidthChanged
101
+ .pipe(debounceTime(this.CURRENT_RANGE_WIDTH_TRANSITION_TIME), map((rangeElement) => parseInt(getComputedStyle(rangeElement, null).width)), distinctUntilChanged(), takeUntil(this.destroyed$))
102
+ .subscribe(rangeElementWidth => {
103
+ this.setTooltipShiftValue(rangeElementWidth);
104
+ });
105
+ }
106
+ setTooltipShiftValue(rangeElementWidth) {
107
+ const tooltipWidth = parseInt(getComputedStyle(this.currentRangeElement.nativeElement, ':after').width);
108
+ const currentRangeWidth = rangeElementWidth;
109
+ const rangeDisplayWidth = parseInt(getComputedStyle(this.rangeDisplay.nativeElement, null).getPropertyValue('width'));
110
+ const rangeDisplayPaddingLeft = parseInt(getComputedStyle(this.rangeDisplay.nativeElement, null).getPropertyValue('padding-left'));
111
+ const tooltipOverflowsLeftEdge = tooltipWidth / 2 > rangeDisplayPaddingLeft + currentRangeWidth;
112
+ const tooltipOverflowsRightEdge = tooltipWidth / 2 > rangeDisplayWidth - rangeDisplayPaddingLeft - currentRangeWidth;
113
+ if (tooltipOverflowsLeftEdge) {
114
+ this.tooltipShift = `${tooltipWidth - this.MIN_TOOLTIP_SHIFT}px`;
115
+ }
116
+ else if (tooltipOverflowsRightEdge) {
117
+ this.tooltipShift = `${this.MIN_TOOLTIP_SHIFT}px`;
118
+ }
119
+ else {
120
+ this.tooltipShift = this.DEFAULT_TOOLTIP_SHIFT;
121
+ }
122
+ }
123
+ setupTooltipShiftingIfPossible() {
124
+ if (this.config?.orientation === 'horizontal' &&
125
+ !this.currentRangeWidthObserver &&
126
+ this.rangeDisplay &&
127
+ this.currentRangeElement) {
128
+ this.setupTooltipShifting();
129
+ }
130
+ }
131
+ getTooltipBackground() {
132
+ const current = this.config.current;
133
+ switch (true) {
134
+ case this.isValueInRange(current, this.config.redRangeMin, this.config.redRangeMax):
135
+ return '--c8y-palette-status-danger';
136
+ case this.isValueInRange(current, this.config.yellowRangeMin, this.config.yellowRangeMax):
137
+ return '--c8y-palette-status-warning';
138
+ default:
139
+ return '--c8y-palette-gray-30';
140
+ }
141
+ }
142
+ isValueInRange(value, min, max) {
143
+ return min != null && max != null && value >= min && value <= max;
144
+ }
68
145
  }
69
146
  RangeDisplayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: RangeDisplayComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
70
- RangeDisplayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: RangeDisplayComponent, selector: "c8y-range-display", inputs: { config: "config", display: "display" }, host: { properties: { "attr.style": "this.inlineStyle" } }, ngImport: i0, template: "<div [ngClass]=\"{ 'range-display--vertical': config.orientation === 'vertical',\n 'range-display--compact' : display ==='compact',\n 'range-display--inline' : display ==='inline' }\" \n attr.data-label=\"{{ config.unit }}\"\n>\n <div class=\"range-display\">\n <div class=\"range-display__range\">\n <div class=\"range-display__range__unit\">\n {{ config.unit }}\n </div>\n <div *ngIf=\"isYellowRangeDisplayed()\" class=\"range-display__range__min\"></div>\n <div *ngIf=\"isRedRangeDisplayed()\" class=\"range-display__range__max\"></div>\n <div\n *ngIf=\"checkTarget()\"\n class=\"range-display__range__target\"\n attr.data-label=\"{{ config.target }} {{ config.unit }}\"\n title=\"{{ 'Target' | translate }}: {{ config.target }} {{ config.unit }}\"\n ></div>\n <div\n *ngIf=\"\n config.current != undefined &&\n config.current >= config.min &&\n config.current <= config.max\n \"\n class=\"range-display__range__current\"\n attr.data-label=\"{{ config.current }} {{ config.unit }} &#xa; {{ config.time | c8yDate }}\"\n title=\"{{ 'Current' | translate }}: {{ config.current }} {{ config.unit }} | {{\n config.time | c8yDate\n }}\"\n ></div>\n </div>\n <div class=\"range-display__ruler\">\n <div\n *ngFor=\"let x of [].constructor(10); let index = index; trackBy: trackByIndex\"\n attr.data-label=\"{{ rulerCalc(index) }}\"\n class=\"range-display__tick\"\n ></div>\n <div attr.data-label=\"{{ config.max || 100 | number }}\" class=\"range-display__tick\"></div>\n </div>\n </div>\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: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.DatePipe, name: "c8yDate" }] });
147
+ RangeDisplayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: RangeDisplayComponent, selector: "c8y-range-display", inputs: { config: "config", display: "display" }, host: { properties: { "attr.style": "this.inlineStyle" } }, viewQueries: [{ propertyName: "rangeDisplay", first: true, predicate: ["rangeDisplay"], descendants: true }, { propertyName: "currentRangeElement", first: true, predicate: ["currentRangeElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [ngClass]=\"{\n 'range-display--vertical': config.orientation === 'vertical',\n 'range-display--compact': display === 'compact',\n 'range-display--inline': display === 'inline'\n }\"\n attr.data-label=\"{{ config.unit }}\"\n>\n <div\n class=\"range-display\"\n #rangeDisplay\n >\n <div class=\"range-display__range\">\n <div class=\"range-display__range__unit\">\n {{ config.unit }}\n </div>\n <div\n *ngIf=\"isYellowRangeDisplayed()\"\n class=\"range-display__range__min\"\n ></div>\n <div\n *ngIf=\"isRedRangeDisplayed()\"\n class=\"range-display__range__max\"\n ></div>\n <div\n *ngIf=\"checkTarget()\"\n class=\"range-display__range__target\"\n attr.data-label=\"{{ config.target }} {{ config.unit }}\"\n title=\"{{ 'Target' | translate }}: {{ config.target }} {{ config.unit }}\"\n ></div>\n <div\n [ngStyle]=\"{\n display:\n config.current != undefined &&\n config.current >= config.min &&\n config.current <= config.max\n ? 'block'\n : 'none'\n }\"\n #currentRangeElement\n class=\"range-display__range__current\"\n attr.data-label=\"{{ config.current }} {{ config.unit }} &#xa;{{ config.time | c8yDate }}\"\n title=\"{{ 'Current' | translate }}: {{ config.current }} {{ config.unit }} | {{\n config.time | c8yDate\n }}\"\n ></div>\n </div>\n <div class=\"range-display__ruler\">\n <div\n *ngFor=\"let x of [].constructor(10); let index = index; trackBy: trackByIndex\"\n attr.data-label=\"{{ rulerCalc(index) }}\"\n class=\"range-display__tick\"\n ></div>\n <div\n attr.data-label=\"{{ config.max || 100 | number }}\"\n class=\"range-display__tick\"\n ></div>\n </div>\n </div>\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: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.DatePipe, name: "c8yDate" }] });
71
148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: RangeDisplayComponent, decorators: [{
72
149
  type: Component,
73
- args: [{ selector: 'c8y-range-display', template: "<div [ngClass]=\"{ 'range-display--vertical': config.orientation === 'vertical',\n 'range-display--compact' : display ==='compact',\n 'range-display--inline' : display ==='inline' }\" \n attr.data-label=\"{{ config.unit }}\"\n>\n <div class=\"range-display\">\n <div class=\"range-display__range\">\n <div class=\"range-display__range__unit\">\n {{ config.unit }}\n </div>\n <div *ngIf=\"isYellowRangeDisplayed()\" class=\"range-display__range__min\"></div>\n <div *ngIf=\"isRedRangeDisplayed()\" class=\"range-display__range__max\"></div>\n <div\n *ngIf=\"checkTarget()\"\n class=\"range-display__range__target\"\n attr.data-label=\"{{ config.target }} {{ config.unit }}\"\n title=\"{{ 'Target' | translate }}: {{ config.target }} {{ config.unit }}\"\n ></div>\n <div\n *ngIf=\"\n config.current != undefined &&\n config.current >= config.min &&\n config.current <= config.max\n \"\n class=\"range-display__range__current\"\n attr.data-label=\"{{ config.current }} {{ config.unit }} &#xa; {{ config.time | c8yDate }}\"\n title=\"{{ 'Current' | translate }}: {{ config.current }} {{ config.unit }} | {{\n config.time | c8yDate\n }}\"\n ></div>\n </div>\n <div class=\"range-display__ruler\">\n <div\n *ngFor=\"let x of [].constructor(10); let index = index; trackBy: trackByIndex\"\n attr.data-label=\"{{ rulerCalc(index) }}\"\n class=\"range-display__tick\"\n ></div>\n <div attr.data-label=\"{{ config.max || 100 | number }}\" class=\"range-display__tick\"></div>\n </div>\n </div>\n</div>\n" }]
150
+ args: [{ selector: 'c8y-range-display', template: "<div\n [ngClass]=\"{\n 'range-display--vertical': config.orientation === 'vertical',\n 'range-display--compact': display === 'compact',\n 'range-display--inline': display === 'inline'\n }\"\n attr.data-label=\"{{ config.unit }}\"\n>\n <div\n class=\"range-display\"\n #rangeDisplay\n >\n <div class=\"range-display__range\">\n <div class=\"range-display__range__unit\">\n {{ config.unit }}\n </div>\n <div\n *ngIf=\"isYellowRangeDisplayed()\"\n class=\"range-display__range__min\"\n ></div>\n <div\n *ngIf=\"isRedRangeDisplayed()\"\n class=\"range-display__range__max\"\n ></div>\n <div\n *ngIf=\"checkTarget()\"\n class=\"range-display__range__target\"\n attr.data-label=\"{{ config.target }} {{ config.unit }}\"\n title=\"{{ 'Target' | translate }}: {{ config.target }} {{ config.unit }}\"\n ></div>\n <div\n [ngStyle]=\"{\n display:\n config.current != undefined &&\n config.current >= config.min &&\n config.current <= config.max\n ? 'block'\n : 'none'\n }\"\n #currentRangeElement\n class=\"range-display__range__current\"\n attr.data-label=\"{{ config.current }} {{ config.unit }} &#xa;{{ config.time | c8yDate }}\"\n title=\"{{ 'Current' | translate }}: {{ config.current }} {{ config.unit }} | {{\n config.time | c8yDate\n }}\"\n ></div>\n </div>\n <div class=\"range-display__ruler\">\n <div\n *ngFor=\"let x of [].constructor(10); let index = index; trackBy: trackByIndex\"\n attr.data-label=\"{{ rulerCalc(index) }}\"\n class=\"range-display__tick\"\n ></div>\n <div\n attr.data-label=\"{{ config.max || 100 | number }}\"\n class=\"range-display__tick\"\n ></div>\n </div>\n </div>\n</div>\n" }]
74
151
  }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { config: [{
75
152
  type: Input
76
153
  }], display: [{
@@ -78,5 +155,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
78
155
  }], inlineStyle: [{
79
156
  type: HostBinding,
80
157
  args: ['attr.style']
158
+ }], rangeDisplay: [{
159
+ type: ViewChild,
160
+ args: ['rangeDisplay', { static: false }]
161
+ }], currentRangeElement: [{
162
+ type: ViewChild,
163
+ args: ['currentRangeElement', { static: false }]
81
164
  }] } });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtZGlzcGxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3JhbmdlLWRpc3BsYXkvcmFuZ2UtZGlzcGxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL3JhbmdlLWRpc3BsYXkvcmFuZ2UtZGlzcGxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7QUFPekQsTUFBTSxPQUFPLHFCQUFxQjtJQThDaEMsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQTdDbEMsV0FBTSxHQUFpQixFQUFFLENBQUM7UUFDMUIsWUFBTyxHQUFrQyxNQUFNLENBQUM7SUE0Q1gsQ0FBQztJQTNDL0MsSUFDSSxXQUFXO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztTQUN2QjtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FB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QUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE1BQU0sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRO1FBQ2pDLE9BQU8sUUFBUSxLQUFLLENBQUMsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7O2tIQWpGVSxxQkFBcUI7c0dBQXJCLHFCQUFxQix1S0NSbEMscXFEQXlDQTsyRkRqQ2EscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQjttR0FJcEIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFRixXQUFXO3NCQURkLFdBQVc7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFJhbmdlRGlzcGxheSB9IGZyb20gJy4vcmFuZ2UtZGlzcGxheS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1yYW5nZS1kaXNwbGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhbmdlLWRpc3BsYXkuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFJhbmdlRGlzcGxheUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogUmFuZ2VEaXNwbGF5ID0ge307XG4gIEBJbnB1dCgpIGRpc3BsYXk6ICdmdWxsJyB8ICdjb21wYWN0JyB8ICdpbmxpbmUnID0gJ2Z1bGwnO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3R5bGUnKVxuICBnZXQgaW5saW5lU3R5bGUoKSB7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZyB8fCB7fTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLm1pbikge1xuICAgICAgdGhpcy5jb25maWcubWluID0gMDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5tYXgpIHtcbiAgICAgIHRoaXMuY29uZmlnLm1heCA9IDEwMDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLmZyYWN0aW9uU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbmZpZy5jdXJyZW50ID0gcGFyc2VGbG9hdCh0aGlzLmNvbmZpZy5jdXJyZW50LnRvRml4ZWQodGhpcy5jb25maWcuZnJhY3Rpb25TaXplKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoXG4gICAgICBgXG4gICAgICAgICAgLS1yYW5nZS1taW46ICR7dGhpcy5jb25maWcubWlufTtcbiAgICAgICAgICAtLXJhbmdlLW1heDogJHt0aGlzLmNvbmZpZy5tYXh9O1xuICAgICAgICAgIC0tZnVsbC1yYW5nZTogJHt0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW59O1xuICAgICAgICAgIC0tbWVhc3VyZW1lbnQtdGFyZ2V0OiAke1xuICAgICAgICAgICAgKCh0aGlzLmNvbmZpZy50YXJnZXQgLSB0aGlzLmNvbmZpZy5taW4pICogMTAwKSAvICh0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW4pXG4gICAgICAgICAgfSU7XG4gICAgICAgICAgLS1tZWFzdXJlbWVudC1jdXJyZW50OiAke1xuICAgICAgICAgICAgKCh0aGlzLmNvbmZpZy5jdXJyZW50IC0gdGhpcy5jb25maWcubWluKSAqIDEwMCkgLyAodGhpcy5jb25maWcubWF4IC0gdGhpcy5jb25maWcubWluKVxuICAgICAgICAgIH0lO1xuICAgICAgICAgIC0tcmFuZ2UteS1taW46ICR7XG4gICAgICAgICAgICAoKHRoaXMuY29uZmlnLnllbGxvd1JhbmdlTWluIC0gdGhpcy5jb25maWcubWluKSAqIDEwMCkgL1xuICAgICAgICAgICAgKHRoaXMuY29uZmlnLm1heCAtIHRoaXMuY29uZmlnLm1pbilcbiAgICAgICAgICB9JTtcbiAgICAgICAgICAtLXJhbmdlLXktbWF4OiAke1xuICAgICAgICAgICAgKCh0aGlzLmNvbmZpZy55ZWxsb3dSYW5nZU1heCAtIHRoaXMuY29uZmlnLm1pbikgLyAodGhpcy5jb25maWcubWF4IC0gdGhpcy5jb25maWcubWluKSkgKlxuICAgICAgICAgICAgMTAwXG4gICAgICAgICAgfSU7XG4gICAgICAgICAgLS1yYW5nZS1yLW1pbjogJHtcbiAgICAgICAgICAgICgodGhpcy5jb25maWcucmVkUmFuZ2VNaW4gLSB0aGlzLmNvbmZpZy5taW4pICogMTAwKSAvXG4gICAgICAgICAgICAodGhpcy5jb25maWcubWF4IC0gdGhpcy5jb25maWcubWluKVxuICAgICAgICAgIH0lO1xuICAgICAgICAgIC0tcmFuZ2Utci1tYXg6ICR7XG4gICAgICAgICAgICAoKHRoaXMuY29uZmlnLnJlZFJhbmdlTWF4IC0gdGhpcy5jb25maWcubWluKSAvICh0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW4pKSAqXG4gICAgICAgICAgICAxMDBcbiAgICAgICAgICB9JTtcbiAgICAgICAgYFxuICAgICk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuXG4gIGNoZWNrVGFyZ2V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbmZpZy50YXJnZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5jb25maWcudGFyZ2V0ICE9PSBudWxsICYmXG4gICAgICB0aGlzLmNvbmZpZy50YXJnZXQgPj0gdGhpcy5jb25maWcubWluICYmXG4gICAgICB0aGlzLmNvbmZpZy50YXJnZXQgPD0gdGhpcy5jb25maWcubWF4XG4gICAgKTtcbiAgfVxuXG4gIHJ1bGVyQ2FsYyhpbmRleCkge1xuICAgIGNvbnN0IG51bTogbnVtYmVyID0gdGhpcy5jb25maWcubWluICsgKCh0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW4pIC8gMTApICogaW5kZXg7XG4gICAgaWYgKHRoaXMuY29uZmlnLmZyYWN0aW9uU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdChudW0udG9GaXhlZCh0aGlzLmNvbmZpZy5mcmFjdGlvblNpemUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtLnRvRml4ZWQoMikpO1xuICB9XG5cbiAgdHJhY2tCeUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGlzUmVkUmFuZ2VEaXNwbGF5ZWQoKSB7XG4gICAgY29uc3QgeyByZWRSYW5nZU1pbiwgcmVkUmFuZ2VNYXggfSA9IHRoaXMuY29uZmlnO1xuICAgIHJldHVybiB0aGlzLmlzUmFuZ2VEaXNwbGF5ZWQocmVkUmFuZ2VNaW4sIHJlZFJhbmdlTWF4KTtcbiAgfVxuXG4gIGlzWWVsbG93UmFuZ2VEaXNwbGF5ZWQoKSB7XG4gICAgY29uc3QgeyB5ZWxsb3dSYW5nZU1pbiwgeWVsbG93UmFuZ2VNYXggfSA9IHRoaXMuY29uZmlnO1xuICAgIHJldHVybiB0aGlzLmlzUmFuZ2VEaXNwbGF5ZWQoeWVsbG93UmFuZ2VNaW4sIHllbGxvd1JhbmdlTWF4KTtcbiAgfVxuXG4gIGlzUmFuZ2VEaXNwbGF5ZWQocmFuZ2VNaW4sIHJhbmdlTWF4KSB7XG4gICAgcmV0dXJuIHJhbmdlTWluID09PSAwIHx8IHJhbmdlTWF4ID09PSAwIHx8IChyYW5nZU1pbiAmJiByYW5nZU1heCk7XG4gIH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwieyAncmFuZ2UtZGlzcGxheS0tdmVydGljYWwnOiBjb25maWcub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcsXG4gICdyYW5nZS1kaXNwbGF5LS1jb21wYWN0JyA6IGRpc3BsYXkgPT09J2NvbXBhY3QnLFxuICAncmFuZ2UtZGlzcGxheS0taW5saW5lJyA6IGRpc3BsYXkgPT09J2lubGluZScgfVwiIFxuICBhdHRyLmRhdGEtbGFiZWw9XCJ7eyBjb25maWcudW5pdCB9fVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJyYW5nZS1kaXNwbGF5XCI+XG4gICAgPGRpdiBjbGFzcz1cInJhbmdlLWRpc3BsYXlfX3JhbmdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcmFuZ2VfX3VuaXRcIj5cbiAgICAgICAge3sgY29uZmlnLnVuaXQgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImlzWWVsbG93UmFuZ2VEaXNwbGF5ZWQoKVwiIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcmFuZ2VfX21pblwiPjwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImlzUmVkUmFuZ2VEaXNwbGF5ZWQoKVwiIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcmFuZ2VfX21heFwiPjwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNoZWNrVGFyZ2V0KClcIlxuICAgICAgICBjbGFzcz1cInJhbmdlLWRpc3BsYXlfX3JhbmdlX190YXJnZXRcIlxuICAgICAgICBhdHRyLmRhdGEtbGFiZWw9XCJ7eyBjb25maWcudGFyZ2V0IH19IHt7IGNvbmZpZy51bml0IH19XCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnVGFyZ2V0JyB8IHRyYW5zbGF0ZSB9fToge3sgY29uZmlnLnRhcmdldCB9fSB7eyBjb25maWcudW5pdCB9fVwiXG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY29uZmlnLmN1cnJlbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgY29uZmlnLmN1cnJlbnQgPj0gY29uZmlnLm1pbiAmJlxuICAgICAgICAgIGNvbmZpZy5jdXJyZW50IDw9IGNvbmZpZy5tYXhcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJyYW5nZS1kaXNwbGF5X19yYW5nZV9fY3VycmVudFwiXG4gICAgICAgIGF0dHIuZGF0YS1sYWJlbD1cInt7IGNvbmZpZy5jdXJyZW50IH19IHt7IGNvbmZpZy51bml0IH19ICYjeGE7IHt7IGNvbmZpZy50aW1lIHwgYzh5RGF0ZSB9fVwiXG4gICAgICAgIHRpdGxlPVwie3sgJ0N1cnJlbnQnIHwgdHJhbnNsYXRlIH19OiB7eyBjb25maWcuY3VycmVudCB9fSB7eyBjb25maWcudW5pdCB9fSB8IHt7XG4gICAgICAgICAgY29uZmlnLnRpbWUgfCBjOHlEYXRlXG4gICAgICAgIH19XCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcnVsZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHggb2YgW10uY29uc3RydWN0b3IoMTApOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCJcbiAgICAgICAgYXR0ci5kYXRhLWxhYmVsPVwie3sgcnVsZXJDYWxjKGluZGV4KSB9fVwiXG4gICAgICAgIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fdGlja1wiXG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2IGF0dHIuZGF0YS1sYWJlbD1cInt7IGNvbmZpZy5tYXggfHwgMTAwIHwgbnVtYmVyIH19XCIgY2xhc3M9XCJyYW5nZS1kaXNwbGF5X190aWNrXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtZGlzcGxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3JhbmdlLWRpc3BsYXkvcmFuZ2UtZGlzcGxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL3JhbmdlLWRpc3BsYXkvcmFuZ2UtZGlzcGxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBT3BGLE1BQU0sT0FBTyxxQkFBcUI7SUEyRGhDLFlBQW9CLFNBQXVCO1FBQXZCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUExRGxDLFdBQU0sR0FBaUIsRUFBRSxDQUFDO1FBQzFCLFlBQU8sR0FBa0MsTUFBTSxDQUFDO1FBRWpELDZCQUF3QixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDMUQsNEdBQTRHO1FBQzNGLHdDQUFtQyxHQUFHLEdBQUcsQ0FBQztRQUMxQywwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDOUIsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLGlCQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBaUQxQyxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUNLLENBQUM7SUFqRC9DLElBQ0ksV0FBVztRQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElB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RUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSYW5nZURpc3BsYXkgfSBmcm9tICcuL3JhbmdlLWRpc3BsYXkubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcmFuZ2UtZGlzcGxheScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYW5nZS1kaXNwbGF5LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBSYW5nZURpc3BsYXlDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGNvbmZpZzogUmFuZ2VEaXNwbGF5ID0ge307XG4gIEBJbnB1dCgpIGRpc3BsYXk6ICdmdWxsJyB8ICdjb21wYWN0JyB8ICdpbmxpbmUnID0gJ2Z1bGwnO1xuICBwcml2YXRlIGN1cnJlbnRSYW5nZVdpZHRoT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIGN1cnJlbnRSYW5nZVdpZHRoQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PEVsZW1lbnQ+KCk7XG4gIC8vIHdpZHRoIG9mIGN1cnJlbnQgcmFuZ2UgaXMgY2hhbmdpbmcgd2l0aGluIDE1MG1zLCBzZWUgc3R5bGUgZGVjbGFyYXRpb24gZm9yIC5yYW5nZS1kaXNwbGF5X19yYW5nZV9fY3VycmVudFxuICBwcml2YXRlIHJlYWRvbmx5IENVUlJFTlRfUkFOR0VfV0lEVEhfVFJBTlNJVElPTl9USU1FID0gMTUwO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfVE9PTFRJUF9TSElGVCA9ICc1MCUnO1xuICBwcml2YXRlIHJlYWRvbmx5IE1JTl9UT09MVElQX1NISUZUID0gMTA7XG4gIHByaXZhdGUgdG9vbHRpcFNoaWZ0ID0gdGhpcy5ERUZBVUxUX1RPT0xUSVBfU0hJRlQ7XG4gIEBIb3N0QmluZGluZygnYXR0ci5zdHlsZScpXG4gIGdldCBpbmxpbmVTdHlsZSgpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuY29uZmlnIHx8IHt9O1xuICAgIGlmICghdGhpcy5jb25maWcubWluKSB7XG4gICAgICB0aGlzLmNvbmZpZy5taW4gPSAwO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29uZmlnLm1heCkge1xuICAgICAgdGhpcy5jb25maWcubWF4ID0gMTAwO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcuZnJhY3Rpb25TaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29uZmlnLmN1cnJlbnQgPSBwYXJzZUZsb2F0KHRoaXMuY29uZmlnLmN1cnJlbnQudG9GaXhlZCh0aGlzLmNvbmZpZy5mcmFjdGlvblNpemUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgIGBcbiAgICAgICAgICAtLXJhbmdlLW1pbjogJHt0aGlzLmNvbmZpZy5taW59O1xuICAgICAgICAgIC0tcmFuZ2UtbWF4OiAke3RoaXMuY29uZmlnLm1heH07XG4gICAgICAgICAgLS1yYW5nZS1kaXNwbGF5LXRvb2x0aXAtdHJhbnNsYXRlOiB0cmFuc2xhdGUoJHt0aGlzLnRvb2x0aXBTaGlmdH0sIC01NnB4KTtcbiAgICAgICAgICAtLXJhbmdlLWRpc3BsYXktdG9vbHRpcC1iZzogdmFyKCR7dGhpcy5nZXRUb29sdGlwQmFja2dyb3VuZCgpfSk7XG4gICAgICAgICAgLS1mdWxsLXJhbmdlOiAke3RoaXMuY29uZmlnLm1heCAtIHRoaXMuY29uZmlnLm1pbn07XG4gICAgICAgICAgLS1tZWFzdXJlbWVudC10YXJnZXQ6ICR7XG4gICAgICAgICAgICAoKHRoaXMuY29uZmlnLnRhcmdldCAtIHRoaXMuY29uZmlnLm1pbikgKiAxMDApIC8gKHRoaXMuY29uZmlnLm1heCAtIHRoaXMuY29uZmlnLm1pbilcbiAgICAgICAgICB9JTtcbiAgICAgICAgICAtLW1lYXN1cmVtZW50LWN1cnJlbnQ6ICR7XG4gICAgICAgICAgICAoKHRoaXMuY29uZmlnLmN1cnJlbnQgLSB0aGlzLmNvbmZpZy5taW4pICogMTAwKSAvICh0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW4pXG4gICAgICAgICAgfSU7XG4gICAgICAgICAgLS1yYW5nZS15LW1pbjogJHtcbiAgICAgICAgICAgICgodGhpcy5jb25maWcueWVsbG93UmFuZ2VNaW4gLSB0aGlzLmNvbmZpZy5taW4pICogMTAwKSAvXG4gICAgICAgICAgICAodGhpcy5jb25maWcubWF4IC0gdGhpcy5jb25maWcubWluKVxuICAgICAgICAgIH0lO1xuICAgICAgICAgIC0tcmFuZ2UteS1tYXg6ICR7XG4gICAgICAgICAgICAoKHRoaXMuY29uZmlnLnllbGxvd1JhbmdlTWF4IC0gdGhpcy5jb25maWcubWluKSAvICh0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW4pKSAqXG4gICAgICAgICAgICAxMDBcbiAgICAgICAgICB9JTtcbiAgICAgICAgICAtLXJhbmdlLXItbWluOiAke1xuICAgICAgICAgICAgKCh0aGlzLmNvbmZpZy5yZWRSYW5nZU1pbiAtIHRoaXMuY29uZmlnLm1pbikgKiAxMDApIC9cbiAgICAgICAgICAgICh0aGlzLmNvbmZpZy5tYXggLSB0aGlzLmNvbmZpZy5taW4pXG4gICAgICAgICAgfSU7XG4gICAgICAgICAgLS1yYW5nZS1yLW1heDogJHtcbiAgICAgICAgICAgICgodGhpcy5jb25maWcucmVkUmFuZ2VNYXggLSB0aGlzLmNvbmZpZy5taW4pIC8gKHRoaXMuY29uZmlnLm1heCAtIHRoaXMuY29uZmlnLm1pbikpICpcbiAgICAgICAgICAgIDEwMFxuICAgICAgICAgIH0lO1xuICAgICAgICBgXG4gICAgKTtcbiAgfVxuICBAVmlld0NoaWxkKCdyYW5nZURpc3BsYXknLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHJpdmF0ZSByYW5nZURpc3BsYXk6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2N1cnJlbnRSYW5nZUVsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHJpdmF0ZSBjdXJyZW50UmFuZ2VFbGVtZW50OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIC8vIEl0J3MgbmVjZXNzYXJ5IHRvIGhhbmRsZSB0b29sdGlwIHNoaWZ0aW5nIGJvdGggaW4gT25DaGFuZ2VzIGFuZCBBZnRlclZpZXdJbml0LiBJbiBjYXNlIG9mIExpbmVhciBnYXVnZSB3aWRnZXQsIHZpZXcgaXNcbiAgICAvLyByZW5kZXJlZCBmaXJzdCAoc28gYXMgZWxlbWVudHMgbmVlZGVkIGZvciBjYWxjdWxhdGluZyBzaGlmdGluZykgYW5kIGNvbmZpZyBvcmllbnRhdGlvbiBpcyBzZXQgbGF0ZXIgb24uXG4gICAgLy8gSW4gb3RoZXIgY2FzZXMgaXQncyBwb3NzaWJsZSB0aGF0IG9yaWVudGF0aW9uIGlzIGRlZmluZWQgb24gaW5pdGlhbGl6YXRpb24gb2YgY2xhc3MgYW5kIHZpZXcgZWxlbWVudHMgYXJlIHJlbmRlcmVkIGxhdGVyLlxuICAgIHRoaXMuc2V0dXBUb29sdGlwU2hpZnRpbmdJZlBvc3NpYmxlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zZXR1cFRvb2x0aXBTaGlmdGluZ0lmUG9zc2libGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY3VycmVudFJhbmdlV2lkdGhPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBjaGVja1RhcmdldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb25maWcudGFyZ2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuY29uZmlnLnRhcmdldCAhPT0gbnVsbCAmJlxuICAgICAgdGhpcy5jb25maWcudGFyZ2V0ID49IHRoaXMuY29uZmlnLm1pbiAmJlxuICAgICAgdGhpcy5jb25maWcudGFyZ2V0IDw9IHRoaXMuY29uZmlnLm1heFxuICAgICk7XG4gIH1cblxuICBydWxlckNhbGMoaW5kZXgpIHtcbiAgICBjb25zdCBudW06IG51bWJlciA9IHRoaXMuY29uZmlnLm1pbiArICgodGhpcy5jb25maWcubWF4IC0gdGhpcy5jb25maWcubWluKSAvIDEwKSAqIGluZGV4O1xuICAgIGlmICh0aGlzLmNvbmZpZy5mcmFjdGlvblNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtLnRvRml4ZWQodGhpcy5jb25maWcuZnJhY3Rpb25TaXplKSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KG51bS50b0ZpeGVkKDIpKTtcbiAgfVxuXG4gIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBpc1JlZFJhbmdlRGlzcGxheWVkKCkge1xuICAgIGNvbnN0IHsgcmVkUmFuZ2VNaW4sIHJlZFJhbmdlTWF4IH0gPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4gdGhpcy5pc1JhbmdlRGlzcGxheWVkKHJlZFJhbmdlTWluLCByZWRSYW5nZU1heCk7XG4gIH1cblxuICBpc1llbGxvd1JhbmdlRGlzcGxheWVkKCkge1xuICAgIGNvbnN0IHsgeWVsbG93UmFuZ2VNaW4sIHllbGxvd1JhbmdlTWF4IH0gPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4gdGhpcy5pc1JhbmdlRGlzcGxheWVkKHllbGxvd1JhbmdlTWluLCB5ZWxsb3dSYW5nZU1heCk7XG4gIH1cblxuICBpc1JhbmdlRGlzcGxheWVkKHJhbmdlTWluLCByYW5nZU1heCkge1xuICAgIHJldHVybiByYW5nZU1pbiA9PT0gMCB8fCByYW5nZU1heCA9PT0gMCB8fCAocmFuZ2VNaW4gJiYgcmFuZ2VNYXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFRvb2x0aXBTaGlmdGluZygpIHtcbiAgICB0aGlzLmN1cnJlbnRSYW5nZVdpZHRoT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKFt2YWxdKSA9PiB7XG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZSh2YWwudGFyZ2V0LCBudWxsKS5kaXNwbGF5ID09PSAnYmxvY2snKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFJhbmdlV2lkdGhDaGFuZ2VkLm5leHQodmFsLnRhcmdldCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmN1cnJlbnRSYW5nZVdpZHRoT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmN1cnJlbnRSYW5nZUVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICB0aGlzLmN1cnJlbnRSYW5nZVdpZHRoQ2hhbmdlZFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLkNVUlJFTlRfUkFOR0VfV0lEVEhfVFJBTlNJVElPTl9USU1FKSxcbiAgICAgICAgbWFwKChyYW5nZUVsZW1lbnQ6IEVsZW1lbnQpID0+IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUocmFuZ2VFbGVtZW50LCBudWxsKS53aWR0aCkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyYW5nZUVsZW1lbnRXaWR0aCA9PiB7XG4gICAgICAgIHRoaXMuc2V0VG9vbHRpcFNoaWZ0VmFsdWUocmFuZ2VFbGVtZW50V2lkdGgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFRvb2x0aXBTaGlmdFZhbHVlKHJhbmdlRWxlbWVudFdpZHRoOiBudW1iZXIpIHtcbiAgICBjb25zdCB0b29sdGlwV2lkdGggPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUodGhpcy5jdXJyZW50UmFuZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICc6YWZ0ZXInKS53aWR0aFxuICAgICk7XG4gICAgY29uc3QgY3VycmVudFJhbmdlV2lkdGggPSByYW5nZUVsZW1lbnRXaWR0aDtcbiAgICBjb25zdCByYW5nZURpc3BsYXlXaWR0aCA9IHBhcnNlSW50KFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJhbmdlRGlzcGxheS5uYXRpdmVFbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCd3aWR0aCcpXG4gICAgKTtcbiAgICBjb25zdCByYW5nZURpc3BsYXlQYWRkaW5nTGVmdCA9IHBhcnNlSW50KFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJhbmdlRGlzcGxheS5uYXRpdmVFbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWxlZnQnKVxuICAgICk7XG4gICAgY29uc3QgdG9vbHRpcE92ZXJmbG93c0xlZnRFZGdlID0gdG9vbHRpcFdpZHRoIC8gMiA+IHJhbmdlRGlzcGxheVBhZGRpbmdMZWZ0ICsgY3VycmVudFJhbmdlV2lkdGg7XG4gICAgY29uc3QgdG9vbHRpcE92ZXJmbG93c1JpZ2h0RWRnZSA9XG4gICAgICB0b29sdGlwV2lkdGggLyAyID4gcmFuZ2VEaXNwbGF5V2lkdGggLSByYW5nZURpc3BsYXlQYWRkaW5nTGVmdCAtIGN1cnJlbnRSYW5nZVdpZHRoO1xuICAgIGlmICh0b29sdGlwT3ZlcmZsb3dzTGVmdEVkZ2UpIHtcbiAgICAgIHRoaXMudG9vbHRpcFNoaWZ0ID0gYCR7dG9vbHRpcFdpZHRoIC0gdGhpcy5NSU5fVE9PTFRJUF9TSElGVH1weGA7XG4gICAgfSBlbHNlIGlmICh0b29sdGlwT3ZlcmZsb3dzUmlnaHRFZGdlKSB7XG4gICAgICB0aGlzLnRvb2x0aXBTaGlmdCA9IGAke3RoaXMuTUlOX1RPT0xUSVBfU0hJRlR9cHhgO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRvb2x0aXBTaGlmdCA9IHRoaXMuREVGQVVMVF9UT09MVElQX1NISUZUO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBUb29sdGlwU2hpZnRpbmdJZlBvc3NpYmxlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnPy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG4gICAgICAhdGhpcy5jdXJyZW50UmFuZ2VXaWR0aE9ic2VydmVyICYmXG4gICAgICB0aGlzLnJhbmdlRGlzcGxheSAmJlxuICAgICAgdGhpcy5jdXJyZW50UmFuZ2VFbGVtZW50XG4gICAgKSB7XG4gICAgICB0aGlzLnNldHVwVG9vbHRpcFNoaWZ0aW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb29sdGlwQmFja2dyb3VuZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmNvbmZpZy5jdXJyZW50O1xuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSB0aGlzLmlzVmFsdWVJblJhbmdlKGN1cnJlbnQsIHRoaXMuY29uZmlnLnJlZFJhbmdlTWluLCB0aGlzLmNvbmZpZy5yZWRSYW5nZU1heCk6XG4gICAgICAgIHJldHVybiAnLS1jOHktcGFsZXR0ZS1zdGF0dXMtZGFuZ2VyJztcbiAgICAgIGNhc2UgdGhpcy5pc1ZhbHVlSW5SYW5nZShjdXJyZW50LCB0aGlzLmNvbmZpZy55ZWxsb3dSYW5nZU1pbiwgdGhpcy5jb25maWcueWVsbG93UmFuZ2VNYXgpOlxuICAgICAgICByZXR1cm4gJy0tYzh5LXBhbGV0dGUtc3RhdHVzLXdhcm5pbmcnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICctLWM4eS1wYWxldHRlLWdyYXktMzAnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNWYWx1ZUluUmFuZ2UodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsICYmIHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXg7XG4gIH1cbn1cbiIsIjxkaXZcbiAgW25nQ2xhc3NdPVwie1xuICAgICdyYW5nZS1kaXNwbGF5LS12ZXJ0aWNhbCc6IGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyxcbiAgICAncmFuZ2UtZGlzcGxheS0tY29tcGFjdCc6IGRpc3BsYXkgPT09ICdjb21wYWN0JyxcbiAgICAncmFuZ2UtZGlzcGxheS0taW5saW5lJzogZGlzcGxheSA9PT0gJ2lubGluZSdcbiAgfVwiXG4gIGF0dHIuZGF0YS1sYWJlbD1cInt7IGNvbmZpZy51bml0IH19XCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicmFuZ2UtZGlzcGxheVwiXG4gICAgI3JhbmdlRGlzcGxheVxuICA+XG4gICAgPGRpdiBjbGFzcz1cInJhbmdlLWRpc3BsYXlfX3JhbmdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcmFuZ2VfX3VuaXRcIj5cbiAgICAgICAge3sgY29uZmlnLnVuaXQgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImlzWWVsbG93UmFuZ2VEaXNwbGF5ZWQoKVwiXG4gICAgICAgIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcmFuZ2VfX21pblwiXG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiaXNSZWRSYW5nZURpc3BsYXllZCgpXCJcbiAgICAgICAgY2xhc3M9XCJyYW5nZS1kaXNwbGF5X19yYW5nZV9fbWF4XCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJjaGVja1RhcmdldCgpXCJcbiAgICAgICAgY2xhc3M9XCJyYW5nZS1kaXNwbGF5X19yYW5nZV9fdGFyZ2V0XCJcbiAgICAgICAgYXR0ci5kYXRhLWxhYmVsPVwie3sgY29uZmlnLnRhcmdldCB9fSB7eyBjb25maWcudW5pdCB9fVwiXG4gICAgICAgIHRpdGxlPVwie3sgJ1RhcmdldCcgfCB0cmFuc2xhdGUgfX06IHt7IGNvbmZpZy50YXJnZXQgfX0ge3sgY29uZmlnLnVuaXQgfX1cIlxuICAgICAgPjwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgZGlzcGxheTpcbiAgICAgICAgICAgIGNvbmZpZy5jdXJyZW50ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgY29uZmlnLmN1cnJlbnQgPj0gY29uZmlnLm1pbiAmJlxuICAgICAgICAgICAgY29uZmlnLmN1cnJlbnQgPD0gY29uZmlnLm1heFxuICAgICAgICAgICAgICA/ICdibG9jaydcbiAgICAgICAgICAgICAgOiAnbm9uZSdcbiAgICAgICAgfVwiXG4gICAgICAgICNjdXJyZW50UmFuZ2VFbGVtZW50XG4gICAgICAgIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcmFuZ2VfX2N1cnJlbnRcIlxuICAgICAgICBhdHRyLmRhdGEtbGFiZWw9XCJ7eyBjb25maWcuY3VycmVudCB9fSB7eyBjb25maWcudW5pdCB9fSAmI3hhO3t7IGNvbmZpZy50aW1lIHwgYzh5RGF0ZSB9fVwiXG4gICAgICAgIHRpdGxlPVwie3sgJ0N1cnJlbnQnIHwgdHJhbnNsYXRlIH19OiB7eyBjb25maWcuY3VycmVudCB9fSB7eyBjb25maWcudW5pdCB9fSB8IHt7XG4gICAgICAgICAgY29uZmlnLnRpbWUgfCBjOHlEYXRlXG4gICAgICAgIH19XCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fcnVsZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHggb2YgW10uY29uc3RydWN0b3IoMTApOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCJcbiAgICAgICAgYXR0ci5kYXRhLWxhYmVsPVwie3sgcnVsZXJDYWxjKGluZGV4KSB9fVwiXG4gICAgICAgIGNsYXNzPVwicmFuZ2UtZGlzcGxheV9fdGlja1wiXG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGF0dHIuZGF0YS1sYWJlbD1cInt7IGNvbmZpZy5tYXggfHwgMTAwIHwgbnVtYmVyIH19XCJcbiAgICAgICAgY2xhc3M9XCJyYW5nZS1kaXNwbGF5X190aWNrXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { Realtime } from '@c8y/client';
3
3
  import { Observable } from 'rxjs';
4
- import { share } from 'rxjs/operators';
4
+ import { distinctUntilChanged, share, shareReplay } from 'rxjs/operators';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@c8y/client";
7
7
  /**
@@ -11,6 +11,8 @@ export class RealtimeSubjectService {
11
11
  constructor(realtime) {
12
12
  this.realtime = realtime;
13
13
  this.subjects$ = new Map();
14
+ this.reconnect$ = this.createObservableForReconnect().pipe(share());
15
+ this.connectionStatus$ = this.createObservableForConnectionStatus().pipe(distinctUntilChanged(), shareReplay({ refCount: true, bufferSize: 1 }));
14
16
  }
15
17
  getObservableForChannel(channel) {
16
18
  if (this.subjects$.has(channel)) {
@@ -23,7 +25,7 @@ export class RealtimeSubjectService {
23
25
  }
24
26
  createObservableForChannel(channel, realtime) {
25
27
  return new Observable(observer => {
26
- const realtimeSubscription = realtime.subscribe(channel, msg => {
28
+ let realtimeSubscription = realtime.subscribe(channel, msg => {
27
29
  const data = {
28
30
  channel: msg.channel,
29
31
  data: msg.data.data,
@@ -32,13 +34,54 @@ export class RealtimeSubjectService {
32
34
  };
33
35
  observer.next(data);
34
36
  });
37
+ /**
38
+ * In (rare) case of a re-handshake, resubscribe valid subscriptions.
39
+ * @see https://docs.cometd.org/current/reference/#_javascript_subscribe_resubscribe
40
+ */
41
+ const reconnectSubscription = this.reconnect$.subscribe(() => {
42
+ try {
43
+ realtimeSubscription = this.realtime.resubscribe(realtimeSubscription);
44
+ }
45
+ catch (e) {
46
+ console.warn(`Failed to resubscribe to channel: "${channel}" after reconnect.`, e);
47
+ observer.error(e);
48
+ }
49
+ });
35
50
  return {
36
- unsubscribe() {
51
+ unsubscribe: () => {
52
+ reconnectSubscription.unsubscribe();
37
53
  realtime.unsubscribe(realtimeSubscription);
38
54
  }
39
55
  };
40
56
  });
41
57
  }
58
+ createObservableForReconnect() {
59
+ return new Observable(observer => {
60
+ const handle = this.realtime.addHandshakeListener(msg => {
61
+ if (msg.successful && msg.reestablish) {
62
+ observer.next();
63
+ }
64
+ });
65
+ return {
66
+ unsubscribe: () => {
67
+ this.realtime.removeListener(handle);
68
+ }
69
+ };
70
+ });
71
+ }
72
+ createObservableForConnectionStatus() {
73
+ return new Observable(observer => {
74
+ observer.next(!this.realtime.isDisconnected() ? 'connected' : 'disconnected');
75
+ const handle = this.realtime.addConnectListener(msg => {
76
+ observer.next(msg.successful ? 'connected' : 'disconnected');
77
+ });
78
+ return {
79
+ unsubscribe: () => {
80
+ this.realtime.removeListener(handle);
81
+ }
82
+ };
83
+ });
84
+ }
42
85
  }
43
86
  RealtimeSubjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: RealtimeSubjectService, deps: [{ token: i1.Realtime }], target: i0.ɵɵFactoryTarget.Injectable });
44
87
  RealtimeSubjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: RealtimeSubjectService, providedIn: 'root' });
@@ -46,4 +89,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
46
89
  type: Injectable,
47
90
  args: [{ providedIn: 'root' }]
48
91
  }], ctorParameters: function () { return [{ type: i1.Realtime }]; } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtc3ViamVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9yZWFsdGltZS9yZWFsdGltZS1zdWJqZWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFHdkM7O0dBRUc7QUFFSCxNQUFNLE9BQU8sc0JBQXNCO0lBR2pDLFlBQXNCLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFGaEMsY0FBUyxHQUFHLElBQUksR0FBRyxFQUFnRCxDQUFDO0lBRWpDLENBQUM7SUFFNUMsdUJBQXVCLENBQUksT0FBZTtRQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFtQyxDQUFDO1NBQ3RFO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFJLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0UsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFFL0MsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBRVMsMEJBQTBCLENBQ2xDLE9BQWUsRUFDZixRQUFrQjtRQUVsQixPQUFPLElBQUksVUFBVSxDQUFxQixRQUFRLENBQUMsRUFBRTtZQUNuRCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUM3RCxNQUFNLElBQUksR0FBdUI7b0JBQy9CLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztvQkFDcEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSTtvQkFDbkIsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNWLGNBQWMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWM7aUJBQ3hDLENBQUM7Z0JBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU87Z0JBQ0wsV0FBVztvQkFDVCxRQUFRLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzdDLENBQUM7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSEFwQ1Usc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FEVCxNQUFNOzJGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhbHRpbWUgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzaGFyZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlYWx0aW1lTWVzc2FnZSB9IGZyb20gJy4vcmVhbHRpbWUubW9kZWwnO1xuXG4vKipcbiAqIFNlcnZpY2UgKHByb3ZpZGVkSW4gcm9vdCkgdGhhdCBlbnN1cmVzIHRvIG9ubHkgY3JlYXRlIGEgc2luZ2xlIHJlYWx0aW1lIHN1YnNjcmlwdGlvbiBmb3IgZWFjaCBjaGFubmVsXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVhbHRpbWVTdWJqZWN0U2VydmljZSB7XG4gIHByaXZhdGUgc3ViamVjdHMkID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8UmVhbHRpbWVNZXNzYWdlPHVua25vd24+Pj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhbHRpbWU6IFJlYWx0aW1lKSB7fVxuXG4gIGdldE9ic2VydmFibGVGb3JDaGFubmVsPFQ+KGNoYW5uZWw6IHN0cmluZyk6IE9ic2VydmFibGU8UmVhbHRpbWVNZXNzYWdlPFQ+PiB7XG4gICAgaWYgKHRoaXMuc3ViamVjdHMkLmhhcyhjaGFubmVsKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3ViamVjdHMkLmdldChjaGFubmVsKSBhcyBPYnNlcnZhYmxlPFJlYWx0aW1lTWVzc2FnZTxUPj47XG4gICAgfVxuICAgIGNvbnN0IG9ic2VydmFibGUkID0gdGhpcy5jcmVhdGVPYnNlcnZhYmxlRm9yQ2hhbm5lbDxUPihjaGFubmVsLCB0aGlzLnJlYWx0aW1lKTtcbiAgICBjb25zdCBzaGFyZWRPYnNlcnZhYmxlJCA9IG9ic2VydmFibGUkLnBpcGUoc2hhcmUoKSk7XG4gICAgdGhpcy5zdWJqZWN0cyQuc2V0KGNoYW5uZWwsIHNoYXJlZE9ic2VydmFibGUkKTtcblxuICAgIHJldHVybiBzaGFyZWRPYnNlcnZhYmxlJDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVPYnNlcnZhYmxlRm9yQ2hhbm5lbDxUPihcbiAgICBjaGFubmVsOiBzdHJpbmcsXG4gICAgcmVhbHRpbWU6IFJlYWx0aW1lXG4gICk6IE9ic2VydmFibGU8UmVhbHRpbWVNZXNzYWdlPFQ+PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFJlYWx0aW1lTWVzc2FnZTxUPj4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgY29uc3QgcmVhbHRpbWVTdWJzY3JpcHRpb24gPSByZWFsdGltZS5zdWJzY3JpYmUoY2hhbm5lbCwgbXNnID0+IHtcbiAgICAgICAgY29uc3QgZGF0YTogUmVhbHRpbWVNZXNzYWdlPFQ+ID0ge1xuICAgICAgICAgIGNoYW5uZWw6IG1zZy5jaGFubmVsLFxuICAgICAgICAgIGRhdGE6IG1zZy5kYXRhLmRhdGEsXG4gICAgICAgICAgaWQ6IG1zZy5pZCxcbiAgICAgICAgICByZWFsdGltZUFjdGlvbjogbXNnLmRhdGEucmVhbHRpbWVBY3Rpb25cbiAgICAgICAgfTtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgICAgcmVhbHRpbWUudW5zdWJzY3JpYmUocmVhbHRpbWVTdWJzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtc3ViamVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9yZWFsdGltZS9yZWFsdGltZS1zdWJqZWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRzFFOztHQUVHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUFzQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRmhDLGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBZ0QsQ0FBQztRQUcxRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsbUNBQW1DLEVBQUUsQ0FBQyxJQUFJLENBQ3RFLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQy9DLENBQUM7SUFDSixDQUFDO0lBRUQsdUJBQXVCLENBQUksT0FBZTtRQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFtQyxDQUFDO1NBQ3RFO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFJLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0UsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFFL0MsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBRVMsMEJBQTBCLENBQ2xDLE9BQWUsRUFDZixRQUFrQjtRQUVsQixPQUFPLElBQUksVUFBVSxDQUFxQixRQUFRLENBQUMsRUFBRTtZQUNuRCxJQUFJLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUMzRCxNQUFNLElBQUksR0FBdUI7b0JBQy9CLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztvQkFDcEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSTtvQkFDbkIsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNWLGNBQWMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWM7aUJBQ3hDLENBQUM7Z0JBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztZQUVIOzs7ZUFHRztZQUNILE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMzRCxJQUFJO29CQUNGLG9CQUFvQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7aUJBQ3hFO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLE9BQU8sb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ25GLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ25CO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPO2dCQUNMLFdBQVcsRUFBRSxHQUFHLEVBQUU7b0JBQ2hCLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNwQyxRQUFRLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzdDLENBQUM7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsNEJBQTRCO1FBQ3BDLE9BQU8sSUFBSSxVQUFVLENBQU8sUUFBUSxDQUFDLEVBQUU7WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdEQsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7b0JBQ3JDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDakI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU87Z0JBQ0wsV0FBVyxFQUFFLEdBQUcsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsbUNBQW1DO1FBQzNDLE9BQU8sSUFBSSxVQUFVLENBQStCLFFBQVEsQ0FBQyxFQUFFO1lBQzdELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3BELFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvRCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU87Z0JBQ0wsV0FBVyxFQUFFLEdBQUcsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSEF4RlUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FEVCxNQUFNOzJGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhbHRpbWUgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc2hhcmUsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUmVhbHRpbWVNZXNzYWdlIH0gZnJvbSAnLi9yZWFsdGltZS5tb2RlbCc7XG5cbi8qKlxuICogU2VydmljZSAocHJvdmlkZWRJbiByb290KSB0aGF0IGVuc3VyZXMgdG8gb25seSBjcmVhdGUgYSBzaW5nbGUgcmVhbHRpbWUgc3Vic2NyaXB0aW9uIGZvciBlYWNoIGNoYW5uZWxcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSZWFsdGltZVN1YmplY3RTZXJ2aWNlIHtcbiAgcmVjb25uZWN0JDogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgY29ubmVjdGlvblN0YXR1cyQ6IE9ic2VydmFibGU8J2Nvbm5lY3RlZCcgfCAnZGlzY29ubmVjdGVkJz47XG4gIHByaXZhdGUgc3ViamVjdHMkID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8UmVhbHRpbWVNZXNzYWdlPHVua25vd24+Pj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhbHRpbWU6IFJlYWx0aW1lKSB7XG4gICAgdGhpcy5yZWNvbm5lY3QkID0gdGhpcy5jcmVhdGVPYnNlcnZhYmxlRm9yUmVjb25uZWN0KCkucGlwZShzaGFyZSgpKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkID0gdGhpcy5jcmVhdGVPYnNlcnZhYmxlRm9yQ29ubmVjdGlvblN0YXR1cygpLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KVxuICAgICk7XG4gIH1cblxuICBnZXRPYnNlcnZhYmxlRm9yQ2hhbm5lbDxUPihjaGFubmVsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJlYWx0aW1lTWVzc2FnZTxUPj4ge1xuICAgIGlmICh0aGlzLnN1YmplY3RzJC5oYXMoY2hhbm5lbCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN1YmplY3RzJC5nZXQoY2hhbm5lbCkgYXMgT2JzZXJ2YWJsZTxSZWFsdGltZU1lc3NhZ2U8VD4+O1xuICAgIH1cbiAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuY3JlYXRlT2JzZXJ2YWJsZUZvckNoYW5uZWw8VD4oY2hhbm5lbCwgdGhpcy5yZWFsdGltZSk7XG4gICAgY29uc3Qgc2hhcmVkT2JzZXJ2YWJsZSQgPSBvYnNlcnZhYmxlJC5waXBlKHNoYXJlKCkpO1xuICAgIHRoaXMuc3ViamVjdHMkLnNldChjaGFubmVsLCBzaGFyZWRPYnNlcnZhYmxlJCk7XG5cbiAgICByZXR1cm4gc2hhcmVkT2JzZXJ2YWJsZSQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlT2JzZXJ2YWJsZUZvckNoYW5uZWw8VD4oXG4gICAgY2hhbm5lbDogc3RyaW5nLFxuICAgIHJlYWx0aW1lOiBSZWFsdGltZVxuICApOiBPYnNlcnZhYmxlPFJlYWx0aW1lTWVzc2FnZTxUPj4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxSZWFsdGltZU1lc3NhZ2U8VD4+KG9ic2VydmVyID0+IHtcbiAgICAgIGxldCByZWFsdGltZVN1YnNjcmlwdGlvbiA9IHJlYWx0aW1lLnN1YnNjcmliZShjaGFubmVsLCBtc2cgPT4ge1xuICAgICAgICBjb25zdCBkYXRhOiBSZWFsdGltZU1lc3NhZ2U8VD4gPSB7XG4gICAgICAgICAgY2hhbm5lbDogbXNnLmNoYW5uZWwsXG4gICAgICAgICAgZGF0YTogbXNnLmRhdGEuZGF0YSxcbiAgICAgICAgICBpZDogbXNnLmlkLFxuICAgICAgICAgIHJlYWx0aW1lQWN0aW9uOiBtc2cuZGF0YS5yZWFsdGltZUFjdGlvblxuICAgICAgICB9O1xuICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEpO1xuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogSW4gKHJhcmUpIGNhc2Ugb2YgYSByZS1oYW5kc2hha2UsIHJlc3Vic2NyaWJlIHZhbGlkIHN1YnNjcmlwdGlvbnMuXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5jb21ldGQub3JnL2N1cnJlbnQvcmVmZXJlbmNlLyNfamF2YXNjcmlwdF9zdWJzY3JpYmVfcmVzdWJzY3JpYmVcbiAgICAgICAqL1xuICAgICAgY29uc3QgcmVjb25uZWN0U3Vic2NyaXB0aW9uID0gdGhpcy5yZWNvbm5lY3QkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVhbHRpbWVTdWJzY3JpcHRpb24gPSB0aGlzLnJlYWx0aW1lLnJlc3Vic2NyaWJlKHJlYWx0aW1lU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIHJlc3Vic2NyaWJlIHRvIGNoYW5uZWw6IFwiJHtjaGFubmVsfVwiIGFmdGVyIHJlY29ubmVjdC5gLCBlKTtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB7XG4gICAgICAgICAgcmVjb25uZWN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVhbHRpbWUudW5zdWJzY3JpYmUocmVhbHRpbWVTdWJzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZU9ic2VydmFibGVGb3JSZWNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHZvaWQ+KG9ic2VydmVyID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9IHRoaXMucmVhbHRpbWUuYWRkSGFuZHNoYWtlTGlzdGVuZXIobXNnID0+IHtcbiAgICAgICAgaWYgKG1zZy5zdWNjZXNzZnVsICYmIG1zZy5yZWVzdGFibGlzaCkge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVhbHRpbWUucmVtb3ZlTGlzdGVuZXIoaGFuZGxlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVPYnNlcnZhYmxlRm9yQ29ubmVjdGlvblN0YXR1cygpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8J2Nvbm5lY3RlZCcgfCAnZGlzY29ubmVjdGVkJz4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCghdGhpcy5yZWFsdGltZS5pc0Rpc2Nvbm5lY3RlZCgpID8gJ2Nvbm5lY3RlZCcgOiAnZGlzY29ubmVjdGVkJyk7XG4gICAgICBjb25zdCBoYW5kbGUgPSB0aGlzLnJlYWx0aW1lLmFkZENvbm5lY3RMaXN0ZW5lcihtc2cgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KG1zZy5zdWNjZXNzZnVsID8gJ2Nvbm5lY3RlZCcgOiAnZGlzY29ubmVjdGVkJyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWFsdGltZS5yZW1vdmVMaXN0ZW5lcihoYW5kbGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -15,6 +15,20 @@ export class RealtimeService {
15
15
  get active() {
16
16
  return this.isActive.value;
17
17
  }
18
+ /**
19
+ * An observable emitting a value in case the realtime connection has been interrupted.
20
+ * Can be used to reload data of e.g. a datapoint graph that wasn't received while realtime was interrupted.
21
+ */
22
+ get reconnect$() {
23
+ return this.realtimeSubject.reconnect$;
24
+ }
25
+ /**
26
+ * An observable emitting either `connected` or `disconnected` depending on the state of the realtime connection.
27
+ * Can be used to e.g. inform the user about the interrupted realtime connection.
28
+ */
29
+ get connectionStatus$() {
30
+ return this.realtimeSubject.connectionStatus$;
31
+ }
18
32
  /**
19
33
  * Get an Observable of all realtime notifications.
20
34
  *
@@ -86,4 +100,4 @@ export class RealtimeService {
86
100
  return entityOrId ? this.channel().replace('*', this.getIdString(entityOrId)) : this.channel();
87
101
  }
88
102
  }
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcmVhbHRpbWUvcmVhbHRpbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4RDs7R0FFRztBQUNILE1BQU0sT0FBZ0IsZUFBZTtJQVVuQyxZQUFzQixlQUF1QztRQUF2QyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFGckQsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBRVUsQ0FBQztJQVRqRTs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQU1EOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxVQUEwQztRQUMvQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUU5RixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLFVBQTBDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEtBQUssUUFBUSxDQUFDLEVBQzlDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFTLENBQUMsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxTQUFTLENBQUMsVUFBMEM7UUFDbEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDakMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGNBQWMsS0FBSyxRQUFRLENBQUMsRUFDOUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQVMsQ0FBQyxDQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxVQUEwQztRQUNsRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsY0FBYyxLQUFLLFFBQVEsQ0FBQyxFQUM5QyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDM0MsQ0FBQztJQUNKLENBQUM7SUFFUyxXQUFXLENBQUMsU0FBd0M7UUFDNUQsSUFBSSxFQUFtQixDQUFDO1FBQ3hCLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFO1lBQ2pDLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1NBQ25CO2FBQU07WUFDTCxFQUFFLEdBQUcsU0FBUyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVTLFVBQVUsQ0FBQyxVQUEwQztRQUM3RCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakcsQ0FBQztDQUdGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgSUlkZW50aWZpZWQgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE5FVkVSLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUmVhbHRpbWVTdWJqZWN0U2VydmljZSB9IGZyb20gJy4vcmVhbHRpbWUtc3ViamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlYWx0aW1lTWVzc2FnZSB9IGZyb20gJy4vcmVhbHRpbWUubW9kZWwnO1xuXG4vKipcbiAqIEEgd3JhcHBlciBjbGFzcyBmb3IgaGFuZGxpbmcgcmVhbHRpbWUgbm90aWZpY2F0aW9ucyBpbiBSeEpTIGZhc2hpb24uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZWFsdGltZVNlcnZpY2U8VD4ge1xuICAvKipcbiAgICogQSBmbGFnIGRpc3BsYXlpbmcgaWYgcmVhbHRpbWUgbm90aWZpY2F0aW9ucyBhcmUgY3VycmVudGx5IGFjdGl2ZS5cbiAgICovXG4gIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBY3RpdmUudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGlzQWN0aXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhbHRpbWVTdWJqZWN0OiBSZWFsdGltZVN1YmplY3RTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gT2JzZXJ2YWJsZSBvZiBhbGwgcmVhbHRpbWUgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBJSWRlbnRpZmllZH0gZW50aXR5T3JJZCBFbnRpdHkgb2JqZWN0IG9yIGlkXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIFtbT2JzZXJ2YWJsZV1dIG9mIG5vdGlmaWNhdGlvbnMgd3JhcHBlZCBhcyBbW1JlYWx0aW1lTWVzc2FnZV1dXG4gICAqL1xuICBvbkFsbCQoZW50aXR5T3JJZD86IHN0cmluZyB8IG51bWJlciB8IElJZGVudGlmaWVkKTogT2JzZXJ2YWJsZTxSZWFsdGltZU1lc3NhZ2U8VD4+IHtcbiAgICBjb25zdCBzdWJqZWN0JCA9IHRoaXMucmVhbHRpbWVTdWJqZWN0LmdldE9ic2VydmFibGVGb3JDaGFubmVsPFQ+KHRoaXMuZ2V0Q2hhbm5lbChlbnRpdHlPcklkKSk7XG5cbiAgICByZXR1cm4gdGhpcy5pc0FjdGl2ZS5waXBlKHN3aXRjaE1hcChhY3RpdmUgPT4gKGFjdGl2ZSA/IHN1YmplY3QkIDogTkVWRVIpKSk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyBhZ2FpbiBhbGwgcmVhbHRpbWUgY2hhbm5lbHMgd2l0aCBhY3RpdmUgb2JzZXJ2ZXJzLlxuICAgKi9cbiAgc3RhcnQoKSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xuICAgICAgdGhpcy5pc0FjdGl2ZS5uZXh0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyByZWFsdGltZSBub3RpZmljYXRpb25zIGFuZCB1bnN1YnNjcmliZXMgYWxsIHJlYWx0aW1lIGNoYW5uZWxzLlxuICAgKi9cbiAgc3RvcCgpIHtcbiAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgIHRoaXMuaXNBY3RpdmUubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBPYnNlcnZhYmxlIG9mIGFsbCBDUkVBVEUgcmVhbHRpbWUgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBJSWRlbnRpZmllZH0gZW50aXR5T3JJZCBFbnRpdHkgb2JqZWN0IG9yIGlkXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIFtbT2JzZXJ2YWJsZV1dIG9mIG5ld2x5IGNyZWF0ZWQgZW50aXR5IG9iamVjdHMuXG4gICAqL1xuICBvbkNyZWF0ZSQoZW50aXR5T3JJZD86IHN0cmluZyB8IG51bWJlciB8IElJZGVudGlmaWVkKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMub25BbGwkKGVudGl0eU9ySWQpLnBpcGUoXG4gICAgICBmaWx0ZXIobXNnID0+IG1zZy5yZWFsdGltZUFjdGlvbiA9PT0gJ0NSRUFURScpLFxuICAgICAgbWFwKG1zZyA9PiBtc2cuZGF0YSBhcyBUKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIE9ic2VydmFibGUgb2YgYWxsIFVQREFURSByZWFsdGltZSBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IElJZGVudGlmaWVkfSBlbnRpdHlPcklkIEVudGl0eSBvYmplY3Qgb3IgaWRcbiAgICpcbiAgICogQHJldHVybnMgQW4gW1tPYnNlcnZhYmxlXV0gb2YgdXBkYXRlZCBlbnRpdHkgb2JqZWN0cy5cbiAgICovXG4gIG9uVXBkYXRlJChlbnRpdHlPcklkPzogc3RyaW5nIHwgbnVtYmVyIHwgSUlkZW50aWZpZWQpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5vbkFsbCQoZW50aXR5T3JJZCkucGlwZShcbiAgICAgIGZpbHRlcihtc2cgPT4gbXNnLnJlYWx0aW1lQWN0aW9uID09PSAnVVBEQVRFJyksXG4gICAgICBtYXAobXNnID0+IG1zZy5kYXRhIGFzIFQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gT2JzZXJ2YWJsZSBvZiBhbGwgREVMRVRFIHJlYWx0aW1lIG5vdGlmaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgSUlkZW50aWZpZWR9IGVudGl0eU9ySWQgRW50aXR5IG9iamVjdCBvciBpZFxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBbW09ic2VydmFibGVdXSBvZiBkZWxldGVkIGVudGl0eSBvYmplY3RzLlxuICAgKi9cbiAgb25EZWxldGUkKGVudGl0eU9ySWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBJSWRlbnRpZmllZCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMub25BbGwkKGVudGl0eU9ySWQpLnBpcGUoXG4gICAgICBmaWx0ZXIobXNnID0+IG1zZy5yZWFsdGltZUFjdGlvbiA9PT0gJ0RFTEVURScpLFxuICAgICAgbWFwKG1zZyA9PiBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtc2cuZGF0YSkpXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJZFN0cmluZyhyZWZlcmVuY2U6IG51bWJlciB8IHN0cmluZyB8IElJZGVudGlmaWVkKTogc3RyaW5nIHtcbiAgICBsZXQgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgICBpZiAodHlwZW9mIHJlZmVyZW5jZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlkID0gcmVmZXJlbmNlLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZCA9IHJlZmVyZW5jZTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhpZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2hhbm5lbChlbnRpdHlPcklkPzogc3RyaW5nIHwgbnVtYmVyIHwgSUlkZW50aWZpZWQpIHtcbiAgICByZXR1cm4gZW50aXR5T3JJZCA/IHRoaXMuY2hhbm5lbCgpLnJlcGxhY2UoJyonLCB0aGlzLmdldElkU3RyaW5nKGVudGl0eU9ySWQpKSA6IHRoaXMuY2hhbm5lbCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoYW5uZWwoKTogc3RyaW5nO1xufVxuIl19
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcmVhbHRpbWUvcmVhbHRpbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4RDs7R0FFRztBQUNILE1BQU0sT0FBZ0IsZUFBZTtJQTBCbkMsWUFBc0IsZUFBdUM7UUFBdkMsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBRnJELGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUVVLENBQUM7SUF6QmpFOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hELENBQUM7SUFNRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsVUFBMEM7UUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFOUYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxVQUEwQztRQUNsRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsY0FBYyxLQUFLLFFBQVEsQ0FBQyxFQUM5QyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBUyxDQUFDLENBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLFVBQTBDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEtBQUssUUFBUSxDQUFDLEVBQzlDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFTLENBQUMsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxTQUFTLENBQUMsVUFBMEM7UUFDbEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDakMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGNBQWMsS0FBSyxRQUFRLENBQUMsRUFDOUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzNDLENBQUM7SUFDSixDQUFDO0lBRVMsV0FBVyxDQUFDLFNBQXdDO1FBQzVELElBQUksRUFBbUIsQ0FBQztRQUN4QixJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUNqQyxFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUNuQjthQUFNO1lBQ0wsRUFBRSxHQUFHLFNBQVMsQ0FBQztTQUNoQjtRQUNELE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFUyxVQUFVLENBQUMsVUFBMEM7UUFDN0QsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pHLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBORVZFUiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlYWx0aW1lU3ViamVjdFNlcnZpY2UgfSBmcm9tICcuL3JlYWx0aW1lLXN1YmplY3Quc2VydmljZSc7XG5pbXBvcnQgeyBSZWFsdGltZU1lc3NhZ2UgfSBmcm9tICcuL3JlYWx0aW1lLm1vZGVsJztcblxuLyoqXG4gKiBBIHdyYXBwZXIgY2xhc3MgZm9yIGhhbmRsaW5nIHJlYWx0aW1lIG5vdGlmaWNhdGlvbnMgaW4gUnhKUyBmYXNoaW9uLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVhbHRpbWVTZXJ2aWNlPFQ+IHtcbiAgLyoqXG4gICAqIEEgZmxhZyBkaXNwbGF5aW5nIGlmIHJlYWx0aW1lIG5vdGlmaWNhdGlvbnMgYXJlIGN1cnJlbnRseSBhY3RpdmUuXG4gICAqL1xuICBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQWN0aXZlLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIG9ic2VydmFibGUgZW1pdHRpbmcgYSB2YWx1ZSBpbiBjYXNlIHRoZSByZWFsdGltZSBjb25uZWN0aW9uIGhhcyBiZWVuIGludGVycnVwdGVkLlxuICAgKiBDYW4gYmUgdXNlZCB0byByZWxvYWQgZGF0YSBvZiBlLmcuIGEgZGF0YXBvaW50IGdyYXBoIHRoYXQgd2Fzbid0IHJlY2VpdmVkIHdoaWxlIHJlYWx0aW1lIHdhcyBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIGdldCByZWNvbm5lY3QkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnJlYWx0aW1lU3ViamVjdC5yZWNvbm5lY3QkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIG9ic2VydmFibGUgZW1pdHRpbmcgZWl0aGVyIGBjb25uZWN0ZWRgIG9yIGBkaXNjb25uZWN0ZWRgIGRlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIHJlYWx0aW1lIGNvbm5lY3Rpb24uXG4gICAqIENhbiBiZSB1c2VkIHRvIGUuZy4gaW5mb3JtIHRoZSB1c2VyIGFib3V0IHRoZSBpbnRlcnJ1cHRlZCByZWFsdGltZSBjb25uZWN0aW9uLlxuICAgKi9cbiAgZ2V0IGNvbm5lY3Rpb25TdGF0dXMkKCk6IE9ic2VydmFibGU8J2Nvbm5lY3RlZCcgfCAnZGlzY29ubmVjdGVkJz4ge1xuICAgIHJldHVybiB0aGlzLnJlYWx0aW1lU3ViamVjdC5jb25uZWN0aW9uU3RhdHVzJDtcbiAgfVxuXG4gIHByaXZhdGUgaXNBY3RpdmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFsdGltZVN1YmplY3Q6IFJlYWx0aW1lU3ViamVjdFNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBPYnNlcnZhYmxlIG9mIGFsbCByZWFsdGltZSBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IElJZGVudGlmaWVkfSBlbnRpdHlPcklkIEVudGl0eSBvYmplY3Qgb3IgaWRcbiAgICpcbiAgICogQHJldHVybnMgQW4gW1tPYnNlcnZhYmxlXV0gb2Ygbm90aWZpY2F0aW9ucyB3cmFwcGVkIGFzIFtbUmVhbHRpbWVNZXNzYWdlXV1cbiAgICovXG4gIG9uQWxsJChlbnRpdHlPcklkPzogc3RyaW5nIHwgbnVtYmVyIHwgSUlkZW50aWZpZWQpOiBPYnNlcnZhYmxlPFJlYWx0aW1lTWVzc2FnZTxUPj4ge1xuICAgIGNvbnN0IHN1YmplY3QkID0gdGhpcy5yZWFsdGltZVN1YmplY3QuZ2V0T2JzZXJ2YWJsZUZvckNoYW5uZWw8VD4odGhpcy5nZXRDaGFubmVsKGVudGl0eU9ySWQpKTtcblxuICAgIHJldHVybiB0aGlzLmlzQWN0aXZlLnBpcGUoc3dpdGNoTWFwKGFjdGl2ZSA9PiAoYWN0aXZlID8gc3ViamVjdCQgOiBORVZFUikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIGFnYWluIGFsbCByZWFsdGltZSBjaGFubmVscyB3aXRoIGFjdGl2ZSBvYnNlcnZlcnMuXG4gICAqL1xuICBzdGFydCgpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlKSB7XG4gICAgICB0aGlzLmlzQWN0aXZlLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIHJlYWx0aW1lIG5vdGlmaWNhdGlvbnMgYW5kIHVuc3Vic2NyaWJlcyBhbGwgcmVhbHRpbWUgY2hhbm5lbHMuXG4gICAqL1xuICBzdG9wKCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgdGhpcy5pc0FjdGl2ZS5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIE9ic2VydmFibGUgb2YgYWxsIENSRUFURSByZWFsdGltZSBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IElJZGVudGlmaWVkfSBlbnRpdHlPcklkIEVudGl0eSBvYmplY3Qgb3IgaWRcbiAgICpcbiAgICogQHJldHVybnMgQW4gW1tPYnNlcnZhYmxlXV0gb2YgbmV3bHkgY3JlYXRlZCBlbnRpdHkgb2JqZWN0cy5cbiAgICovXG4gIG9uQ3JlYXRlJChlbnRpdHlPcklkPzogc3RyaW5nIHwgbnVtYmVyIHwgSUlkZW50aWZpZWQpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5vbkFsbCQoZW50aXR5T3JJZCkucGlwZShcbiAgICAgIGZpbHRlcihtc2cgPT4gbXNnLnJlYWx0aW1lQWN0aW9uID09PSAnQ1JFQVRFJyksXG4gICAgICBtYXAobXNnID0+IG1zZy5kYXRhIGFzIFQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gT2JzZXJ2YWJsZSBvZiBhbGwgVVBEQVRFIHJlYWx0aW1lIG5vdGlmaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgSUlkZW50aWZpZWR9IGVudGl0eU9ySWQgRW50aXR5IG9iamVjdCBvciBpZFxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBbW09ic2VydmFibGVdXSBvZiB1cGRhdGVkIGVudGl0eSBvYmplY3RzLlxuICAgKi9cbiAgb25VcGRhdGUkKGVudGl0eU9ySWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBJSWRlbnRpZmllZCk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLm9uQWxsJChlbnRpdHlPcklkKS5waXBlKFxuICAgICAgZmlsdGVyKG1zZyA9PiBtc2cucmVhbHRpbWVBY3Rpb24gPT09ICdVUERBVEUnKSxcbiAgICAgIG1hcChtc2cgPT4gbXNnLmRhdGEgYXMgVClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBPYnNlcnZhYmxlIG9mIGFsbCBERUxFVEUgcmVhbHRpbWUgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBJSWRlbnRpZmllZH0gZW50aXR5T3JJZCBFbnRpdHkgb2JqZWN0IG9yIGlkXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIFtbT2JzZXJ2YWJsZV1dIG9mIGRlbGV0ZWQgZW50aXR5IG9iamVjdHMuXG4gICAqL1xuICBvbkRlbGV0ZSQoZW50aXR5T3JJZD86IHN0cmluZyB8IG51bWJlciB8IElJZGVudGlmaWVkKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5vbkFsbCQoZW50aXR5T3JJZCkucGlwZShcbiAgICAgIGZpbHRlcihtc2cgPT4gbXNnLnJlYWx0aW1lQWN0aW9uID09PSAnREVMRVRFJyksXG4gICAgICBtYXAobXNnID0+IGNvZXJjZU51bWJlclByb3BlcnR5KG1zZy5kYXRhKSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldElkU3RyaW5nKHJlZmVyZW5jZTogbnVtYmVyIHwgc3RyaW5nIHwgSUlkZW50aWZpZWQpOiBzdHJpbmcge1xuICAgIGxldCBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWQgPSByZWZlcmVuY2UuaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkID0gcmVmZXJlbmNlO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKGlkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDaGFubmVsKGVudGl0eU9ySWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBJSWRlbnRpZmllZCkge1xuICAgIHJldHVybiBlbnRpdHlPcklkID8gdGhpcy5jaGFubmVsKCkucmVwbGFjZSgnKicsIHRoaXMuZ2V0SWRTdHJpbmcoZW50aXR5T3JJZCkpIDogdGhpcy5jaGFubmVsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2hhbm5lbCgpOiBzdHJpbmc7XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYzh5LW5neC1jb21wb25lbnRzLWRldmljZS1wcm90b2NvbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXZpY2UtcHJvdG9jb2xzL2M4eS1uZ3gtY29tcG9uZW50cy1kZXZpY2UtcHJvdG9jb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19