@tetacom/svg-charts 1.2.13 → 1.2.14

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.
@@ -1,4 +1,4 @@
1
- import { ChangeDetectorRef, NgZone, OnInit } from '@angular/core';
1
+ import { ChangeDetectorRef, ElementRef, NgZone, OnInit } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
3
  import { ChartService } from '../../service/chart.service';
4
4
  import { ZoomService } from '../../service/zoom.service';
@@ -12,18 +12,20 @@ export declare class TooltipComponent implements OnInit {
12
12
  private zoomService;
13
13
  private sanitizer;
14
14
  private _zone;
15
+ private _elementRef;
15
16
  size: DOMRect;
16
17
  config: IChartConfig;
18
+ tooltip: ElementRef;
17
19
  position: Observable<{
18
- left: string;
19
- top: string;
20
- bottom: string;
21
- right: string;
20
+ left?: number;
21
+ top?: number;
22
+ bottom?: number;
23
+ right?: number;
22
24
  }>;
23
25
  displayTooltips: Observable<SafeHtml>;
24
26
  display: Observable<number>;
25
27
  tooltips: Observable<IDisplayTooltip[]>;
26
- constructor(svc: ChartService, cdr: ChangeDetectorRef, zoomService: ZoomService, sanitizer: DomSanitizer, _zone: NgZone);
28
+ constructor(svc: ChartService, cdr: ChangeDetectorRef, zoomService: ZoomService, sanitizer: DomSanitizer, _zone: NgZone, _elementRef: ElementRef);
27
29
  ngOnInit(): void;
28
30
  private getPosition;
29
31
  format(input: number | Date): string;
@@ -22,8 +22,9 @@ import * as i20 from "./chart-container/series/block-area-series/block-area-seri
22
22
  import * as i21 from "./chart-container/annotation/annotation.component";
23
23
  import * as i22 from "./chart-container/crosshair/crosshair.component";
24
24
  import * as i23 from "@angular/common";
25
+ import * as i24 from "@tetacom/ng-components";
25
26
  export declare class ChartModule {
26
27
  static ɵfac: i0.ɵɵFactoryDeclaration<ChartModule, never>;
27
- static ɵmod: i0.ɵɵNgModuleDeclaration<ChartModule, [typeof i1.ChartComponent, typeof i2.SeriesHostComponent, typeof i3.ChartContainerComponent, typeof i4.LegendComponent, typeof i5.SeriesBaseComponent, typeof i6.LinearSeriesBase, typeof i7.LineSeriesComponent, typeof i8.GridlinesComponent, typeof i9.XAxisComponent, typeof i10.YAxisComponent, typeof i11.PlotlineComponent, typeof i12.PlotBandComponent, typeof i13.BarSeriesComponent, typeof i14.TooltipComponent, typeof i15.ZoomableDirective, typeof i16.BrushableDirective, typeof i17.AreaSeriesComponent, typeof i18.ScatterSeriesComponent, typeof i19.BlockSeriesComponent, typeof i20.BlockAreaSeriesComponent, typeof i21.AnnotationComponent, typeof i22.CrosshairComponent], [typeof i23.CommonModule], [typeof i1.ChartComponent, typeof i4.LegendComponent, typeof i5.SeriesBaseComponent, typeof i7.LineSeriesComponent, typeof i13.BarSeriesComponent, typeof i18.ScatterSeriesComponent, typeof i17.AreaSeriesComponent, typeof i19.BlockSeriesComponent, typeof i20.BlockAreaSeriesComponent]>;
28
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ChartModule, [typeof i1.ChartComponent, typeof i2.SeriesHostComponent, typeof i3.ChartContainerComponent, typeof i4.LegendComponent, typeof i5.SeriesBaseComponent, typeof i6.LinearSeriesBase, typeof i7.LineSeriesComponent, typeof i8.GridlinesComponent, typeof i9.XAxisComponent, typeof i10.YAxisComponent, typeof i11.PlotlineComponent, typeof i12.PlotBandComponent, typeof i13.BarSeriesComponent, typeof i14.TooltipComponent, typeof i15.ZoomableDirective, typeof i16.BrushableDirective, typeof i17.AreaSeriesComponent, typeof i18.ScatterSeriesComponent, typeof i19.BlockSeriesComponent, typeof i20.BlockAreaSeriesComponent, typeof i21.AnnotationComponent, typeof i22.CrosshairComponent], [typeof i23.CommonModule, typeof i24.LetModule], [typeof i1.ChartComponent, typeof i4.LegendComponent, typeof i5.SeriesBaseComponent, typeof i7.LineSeriesComponent, typeof i13.BarSeriesComponent, typeof i18.ScatterSeriesComponent, typeof i17.AreaSeriesComponent, typeof i19.BlockSeriesComponent, typeof i20.BlockAreaSeriesComponent]>;
28
29
  static ɵinj: i0.ɵɵInjectorDeclaration<ChartModule>;
29
30
  }
@@ -1,18 +1,21 @@
1
- import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild, } from '@angular/core';
2
2
  import { filter, map, tap } from 'rxjs';
3
3
  import * as d3 from 'd3';
4
+ import { Align, PositionUtil, VerticalAlign } from '@tetacom/ng-components';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "../../service/chart.service";
6
7
  import * as i2 from "../../service/zoom.service";
7
8
  import * as i3 from "@angular/platform-browser";
8
9
  import * as i4 from "@angular/common";
10
+ import * as i5 from "@tetacom/ng-components";
9
11
  export class TooltipComponent {
10
- constructor(svc, cdr, zoomService, sanitizer, _zone) {
12
+ constructor(svc, cdr, zoomService, sanitizer, _zone, _elementRef) {
11
13
  this.svc = svc;
12
14
  this.cdr = cdr;
13
15
  this.zoomService = zoomService;
14
16
  this.sanitizer = sanitizer;
15
17
  this._zone = _zone;
18
+ this._elementRef = _elementRef;
16
19
  this.tooltips = this.svc.tooltips.pipe(map((_) => [..._.values()]));
17
20
  }
18
21
  ngOnInit() {
@@ -57,20 +60,15 @@ export class TooltipComponent {
57
60
  }));
58
61
  }
59
62
  getPosition(event) {
60
- const centerX = this.size.width / 2;
61
- const centerY = this.size.height / 2;
62
- const padding = this.config?.tooltip?.padding;
63
- const scene = {
64
- left: event.pageX > centerX ? 'initial' : `${event.pageX + padding.x}px`,
65
- top: event.pageY > centerY ? 'initial' : `${event.pageY + padding.y}px`,
66
- bottom: event.pageY > centerY
67
- ? `${window.innerHeight - event.pageY + padding.y}px`
68
- : 'initial',
69
- right: event.pageX > centerX
70
- ? `${window.innerWidth - event.pageX + padding.x}px`
71
- : 'initial',
72
- };
73
- return scene;
63
+ if (!this.tooltip) {
64
+ return null;
65
+ }
66
+ return PositionUtil.getPosition({
67
+ top: event.pageY,
68
+ bottom: event.pageY,
69
+ left: event.pageX,
70
+ right: event.pageX,
71
+ }, this.tooltip?.nativeElement?.getBoundingClientRect(), Align.auto, VerticalAlign.top, 12);
74
72
  }
75
73
  format(input) {
76
74
  if (input instanceof Date) {
@@ -81,14 +79,17 @@ export class TooltipComponent {
81
79
  return format(input);
82
80
  }
83
81
  }
84
- TooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TooltipComponent, deps: [{ token: i1.ChartService }, { token: i0.ChangeDetectorRef }, { token: i2.ZoomService }, { token: i3.DomSanitizer }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
85
- TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TooltipComponent, selector: "teta-tooltip", inputs: { size: "size", config: "config" }, ngImport: i0, template: "<ng-container *ngIf=\"position | async as p\">\n <ng-container *ngIf=\"tooltips | async as t\">\n <div class=\"chart-tooltip color-text-90 bg-background-50 shadow-2\"\n [style.position]=\"'fixed'\"\n *ngIf=\"t.length > 0\"\n [style.opacity]=\"display | async\"\n style=\"pointer-events: none; min-width: 200px;\"\n [style.left]=\"p.left\"\n [style.top]=\"p.top\"\n [style.bottom]=\"p.bottom\"\n [style.right]=\"p.right\"\n >\n <ng-container *ngIf=\"config.tooltip?.template\">\n <ng-container *ngTemplateOutlet=\"config.tooltip.template; context: {$implicit: t}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"config.tooltip?.format; else default\">\n <div [innerHTML]=\"displayTooltips | async\"></div>\n </ng-container>\n\n <ng-template #default>\n <div *ngIf=\"!config.tooltip?.template\" class=\"padding-2 border-radius-1\">\n <ng-container *ngFor=\"let tooltip of t\">\n <div class=\"display-flex align-center\">\n <span class=\"display-block margin-right-1\" [style.width.px]=\"10\" [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\"></span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }}\n y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n</ng-container>\n\n\n\n", styles: [":host{position:absolute;z-index:2}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
82
+ TooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TooltipComponent, deps: [{ token: i1.ChartService }, { token: i0.ChangeDetectorRef }, { token: i2.ZoomService }, { token: i3.DomSanitizer }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
83
+ TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TooltipComponent, selector: "teta-tooltip", inputs: { size: "size", config: "config" }, viewQueries: [{ propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ng-container *tetaLet=\"position | async as p\">\n <ng-container *ngIf=\"tooltips | async as t\">\n <div class=\"chart-tooltip color-text-90 bg-background-50 shadow-2\"\n #tooltip\n [style.position]=\"'fixed'\"\n *ngIf=\"t.length > 0\"\n [style.opacity]=\"display | async\"\n style=\"pointer-events: none; min-width: 200px;\"\n [style.left.px]=\"p?.left\"\n [style.top.px]=\"p?.top\"\n [style.bottom.px]=\"p?.bottom\"\n [style.right.px]=\"p?.right\"\n >\n <ng-container *ngIf=\"config.tooltip?.template\">\n <ng-container *ngTemplateOutlet=\"config.tooltip.template; context: {$implicit: t}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"config.tooltip?.format; else default\">\n <div [innerHTML]=\"displayTooltips | async\"></div>\n </ng-container>\n\n <ng-template #default>\n <div *ngIf=\"!config.tooltip?.template\" class=\"padding-2 border-radius-1\">\n <ng-container *ngFor=\"let tooltip of t\">\n <div class=\"display-flex align-center\">\n <span class=\"display-block margin-right-1\" [style.width.px]=\"10\" [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\"></span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }}\n y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n</ng-container>\n\n\n\n", styles: [":host{position:absolute;z-index:2}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.LetDirective, selector: "[tetaLet]", inputs: ["tetaLet"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
86
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TooltipComponent, decorators: [{
87
85
  type: Component,
88
- args: [{ selector: 'teta-tooltip', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"position | async as p\">\n <ng-container *ngIf=\"tooltips | async as t\">\n <div class=\"chart-tooltip color-text-90 bg-background-50 shadow-2\"\n [style.position]=\"'fixed'\"\n *ngIf=\"t.length > 0\"\n [style.opacity]=\"display | async\"\n style=\"pointer-events: none; min-width: 200px;\"\n [style.left]=\"p.left\"\n [style.top]=\"p.top\"\n [style.bottom]=\"p.bottom\"\n [style.right]=\"p.right\"\n >\n <ng-container *ngIf=\"config.tooltip?.template\">\n <ng-container *ngTemplateOutlet=\"config.tooltip.template; context: {$implicit: t}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"config.tooltip?.format; else default\">\n <div [innerHTML]=\"displayTooltips | async\"></div>\n </ng-container>\n\n <ng-template #default>\n <div *ngIf=\"!config.tooltip?.template\" class=\"padding-2 border-radius-1\">\n <ng-container *ngFor=\"let tooltip of t\">\n <div class=\"display-flex align-center\">\n <span class=\"display-block margin-right-1\" [style.width.px]=\"10\" [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\"></span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }}\n y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n</ng-container>\n\n\n\n", styles: [":host{position:absolute;z-index:2}\n"] }]
89
- }], ctorParameters: function () { return [{ type: i1.ChartService }, { type: i0.ChangeDetectorRef }, { type: i2.ZoomService }, { type: i3.DomSanitizer }, { type: i0.NgZone }]; }, propDecorators: { size: [{
86
+ args: [{ selector: 'teta-tooltip', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *tetaLet=\"position | async as p\">\n <ng-container *ngIf=\"tooltips | async as t\">\n <div class=\"chart-tooltip color-text-90 bg-background-50 shadow-2\"\n #tooltip\n [style.position]=\"'fixed'\"\n *ngIf=\"t.length > 0\"\n [style.opacity]=\"display | async\"\n style=\"pointer-events: none; min-width: 200px;\"\n [style.left.px]=\"p?.left\"\n [style.top.px]=\"p?.top\"\n [style.bottom.px]=\"p?.bottom\"\n [style.right.px]=\"p?.right\"\n >\n <ng-container *ngIf=\"config.tooltip?.template\">\n <ng-container *ngTemplateOutlet=\"config.tooltip.template; context: {$implicit: t}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"config.tooltip?.format; else default\">\n <div [innerHTML]=\"displayTooltips | async\"></div>\n </ng-container>\n\n <ng-template #default>\n <div *ngIf=\"!config.tooltip?.template\" class=\"padding-2 border-radius-1\">\n <ng-container *ngFor=\"let tooltip of t\">\n <div class=\"display-flex align-center\">\n <span class=\"display-block margin-right-1\" [style.width.px]=\"10\" [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\"></span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }}\n y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n</ng-container>\n\n\n\n", styles: [":host{position:absolute;z-index:2}\n"] }]
87
+ }], ctorParameters: function () { return [{ type: i1.ChartService }, { type: i0.ChangeDetectorRef }, { type: i2.ZoomService }, { type: i3.DomSanitizer }, { type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: { size: [{
90
88
  type: Input
91
89
  }], config: [{
92
90
  type: Input
91
+ }], tooltip: [{
92
+ type: ViewChild,
93
+ args: ['tooltip', { static: false, read: ElementRef }]
93
94
  }] } });
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQWMsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBT2xELE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDOzs7Ozs7QUFPekIsTUFBTSxPQUFPLGdCQUFnQjtJQWUzQixZQUNVLEdBQWlCLEVBQ2pCLEdBQXNCLEVBQ3RCLFdBQXdCLEVBQ3hCLFNBQXVCLEVBQ3ZCLEtBQWE7UUFKYixRQUFHLEdBQUgsR0FBRyxDQUFjO1FBQ2pCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUVyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDdEMsR0FBRyxDQUFDLENBQUMsS0FBbUIsRUFBRSxFQUFFO1lBQzFCLE9B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QVUsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNqQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN0QixDQUFDOzs2R0FuSFUsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsZ0dDdEI3Qixvb0RBMkNBOzJGRHJCYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0UsY0FBYyxtQkFHUCx1QkFBdUIsQ0FBQyxNQUFNOzZNQUd0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCB0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2UvY2hhcnQuc2VydmljZSc7XG5pbXBvcnQge1pvb21TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3pvb20uc2VydmljZSc7XG5pbXBvcnQge0lEaXNwbGF5VG9vbHRpcH0gZnJvbSAnLi4vLi4vbW9kZWwvaS1kaXNwbGF5LXRvb2x0aXAnO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXIsIFNhZmVIdG1sfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7SUNoYXJ0Q29uZmlnfSBmcm9tICcuLi8uLi9tb2RlbC9pLWNoYXJ0LWNvbmZpZyc7XG5pbXBvcnQge1Nlcmllc30gZnJvbSAnLi4vLi4vbW9kZWwvc2VyaWVzJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdG9vbHRpcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90b29sdGlwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdG9vbHRpcC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVG9vbHRpcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHNpemU6IERPTVJlY3Q7XG4gIEBJbnB1dCgpIGNvbmZpZzogSUNoYXJ0Q29uZmlnO1xuXG4gIHBvc2l0aW9uOiBPYnNlcnZhYmxlPHtcbiAgICBsZWZ0OiBzdHJpbmc7XG4gICAgdG9wOiBzdHJpbmc7XG4gICAgYm90dG9tOiBzdHJpbmc7XG4gICAgcmlnaHQ6IHN0cmluZztcbiAgfT47XG5cbiAgZGlzcGxheVRvb2x0aXBzOiBPYnNlcnZhYmxlPFNhZmVIdG1sPjtcbiAgZGlzcGxheTogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICB0b29sdGlwczogT2JzZXJ2YWJsZTxJRGlzcGxheVRvb2x0aXBbXT5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN2YzogQ2hhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHpvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZVxuICApIHtcbiAgICB0aGlzLnRvb2x0aXBzID0gdGhpcy5zdmMudG9vbHRpcHMucGlwZShtYXAoKF8pID0+IFsuLi5fLnZhbHVlcygpXSkpXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXkgPSB0aGlzLnN2Yy5wb2ludGVyTW92ZS5waXBlKFxuICAgICAgbWFwKChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBldmVudC50eXBlID09PSAnbW91c2Vtb3ZlJyA/IDEgOiAwO1xuICAgICAgfSksXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5wb3NpdGlvbiA9IHRoaXMuc3ZjLnBvaW50ZXJNb3ZlLnBpcGUoXG4gICAgICBmaWx0ZXIoKGV2ZW50KSA9PiAhIWV2ZW50KSxcbiAgICAgIG1hcCgoXykgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb3NpdGlvbihfKTtcbiAgICAgIH0pLFxuICAgICAgdGFwKCgpID0+IHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSlcbiAgICApO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtSHRtbCA9IChodG1sKTogU2FmZUh0bWwgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWwpO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0Rm9ybWF0dGVyID0gKHRvb2x0aXBzOiBJRGlzcGxheVRvb2x0aXBbXSk6IFNhZmVIdG1sID0+IHtcbiAgICAgIGxldCBodG1sID0gJyc7XG4gICAgICBjb25zdCBmb3JtYXQgPSBkMy50aW1lRm9ybWF0KCclZC4lbS4lWScpO1xuICAgICAgdG9vbHRpcHMuZm9yRWFjaCgoXykgPT4ge1xuICAgICAgICBjb25zdCBpbmRpY2F0b3JTdHlsZSA9IGBkaXNwbGF5OmJsb2NrOyB3aWR0aDogMTBweDsgaGVpZ2h0OiAycHg7IGJhY2tncm91bmQtY29sb3I6ICR7Xz8uc2VyaWVzPy5jb2xvcn1gO1xuXG4gICAgICAgIGh0bWwgKz0gYDxkaXYgY2xhc3M9XCJkaXNwbGF5LWZsZXggYWxpZ24tY2VudGVyXCI+PHNwYW4gY2xhc3M9XCJtYXJnaW4tcmlnaHQtMVwiIHN0eWxlPVwiJHtpbmRpY2F0b3JTdHlsZX1cIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXRpdGxlLTNcIj4ke18uc2VyaWVzLm5hbWV9XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9keS0zXCI+XG4gICAgICAgICAgICAgIHg6ICR7KF8ucG9pbnQueCBhcyBhbnkpIGluc3RhbmNlb2YgRGF0ZSA/IGZvcm1hdChfLnBvaW50LnggYXMgYW55KSA6ICBfLnBvaW50Lng/LnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgIHk6ICR7KF8ucG9pbnQueSBhcyBhbnkpIGluc3RhbmNlb2YgRGF0ZSA/IGZvcm1hdChfLnBvaW50LnkgYXMgYW55KSA6ICBfLnBvaW50Lnk/LnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPjwvZGl2PmA7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRyYW5zZm9ybUh0bWwoaHRtbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuY29uZmlnPy50b29sdGlwPy5mb3JtYXQ7XG5cbiAgICB0aGlzLmRpc3BsYXlUb29sdGlwcyA9IHRoaXMuc3ZjLnRvb2x0aXBzLnBpcGUoXG4gICAgICBtYXAoKHRvb2x0aXBzOiBNYXA8U2VyaWVzPGFueT4sIElEaXNwbGF5VG9vbHRpcD4pID0+IHtcbiAgICAgICAgY29uc3QgdG9vbHRpcExpc3QgPSBbLi4udG9vbHRpcHMudmFsdWVzKCldO1xuICAgICAgICBpZiAodG9vbHRpcExpc3Q/Lmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0dGVyXG4gICAgICAgICAgPyB0cmFuc2Zvcm1IdG1sKGZvcm1hdHRlcih0b29sdGlwTGlzdCkpXG4gICAgICAgICAgOiBkZWZhdWx0Rm9ybWF0dGVyKHRvb2x0aXBMaXN0KTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UG9zaXRpb24oZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGNvbnN0IGNlbnRlclggPSB0aGlzLnNpemUud2lkdGggLyAyO1xuICAgIGNvbnN0IGNlbnRlclkgPSB0aGlzLnNpemUuaGVpZ2h0IC8gMjtcblxuICAgIGNvbnN0IHBhZGRpbmcgPSB0aGlzLmNvbmZpZz8udG9vbHRpcD8ucGFkZGluZztcblxuICAgIGNvbnN0IHNjZW5lID0ge1xuICAgICAgbGVmdDogZXZlbnQucGFnZVggPiBjZW50ZXJYID8gJ2luaXRpYWwnIDogYCR7ZXZlbnQucGFnZVggKyBwYWRkaW5nLnh9cHhgLFxuICAgICAgdG9wOiBldmVudC5wYWdlWSA+IGNlbnRlclkgPyAnaW5pdGlhbCcgOiBgJHtldmVudC5wYWdlWSArIHBhZGRpbmcueX1weGAsXG4gICAgICBib3R0b206XG4gICAgICAgIGV2ZW50LnBhZ2VZID4gY2VudGVyWVxuICAgICAgICAgID8gYCR7d2luZG93LmlubmVySGVpZ2h0IC0gZXZlbnQucGFnZVkgKyBwYWRkaW5nLnl9cHhgXG4gICAgICAgICAgOiAnaW5pdGlhbCcsXG4gICAgICByaWdodDpcbiAgICAgICAgZXZlbnQucGFnZVggPiBjZW50ZXJYXG4gICAgICAgICAgPyBgJHt3aW5kb3cuaW5uZXJXaWR0aCAtIGV2ZW50LnBhZ2VYICsgcGFkZGluZy54fXB4YFxuICAgICAgICAgIDogJ2luaXRpYWwnLFxuICAgIH07XG5cbiAgICByZXR1cm4gc2NlbmU7XG4gIH1cblxuXG4gIGZvcm1hdChpbnB1dDogbnVtYmVyIHwgRGF0ZSk6IHN0cmluZyB7XG5cbiAgICBpZihpbnB1dCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoJyVkLiVtLiVZJyk7XG4gICAgICByZXR1cm4gZm9ybWF0KGlucHV0KTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtYXQgPSBkMy5mb3JtYXQoJywuNX5yJylcbiAgICByZXR1cm4gZm9ybWF0KGlucHV0KVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwicG9zaXRpb24gfCBhc3luYyBhcyBwXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sdGlwcyB8IGFzeW5jIGFzIHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2hhcnQtdG9vbHRpcCBjb2xvci10ZXh0LTkwIGJnLWJhY2tncm91bmQtNTAgc2hhZG93LTJcIlxuICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cIidmaXhlZCdcIlxuICAgICAgICAgKm5nSWY9XCJ0Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgW3N0eWxlLm9wYWNpdHldPVwiZGlzcGxheSB8IGFzeW5jXCJcbiAgICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7IG1pbi13aWR0aDogMjAwcHg7XCJcbiAgICAgICAgIFtzdHlsZS5sZWZ0XT1cInAubGVmdFwiXG4gICAgICAgICBbc3R5bGUudG9wXT1cInAudG9wXCJcbiAgICAgICAgIFtzdHlsZS5ib3R0b21dPVwicC5ib3R0b21cIlxuICAgICAgICAgW3N0eWxlLnJpZ2h0XT1cInAucmlnaHRcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWcudG9vbHRpcD8udGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbmZpZy50b29sdGlwLnRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiB0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWcudG9vbHRpcD8uZm9ybWF0OyBlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImRpc3BsYXlUb29sdGlwcyB8IGFzeW5jXCI+PC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbmZpZy50b29sdGlwPy50ZW1wbGF0ZVwiIGNsYXNzPVwicGFkZGluZy0yIGJvcmRlci1yYWRpdXMtMVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRvb2x0aXAgb2YgdFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc3BsYXktZmxleCBhbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGlzcGxheS1ibG9jayBtYXJnaW4tcmlnaHQtMVwiIFtzdHlsZS53aWR0aC5weF09XCIxMFwiIFtzdHlsZS5oZWlnaHQucHhdPVwiMlwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ0b29sdGlwLnNlcmllcz8uY29sb3JcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC10aXRsZS0zXCI+XG4gICAgICAgICAgICB7eyB0b29sdGlwLnNlcmllcz8ubmFtZSB9fVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2R5LTNcIj5cbiAgICAgICAgICAgICAgeDoge3sgZm9ybWF0KHRvb2x0aXAucG9pbnQ/LngpIH19XG4gICAgICAgICAgICAgICAgICB5OiB7eyBmb3JtYXQodG9vbHRpcC5wb2ludD8ueSkgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG5cblxuIl19
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBYyxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFPbEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7QUFRMUUsTUFBTSxPQUFPLGdCQUFnQjtJQWlCM0IsWUFDVSxHQUFpQixFQUNqQixHQUFzQixFQUN0QixXQUF3QixFQUN4QixTQUF1QixFQUN2QixLQUFhLEVBQ2IsV0FBdUI7UUFMdkIsUUFBRyxHQUFILEdBQUcsQ0FBYztRQUNqQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUUvQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFD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QWQsS0FBSztnQkFFbUQsT0FBTztzQkFBL0QsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgdGFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q2hhcnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHtab29tU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS96b29tLnNlcnZpY2UnO1xuaW1wb3J0IHtJRGlzcGxheVRvb2x0aXB9IGZyb20gJy4uLy4uL21vZGVsL2ktZGlzcGxheS10b29sdGlwJztcbmltcG9ydCB7RG9tU2FuaXRpemVyLCBTYWZlSHRtbH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0lDaGFydENvbmZpZ30gZnJvbSAnLi4vLi4vbW9kZWwvaS1jaGFydC1jb25maWcnO1xuaW1wb3J0IHtTZXJpZXN9IGZyb20gJy4uLy4uL21vZGVsL3Nlcmllcyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQge0FsaWduLCBQb3NpdGlvblV0aWwsIFZlcnRpY2FsQWxpZ259IGZyb20gJ0B0ZXRhY29tL25nLWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXRvb2x0aXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vdG9vbHRpcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rvb2x0aXAuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRvb2x0aXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBzaXplOiBET01SZWN0O1xuICBASW5wdXQoKSBjb25maWc6IElDaGFydENvbmZpZztcblxuICBAVmlld0NoaWxkKCd0b29sdGlwJywge3N0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWZ9KSB0b29sdGlwOiBFbGVtZW50UmVmO1xuXG4gIHBvc2l0aW9uOiBPYnNlcnZhYmxlPHtcbiAgICBsZWZ0PzogbnVtYmVyO1xuICAgIHRvcD86IG51bWJlcjtcbiAgICBib3R0b20/OiBudW1iZXI7XG4gICAgcmlnaHQ/OiBudW1iZXI7XG4gIH0+O1xuXG4gIGRpc3BsYXlUb29sdGlwczogT2JzZXJ2YWJsZTxTYWZlSHRtbD47XG4gIGRpc3BsYXk6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgdG9vbHRpcHM6IE9ic2VydmFibGU8SURpc3BsYXlUb29sdGlwW10+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3ZjOiBDaGFydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgem9vbVNlcnZpY2U6IFpvb21TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBfem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgdGhpcy50b29sdGlwcyA9IHRoaXMuc3ZjLnRvb2x0aXBzLnBpcGUobWFwKChfKSA9PiBbLi4uXy52YWx1ZXMoKV0pKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheSA9IHRoaXMuc3ZjLnBvaW50ZXJNb3ZlLnBpcGUoXG4gICAgICBtYXAoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnR5cGUgPT09ICdtb3VzZW1vdmUnID8gMSA6IDA7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5zdmMucG9pbnRlck1vdmUucGlwZShcbiAgICAgIGZpbHRlcigoZXZlbnQpID0+ICEhZXZlbnQpLFxuICAgICAgbWFwKChfKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBvc2l0aW9uKF8pO1xuICAgICAgfSksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKVxuICAgICk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1IdG1sID0gKGh0bWwpOiBTYWZlSHRtbCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGRlZmF1bHRGb3JtYXR0ZXIgPSAodG9vbHRpcHM6IElEaXNwbGF5VG9vbHRpcFtdKTogU2FmZUh0bWwgPT4ge1xuICAgICAgbGV0IGh0bWwgPSAnJztcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoJyVkLiVtLiVZJyk7XG4gICAgICB0b29sdGlwcy5mb3JFYWNoKChfKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGljYXRvclN0eWxlID0gYGRpc3BsYXk6YmxvY2s7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDJweDsgYmFja2dyb3VuZC1jb2xvcjogJHtfPy5zZXJpZXM/LmNvbG9yfWA7XG5cbiAgICAgICAgaHRtbCArPSBgPGRpdiBjbGFzcz1cImRpc3BsYXktZmxleCBhbGlnbi1jZW50ZXJcIj48c3BhbiBjbGFzcz1cIm1hcmdpbi1yaWdodC0xXCIgc3R5bGU9XCIke2luZGljYXRvclN0eWxlfVwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtdGl0bGUtM1wiPiR7Xy5zZXJpZXMubmFtZX1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2R5LTNcIj5cbiAgICAgICAgICAgICAgeDogJHsoXy5wb2ludC54IGFzIGFueSkgaW5zdGFuY2VvZiBEYXRlID8gZm9ybWF0KF8ucG9pbnQueCBhcyBhbnkpIDogXy5wb2ludC54Py50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICB5OiAkeyhfLnBvaW50LnkgYXMgYW55KSBpbnN0YW5jZW9mIERhdGUgPyBmb3JtYXQoXy5wb2ludC55IGFzIGFueSkgOiBfLnBvaW50Lnk/LnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPjwvZGl2PmA7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRyYW5zZm9ybUh0bWwoaHRtbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuY29uZmlnPy50b29sdGlwPy5mb3JtYXQ7XG5cbiAgICB0aGlzLmRpc3BsYXlUb29sdGlwcyA9IHRoaXMuc3ZjLnRvb2x0aXBzLnBpcGUoXG4gICAgICBtYXAoKHRvb2x0aXBzOiBNYXA8U2VyaWVzPGFueT4sIElEaXNwbGF5VG9vbHRpcD4pID0+IHtcbiAgICAgICAgY29uc3QgdG9vbHRpcExpc3QgPSBbLi4udG9vbHRpcHMudmFsdWVzKCldO1xuICAgICAgICBpZiAodG9vbHRpcExpc3Q/Lmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0dGVyXG4gICAgICAgICAgPyB0cmFuc2Zvcm1IdG1sKGZvcm1hdHRlcih0b29sdGlwTGlzdCkpXG4gICAgICAgICAgOiBkZWZhdWx0Rm9ybWF0dGVyKHRvb2x0aXBMaXN0KTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UG9zaXRpb24oZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGlmICghdGhpcy50b29sdGlwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIFBvc2l0aW9uVXRpbC5nZXRQb3NpdGlvbihcbiAgICAgIHtcbiAgICAgICAgdG9wOiBldmVudC5wYWdlWSxcbiAgICAgICAgYm90dG9tOiBldmVudC5wYWdlWSxcbiAgICAgICAgbGVmdDogZXZlbnQucGFnZVgsXG4gICAgICAgIHJpZ2h0OiBldmVudC5wYWdlWCxcbiAgICAgIH0sXG4gICAgICB0aGlzLnRvb2x0aXA/Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgQWxpZ24uYXV0byxcbiAgICAgIFZlcnRpY2FsQWxpZ24udG9wLFxuICAgICAgMTJcbiAgICApO1xuICB9XG5cblxuICBmb3JtYXQoaW5wdXQ6IG51bWJlciB8IERhdGUpOiBzdHJpbmcge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IGZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoJyVkLiVtLiVZJyk7XG4gICAgICByZXR1cm4gZm9ybWF0KGlucHV0KTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtYXQgPSBkMy5mb3JtYXQoJywuNX5yJyk7XG4gICAgcmV0dXJuIGZvcm1hdChpbnB1dCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnRldGFMZXQ9XCJwb3NpdGlvbiB8IGFzeW5jIGFzIHBcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvb2x0aXBzIHwgYXN5bmMgYXMgdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjaGFydC10b29sdGlwIGNvbG9yLXRleHQtOTAgYmctYmFja2dyb3VuZC01MCBzaGFkb3ctMlwiXG4gICAgICAgICAjdG9vbHRpcFxuICAgICAgICAgW3N0eWxlLnBvc2l0aW9uXT1cIidmaXhlZCdcIlxuICAgICAgICAgKm5nSWY9XCJ0Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgW3N0eWxlLm9wYWNpdHldPVwiZGlzcGxheSB8IGFzeW5jXCJcbiAgICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7IG1pbi13aWR0aDogMjAwcHg7XCJcbiAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cInA/LmxlZnRcIlxuICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJwPy50b3BcIlxuICAgICAgICAgW3N0eWxlLmJvdHRvbS5weF09XCJwPy5ib3R0b21cIlxuICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cInA/LnJpZ2h0XCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLnRvb2x0aXA/LnRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb25maWcudG9vbHRpcC50ZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogdH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLnRvb2x0aXA/LmZvcm1hdDsgZWxzZSBkZWZhdWx0XCI+XG4gICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJkaXNwbGF5VG9vbHRpcHMgfCBhc3luY1wiPjwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFjb25maWcudG9vbHRpcD8udGVtcGxhdGVcIiBjbGFzcz1cInBhZGRpbmctMiBib3JkZXItcmFkaXVzLTFcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0b29sdGlwIG9mIHRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXNwbGF5LWZsZXggYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpc3BsYXktYmxvY2sgbWFyZ2luLXJpZ2h0LTFcIiBbc3R5bGUud2lkdGgucHhdPVwiMTBcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIjJcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwidG9vbHRpcC5zZXJpZXM/LmNvbG9yXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtdGl0bGUtM1wiPlxuICAgICAgICAgICAge3sgdG9vbHRpcC5zZXJpZXM/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9keS0zXCI+XG4gICAgICAgICAgICAgIHg6IHt7IGZvcm1hdCh0b29sdGlwLnBvaW50Py54KSB9fVxuICAgICAgICAgICAgICAgICAgeToge3sgZm9ybWF0KHRvb2x0aXAucG9pbnQ/LnkpIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuXG5cbiJdfQ==
@@ -22,6 +22,7 @@ import { AreaSeriesComponent } from './chart-container/series/area-series/area-s
22
22
  import { AnnotationComponent } from './chart-container/annotation/annotation.component';
23
23
  import { LinearSeriesBase } from './chart-container/series/linear-series-base';
24
24
  import { CrosshairComponent } from './chart-container/crosshair/crosshair.component';
25
+ import { LetModule } from '@tetacom/ng-components';
25
26
  import * as i0 from "@angular/core";
26
27
  export class ChartModule {
27
28
  }
@@ -47,7 +48,7 @@ ChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "1
47
48
  BlockSeriesComponent,
48
49
  BlockAreaSeriesComponent,
49
50
  AnnotationComponent,
50
- CrosshairComponent], imports: [CommonModule], exports: [ChartComponent,
51
+ CrosshairComponent], imports: [CommonModule, LetModule], exports: [ChartComponent,
51
52
  LegendComponent,
52
53
  SeriesBaseComponent,
53
54
  LineSeriesComponent,
@@ -56,7 +57,7 @@ ChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "1
56
57
  AreaSeriesComponent,
57
58
  BlockSeriesComponent,
58
59
  BlockAreaSeriesComponent] });
59
- ChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ChartModule, imports: [CommonModule] });
60
+ ChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ChartModule, imports: [CommonModule, LetModule] });
60
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ChartModule, decorators: [{
61
62
  type: NgModule,
62
63
  args: [{
@@ -95,7 +96,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
95
96
  BlockSeriesComponent,
96
97
  BlockAreaSeriesComponent,
97
98
  ],
98
- imports: [CommonModule],
99
+ imports: [CommonModule, LetModule],
99
100
  }]
100
101
  }] });
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQ3hGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDaEYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDakYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDckYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sa0VBQWtFLENBQUM7QUFDeEcsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sOERBQThELENBQUM7QUFDbEcsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sd0VBQXdFLENBQUM7QUFDaEgsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDL0YsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7O0FBd0NyRixNQUFNLE9BQU8sV0FBVzs7d0dBQVgsV0FBVzt5R0FBWCxXQUFXLGlCQXBDcEIsY0FBYztRQUNkLG1CQUFtQjtRQUNuQix1QkFBdUI7UUFDdkIsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixnQkFBZ0I7UUFDaEIsbUJBQW1CO1FBQ25CLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2QsY0FBYztRQUNkLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLG1CQUFtQjtRQUNuQixzQkFBc0I7UUFDdEIsb0JBQW9CO1FBQ3BCLHdCQUF3QjtRQUN4QixtQkFBbUI7UUFDbkIsa0JBQWtCLGFBYVYsWUFBWSxhQVZwQixjQUFjO1FBQ2QsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixtQkFBbUI7UUFDbkIsa0JBQWtCO1FBQ2xCLHNCQUFzQjtRQUN0QixtQkFBbUI7UUFDbkIsb0JBQW9CO1FBQ3BCLHdCQUF3Qjt5R0FJZixXQUFXLFlBRlosWUFBWTsyRkFFWCxXQUFXO2tCQXRDdkIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLHVCQUF1Qjt3QkFDdkIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsb0JBQW9CO3dCQUNwQix3QkFBd0I7d0JBQ3hCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3FCQUNuQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLHdCQUF3QjtxQkFDekI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NoYXJ0Q29tcG9uZW50fSBmcm9tICcuL2NoYXJ0L2NoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQge1Nlcmllc0hvc3RDb21wb25lbnR9IGZyb20gJy4vY2hhcnQtY29udGFpbmVyL3Nlcmllcy1ob3N0L3Nlcmllcy1ob3N0LmNvbXBvbmVudCc7XG5pbXBvcnQge0NoYXJ0Q29udGFpbmVyQ29tcG9uZW50fSBmcm9tICcuL2NoYXJ0LWNvbnRhaW5lci9jaGFydC1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7TGVnZW5kQ29tcG9uZW50fSBmcm9tICcuL2xlZ2VuZC9sZWdlbmQuY29tcG9uZW50JztcbmltcG9ydCB7U2VyaWVzQmFzZUNvbXBvbmVudH0gZnJvbSAnLi9iYXNlL3Nlcmllcy1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge0xpbmVTZXJpZXNDb21wb25lbnR9IGZyb20gJy4vY2hhcnQtY29udGFpbmVyL3Nlcmllcy9saW5lL2xpbmUtc2VyaWVzLmNvbXBvbmVudCc7XG5pbXBvcnQge0dyaWRsaW5lc0NvbXBvbmVudH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIvZ3JpZGxpbmVzL2dyaWRsaW5lcy5jb21wb25lbnQnO1xuaW1wb3J0IHtYQXhpc0NvbXBvbmVudH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIveC1heGlzL3gtYXhpcy5jb21wb25lbnQnO1xuaW1wb3J0IHtZQXhpc0NvbXBvbmVudH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIveS1heGlzL3ktYXhpcy5jb21wb25lbnQnO1xuaW1wb3J0IHtQbG90bGluZUNvbXBvbmVudH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIvcGxvdGxpbmUvcGxvdGxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7UGxvdEJhbmRDb21wb25lbnR9IGZyb20gJy4vY2hhcnQtY29udGFpbmVyL3Bsb3RiYW5kL3Bsb3QtYmFuZC5jb21wb25lbnQnO1xuaW1wb3J0IHtCYXJTZXJpZXNDb21wb25lbnR9IGZyb20gJy4vY2hhcnQtY29udGFpbmVyL3Nlcmllcy9iYXIvYmFyLXNlcmllcy5jb21wb25lbnQnO1xuaW1wb3J0IHtUb29sdGlwQ29tcG9uZW50fSBmcm9tICcuL2NoYXJ0LWNvbnRhaW5lci90b29sdGlwL3Rvb2x0aXAuY29tcG9uZW50JztcbmltcG9ydCB7Wm9vbWFibGVEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy96b29tYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtCcnVzaGFibGVEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9icnVzaGFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7U2NhdHRlclNlcmllc0NvbXBvbmVudH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIvc2VyaWVzL3NjYXR0ZXItc2VyaWVzL3NjYXR0ZXItc2VyaWVzLmNvbXBvbmVudCc7XG5pbXBvcnQge0Jsb2NrU2VyaWVzQ29tcG9uZW50fSBmcm9tICcuL2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYmxvY2stc2VyaWVzL2Jsb2NrLXNlcmllcy5jb21wb25lbnQnO1xuaW1wb3J0IHtCbG9ja0FyZWFTZXJpZXNDb21wb25lbnR9IGZyb20gJy4vY2hhcnQtY29udGFpbmVyL3Nlcmllcy9ibG9jay1hcmVhLXNlcmllcy9ibG9jay1hcmVhLXNlcmllcy5jb21wb25lbnQnO1xuaW1wb3J0IHtBcmVhU2VyaWVzQ29tcG9uZW50fSBmcm9tICcuL2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvYXJlYS1zZXJpZXMvYXJlYS1zZXJpZXMuY29tcG9uZW50JztcbmltcG9ydCB7QW5ub3RhdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIvYW5ub3RhdGlvbi9hbm5vdGF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0xpbmVhclNlcmllc0Jhc2V9IGZyb20gJy4vY2hhcnQtY29udGFpbmVyL3Nlcmllcy9saW5lYXItc2VyaWVzLWJhc2UnO1xuaW1wb3J0IHsgQ3Jvc3NoYWlyQ29tcG9uZW50IH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIvY3Jvc3NoYWlyL2Nyb3NzaGFpci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBDaGFydENvbXBvbmVudCxcbiAgICBTZXJpZXNIb3N0Q29tcG9uZW50LFxuICAgIENoYXJ0Q29udGFpbmVyQ29tcG9uZW50LFxuICAgIExlZ2VuZENvbXBvbmVudCxcbiAgICBTZXJpZXNCYXNlQ29tcG9uZW50LFxuICAgIExpbmVhclNlcmllc0Jhc2UsXG4gICAgTGluZVNlcmllc0NvbXBvbmVudCxcbiAgICBHcmlkbGluZXNDb21wb25lbnQsXG4gICAgWEF4aXNDb21wb25lbnQsXG4gICAgWUF4aXNDb21wb25lbnQsXG4gICAgUGxvdGxpbmVDb21wb25lbnQsXG4gICAgUGxvdEJhbmRDb21wb25lbnQsXG4gICAgQmFyU2VyaWVzQ29tcG9uZW50LFxuICAgIFRvb2x0aXBDb21wb25lbnQsXG4gICAgWm9vbWFibGVEaXJlY3RpdmUsXG4gICAgQnJ1c2hhYmxlRGlyZWN0aXZlLFxuICAgIEFyZWFTZXJpZXNDb21wb25lbnQsXG4gICAgU2NhdHRlclNlcmllc0NvbXBvbmVudCxcbiAgICBCbG9ja1Nlcmllc0NvbXBvbmVudCxcbiAgICBCbG9ja0FyZWFTZXJpZXNDb21wb25lbnQsXG4gICAgQW5ub3RhdGlvbkNvbXBvbmVudCxcbiAgICBDcm9zc2hhaXJDb21wb25lbnQsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBDaGFydENvbXBvbmVudCxcbiAgICBMZWdlbmRDb21wb25lbnQsXG4gICAgU2VyaWVzQmFzZUNvbXBvbmVudCxcbiAgICBMaW5lU2VyaWVzQ29tcG9uZW50LFxuICAgIEJhclNlcmllc0NvbXBvbmVudCxcbiAgICBTY2F0dGVyU2VyaWVzQ29tcG9uZW50LFxuICAgIEFyZWFTZXJpZXNDb21wb25lbnQsXG4gICAgQmxvY2tTZXJpZXNDb21wb25lbnQsXG4gICAgQmxvY2tBcmVhU2VyaWVzQ29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRNb2R1bGUge1xufVxuIl19
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQ3hGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDaEYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDakYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDckYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sa0VBQWtFLENBQUM7QUFDeEcsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sOERBQThELENBQUM7QUFDbEcsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sd0VBQXdFLENBQUM7QUFDaEgsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDL0YsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDckYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDOztBQXdDakQsTUFBTSxPQUFPLFdBQVc7O3dHQUFYLFdBQVc7eUdBQVgsV0FBVyxpQkFwQ3BCLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsdUJBQXVCO1FBQ3ZCLGVBQWU7UUFDZixtQkFBbUI7UUFDbkIsZ0JBQWdCO1FBQ2hCLG1CQUFtQjtRQUNuQixrQkFBa0I7UUFDbEIsY0FBYztRQUNkLGNBQWM7UUFDZCxpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixtQkFBbUI7UUFDbkIsc0JBQXNCO1FBQ3RCLG9CQUFvQjtRQUNwQix3QkFBd0I7UUFDeEIsbUJBQW1CO1FBQ25CLGtCQUFrQixhQWFWLFlBQVksRUFBRSxTQUFTLGFBVi9CLGNBQWM7UUFDZCxlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLG1CQUFtQjtRQUNuQixrQkFBa0I7UUFDbEIsc0JBQXNCO1FBQ3RCLG1CQUFtQjtRQUNuQixvQkFBb0I7UUFDcEIsd0JBQXdCO3lHQUlmLFdBQVcsWUFGWixZQUFZLEVBQUUsU0FBUzsyRkFFdEIsV0FBVztrQkF0Q3ZCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QixtQkFBbUI7d0JBQ25CLGtCQUFrQjtxQkFDbkI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixzQkFBc0I7d0JBQ3RCLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQix3QkFBd0I7cUJBQ3pCO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUM7aUJBQ25DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2hhcnRDb21wb25lbnR9IGZyb20gJy4vY2hhcnQvY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7U2VyaWVzSG9zdENvbXBvbmVudH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIvc2VyaWVzLWhvc3Qvc2VyaWVzLWhvc3QuY29tcG9uZW50JztcbmltcG9ydCB7Q2hhcnRDb250YWluZXJDb21wb25lbnR9IGZyb20gJy4vY2hhcnQtY29udGFpbmVyL2NoYXJ0LWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHtMZWdlbmRDb21wb25lbnR9IGZyb20gJy4vbGVnZW5kL2xlZ2VuZC5jb21wb25lbnQnO1xuaW1wb3J0IHtTZXJpZXNCYXNlQ29tcG9uZW50fSBmcm9tICcuL2Jhc2Uvc2VyaWVzLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7TGluZVNlcmllc0NvbXBvbmVudH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIvc2VyaWVzL2xpbmUvbGluZS1zZXJpZXMuY29tcG9uZW50JztcbmltcG9ydCB7R3JpZGxpbmVzQ29tcG9uZW50fSBmcm9tICcuL2NoYXJ0LWNvbnRhaW5lci9ncmlkbGluZXMvZ3JpZGxpbmVzLmNvbXBvbmVudCc7XG5pbXBvcnQge1hBeGlzQ29tcG9uZW50fSBmcm9tICcuL2NoYXJ0LWNvbnRhaW5lci94LWF4aXMveC1heGlzLmNvbXBvbmVudCc7XG5pbXBvcnQge1lBeGlzQ29tcG9uZW50fSBmcm9tICcuL2NoYXJ0LWNvbnRhaW5lci95LWF4aXMveS1heGlzLmNvbXBvbmVudCc7XG5pbXBvcnQge1Bsb3RsaW5lQ29tcG9uZW50fSBmcm9tICcuL2NoYXJ0LWNvbnRhaW5lci9wbG90bGluZS9wbG90bGluZS5jb21wb25lbnQnO1xuaW1wb3J0IHtQbG90QmFuZENvbXBvbmVudH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIvcGxvdGJhbmQvcGxvdC1iYW5kLmNvbXBvbmVudCc7XG5pbXBvcnQge0JhclNlcmllc0NvbXBvbmVudH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIvc2VyaWVzL2Jhci9iYXItc2VyaWVzLmNvbXBvbmVudCc7XG5pbXBvcnQge1Rvb2x0aXBDb21wb25lbnR9IGZyb20gJy4vY2hhcnQtY29udGFpbmVyL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQnO1xuaW1wb3J0IHtab29tYWJsZURpcmVjdGl2ZX0gZnJvbSAnLi9kaXJlY3RpdmVzL3pvb21hYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0JydXNoYWJsZURpcmVjdGl2ZX0gZnJvbSAnLi9kaXJlY3RpdmVzL2JydXNoYWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtTY2F0dGVyU2VyaWVzQ29tcG9uZW50fSBmcm9tICcuL2NoYXJ0LWNvbnRhaW5lci9zZXJpZXMvc2NhdHRlci1zZXJpZXMvc2NhdHRlci1zZXJpZXMuY29tcG9uZW50JztcbmltcG9ydCB7QmxvY2tTZXJpZXNDb21wb25lbnR9IGZyb20gJy4vY2hhcnQtY29udGFpbmVyL3Nlcmllcy9ibG9jay1zZXJpZXMvYmxvY2stc2VyaWVzLmNvbXBvbmVudCc7XG5pbXBvcnQge0Jsb2NrQXJlYVNlcmllc0NvbXBvbmVudH0gZnJvbSAnLi9jaGFydC1jb250YWluZXIvc2VyaWVzL2Jsb2NrLWFyZWEtc2VyaWVzL2Jsb2NrLWFyZWEtc2VyaWVzLmNvbXBvbmVudCc7XG5pbXBvcnQge0FyZWFTZXJpZXNDb21wb25lbnR9IGZyb20gJy4vY2hhcnQtY29udGFpbmVyL3Nlcmllcy9hcmVhLXNlcmllcy9hcmVhLXNlcmllcy5jb21wb25lbnQnO1xuaW1wb3J0IHtBbm5vdGF0aW9uQ29tcG9uZW50fSBmcm9tICcuL2NoYXJ0LWNvbnRhaW5lci9hbm5vdGF0aW9uL2Fubm90YXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7TGluZWFyU2VyaWVzQmFzZX0gZnJvbSAnLi9jaGFydC1jb250YWluZXIvc2VyaWVzL2xpbmVhci1zZXJpZXMtYmFzZSc7XG5pbXBvcnQgeyBDcm9zc2hhaXJDb21wb25lbnQgfSBmcm9tICcuL2NoYXJ0LWNvbnRhaW5lci9jcm9zc2hhaXIvY3Jvc3NoYWlyLmNvbXBvbmVudCc7XG5pbXBvcnQge0xldE1vZHVsZX0gZnJvbSAnQHRldGFjb20vbmctY29tcG9uZW50cyc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIENoYXJ0Q29tcG9uZW50LFxuICAgIFNlcmllc0hvc3RDb21wb25lbnQsXG4gICAgQ2hhcnRDb250YWluZXJDb21wb25lbnQsXG4gICAgTGVnZW5kQ29tcG9uZW50LFxuICAgIFNlcmllc0Jhc2VDb21wb25lbnQsXG4gICAgTGluZWFyU2VyaWVzQmFzZSxcbiAgICBMaW5lU2VyaWVzQ29tcG9uZW50LFxuICAgIEdyaWRsaW5lc0NvbXBvbmVudCxcbiAgICBYQXhpc0NvbXBvbmVudCxcbiAgICBZQXhpc0NvbXBvbmVudCxcbiAgICBQbG90bGluZUNvbXBvbmVudCxcbiAgICBQbG90QmFuZENvbXBvbmVudCxcbiAgICBCYXJTZXJpZXNDb21wb25lbnQsXG4gICAgVG9vbHRpcENvbXBvbmVudCxcbiAgICBab29tYWJsZURpcmVjdGl2ZSxcbiAgICBCcnVzaGFibGVEaXJlY3RpdmUsXG4gICAgQXJlYVNlcmllc0NvbXBvbmVudCxcbiAgICBTY2F0dGVyU2VyaWVzQ29tcG9uZW50LFxuICAgIEJsb2NrU2VyaWVzQ29tcG9uZW50LFxuICAgIEJsb2NrQXJlYVNlcmllc0NvbXBvbmVudCxcbiAgICBBbm5vdGF0aW9uQ29tcG9uZW50LFxuICAgIENyb3NzaGFpckNvbXBvbmVudCxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIENoYXJ0Q29tcG9uZW50LFxuICAgIExlZ2VuZENvbXBvbmVudCxcbiAgICBTZXJpZXNCYXNlQ29tcG9uZW50LFxuICAgIExpbmVTZXJpZXNDb21wb25lbnQsXG4gICAgQmFyU2VyaWVzQ29tcG9uZW50LFxuICAgIFNjYXR0ZXJTZXJpZXNDb21wb25lbnQsXG4gICAgQXJlYVNlcmllc0NvbXBvbmVudCxcbiAgICBCbG9ja1Nlcmllc0NvbXBvbmVudCxcbiAgICBCbG9ja0FyZWFTZXJpZXNDb21wb25lbnQsXG4gIF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIExldE1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0TW9kdWxlIHtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, Input, ChangeDetectionStrategy, ChangeDetectorRef, HostListener, Directive, HostBinding, ViewChild, EventEmitter, Output, NgModule } from '@angular/core';
2
+ import { Injectable, Component, Input, ChangeDetectionStrategy, ChangeDetectorRef, HostListener, ElementRef, ViewChild, Directive, HostBinding, EventEmitter, Output, NgModule } from '@angular/core';
3
3
  import * as i4 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { __awaiter } from 'tslib';
@@ -9,7 +9,8 @@ import { zoomIdentity } from 'd3';
9
9
  import objectHash from 'object-hash';
10
10
  import { maxIndex } from 'd3-array';
11
11
  import { debounceTime, tap as tap$1 } from 'rxjs/operators';
12
- import { tetaZoneFull } from '@tetacom/ng-components';
12
+ import * as i5 from '@tetacom/ng-components';
13
+ import { PositionUtil, Align, VerticalAlign, tetaZoneFull, LetModule } from '@tetacom/ng-components';
13
14
  import * as i3 from '@angular/platform-browser';
14
15
 
15
16
  var ZoomType;
@@ -1865,12 +1866,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
1865
1866
  }] } });
1866
1867
 
1867
1868
  class TooltipComponent {
1868
- constructor(svc, cdr, zoomService, sanitizer, _zone) {
1869
+ constructor(svc, cdr, zoomService, sanitizer, _zone, _elementRef) {
1869
1870
  this.svc = svc;
1870
1871
  this.cdr = cdr;
1871
1872
  this.zoomService = zoomService;
1872
1873
  this.sanitizer = sanitizer;
1873
1874
  this._zone = _zone;
1875
+ this._elementRef = _elementRef;
1874
1876
  this.tooltips = this.svc.tooltips.pipe(map((_) => [..._.values()]));
1875
1877
  }
1876
1878
  ngOnInit() {
@@ -1918,20 +1920,15 @@ class TooltipComponent {
1918
1920
  }
1919
1921
  getPosition(event) {
1920
1922
  var _a, _b;
1921
- const centerX = this.size.width / 2;
1922
- const centerY = this.size.height / 2;
1923
- const padding = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.tooltip) === null || _b === void 0 ? void 0 : _b.padding;
1924
- const scene = {
1925
- left: event.pageX > centerX ? 'initial' : `${event.pageX + padding.x}px`,
1926
- top: event.pageY > centerY ? 'initial' : `${event.pageY + padding.y}px`,
1927
- bottom: event.pageY > centerY
1928
- ? `${window.innerHeight - event.pageY + padding.y}px`
1929
- : 'initial',
1930
- right: event.pageX > centerX
1931
- ? `${window.innerWidth - event.pageX + padding.x}px`
1932
- : 'initial',
1933
- };
1934
- return scene;
1923
+ if (!this.tooltip) {
1924
+ return null;
1925
+ }
1926
+ return PositionUtil.getPosition({
1927
+ top: event.pageY,
1928
+ bottom: event.pageY,
1929
+ left: event.pageX,
1930
+ right: event.pageX,
1931
+ }, (_b = (_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect(), Align.auto, VerticalAlign.top, 12);
1935
1932
  }
1936
1933
  format(input) {
1937
1934
  if (input instanceof Date) {
@@ -1942,15 +1939,18 @@ class TooltipComponent {
1942
1939
  return format(input);
1943
1940
  }
1944
1941
  }
1945
- TooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TooltipComponent, deps: [{ token: ChartService }, { token: i0.ChangeDetectorRef }, { token: ZoomService }, { token: i3.DomSanitizer }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
1946
- TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TooltipComponent, selector: "teta-tooltip", inputs: { size: "size", config: "config" }, ngImport: i0, template: "<ng-container *ngIf=\"position | async as p\">\n <ng-container *ngIf=\"tooltips | async as t\">\n <div class=\"chart-tooltip color-text-90 bg-background-50 shadow-2\"\n [style.position]=\"'fixed'\"\n *ngIf=\"t.length > 0\"\n [style.opacity]=\"display | async\"\n style=\"pointer-events: none; min-width: 200px;\"\n [style.left]=\"p.left\"\n [style.top]=\"p.top\"\n [style.bottom]=\"p.bottom\"\n [style.right]=\"p.right\"\n >\n <ng-container *ngIf=\"config.tooltip?.template\">\n <ng-container *ngTemplateOutlet=\"config.tooltip.template; context: {$implicit: t}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"config.tooltip?.format; else default\">\n <div [innerHTML]=\"displayTooltips | async\"></div>\n </ng-container>\n\n <ng-template #default>\n <div *ngIf=\"!config.tooltip?.template\" class=\"padding-2 border-radius-1\">\n <ng-container *ngFor=\"let tooltip of t\">\n <div class=\"display-flex align-center\">\n <span class=\"display-block margin-right-1\" [style.width.px]=\"10\" [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\"></span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }}\n y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n</ng-container>\n\n\n\n", styles: [":host{position:absolute;z-index:2}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1942
+ TooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TooltipComponent, deps: [{ token: ChartService }, { token: i0.ChangeDetectorRef }, { token: ZoomService }, { token: i3.DomSanitizer }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1943
+ TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TooltipComponent, selector: "teta-tooltip", inputs: { size: "size", config: "config" }, viewQueries: [{ propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ng-container *tetaLet=\"position | async as p\">\n <ng-container *ngIf=\"tooltips | async as t\">\n <div class=\"chart-tooltip color-text-90 bg-background-50 shadow-2\"\n #tooltip\n [style.position]=\"'fixed'\"\n *ngIf=\"t.length > 0\"\n [style.opacity]=\"display | async\"\n style=\"pointer-events: none; min-width: 200px;\"\n [style.left.px]=\"p?.left\"\n [style.top.px]=\"p?.top\"\n [style.bottom.px]=\"p?.bottom\"\n [style.right.px]=\"p?.right\"\n >\n <ng-container *ngIf=\"config.tooltip?.template\">\n <ng-container *ngTemplateOutlet=\"config.tooltip.template; context: {$implicit: t}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"config.tooltip?.format; else default\">\n <div [innerHTML]=\"displayTooltips | async\"></div>\n </ng-container>\n\n <ng-template #default>\n <div *ngIf=\"!config.tooltip?.template\" class=\"padding-2 border-radius-1\">\n <ng-container *ngFor=\"let tooltip of t\">\n <div class=\"display-flex align-center\">\n <span class=\"display-block margin-right-1\" [style.width.px]=\"10\" [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\"></span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }}\n y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n</ng-container>\n\n\n\n", styles: [":host{position:absolute;z-index:2}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.LetDirective, selector: "[tetaLet]", inputs: ["tetaLet"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1947
1944
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TooltipComponent, decorators: [{
1948
1945
  type: Component,
1949
- args: [{ selector: 'teta-tooltip', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"position | async as p\">\n <ng-container *ngIf=\"tooltips | async as t\">\n <div class=\"chart-tooltip color-text-90 bg-background-50 shadow-2\"\n [style.position]=\"'fixed'\"\n *ngIf=\"t.length > 0\"\n [style.opacity]=\"display | async\"\n style=\"pointer-events: none; min-width: 200px;\"\n [style.left]=\"p.left\"\n [style.top]=\"p.top\"\n [style.bottom]=\"p.bottom\"\n [style.right]=\"p.right\"\n >\n <ng-container *ngIf=\"config.tooltip?.template\">\n <ng-container *ngTemplateOutlet=\"config.tooltip.template; context: {$implicit: t}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"config.tooltip?.format; else default\">\n <div [innerHTML]=\"displayTooltips | async\"></div>\n </ng-container>\n\n <ng-template #default>\n <div *ngIf=\"!config.tooltip?.template\" class=\"padding-2 border-radius-1\">\n <ng-container *ngFor=\"let tooltip of t\">\n <div class=\"display-flex align-center\">\n <span class=\"display-block margin-right-1\" [style.width.px]=\"10\" [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\"></span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }}\n y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n</ng-container>\n\n\n\n", styles: [":host{position:absolute;z-index:2}\n"] }]
1950
- }], ctorParameters: function () { return [{ type: ChartService }, { type: i0.ChangeDetectorRef }, { type: ZoomService }, { type: i3.DomSanitizer }, { type: i0.NgZone }]; }, propDecorators: { size: [{
1946
+ args: [{ selector: 'teta-tooltip', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *tetaLet=\"position | async as p\">\n <ng-container *ngIf=\"tooltips | async as t\">\n <div class=\"chart-tooltip color-text-90 bg-background-50 shadow-2\"\n #tooltip\n [style.position]=\"'fixed'\"\n *ngIf=\"t.length > 0\"\n [style.opacity]=\"display | async\"\n style=\"pointer-events: none; min-width: 200px;\"\n [style.left.px]=\"p?.left\"\n [style.top.px]=\"p?.top\"\n [style.bottom.px]=\"p?.bottom\"\n [style.right.px]=\"p?.right\"\n >\n <ng-container *ngIf=\"config.tooltip?.template\">\n <ng-container *ngTemplateOutlet=\"config.tooltip.template; context: {$implicit: t}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"config.tooltip?.format; else default\">\n <div [innerHTML]=\"displayTooltips | async\"></div>\n </ng-container>\n\n <ng-template #default>\n <div *ngIf=\"!config.tooltip?.template\" class=\"padding-2 border-radius-1\">\n <ng-container *ngFor=\"let tooltip of t\">\n <div class=\"display-flex align-center\">\n <span class=\"display-block margin-right-1\" [style.width.px]=\"10\" [style.height.px]=\"2\"\n [style.background-color]=\"tooltip.series?.color\"></span>\n <span class=\"font-title-3\">\n {{ tooltip.series?.name }}\n <span class=\"font-body-3\">\n x: {{ format(tooltip.point?.x) }}\n y: {{ format(tooltip.point?.y) }}\n </span>\n </span>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n </ng-container>\n</ng-container>\n\n\n\n", styles: [":host{position:absolute;z-index:2}\n"] }]
1947
+ }], ctorParameters: function () { return [{ type: ChartService }, { type: i0.ChangeDetectorRef }, { type: ZoomService }, { type: i3.DomSanitizer }, { type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: { size: [{
1951
1948
  type: Input
1952
1949
  }], config: [{
1953
1950
  type: Input
1951
+ }], tooltip: [{
1952
+ type: ViewChild,
1953
+ args: ['tooltip', { static: false, read: ElementRef }]
1954
1954
  }] } });
1955
1955
 
1956
1956
  class ZoomableDirective {
@@ -2749,7 +2749,7 @@ ChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "1
2749
2749
  BlockSeriesComponent,
2750
2750
  BlockAreaSeriesComponent,
2751
2751
  AnnotationComponent,
2752
- CrosshairComponent], imports: [CommonModule], exports: [ChartComponent,
2752
+ CrosshairComponent], imports: [CommonModule, LetModule], exports: [ChartComponent,
2753
2753
  LegendComponent,
2754
2754
  SeriesBaseComponent,
2755
2755
  LineSeriesComponent,
@@ -2758,7 +2758,7 @@ ChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "1
2758
2758
  AreaSeriesComponent,
2759
2759
  BlockSeriesComponent,
2760
2760
  BlockAreaSeriesComponent] });
2761
- ChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ChartModule, imports: [CommonModule] });
2761
+ ChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ChartModule, imports: [CommonModule, LetModule] });
2762
2762
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ChartModule, decorators: [{
2763
2763
  type: NgModule,
2764
2764
  args: [{
@@ -2797,7 +2797,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
2797
2797
  BlockSeriesComponent,
2798
2798
  BlockAreaSeriesComponent,
2799
2799
  ],
2800
- imports: [CommonModule],
2800
+ imports: [CommonModule, LetModule],
2801
2801
  }]
2802
2802
  }] });
2803
2803