@evotor-dev/ui-kit 6.17.0 → 6.17.2
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.
- package/bundles/evotor-dev-ui-kit.umd.js +1233 -277
- package/bundles/evotor-dev-ui-kit.umd.js.map +1 -1
- package/esm2015/lib/components/evo-navigation-tabs/evo-navigation-tab.directive.js +52 -0
- package/esm2015/lib/components/evo-navigation-tabs/evo-navigation-tabs.component.js +112 -0
- package/esm2015/lib/components/evo-navigation-tabs/evo-navigation-tabs.module.js +20 -0
- package/esm2015/lib/components/evo-navigation-tabs/index.js +2 -0
- package/esm2015/lib/components/evo-navigation-tabs/public-api.js +5 -0
- package/esm2015/lib/components/evo-navigation-tabs/types/evo-navigation-tabs-size.js +2 -0
- package/esm2015/lib/components/evo-tooltip/constants/evo-tooltip-arrow-size.js +3 -0
- package/esm2015/lib/components/evo-tooltip/constants/evo-tooltip-config.js +5 -0
- package/esm2015/lib/components/evo-tooltip/constants/evo-tooltip-connected-position.js +100 -0
- package/esm2015/lib/components/evo-tooltip/constants/evo-tooltip-default-positions-order.js +16 -0
- package/esm2015/lib/components/evo-tooltip/constants/evo-tooltip-fadein.animation.js +8 -0
- package/esm2015/lib/components/evo-tooltip/constants/evo-tooltip-offset.js +3 -0
- package/esm2015/lib/components/evo-tooltip/constants/evo-tooltip-priority-positions-order.js +8 -0
- package/esm2015/lib/components/evo-tooltip/constants/evo-tooltip-radius.js +3 -0
- package/esm2015/lib/components/evo-tooltip/directives/evo-tooltip.directive.js +98 -0
- package/esm2015/lib/components/evo-tooltip/enums/evo-tooltip-position.js +16 -0
- package/esm2015/lib/components/evo-tooltip/enums/evo-tooltip-variable-arrow-position.js +6 -0
- package/esm2015/lib/components/evo-tooltip/evo-tooltip.component.js +102 -0
- package/esm2015/lib/components/evo-tooltip/evo-tooltip.module.js +20 -0
- package/esm2015/lib/components/evo-tooltip/index.js +2 -0
- package/esm2015/lib/components/evo-tooltip/interfaces/evo-tooltip-config.js +2 -0
- package/esm2015/lib/components/evo-tooltip/interfaces/evo-tooltip-styles.js +2 -0
- package/esm2015/lib/components/evo-tooltip/public-api.js +3 -0
- package/esm2015/lib/components/evo-tooltip/services/evo-tooltip.service.js +180 -0
- package/esm2015/lib/components/evo-tooltip/types/evo-tooltip-position-type.js +2 -0
- package/esm2015/lib/services/mutation-observer.service.js +59 -0
- package/esm2015/lib/services/router-link-active.service.js +41 -0
- package/esm2015/lib/utils/observables/zone-free.js +64 -0
- package/esm2015/lib/utils/tokens/animation-frame.js +27 -0
- package/esm2015/public_api.js +3 -1
- package/fesm2015/evotor-dev-ui-kit.js +918 -57
- package/fesm2015/evotor-dev-ui-kit.js.map +1 -1
- package/lib/components/evo-navigation-tabs/evo-navigation-tab.directive.d.ts +19 -0
- package/lib/components/evo-navigation-tabs/evo-navigation-tabs.component.d.ts +32 -0
- package/lib/components/evo-navigation-tabs/evo-navigation-tabs.module.d.ts +10 -0
- package/lib/components/evo-navigation-tabs/index.d.ts +1 -0
- package/lib/components/evo-navigation-tabs/public-api.d.ts +4 -0
- package/lib/components/evo-navigation-tabs/types/evo-navigation-tabs-size.d.ts +1 -0
- package/lib/components/evo-tooltip/constants/evo-tooltip-arrow-size.d.ts +1 -0
- package/lib/components/evo-tooltip/constants/evo-tooltip-config.d.ts +2 -0
- package/lib/components/evo-tooltip/constants/evo-tooltip-connected-position.d.ts +16 -0
- package/lib/components/evo-tooltip/constants/evo-tooltip-default-positions-order.d.ts +2 -0
- package/lib/components/evo-tooltip/constants/evo-tooltip-fadein.animation.d.ts +1 -0
- package/lib/components/evo-tooltip/constants/evo-tooltip-offset.d.ts +1 -0
- package/lib/components/evo-tooltip/constants/evo-tooltip-priority-positions-order.d.ts +4 -0
- package/lib/components/evo-tooltip/constants/evo-tooltip-radius.d.ts +1 -0
- package/lib/components/evo-tooltip/directives/evo-tooltip.directive.d.ts +31 -0
- package/lib/components/evo-tooltip/enums/evo-tooltip-position.d.ts +14 -0
- package/lib/components/evo-tooltip/enums/evo-tooltip-variable-arrow-position.d.ts +4 -0
- package/lib/components/evo-tooltip/evo-tooltip.component.d.ts +26 -0
- package/lib/components/evo-tooltip/evo-tooltip.module.d.ts +10 -0
- package/lib/components/evo-tooltip/index.d.ts +1 -0
- package/lib/components/evo-tooltip/interfaces/evo-tooltip-config.d.ts +4 -0
- package/lib/components/evo-tooltip/interfaces/evo-tooltip-styles.d.ts +4 -0
- package/lib/components/evo-tooltip/public-api.d.ts +2 -0
- package/lib/components/evo-tooltip/services/evo-tooltip.service.d.ts +50 -0
- package/lib/components/evo-tooltip/types/evo-tooltip-position-type.d.ts +2 -0
- package/lib/services/mutation-observer.service.d.ts +34 -0
- package/lib/services/router-link-active.service.d.ts +16 -0
- package/lib/utils/observables/zone-free.d.ts +54 -0
- package/lib/utils/tokens/animation-frame.d.ts +10 -0
- package/package.json +1 -1
- package/public_api.d.ts +2 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding, } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, combineLatest, EMPTY, Subject } from 'rxjs';
|
|
3
|
+
import { filter, map, pairwise, startWith, takeUntil, tap } from 'rxjs/operators';
|
|
4
|
+
import { EVO_TOOLTIP_FADEIN_ANIMATION } from './constants/evo-tooltip-fadein.animation';
|
|
5
|
+
import { EvoTooltipPosition } from './enums/evo-tooltip-position';
|
|
6
|
+
import { EVO_TOOLTIP_ARROW_SIZE } from './constants/evo-tooltip-arrow-size';
|
|
7
|
+
import { EVO_TOOLTIP_RADIUS } from './constants/evo-tooltip-radius';
|
|
8
|
+
import { EvoTooltipVariableArrowPosition } from './enums/evo-tooltip-variable-arrow-position';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "./services/evo-tooltip.service";
|
|
11
|
+
import * as i2 from "@angular/common";
|
|
12
|
+
export class EvoTooltipComponent {
|
|
13
|
+
constructor(elementRef, tooltipService, renderer) {
|
|
14
|
+
this.elementRef = elementRef;
|
|
15
|
+
this.tooltipService = tooltipService;
|
|
16
|
+
this.renderer = renderer;
|
|
17
|
+
this.position$ = this.tooltipService.position$;
|
|
18
|
+
this.stringContent$ = this.tooltipService.stringContent$;
|
|
19
|
+
this.templateContent$ = this.tooltipService.templateContent$;
|
|
20
|
+
this.visibleArrow$ = this.tooltipService.visibleArrow$;
|
|
21
|
+
this.styles$ = EMPTY;
|
|
22
|
+
this.fadeIn = true;
|
|
23
|
+
this._positionArrowStyles$ = new BehaviorSubject(null);
|
|
24
|
+
this._destroy$ = new Subject();
|
|
25
|
+
this.styles$ = combineLatest([this.tooltipService.styles$, this._positionArrowStyles$]).pipe(map(([style1, style2]) => (Object.assign(Object.assign({}, style1), style2))));
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
combineLatest([this.position$, this.tooltipService.parentRef$, this.visibleArrow$])
|
|
29
|
+
.pipe(filter(([_position, _parentRef, visibleArrow]) => visibleArrow),
|
|
30
|
+
// Вычисление стрелки нужно только для угловых позиций
|
|
31
|
+
filter(([position]) => {
|
|
32
|
+
switch (position) {
|
|
33
|
+
case EvoTooltipPosition.TOP:
|
|
34
|
+
case EvoTooltipPosition.RIGHT:
|
|
35
|
+
case EvoTooltipPosition.BOTTOM:
|
|
36
|
+
case EvoTooltipPosition.LEFT:
|
|
37
|
+
return false;
|
|
38
|
+
default:
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
}), tap(([_, parentRef]) => {
|
|
42
|
+
this.setArrowPosition(parentRef);
|
|
43
|
+
}), takeUntil(this._destroy$))
|
|
44
|
+
.subscribe();
|
|
45
|
+
}
|
|
46
|
+
ngAfterViewInit() {
|
|
47
|
+
this.tooltipService.tooltipClasses$
|
|
48
|
+
.pipe(startWith([]), pairwise(), tap(([a, b]) => {
|
|
49
|
+
(a || []).forEach((oldClass) => this.renderer.removeClass(this.elementRef.nativeElement, oldClass));
|
|
50
|
+
(b || []).forEach((newClass) => this.renderer.addClass(this.elementRef.nativeElement, newClass));
|
|
51
|
+
}), takeUntil(this._destroy$))
|
|
52
|
+
.subscribe();
|
|
53
|
+
}
|
|
54
|
+
ngOnDestroy() {
|
|
55
|
+
this.fadeIn = false;
|
|
56
|
+
this._destroy$.next();
|
|
57
|
+
this._destroy$.complete();
|
|
58
|
+
}
|
|
59
|
+
setArrowPosition(parentRef) {
|
|
60
|
+
// Для того чтобы стрелка тянулась к центру родителя - берем середину
|
|
61
|
+
const widthParent = parentRef.nativeElement.offsetWidth / 2;
|
|
62
|
+
const heightParent = parentRef.nativeElement.offsetHeight / 2;
|
|
63
|
+
const isParentLonger = widthParent >= this.elementRef.nativeElement.offsetWidth;
|
|
64
|
+
const isParentHigher = heightParent >= this.elementRef.nativeElement.offsetHeight;
|
|
65
|
+
// Если середина родителя оказывается меньше тултипа - берем середину родителя иначе размер тултипа
|
|
66
|
+
// Это проверка на максимальное смещение, смещение стрелки не должно быть больше размера тултипа
|
|
67
|
+
const width = isParentLonger ? this.elementRef.nativeElement.offsetWidth : widthParent;
|
|
68
|
+
const height = isParentHigher ? this.elementRef.nativeElement.offsetHeight : heightParent;
|
|
69
|
+
const positionArrow = (size, isParentBigger) =>
|
|
70
|
+
// Если середина родителя больше тултипа
|
|
71
|
+
// То берем размер тултипа и отнимаем размер стрелки и радиуса
|
|
72
|
+
// Иначе берем середину родителя и отнимаем половину стрелки
|
|
73
|
+
// Это условие нужно чтобы стрелка не смещалась
|
|
74
|
+
isParentBigger ? size - EVO_TOOLTIP_ARROW_SIZE - EVO_TOOLTIP_RADIUS : size - EVO_TOOLTIP_ARROW_SIZE / 2;
|
|
75
|
+
let verticalPositionArrow = positionArrow(height, isParentHigher);
|
|
76
|
+
let horizontalPositionArrow = positionArrow(width, isParentLonger);
|
|
77
|
+
// Проверка на минимальное смещение, смещение стрелки не должно быть меньше размера радиуса тултипа 8px
|
|
78
|
+
horizontalPositionArrow =
|
|
79
|
+
horizontalPositionArrow > EVO_TOOLTIP_RADIUS ? horizontalPositionArrow : EVO_TOOLTIP_RADIUS;
|
|
80
|
+
verticalPositionArrow = verticalPositionArrow > EVO_TOOLTIP_RADIUS ? verticalPositionArrow : EVO_TOOLTIP_RADIUS;
|
|
81
|
+
this._positionArrowStyles$.next({
|
|
82
|
+
[EvoTooltipVariableArrowPosition.VERTICAL_POSITION_ARROW]: `${verticalPositionArrow}px`,
|
|
83
|
+
[EvoTooltipVariableArrowPosition.HORIZONTAL_POSITION_ARROW]: `${horizontalPositionArrow}px`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
EvoTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EvoTooltipComponent, deps: [{ token: i0.ElementRef }, { token: i1.EvoTooltipService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
88
|
+
EvoTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: EvoTooltipComponent, selector: "evo-tooltip", host: { properties: { "@fadeIn": "this.fadeIn" } }, ngImport: i0, template: "<ng-container\n *ngIf=\"{position: position$ | async, styles: styles$ | async, visibleArrow: visibleArrow$ | async} as asyncData\"\n>\n <div\n class=\"evo-tooltip\"\n [class]=\"'evo-tooltip_' + asyncData.position\"\n [class.evo-tooltip_not-arrow]=\"!asyncData.visibleArrow\"\n [style]=\"asyncData.styles\"\n >\n <ng-container *ngIf=\"stringContent$ | async as content; else templateRef\">{{ content }}</ng-container>\n </div>\n</ng-container>\n\n<ng-template #templateRef>\n <ng-container *ngIf=\"templateContent$ | async as content\" [ngTemplateOutlet]=\"content\"></ng-container>\n</ng-template>\n", styles: [":host{--evo-tooltip-horizontal-position-arrow: 50%;--evo-tooltip-vertical-position-arrow: 50%;--evo-tooltip-color: #212121;--evo-tooltip-background-color: #FFF8E6;--evo-tooltip-max-width: 300px;--evo-tooltip-padding: 16px;--evo-tooltip-border-radius: 8px}:host:empty{display:none}.evo-tooltip{display:inline-block;position:relative;background-color:var(--evo-tooltip-background-color);color:var(--evo-tooltip-color);padding:var(--evo-tooltip-padding);font:inherit;border-radius:var(--evo-tooltip-border-radius);box-sizing:border-box;max-width:var(--evo-tooltip-max-width);filter:drop-shadow(0 8px 10px rgba(0,0,0,.14)) drop-shadow(0 3px 14px rgba(0,0,0,.12))}.evo-tooltip:empty{display:none}.evo-tooltip:not(.evo-tooltip_not-arrow):before{content:\"\";position:absolute;border-style:solid}.evo-tooltip_top-start:before,.evo-tooltip_top:before,.evo-tooltip_top-end:before{border-width:8px 8px 0 8px;border-color:var(--evo-tooltip-background-color) transparent transparent transparent;bottom:-8px}.evo-tooltip_top-start:before{left:var(--evo-tooltip-horizontal-position-arrow)}.evo-tooltip_top:before{left:50%;transform:translate(-50%)}.evo-tooltip_top-end:before{right:var(--evo-tooltip-horizontal-position-arrow)}.evo-tooltip_right-start:before,.evo-tooltip_right:before,.evo-tooltip_right-end:before{border-width:8px 8px 8px 0;border-color:transparent var(--evo-tooltip-background-color) transparent transparent;left:-8px}.evo-tooltip_right-start:before{top:var(--evo-tooltip-vertical-position-arrow)}.evo-tooltip_right:before{top:50%;transform:translateY(-50%)}.evo-tooltip_right-end:before{bottom:var(--evo-tooltip-vertical-position-arrow)}.evo-tooltip_bottom-start:before,.evo-tooltip_bottom:before,.evo-tooltip_bottom-end:before{border-width:0 8px 8px 8px;border-color:transparent transparent var(--evo-tooltip-background-color) transparent;top:-8px}.evo-tooltip_bottom-start:before{left:var(--evo-tooltip-horizontal-position-arrow)}.evo-tooltip_bottom:before{left:50%;transform:translate(-50%)}.evo-tooltip_bottom-end:before{right:var(--evo-tooltip-horizontal-position-arrow)}.evo-tooltip_left-start:before,.evo-tooltip_left:before,.evo-tooltip_left-end:before{border-width:8px 0 8px 8px;border-color:transparent transparent transparent var(--evo-tooltip-background-color);right:-8px}.evo-tooltip_left-start:before{top:var(--evo-tooltip-vertical-position-arrow)}.evo-tooltip_left:before{top:50%;transform:translateY(-50%)}.evo-tooltip_left-end:before{bottom:var(--evo-tooltip-vertical-position-arrow)}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i2.AsyncPipe }, animations: [EVO_TOOLTIP_FADEIN_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EvoTooltipComponent, decorators: [{
|
|
90
|
+
type: Component,
|
|
91
|
+
args: [{
|
|
92
|
+
selector: 'evo-tooltip',
|
|
93
|
+
templateUrl: './evo-tooltip.component.html',
|
|
94
|
+
styleUrls: ['./evo-tooltip.component.scss'],
|
|
95
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
96
|
+
animations: [EVO_TOOLTIP_FADEIN_ANIMATION],
|
|
97
|
+
}]
|
|
98
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.EvoTooltipService }, { type: i0.Renderer2 }]; }, propDecorators: { fadeIn: [{
|
|
99
|
+
type: HostBinding,
|
|
100
|
+
args: ['@fadeIn']
|
|
101
|
+
}] } });
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLXRvb2x0aXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLXRvb2x0aXAvZXZvLXRvb2x0aXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLXRvb2x0aXAvZXZvLXRvb2x0aXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBRVQsV0FBVyxHQUtkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEYsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFHdEYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7Ozs7QUFTNUYsTUFBTSxPQUFPLG1CQUFtQjtJQVk1QixZQUNxQixVQUFzQixFQUN0QixjQUFpQyxFQUNqQyxRQUFtQjtRQUZuQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBZC9CLGNB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QWEsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFbkUsdUdBQXVHO1FBQ3ZHLHVCQUF1QjtZQUNuQix1QkFBdUIsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQ2hHLHFCQUFxQixHQUFHLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7UUFFaEgsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUM1QixDQUFDLCtCQUErQixDQUFDLHVCQUF1QixDQUFDLEVBQUUsR0FBRyxxQkFBcUIsSUFBSTtZQUN2RixDQUFDLCtCQUErQixDQUFDLHlCQUF5QixDQUFDLEVBQUUsR0FBRyx1QkFBdUIsSUFBSTtTQUM5RixDQUFDLENBQUM7SUFDUCxDQUFDOztpSEEvRlEsbUJBQW1CO3FHQUFuQixtQkFBbUIsdUdDNUJoQywyb0JBZ0JBLGt1RkRVZ0IsQ0FBQyw0QkFBNEIsQ0FBQzs0RkFFakMsbUJBQW1CO2tCQVAvQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxhQUFhO29CQUN2QixXQUFXLEVBQUUsOEJBQThCO29CQUMzQyxTQUFTLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztvQkFDM0MsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxDQUFDLDRCQUE0QixDQUFDO2lCQUM3Qzt5SkFRMkIsTUFBTTtzQkFBN0IsV0FBVzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgT2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCBwYWlyd2lzZSwgc3RhcnRXaXRoLCB0YWtlVW50aWwsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFVk9fVE9PTFRJUF9GQURFSU5fQU5JTUFUSU9OfSBmcm9tICcuL2NvbnN0YW50cy9ldm8tdG9vbHRpcC1mYWRlaW4uYW5pbWF0aW9uJztcbmltcG9ydCB7RXZvVG9vbHRpcFNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvZXZvLXRvb2x0aXAuc2VydmljZSc7XG5pbXBvcnQge0V2b1Rvb2x0aXBTdHlsZXN9IGZyb20gJy4vaW50ZXJmYWNlcy9ldm8tdG9vbHRpcC1zdHlsZXMnO1xuaW1wb3J0IHtFdm9Ub29sdGlwUG9zaXRpb259IGZyb20gJy4vZW51bXMvZXZvLXRvb2x0aXAtcG9zaXRpb24nO1xuaW1wb3J0IHtFVk9fVE9PTFRJUF9BUlJPV19TSVpFfSBmcm9tICcuL2NvbnN0YW50cy9ldm8tdG9vbHRpcC1hcnJvdy1zaXplJztcbmltcG9ydCB7RVZPX1RPT0xUSVBfUkFESVVTfSBmcm9tICcuL2NvbnN0YW50cy9ldm8tdG9vbHRpcC1yYWRpdXMnO1xuaW1wb3J0IHtFdm9Ub29sdGlwVmFyaWFibGVBcnJvd1Bvc2l0aW9ufSBmcm9tICcuL2VudW1zL2V2by10b29sdGlwLXZhcmlhYmxlLWFycm93LXBvc2l0aW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldm8tdG9vbHRpcCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V2by10b29sdGlwLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ldm8tdG9vbHRpcC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGFuaW1hdGlvbnM6IFtFVk9fVE9PTFRJUF9GQURFSU5fQU5JTUFUSU9OXSxcbn0pXG5leHBvcnQgY2xhc3MgRXZvVG9vbHRpcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICByZWFkb25seSBwb3NpdGlvbiQ6IE9ic2VydmFibGU8RXZvVG9vbHRpcFBvc2l0aW9uPiA9IHRoaXMudG9vbHRpcFNlcnZpY2UucG9zaXRpb24kO1xuICAgIHJlYWRvbmx5IHN0cmluZ0NvbnRlbnQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnRvb2x0aXBTZXJ2aWNlLnN0cmluZ0NvbnRlbnQkO1xuICAgIHJlYWRvbmx5IHRlbXBsYXRlQ29udGVudCQ6IE9ic2VydmFibGU8VGVtcGxhdGVSZWY8dW5rbm93bj4+ID0gdGhpcy50b29sdGlwU2VydmljZS50ZW1wbGF0ZUNvbnRlbnQkO1xuICAgIHJlYWRvbmx5IHZpc2libGVBcnJvdyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnRvb2x0aXBTZXJ2aWNlLnZpc2libGVBcnJvdyQ7XG4gICAgcmVhZG9ubHkgc3R5bGVzJDogT2JzZXJ2YWJsZTxFdm9Ub29sdGlwU3R5bGVzPiA9IEVNUFRZO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdAZmFkZUluJykgZmFkZUluID0gdHJ1ZTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Bvc2l0aW9uQXJyb3dTdHlsZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFdm9Ub29sdGlwU3R5bGVzPihudWxsKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRvb2x0aXBTZXJ2aWNlOiBFdm9Ub29sdGlwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICkge1xuICAgICAgICB0aGlzLnN0eWxlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnRvb2x0aXBTZXJ2aWNlLnN0eWxlcyQsIHRoaXMuX3Bvc2l0aW9uQXJyb3dTdHlsZXMkXSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW3N0eWxlMSwgc3R5bGUyXSkgPT4gKHsuLi5zdHlsZTEsIC4uLnN0eWxlMn0pKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5wb3NpdGlvbiQsIHRoaXMudG9vbHRpcFNlcnZpY2UucGFyZW50UmVmJCwgdGhpcy52aXNpYmxlQXJyb3ckXSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoW19wb3NpdGlvbiwgX3BhcmVudFJlZiwgdmlzaWJsZUFycm93XSkgPT4gdmlzaWJsZUFycm93KSxcbiAgICAgICAgICAgICAgICAvLyDQktGL0YfQuNGB0LvQtdC90LjQtSDRgdGC0YDQtdC70LrQuCDQvdGD0LbQvdC+INGC0L7Qu9GM0LrQviDQtNC70Y8g0YPQs9C70L7QstGL0YUg0L/QvtC30LjRhtC40LlcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKFtwb3NpdGlvbl0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFdm9Ub29sdGlwUG9zaXRpb24uVE9QOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFdm9Ub29sdGlwUG9zaXRpb24uUklHSFQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEV2b1Rvb2x0aXBQb3NpdGlvbi5CT1RUT006XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEV2b1Rvb2x0aXBQb3NpdGlvbi5MRUZUOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAoKFtfLCBwYXJlbnRSZWZdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXJyb3dQb3NpdGlvbihwYXJlbnRSZWYpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLnRvb2x0aXBDbGFzc2VzJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKFtdKSxcbiAgICAgICAgICAgICAgICBwYWlyd2lzZSgpLFxuICAgICAgICAgICAgICAgIHRhcCgoW2EsIGJdOiBbc3RyaW5nW10sIHN0cmluZ1tdXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoYSB8fCBbXSkuZm9yRWFjaCgob2xkQ2xhc3MpID0+IHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIG9sZENsYXNzKSk7XG4gICAgICAgICAgICAgICAgICAgIChiIHx8IFtdKS5mb3JFYWNoKChuZXdDbGFzcykgPT4gdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgbmV3Q2xhc3MpKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZhZGVJbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRBcnJvd1Bvc2l0aW9uKHBhcmVudFJlZjogRWxlbWVudFJlZik6IHZvaWQge1xuICAgICAgICAvLyDQlNC70Y8g0YLQvtCz0L4g0YfRgtC+0LHRiyDRgdGC0YDQtdC70LrQsCDRgtGP0L3Rg9C70LDRgdGMINC6INGG0LXQvdGC0YDRgyDRgNC+0LTQuNGC0LXQu9GPIC0g0LHQtdGA0LXQvCDRgdC10YDQtdC00LjQvdGDXG4gICAgICAgIGNvbnN0IHdpZHRoUGFyZW50ID0gcGFyZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLyAyO1xuICAgICAgICBjb25zdCBoZWlnaHRQYXJlbnQgPSBwYXJlbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBpc1BhcmVudExvbmdlciA9IHdpZHRoUGFyZW50ID49IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBpc1BhcmVudEhpZ2hlciA9IGhlaWdodFBhcmVudCA+PSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIC8vINCV0YHQu9C4INGB0LXRgNC10LTQuNC90LAg0YDQvtC00LjRgtC10LvRjyDQvtC60LDQt9GL0LLQsNC10YLRgdGPINC80LXQvdGM0YjQtSDRgtGD0LvRgtC40L/QsCAtINCx0LXRgNC10Lwg0YHQtdGA0LXQtNC40L3RgyDRgNC+0LTQuNGC0LXQu9GPINC40L3QsNGH0LUg0YDQsNC30LzQtdGAINGC0YPQu9GC0LjQv9CwXG4gICAgICAgIC8vINCt0YLQviDQv9GA0L7QstC10YDQutCwINC90LAg0LzQsNC60YHQuNC80LDQu9GM0L3QvtC1INGB0LzQtdGJ0LXQvdC40LUsINGB0LzQtdGJ0LXQvdC40LUg0YHRgtGA0LXQu9C60Lgg0L3QtSDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LHQvtC70YzRiNC1INGA0LDQt9C80LXRgNCwINGC0YPQu9GC0LjQv9CwXG4gICAgICAgIGNvbnN0IHdpZHRoID0gaXNQYXJlbnRMb25nZXIgPyB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA6IHdpZHRoUGFyZW50O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBpc1BhcmVudEhpZ2hlciA/IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA6IGhlaWdodFBhcmVudDtcblxuICAgICAgICBjb25zdCBwb3NpdGlvbkFycm93ID0gKHNpemU6IG51bWJlciwgaXNQYXJlbnRCaWdnZXI6IGJvb2xlYW4pOiBudW1iZXIgPT5cbiAgICAgICAgICAgIC8vINCV0YHQu9C4INGB0LXRgNC10LTQuNC90LAg0YDQvtC00LjRgtC10LvRjyDQsdC+0LvRjNGI0LUg0YLRg9C70YLQuNC/0LBcbiAgICAgICAgICAgIC8vINCi0L4g0LHQtdGA0LXQvCDRgNCw0LfQvNC10YAg0YLRg9C70YLQuNC/0LAg0Lgg0L7RgtC90LjQvNCw0LXQvCDRgNCw0LfQvNC10YAg0YHRgtGA0LXQu9C60Lgg0Lgg0YDQsNC00LjRg9GB0LBcbiAgICAgICAgICAgIC8vINCY0L3QsNGH0LUg0LHQtdGA0LXQvCDRgdC10YDQtdC00LjQvdGDINGA0L7QtNC40YLQtdC70Y8g0Lgg0L7RgtC90LjQvNCw0LXQvCDQv9C+0LvQvtCy0LjQvdGDINGB0YLRgNC10LvQutC4XG4gICAgICAgICAgICAvLyDQrdGC0L4g0YPRgdC70L7QstC40LUg0L3Rg9C20L3QviDRh9GC0L7QsdGLINGB0YLRgNC10LvQutCwINC90LUg0YHQvNC10YnQsNC70LDRgdGMXG4gICAgICAgICAgICBpc1BhcmVudEJpZ2dlciA/IHNpemUgLSBFVk9fVE9PTFRJUF9BUlJPV19TSVpFIC0gRVZPX1RPT0xUSVBfUkFESVVTIDogc2l6ZSAtIEVWT19UT09MVElQX0FSUk9XX1NJWkUgLyAyO1xuICAgICAgICBsZXQgdmVydGljYWxQb3NpdGlvbkFycm93ID0gcG9zaXRpb25BcnJvdyhoZWlnaHQsIGlzUGFyZW50SGlnaGVyKTtcbiAgICAgICAgbGV0IGhvcml6b250YWxQb3NpdGlvbkFycm93ID0gcG9zaXRpb25BcnJvdyh3aWR0aCwgaXNQYXJlbnRMb25nZXIpO1xuXG4gICAgICAgIC8vINCf0YDQvtCy0LXRgNC60LAg0L3QsCDQvNC40L3QuNC80LDQu9GM0L3QvtC1INGB0LzQtdGJ0LXQvdC40LUsINGB0LzQtdGJ0LXQvdC40LUg0YHRgtGA0LXQu9C60Lgg0L3QtSDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LzQtdC90YzRiNC1INGA0LDQt9C80LXRgNCwINGA0LDQtNC40YPRgdCwINGC0YPQu9GC0LjQv9CwIDhweFxuICAgICAgICBob3Jpem9udGFsUG9zaXRpb25BcnJvdyA9XG4gICAgICAgICAgICBob3Jpem9udGFsUG9zaXRpb25BcnJvdyA+IEVWT19UT09MVElQX1JBRElVUyA/IGhvcml6b250YWxQb3NpdGlvbkFycm93IDogRVZPX1RPT0xUSVBfUkFESVVTO1xuICAgICAgICB2ZXJ0aWNhbFBvc2l0aW9uQXJyb3cgPSB2ZXJ0aWNhbFBvc2l0aW9uQXJyb3cgPiBFVk9fVE9PTFRJUF9SQURJVVMgPyB2ZXJ0aWNhbFBvc2l0aW9uQXJyb3cgOiBFVk9fVE9PTFRJUF9SQURJVVM7XG5cbiAgICAgICAgdGhpcy5fcG9zaXRpb25BcnJvd1N0eWxlcyQubmV4dCh7XG4gICAgICAgICAgICBbRXZvVG9vbHRpcFZhcmlhYmxlQXJyb3dQb3NpdGlvbi5WRVJUSUNBTF9QT1NJVElPTl9BUlJPV106IGAke3ZlcnRpY2FsUG9zaXRpb25BcnJvd31weGAsXG4gICAgICAgICAgICBbRXZvVG9vbHRpcFZhcmlhYmxlQXJyb3dQb3NpdGlvbi5IT1JJWk9OVEFMX1BPU0lUSU9OX0FSUk9XXTogYCR7aG9yaXpvbnRhbFBvc2l0aW9uQXJyb3d9cHhgLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJ7cG9zaXRpb246IHBvc2l0aW9uJCB8IGFzeW5jLCBzdHlsZXM6IHN0eWxlcyQgfCBhc3luYywgdmlzaWJsZUFycm93OiB2aXNpYmxlQXJyb3ckIHwgYXN5bmN9IGFzIGFzeW5jRGF0YVwiXG4+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImV2by10b29sdGlwXCJcbiAgICAgICAgW2NsYXNzXT1cIidldm8tdG9vbHRpcF8nICsgYXN5bmNEYXRhLnBvc2l0aW9uXCJcbiAgICAgICAgW2NsYXNzLmV2by10b29sdGlwX25vdC1hcnJvd109XCIhYXN5bmNEYXRhLnZpc2libGVBcnJvd1wiXG4gICAgICAgIFtzdHlsZV09XCJhc3luY0RhdGEuc3R5bGVzXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHJpbmdDb250ZW50JCB8IGFzeW5jIGFzIGNvbnRlbnQ7IGVsc2UgdGVtcGxhdGVSZWZcIj57eyBjb250ZW50IH19PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVJlZj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGVtcGxhdGVDb250ZW50JCB8IGFzeW5jIGFzIGNvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { EvoTooltipComponent } from './evo-tooltip.component';
|
|
4
|
+
import { EvoTooltipDirective } from './directives/evo-tooltip.directive';
|
|
5
|
+
import { OverlayModule } from '@angular/cdk/overlay';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class EvoTooltipModule {
|
|
8
|
+
}
|
|
9
|
+
EvoTooltipModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EvoTooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
10
|
+
EvoTooltipModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EvoTooltipModule, declarations: [EvoTooltipComponent, EvoTooltipDirective], imports: [OverlayModule, CommonModule], exports: [EvoTooltipDirective] });
|
|
11
|
+
EvoTooltipModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EvoTooltipModule, imports: [[OverlayModule, CommonModule]] });
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EvoTooltipModule, decorators: [{
|
|
13
|
+
type: NgModule,
|
|
14
|
+
args: [{
|
|
15
|
+
imports: [OverlayModule, CommonModule],
|
|
16
|
+
declarations: [EvoTooltipComponent, EvoTooltipDirective],
|
|
17
|
+
exports: [EvoTooltipDirective],
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLXRvb2x0aXAubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLXRvb2x0aXAvZXZvLXRvb2x0aXAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7QUFPbkQsTUFBTSxPQUFPLGdCQUFnQjs7OEdBQWhCLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLGlCQUhWLG1CQUFtQixFQUFFLG1CQUFtQixhQUQ3QyxhQUFhLEVBQUUsWUFBWSxhQUUzQixtQkFBbUI7K0dBRXBCLGdCQUFnQixZQUpoQixDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUM7NEZBSTdCLGdCQUFnQjtrQkFMNUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDO29CQUN0QyxZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQztvQkFDeEQsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7RXZvVG9vbHRpcENvbXBvbmVudH0gZnJvbSAnLi9ldm8tdG9vbHRpcC5jb21wb25lbnQnO1xuaW1wb3J0IHtFdm9Ub29sdGlwRGlyZWN0aXZlfSBmcm9tICcuL2RpcmVjdGl2ZXMvZXZvLXRvb2x0aXAuZGlyZWN0aXZlJztcbmltcG9ydCB7T3ZlcmxheU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtPdmVybGF5TW9kdWxlLCBDb21tb25Nb2R1bGVdLFxuICAgIGRlY2xhcmF0aW9uczogW0V2b1Rvb2x0aXBDb21wb25lbnQsIEV2b1Rvb2x0aXBEaXJlY3RpdmVdLFxuICAgIGV4cG9ydHM6IFtFdm9Ub29sdGlwRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgRXZvVG9vbHRpcE1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './public-api';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldm8tdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9ldm8tdG9vbHRpcC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLXRvb2x0aXAtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLXRvb2x0aXAvaW50ZXJmYWNlcy9ldm8tdG9vbHRpcC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRXZvVG9vbHRpcENvbmZpZyB7XG4gICAgLy8gVGhlIGRlZmF1bHQgZGVsYXkgaW4gbXMgYmVmb3JlIGhpZGluZyB0aGUgdG9vbHRpcFxuICAgIGhpZGVEZWxheT86IG51bWJlcjtcbiAgICBzaG93RGVsYXk/OiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLXRvb2x0aXAtc3R5bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLXRvb2x0aXAvaW50ZXJmYWNlcy9ldm8tdG9vbHRpcC1zdHlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZvVG9vbHRpcFZhcmlhYmxlQXJyb3dQb3NpdGlvbn0gZnJvbSAnLi4vZW51bXMvZXZvLXRvb2x0aXAtdmFyaWFibGUtYXJyb3ctcG9zaXRpb24nO1xuXG5leHBvcnQgdHlwZSBFdm9Ub29sdGlwU3R5bGVzID0ge1xuICAgIFtrZXkgaW4gRXZvVG9vbHRpcFZhcmlhYmxlQXJyb3dQb3NpdGlvbl06IHN0cmluZztcbn07XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './evo-tooltip.module';
|
|
2
|
+
export * from './directives/evo-tooltip.directive';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V2by11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2V2by10b29sdGlwL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG9DQUFvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ldm8tdG9vbHRpcC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2V2by10b29sdGlwLmRpcmVjdGl2ZSc7XG4iXX0=
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { Injectable, TemplateRef } from '@angular/core';
|
|
2
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
3
|
+
import { BehaviorSubject, EMPTY, fromEvent, merge, Subject } from 'rxjs';
|
|
4
|
+
import { catchError, debounceTime, filter, first, map } from 'rxjs/operators';
|
|
5
|
+
import { EVO_TOOLTIP_CONFIG } from '../constants/evo-tooltip-config';
|
|
6
|
+
import { EvoTooltipComponent } from '../evo-tooltip.component';
|
|
7
|
+
import { EvoTooltipPosition } from '../enums/evo-tooltip-position';
|
|
8
|
+
import { EVO_CONNECTED_POSITION } from '../constants/evo-tooltip-connected-position';
|
|
9
|
+
import { EVO_PRIORITY_POSITIONS_ORDER } from '../constants/evo-tooltip-priority-positions-order';
|
|
10
|
+
import { EVO_DEFAULT_POSITIONS_ORDER } from '../constants/evo-tooltip-default-positions-order';
|
|
11
|
+
import { EVO_TOOLTIP_ARROW_SIZE } from '../constants/evo-tooltip-arrow-size';
|
|
12
|
+
import { EVO_TOOLTIP_RADIUS } from '../constants/evo-tooltip-radius';
|
|
13
|
+
import { EVO_TOOLTIP_OFFSET } from '../constants/evo-tooltip-offset';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
16
|
+
export class EvoTooltipService {
|
|
17
|
+
constructor(overlay, overlayPositionBuilder, injector) {
|
|
18
|
+
this.overlay = overlay;
|
|
19
|
+
this.overlayPositionBuilder = overlayPositionBuilder;
|
|
20
|
+
this.injector = injector;
|
|
21
|
+
this.stringContent$ = EMPTY;
|
|
22
|
+
this.templateContent$ = EMPTY;
|
|
23
|
+
this.position$ = EMPTY;
|
|
24
|
+
this.parentRef$ = EMPTY;
|
|
25
|
+
this.tooltipClasses$ = EMPTY;
|
|
26
|
+
this.styles$ = EMPTY;
|
|
27
|
+
this.visibleArrow$ = EMPTY;
|
|
28
|
+
this.isOpen$ = EMPTY;
|
|
29
|
+
this._stringContent$ = new BehaviorSubject(null);
|
|
30
|
+
this._templateContent$ = new BehaviorSubject(null);
|
|
31
|
+
this._position$ = new BehaviorSubject(EvoTooltipPosition.BOTTOM);
|
|
32
|
+
this._parentRef$ = new BehaviorSubject(null);
|
|
33
|
+
this._tooltipClasses$ = new BehaviorSubject([]);
|
|
34
|
+
this._config$ = new BehaviorSubject(EVO_TOOLTIP_CONFIG);
|
|
35
|
+
this._styles$ = new BehaviorSubject(null);
|
|
36
|
+
this._visibleArrow$ = new BehaviorSubject(true);
|
|
37
|
+
this._isOpen$ = new Subject();
|
|
38
|
+
this.stringContent$ = this._stringContent$.asObservable();
|
|
39
|
+
this.templateContent$ = this._templateContent$.asObservable();
|
|
40
|
+
this.position$ = this._position$.asObservable();
|
|
41
|
+
this.parentRef$ = this._parentRef$.asObservable();
|
|
42
|
+
this.tooltipClasses$ = this._tooltipClasses$.asObservable();
|
|
43
|
+
this.styles$ = this._styles$.asObservable();
|
|
44
|
+
this.visibleArrow$ = this._visibleArrow$.asObservable();
|
|
45
|
+
this.isOpen$ = this._isOpen$.asObservable();
|
|
46
|
+
}
|
|
47
|
+
showTooltip(parentRef, content, position, config, targetElement) {
|
|
48
|
+
this._parentRef$.next(parentRef);
|
|
49
|
+
this.targetElement = targetElement !== null && targetElement !== void 0 ? targetElement : null;
|
|
50
|
+
this.setContent(content);
|
|
51
|
+
this._position$.next(position);
|
|
52
|
+
this._config$.next(config);
|
|
53
|
+
this.createOverlay(parentRef, position);
|
|
54
|
+
this.createPortal();
|
|
55
|
+
this._isOpen$.next(this.overlayRef.hasAttached());
|
|
56
|
+
this.initSubscriptions();
|
|
57
|
+
}
|
|
58
|
+
hideTooltip() {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
if (this.tooltipComponentRef) {
|
|
61
|
+
this.tooltipComponentRef.destroy();
|
|
62
|
+
this.tooltipComponentRef = null;
|
|
63
|
+
}
|
|
64
|
+
(_a = this.overlayRef) === null || _a === void 0 ? void 0 : _a.detach();
|
|
65
|
+
this._isOpen$.next(!!((_b = this.overlayRef) === null || _b === void 0 ? void 0 : _b.hasAttached()));
|
|
66
|
+
}
|
|
67
|
+
setArrowVisibility(hasArrow) {
|
|
68
|
+
this._visibleArrow$.next(hasArrow);
|
|
69
|
+
}
|
|
70
|
+
setTooltipStyles(tooltipStyles) {
|
|
71
|
+
this._styles$.next(tooltipStyles);
|
|
72
|
+
}
|
|
73
|
+
setTooltipClass(tooltipClassOrClasses) {
|
|
74
|
+
this._tooltipClasses$.next(!tooltipClassOrClasses
|
|
75
|
+
? []
|
|
76
|
+
: Array.isArray(tooltipClassOrClasses)
|
|
77
|
+
? tooltipClassOrClasses
|
|
78
|
+
: [tooltipClassOrClasses]);
|
|
79
|
+
}
|
|
80
|
+
get hasAttached() {
|
|
81
|
+
var _a, _b;
|
|
82
|
+
return (_b = (_a = this.overlayRef) === null || _a === void 0 ? void 0 : _a.hasAttached()) !== null && _b !== void 0 ? _b : false;
|
|
83
|
+
}
|
|
84
|
+
get config() {
|
|
85
|
+
return this._config$.value;
|
|
86
|
+
}
|
|
87
|
+
get parentRef() {
|
|
88
|
+
return this._parentRef$.value;
|
|
89
|
+
}
|
|
90
|
+
setContent(content) {
|
|
91
|
+
if (typeof content === 'string') {
|
|
92
|
+
this._stringContent$.next(content);
|
|
93
|
+
}
|
|
94
|
+
else if (content instanceof TemplateRef) {
|
|
95
|
+
this._templateContent$.next(content);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
createOverlay(elementRef, position) {
|
|
99
|
+
this.positionStrategy = this.overlayPositionBuilder
|
|
100
|
+
.flexibleConnectedTo(elementRef)
|
|
101
|
+
.withPositions(this.getPositions(position));
|
|
102
|
+
const scrollStrategy = this.overlay.scrollStrategies.reposition();
|
|
103
|
+
this.overlayRef = this.overlay.create({ positionStrategy: this.positionStrategy, scrollStrategy });
|
|
104
|
+
}
|
|
105
|
+
createPortal() {
|
|
106
|
+
const tooltipPortal = new ComponentPortal(EvoTooltipComponent, null, this.injector);
|
|
107
|
+
this.tooltipComponentRef = this.overlayRef.attach(tooltipPortal);
|
|
108
|
+
}
|
|
109
|
+
initSubscriptions() {
|
|
110
|
+
var _a, _b, _c;
|
|
111
|
+
const parentElement = this.targetElement ? this.targetElement : (_a = this.parentRef) === null || _a === void 0 ? void 0 : _a.nativeElement;
|
|
112
|
+
const overlayElement = this.overlayRef.overlayElement;
|
|
113
|
+
const mouseLeaveParentElement$ = fromEvent(parentElement, 'mouseleave').pipe(map(() => overlayElement));
|
|
114
|
+
const mouseLeaveOverlayElement$ = fromEvent(overlayElement, 'mouseleave').pipe(map(() => parentElement));
|
|
115
|
+
merge(mouseLeaveParentElement$, mouseLeaveOverlayElement$)
|
|
116
|
+
.pipe(filter((element) => !element.matches(':hover')), debounceTime((_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.hideDelay) !== null && _c !== void 0 ? _c : EVO_TOOLTIP_CONFIG.hideDelay), filter(() => !parentElement.matches(':hover') && !overlayElement.matches(':hover')), first(), catchError(() => {
|
|
117
|
+
this.hideTooltip();
|
|
118
|
+
return EMPTY;
|
|
119
|
+
}))
|
|
120
|
+
.subscribe(() => {
|
|
121
|
+
this.hideTooltip();
|
|
122
|
+
});
|
|
123
|
+
this.positionStrategy.positionChanges.subscribe((value) => {
|
|
124
|
+
this._position$.next(value.connectionPair.panelClass);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
getPositions(position) {
|
|
128
|
+
return this.getPositionsOrder(position).map((key) => {
|
|
129
|
+
const offset = EVO_TOOLTIP_OFFSET(this._visibleArrow$.value);
|
|
130
|
+
const position = Object.assign({}, EVO_CONNECTED_POSITION(offset)[key]);
|
|
131
|
+
const width = this.parentRef.nativeElement.offsetWidth;
|
|
132
|
+
const height = this.parentRef.nativeElement.offsetHeight;
|
|
133
|
+
const maxSize = EVO_TOOLTIP_ARROW_SIZE + EVO_TOOLTIP_RADIUS * 2;
|
|
134
|
+
// Добавляем смещение тултипа для мелких обьектов
|
|
135
|
+
if (width <= maxSize) {
|
|
136
|
+
switch (key) {
|
|
137
|
+
case EvoTooltipPosition.BOTTOM_START:
|
|
138
|
+
case EvoTooltipPosition.TOP_START:
|
|
139
|
+
position.offsetX = -(maxSize - width) / 2;
|
|
140
|
+
break;
|
|
141
|
+
case EvoTooltipPosition.BOTTOM_END:
|
|
142
|
+
case EvoTooltipPosition.TOP_END:
|
|
143
|
+
position.offsetX = (maxSize - width) / 2;
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Добавляем смещение тултипа для мелких обьектов
|
|
148
|
+
if (height <= maxSize) {
|
|
149
|
+
switch (key) {
|
|
150
|
+
case EvoTooltipPosition.LEFT_START:
|
|
151
|
+
case EvoTooltipPosition.RIGHT_START:
|
|
152
|
+
position.offsetY = -(maxSize - height) / 2;
|
|
153
|
+
break;
|
|
154
|
+
case EvoTooltipPosition.LEFT_END:
|
|
155
|
+
case EvoTooltipPosition.RIGHT_END:
|
|
156
|
+
position.offsetY = (maxSize - height) / 2;
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return position;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
getPositionsOrder(position) {
|
|
164
|
+
const priorityPositions = EVO_PRIORITY_POSITIONS_ORDER[position];
|
|
165
|
+
if (priorityPositions) {
|
|
166
|
+
return [
|
|
167
|
+
...priorityPositions,
|
|
168
|
+
...EVO_DEFAULT_POSITIONS_ORDER.filter((defaultPosition) => !priorityPositions.includes(defaultPosition)),
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
const indexPositionKey = EVO_DEFAULT_POSITIONS_ORDER.indexOf(position);
|
|
172
|
+
return EVO_DEFAULT_POSITIONS_ORDER.slice(indexPositionKey).concat(EVO_DEFAULT_POSITIONS_ORDER.slice(0, indexPositionKey));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
EvoTooltipService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EvoTooltipService, deps: [{ token: i1.Overlay }, { token: i1.OverlayPositionBuilder }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
176
|
+
EvoTooltipService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EvoTooltipService });
|
|
177
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: EvoTooltipService, decorators: [{
|
|
178
|
+
type: Injectable
|
|
179
|
+
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i1.OverlayPositionBuilder }, { type: i0.Injector }]; } });
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLXRvb2x0aXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V2by11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2V2by10b29sdGlwL3NlcnZpY2VzL2V2by10b29sdGlwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEyQixVQUFVLEVBQVksV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQVFwRCxPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNuRixPQUFPLEVBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQy9GLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRW5FLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDOzs7QUFHbkUsTUFBTSxPQUFPLGlCQUFpQjtJQXlCMUIsWUFDcUIsT0FBZ0IsRUFDaEIsc0JBQThDLEVBQzlDLFFBQWtCO1FBRmxCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBM0I5QixtQkFBYyxHQUE4QixLQUFLLENBQUM7UUFDbEQscUJBQWdCLEdBQWdELEtBQUssQ0FBQztRQUN0RSxjQUFTLEdBQW1DLEtBQUssQ0FBQztRQUNsRCxlQUFVLEdBQTJCLEtBQUssQ0FBQztRQUMzQyxvQkFBZSxHQUF5QixLQUFLLENBQUM7UUFDOUMsWUFBTyxHQUFpQyxLQUFLLENBQUM7UUFDOUMsa0JBQWEsR0FBd0IsS0FBSyxDQUFDO1FBQzNDLFlBQU8sR0FBd0IsS0FBSyxDQUFDO1FBRTdCLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBQzNELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFrQyxJQUFJLENBQUMsQ0FBQztRQUMvRSxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQXFCLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hGLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWEsSUFBSSxDQUFDLENBQUM7UUFDcEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDckQsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFtQixrQkFBa0IsQ0FBQyxDQUFDO1FBQ3JFLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBbUIsSUFBSSxDQUFDLENBQUM7UUFDdkQsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNwRCxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQVkvQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxXQUFXLENBQ1AsU0FBcUIsRUFDckIsT0FBMEMsRUFDMUMsUUFBNEIsRUFDNUIsTUFBd0IsRUFDeEIsYUFBa0M7UUFFbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLGFBQWIsYUFBYSxjQUFiLGFBQWEsR0FBSSxJQUFJLENBQUM7UUFFM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXOztRQUNQLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1NBQ25DO1FBRUQsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxNQUFNLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLFdBQVcsRUFBRSxDQUFBLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsUUFBaUI7UUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLGFBQStCO1FBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxlQUFlLENBQUMscUJBQXdDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3RCLENBQUMscUJBQXFCO1lBQ2xCLENBQUMsQ0FBQyxFQUFFO1lBQ0osQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUM7Z0JBQ3RDLENBQUMsQ0FBQyxxQkFBcUI7Z0JBQ3ZCLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQ2hDLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBSSxXQUFXOztRQUNYLE9BQU8sTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLFdBQVcsRUFBRSxtQ0FBSSxLQUFLLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVksU0FBUztRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBc0Q7UUFDckUsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEM7YUFBTSxJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4QztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsVUFBc0IsRUFBRSxRQUE0QjtRQUN0RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQjthQUM5QyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7YUFDL0IsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUVoRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRU8sWUFBWTtRQUNoQixNQUFNLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU8saUJBQWlCOztRQUNyQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxTQUFTLDBDQUFFLGFBQWEsQ0FBQztRQUM5RixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztRQUV0RCxNQUFNLHdCQUF3QixHQUFHLFNBQVMsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ3hHLE1BQU0seUJBQXlCLEdBQUcsU0FBUyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFFekcsS0FBSyxDQUFDLHdCQUF3QixFQUFFLHlCQUF5QixDQUFDO2FBQ3JELElBQUksQ0FDRCxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUMvQyxZQUFZLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLFNBQVMsbUNBQUksa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQ3BFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ25GLEtBQUssRUFBRSxFQUNQLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQWdDLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxZQUFZLENBQUMsUUFBNEI7UUFDN0MsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDaEQsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3RCxNQUFNLFFBQVEscUJBQU8sc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFDdkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1lBQ3pELE1BQU0sT0FBTyxHQUFHLHNCQUFzQixHQUFHLGtCQUFrQixHQUFHLENBQUMsQ0FBQztZQUVoRSxpREFBaUQ7WUFDakQsSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFO2dCQUNsQixRQUFRLEdBQUcsRUFBRTtvQkFDVCxLQUFLLGtCQUFrQixDQUFDLFlBQVksQ0FBQztvQkFDckMsS0FBSyxrQkFBa0IsQ0FBQyxTQUFTO3dCQUM3QixRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUMxQyxNQUFNO29CQUNWLEtBQUssa0JBQWtCLENBQUMsVUFBVSxDQUFDO29CQUNuQyxLQUFLLGtCQUFrQixDQUFDLE9BQU87d0JBQzNCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN6QyxNQUFNO2lCQUNiO2FBQ0o7WUFFRCxpREFBaUQ7WUFDakQsSUFBSSxNQUFNLElBQUksT0FBTyxFQUFFO2dCQUNuQixRQUFRLEdBQUcsRUFBRTtvQkFDVCxLQUFLLGtCQUFrQixDQUFDLFVBQVUsQ0FBQztvQkFDbkMsS0FBSyxrQkFBa0IsQ0FBQyxXQUFXO3dCQUMvQixRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUMzQyxNQUFNO29CQUNWLEtBQUssa0JBQWtCLENBQUMsUUFBUSxDQUFDO29CQUNqQyxLQUFLLGtCQUFrQixDQUFDLFNBQVM7d0JBQzdCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUMxQyxNQUFNO2lCQUNiO2FBQ0o7WUFFRCxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUE0QjtRQUNsRCxNQUFNLGlCQUFpQixHQUFHLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWpFLElBQUksaUJBQWlCLEVBQUU7WUFDbkIsT0FBTztnQkFDSCxHQUFHLGlCQUFpQjtnQkFDcEIsR0FBRywyQkFBMkIsQ0FBQyxNQUFNLENBQ2pDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FDcEU7YUFDSixDQUFDO1NBQ0w7UUFFRCxNQUFNLGdCQUFnQixHQUFXLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRSxPQUFPLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FDN0QsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUN6RCxDQUFDO0lBQ04sQ0FBQzs7K0dBN01RLGlCQUFpQjttSEFBakIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudFJlZiwgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFRlbXBsYXRlUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tcG9uZW50UG9ydGFsfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gICAgQ29ubmVjdGVkUG9zaXRpb24sXG4gICAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICAgIE92ZXJsYXksXG4gICAgT3ZlcmxheVBvc2l0aW9uQnVpbGRlcixcbiAgICBPdmVybGF5UmVmLFxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgRU1QVFksIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmlyc3QsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFdm9Ub29sdGlwQ29uZmlnfSBmcm9tICcuLi9pbnRlcmZhY2VzL2V2by10b29sdGlwLWNvbmZpZyc7XG5pbXBvcnQge0VWT19UT09MVElQX0NPTkZJR30gZnJvbSAnLi4vY29uc3RhbnRzL2V2by10b29sdGlwLWNvbmZpZyc7XG5pbXBvcnQge0V2b1Rvb2x0aXBDb21wb25lbnR9IGZyb20gJy4uL2V2by10b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQge0V2b1Rvb2x0aXBQb3NpdGlvbn0gZnJvbSAnLi4vZW51bXMvZXZvLXRvb2x0aXAtcG9zaXRpb24nO1xuaW1wb3J0IHtFVk9fQ09OTkVDVEVEX1BPU0lUSU9OfSBmcm9tICcuLi9jb25zdGFudHMvZXZvLXRvb2x0aXAtY29ubmVjdGVkLXBvc2l0aW9uJztcbmltcG9ydCB7RVZPX1BSSU9SSVRZX1BPU0lUSU9OU19PUkRFUn0gZnJvbSAnLi4vY29uc3RhbnRzL2V2by10b29sdGlwLXByaW9yaXR5LXBvc2l0aW9ucy1vcmRlcic7XG5pbXBvcnQge0VWT19ERUZBVUxUX1BPU0lUSU9OU19PUkRFUn0gZnJvbSAnLi4vY29uc3RhbnRzL2V2by10b29sdGlwLWRlZmF1bHQtcG9zaXRpb25zLW9yZGVyJztcbmltcG9ydCB7RVZPX1RPT0xUSVBfQVJST1dfU0laRX0gZnJvbSAnLi4vY29uc3RhbnRzL2V2by10b29sdGlwLWFycm93LXNpemUnO1xuaW1wb3J0IHtFVk9fVE9PTFRJUF9SQURJVVN9IGZyb20gJy4uL2NvbnN0YW50cy9ldm8tdG9vbHRpcC1yYWRpdXMnO1xuaW1wb3J0IHtFdm9Ub29sdGlwU3R5bGVzfSBmcm9tICcuLi9pbnRlcmZhY2VzL2V2by10b29sdGlwLXN0eWxlcyc7XG5pbXBvcnQge0VWT19UT09MVElQX09GRlNFVH0gZnJvbSAnLi4vY29uc3RhbnRzL2V2by10b29sdGlwLW9mZnNldCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFdm9Ub29sdGlwU2VydmljZSB7XG4gICAgcmVhZG9ubHkgc3RyaW5nQ29udGVudCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4gPSBFTVBUWTtcbiAgICByZWFkb25seSB0ZW1wbGF0ZUNvbnRlbnQkOiBPYnNlcnZhYmxlPFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PiB8IG51bGw+ID0gRU1QVFk7XG4gICAgcmVhZG9ubHkgcG9zaXRpb24kOiBPYnNlcnZhYmxlPEV2b1Rvb2x0aXBQb3NpdGlvbj4gPSBFTVBUWTtcbiAgICByZWFkb25seSBwYXJlbnRSZWYkOiBPYnNlcnZhYmxlPEVsZW1lbnRSZWY+ID0gRU1QVFk7XG4gICAgcmVhZG9ubHkgdG9vbHRpcENsYXNzZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiA9IEVNUFRZO1xuICAgIHJlYWRvbmx5IHN0eWxlcyQ6IE9ic2VydmFibGU8RXZvVG9vbHRpcFN0eWxlcz4gPSBFTVBUWTtcbiAgICByZWFkb25seSB2aXNpYmxlQXJyb3ckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gRU1QVFk7XG4gICAgcmVhZG9ubHkgaXNPcGVuJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IEVNUFRZO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3RyaW5nQ29udGVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RlbXBsYXRlQ29udGVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PiB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Bvc2l0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RXZvVG9vbHRpcFBvc2l0aW9uPihFdm9Ub29sdGlwUG9zaXRpb24uQk9UVE9NKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnRSZWYkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFbGVtZW50UmVmPihudWxsKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90b29sdGlwQ2xhc3NlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RXZvVG9vbHRpcENvbmZpZz4oRVZPX1RPT0xUSVBfQ09ORklHKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdHlsZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFdm9Ub29sdGlwU3R5bGVzPihudWxsKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF92aXNpYmxlQXJyb3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc09wZW4kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcbiAgICBwcml2YXRlIHBvc2l0aW9uU3RyYXRlZ3k6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcbiAgICBwcml2YXRlIHRvb2x0aXBDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxFdm9Ub29sdGlwQ29tcG9uZW50PiB8IG51bGw7XG4gICAgcHJpdmF0ZSB0YXJnZXRFbGVtZW50OiBFdmVudFRhcmdldCB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXlQb3NpdGlvbkJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICkge1xuICAgICAgICB0aGlzLnN0cmluZ0NvbnRlbnQkID0gdGhpcy5fc3RyaW5nQ29udGVudCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMudGVtcGxhdGVDb250ZW50JCA9IHRoaXMuX3RlbXBsYXRlQ29udGVudCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMucG9zaXRpb24kID0gdGhpcy5fcG9zaXRpb24kLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLnBhcmVudFJlZiQgPSB0aGlzLl9wYXJlbnRSZWYkLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLnRvb2x0aXBDbGFzc2VzJCA9IHRoaXMuX3Rvb2x0aXBDbGFzc2VzJC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5zdHlsZXMkID0gdGhpcy5fc3R5bGVzJC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy52aXNpYmxlQXJyb3ckID0gdGhpcy5fdmlzaWJsZUFycm93JC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5pc09wZW4kID0gdGhpcy5faXNPcGVuJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBzaG93VG9vbHRpcChcbiAgICAgICAgcGFyZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBjb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHBvc2l0aW9uOiBFdm9Ub29sdGlwUG9zaXRpb24sXG4gICAgICAgIGNvbmZpZzogRXZvVG9vbHRpcENvbmZpZyxcbiAgICAgICAgdGFyZ2V0RWxlbWVudD86IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcGFyZW50UmVmJC5uZXh0KHBhcmVudFJlZik7XG4gICAgICAgIHRoaXMudGFyZ2V0RWxlbWVudCA9IHRhcmdldEVsZW1lbnQgPz8gbnVsbDtcblxuICAgICAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCk7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uJC5uZXh0KHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5fY29uZmlnJC5uZXh0KGNvbmZpZyk7XG4gICAgICAgIHRoaXMuY3JlYXRlT3ZlcmxheShwYXJlbnRSZWYsIHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5jcmVhdGVQb3J0YWwoKTtcblxuICAgICAgICB0aGlzLl9pc09wZW4kLm5leHQodGhpcy5vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpO1xuICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgaGlkZVRvb2x0aXAoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdmVybGF5UmVmPy5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5faXNPcGVuJC5uZXh0KCEhdGhpcy5vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpKTtcbiAgICB9XG5cbiAgICBzZXRBcnJvd1Zpc2liaWxpdHkoaGFzQXJyb3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZUFycm93JC5uZXh0KGhhc0Fycm93KTtcbiAgICB9XG5cbiAgICBzZXRUb29sdGlwU3R5bGVzKHRvb2x0aXBTdHlsZXM6IEV2b1Rvb2x0aXBTdHlsZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3R5bGVzJC5uZXh0KHRvb2x0aXBTdHlsZXMpO1xuICAgIH1cblxuICAgIHNldFRvb2x0aXBDbGFzcyh0b29sdGlwQ2xhc3NPckNsYXNzZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Rvb2x0aXBDbGFzc2VzJC5uZXh0KFxuICAgICAgICAgICAgIXRvb2x0aXBDbGFzc09yQ2xhc3Nlc1xuICAgICAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkodG9vbHRpcENsYXNzT3JDbGFzc2VzKVxuICAgICAgICAgICAgICAgID8gdG9vbHRpcENsYXNzT3JDbGFzc2VzXG4gICAgICAgICAgICAgICAgOiBbdG9vbHRpcENsYXNzT3JDbGFzc2VzXSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzQXR0YWNoZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCkgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGNvbmZpZygpOiBFdm9Ub29sdGlwQ29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZyQudmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcGFyZW50UmVmKCk6IEVsZW1lbnRSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50UmVmJC52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENvbnRlbnQoY29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0cmluZ0NvbnRlbnQkLm5leHQoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZUNvbnRlbnQkLm5leHQoY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU92ZXJsYXkoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcG9zaXRpb246IEV2b1Rvb2x0aXBQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLnBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlQb3NpdGlvbkJ1aWxkZXJcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKGVsZW1lbnRSZWYpXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9ucyh0aGlzLmdldFBvc2l0aW9ucyhwb3NpdGlvbikpO1xuXG4gICAgICAgIGNvbnN0IHNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLnBvc2l0aW9uU3RyYXRlZ3ksIHNjcm9sbFN0cmF0ZWd5fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQb3J0YWwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvb2x0aXBQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKEV2b1Rvb2x0aXBDb21wb25lbnQsIG51bGwsIHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYgPSB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHRvb2x0aXBQb3J0YWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0aGlzLnRhcmdldEVsZW1lbnQgPyB0aGlzLnRhcmdldEVsZW1lbnQgOiB0aGlzLnBhcmVudFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3Qgb3ZlcmxheUVsZW1lbnQgPSB0aGlzLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgbW91c2VMZWF2ZVBhcmVudEVsZW1lbnQkID0gZnJvbUV2ZW50KHBhcmVudEVsZW1lbnQsICdtb3VzZWxlYXZlJykucGlwZShtYXAoKCkgPT4gb3ZlcmxheUVsZW1lbnQpKTtcbiAgICAgICAgY29uc3QgbW91c2VMZWF2ZU92ZXJsYXlFbGVtZW50JCA9IGZyb21FdmVudChvdmVybGF5RWxlbWVudCwgJ21vdXNlbGVhdmUnKS5waXBlKG1hcCgoKSA9PiBwYXJlbnRFbGVtZW50KSk7XG5cbiAgICAgICAgbWVyZ2UobW91c2VMZWF2ZVBhcmVudEVsZW1lbnQkLCBtb3VzZUxlYXZlT3ZlcmxheUVsZW1lbnQkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChlbGVtZW50KSA9PiAhZWxlbWVudC5tYXRjaGVzKCc6aG92ZXInKSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuY29uZmlnPy5oaWRlRGVsYXkgPz8gRVZPX1RPT0xUSVBfQ09ORklHLmhpZGVEZWxheSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICFwYXJlbnRFbGVtZW50Lm1hdGNoZXMoJzpob3ZlcicpICYmICFvdmVybGF5RWxlbWVudC5tYXRjaGVzKCc6aG92ZXInKSksXG4gICAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVUb29sdGlwKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnBvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uJC5uZXh0KHZhbHVlLmNvbm5lY3Rpb25QYWlyLnBhbmVsQ2xhc3MgYXMgRXZvVG9vbHRpcFBvc2l0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQb3NpdGlvbnMocG9zaXRpb246IEV2b1Rvb2x0aXBQb3NpdGlvbik6IENvbm5lY3RlZFBvc2l0aW9uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQb3NpdGlvbnNPcmRlcihwb3NpdGlvbikubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IEVWT19UT09MVElQX09GRlNFVCh0aGlzLl92aXNpYmxlQXJyb3ckLnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gey4uLkVWT19DT05ORUNURURfUE9TSVRJT04ob2Zmc2V0KVtrZXldfTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5wYXJlbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMucGFyZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgbWF4U2l6ZSA9IEVWT19UT09MVElQX0FSUk9XX1NJWkUgKyBFVk9fVE9PTFRJUF9SQURJVVMgKiAyO1xuXG4gICAgICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0YHQvNC10YnQtdC90LjQtSDRgtGD0LvRgtC40L/QsCDQtNC70Y8g0LzQtdC70LrQuNGFINC+0LHRjNC10LrRgtC+0LJcbiAgICAgICAgICAgIGlmICh3aWR0aCA8PSBtYXhTaXplKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFdm9Ub29sdGlwUG9zaXRpb24uQk9UVE9NX1NUQVJUOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIEV2b1Rvb2x0aXBQb3NpdGlvbi5UT1BfU1RBUlQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi5vZmZzZXRYID0gLShtYXhTaXplIC0gd2lkdGgpIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEV2b1Rvb2x0aXBQb3NpdGlvbi5CT1RUT01fRU5EOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIEV2b1Rvb2x0aXBQb3NpdGlvbi5UT1BfRU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ub2Zmc2V0WCA9IChtYXhTaXplIC0gd2lkdGgpIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INGB0LzQtdGJ0LXQvdC40LUg0YLRg9C70YLQuNC/0LAg0LTQu9GPINC80LXQu9C60LjRhSDQvtCx0YzQtdC60YLQvtCyXG4gICAgICAgICAgICBpZiAoaGVpZ2h0IDw9IG1heFNpemUpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEV2b1Rvb2x0aXBQb3NpdGlvbi5MRUZUX1NUQVJUOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIEV2b1Rvb2x0aXBQb3NpdGlvbi5SSUdIVF9TVEFSVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLm9mZnNldFkgPSAtKG1heFNpemUgLSBoZWlnaHQpIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEV2b1Rvb2x0aXBQb3NpdGlvbi5MRUZUX0VORDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFdm9Ub29sdGlwUG9zaXRpb24uUklHSFRfRU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ub2Zmc2V0WSA9IChtYXhTaXplIC0gaGVpZ2h0KSAvIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQb3NpdGlvbnNPcmRlcihwb3NpdGlvbjogRXZvVG9vbHRpcFBvc2l0aW9uKTogRXZvVG9vbHRpcFBvc2l0aW9uW10ge1xuICAgICAgICBjb25zdCBwcmlvcml0eVBvc2l0aW9ucyA9IEVWT19QUklPUklUWV9QT1NJVElPTlNfT1JERVJbcG9zaXRpb25dO1xuXG4gICAgICAgIGlmIChwcmlvcml0eVBvc2l0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAuLi5wcmlvcml0eVBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi5FVk9fREVGQVVMVF9QT1NJVElPTlNfT1JERVIuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdFBvc2l0aW9uKSA9PiAhcHJpb3JpdHlQb3NpdGlvbnMuaW5jbHVkZXMoZGVmYXVsdFBvc2l0aW9uKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4UG9zaXRpb25LZXk6IG51bWJlciA9IEVWT19ERUZBVUxUX1BPU0lUSU9OU19PUkRFUi5pbmRleE9mKHBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIEVWT19ERUZBVUxUX1BPU0lUSU9OU19PUkRFUi5zbGljZShpbmRleFBvc2l0aW9uS2V5KS5jb25jYXQoXG4gICAgICAgICAgICBFVk9fREVGQVVMVF9QT1NJVElPTlNfT1JERVIuc2xpY2UoMCwgaW5kZXhQb3NpdGlvbktleSksXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLXRvb2x0aXAtcG9zaXRpb24tdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V2by11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2V2by10b29sdGlwL3R5cGVzL2V2by10b29sdGlwLXBvc2l0aW9uLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZvVG9vbHRpcFBvc2l0aW9ufSBmcm9tICcuLi9lbnVtcy9ldm8tdG9vbHRpcC1wb3NpdGlvbic7XG5cbmV4cG9ydCB0eXBlIEV2b1Rvb2x0aXBQb3NpdGlvblR5cGUgPSB0eXBlb2YgRXZvVG9vbHRpcFBvc2l0aW9uW2tleW9mIHR5cGVvZiBFdm9Ub29sdGlwUG9zaXRpb25dO1xuIl19
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ElementRef, inject, Injectable } from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Безопасная обёртка над `MutationObserver`, которая гарантирует,
|
|
6
|
+
* что код не упадёт в средах, где `MutationObserver` недоступен
|
|
7
|
+
* (например, серверный рендеринг или тесты без DOM).
|
|
8
|
+
*
|
|
9
|
+
* Если `MutationObserver` существует — используется он.
|
|
10
|
+
* Если нет — используется заглушка с пустыми методами.
|
|
11
|
+
*/
|
|
12
|
+
export const SafeObserver = typeof MutationObserver !== 'undefined'
|
|
13
|
+
? MutationObserver
|
|
14
|
+
: class {
|
|
15
|
+
observe() { }
|
|
16
|
+
disconnect() { }
|
|
17
|
+
takeRecords() {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Сервис `MutationObserverService` предоставляет поток `Observable<MutationRecord[]>`,
|
|
23
|
+
* который эмитит записи изменений DOM для текущего элемента (`ElementRef`).
|
|
24
|
+
*
|
|
25
|
+
* Наблюдает за изменениями потомков, текстового содержимого и вложенных структур (`subtree: true`).
|
|
26
|
+
*
|
|
27
|
+
* Используется `SafeObserver`, чтобы гарантировать совместимость с SSR и тестовой средой.
|
|
28
|
+
*
|
|
29
|
+
* ⚠️ Важно: требует, чтобы `ElementRef` был доступен через DI-контекст (т.е. работает в компонентах/директивах).
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* this.mutationObserverService.subscribe(records => {
|
|
33
|
+
* console.log('Mutation detected!', records);
|
|
34
|
+
* });
|
|
35
|
+
*/
|
|
36
|
+
export class MutationObserverService extends Observable {
|
|
37
|
+
constructor() {
|
|
38
|
+
const nativeElement = inject(ElementRef).nativeElement;
|
|
39
|
+
super((subscriber) => {
|
|
40
|
+
const observer = new SafeObserver((records) => {
|
|
41
|
+
subscriber.next(records);
|
|
42
|
+
});
|
|
43
|
+
observer.observe(nativeElement, {
|
|
44
|
+
childList: true,
|
|
45
|
+
characterData: true,
|
|
46
|
+
subtree: true,
|
|
47
|
+
});
|
|
48
|
+
return () => {
|
|
49
|
+
observer.disconnect();
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
MutationObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MutationObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
55
|
+
MutationObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MutationObserverService });
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MutationObserverService, decorators: [{
|
|
57
|
+
type: Injectable
|
|
58
|
+
}], ctorParameters: function () { return []; } });
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRpb24tb2JzZXJ2ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V2by11aS1raXQvc3JjL2xpYi9zZXJ2aWNlcy9tdXRhdGlvbi1vYnNlcnZlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUVoQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUNyQixPQUFPLGdCQUFnQixLQUFLLFdBQVc7SUFDbkMsQ0FBQyxDQUFDLGdCQUFnQjtJQUNsQixDQUFDLENBQUM7UUFDSSxPQUFPLEtBQVUsQ0FBQztRQUNsQixVQUFVLEtBQVUsQ0FBQztRQUNyQixXQUFXO1lBQ1AsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO0tBQ0osQ0FBQztBQUVaOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFVBQXFDO0lBQzlFO1FBQ0ksTUFBTSxhQUFhLEdBQVMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUU3RCxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNqQixNQUFNLFFBQVEsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMxQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBRUgsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7Z0JBQzVCLFNBQVMsRUFBRSxJQUFJO2dCQUNmLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixPQUFPLEVBQUUsSUFBSTthQUNoQixDQUFDLENBQUM7WUFFSCxPQUFPLEdBQUcsRUFBRTtnQkFDUixRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztxSEFuQlEsdUJBQXVCO3lIQUF2Qix1QkFBdUI7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RWxlbWVudFJlZiwgaW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICog0JHQtdC30L7Qv9Cw0YHQvdCw0Y8g0L7QsdGR0YDRgtC60LAg0L3QsNC0IGBNdXRhdGlvbk9ic2VydmVyYCwg0LrQvtGC0L7RgNCw0Y8g0LPQsNGA0LDQvdGC0LjRgNGD0LXRgixcbiAqINGH0YLQviDQutC+0LQg0L3QtSDRg9C/0LDQtNGR0YIg0LIg0YHRgNC10LTQsNGFLCDQs9C00LUgYE11dGF0aW9uT2JzZXJ2ZXJgINC90LXQtNC+0YHRgtGD0L/QtdC9XG4gKiAo0L3QsNC/0YDQuNC80LXRgCwg0YHQtdGA0LLQtdGA0L3Ri9C5INGA0LXQvdC00LXRgNC40L3QsyDQuNC70Lgg0YLQtdGB0YLRiyDQsdC10LcgRE9NKS5cbiAqXG4gKiDQldGB0LvQuCBgTXV0YXRpb25PYnNlcnZlcmAg0YHRg9GJ0LXRgdGC0LLRg9C10YIg4oCUINC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQvtC9LlxuICog0JXRgdC70Lgg0L3QtdGCIOKAlCDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LfQsNCz0LvRg9GI0LrQsCDRgSDQv9GD0YHRgtGL0LzQuCDQvNC10YLQvtC00LDQvNC4LlxuICovXG5leHBvcnQgY29uc3QgU2FmZU9ic2VydmVyID1cbiAgICB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBNdXRhdGlvbk9ic2VydmVyXG4gICAgICAgIDogY2xhc3MgaW1wbGVtZW50cyBNdXRhdGlvbk9ic2VydmVyIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZSgpOiB2b2lkIHt9XG4gICAgICAgICAgICAgIGRpc2Nvbm5lY3QoKTogdm9pZCB7fVxuICAgICAgICAgICAgICB0YWtlUmVjb3JkcygpOiBNdXRhdGlvblJlY29yZFtdIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbi8qKlxuICog0KHQtdGA0LLQuNGBIGBNdXRhdGlvbk9ic2VydmVyU2VydmljZWAg0L/RgNC10LTQvtGB0YLQsNCy0LvRj9C10YIg0L/QvtGC0L7QuiBgT2JzZXJ2YWJsZTxNdXRhdGlvblJlY29yZFtdPmAsXG4gKiDQutC+0YLQvtGA0YvQuSDRjdC80LjRgtC40YIg0LfQsNC/0LjRgdC4INC40LfQvNC10L3QtdC90LjQuSBET00g0LTQu9GPINGC0LXQutGD0YnQtdCz0L4g0Y3Qu9C10LzQtdC90YLQsCAoYEVsZW1lbnRSZWZgKS5cbiAqXG4gKiDQndCw0LHQu9GO0LTQsNC10YIg0LfQsCDQuNC30LzQtdC90LXQvdC40Y/QvNC4INC/0L7RgtC+0LzQutC+0LIsINGC0LXQutGB0YLQvtCy0L7Qs9C+INGB0L7QtNC10YDQttC40LzQvtCz0L4g0Lgg0LLQu9C+0LbQtdC90L3Ri9GFINGB0YLRgNGD0LrRgtGD0YAgKGBzdWJ0cmVlOiB0cnVlYCkuXG4gKlxuICog0JjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPIGBTYWZlT2JzZXJ2ZXJgLCDRh9GC0L7QsdGLINCz0LDRgNCw0L3RgtC40YDQvtCy0LDRgtGMINGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtGMINGBIFNTUiDQuCDRgtC10YHRgtC+0LLQvtC5INGB0YDQtdC00L7QuS5cbiAqXG4gKiDimqDvuI8g0JLQsNC20L3Qvjog0YLRgNC10LHRg9C10YIsINGH0YLQvtCx0YsgYEVsZW1lbnRSZWZgINCx0YvQuyDQtNC+0YHRgtGD0L/QtdC9INGH0LXRgNC10LcgREkt0LrQvtC90YLQtdC60YHRgiAo0YIu0LUuINGA0LDQsdC+0YLQsNC10YIg0LIg0LrQvtC80L/QvtC90LXQvdGC0LDRhS/QtNC40YDQtdC60YLQuNCy0LDRhSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIHRoaXMubXV0YXRpb25PYnNlcnZlclNlcnZpY2Uuc3Vic2NyaWJlKHJlY29yZHMgPT4ge1xuICogICBjb25zb2xlLmxvZygnTXV0YXRpb24gZGV0ZWN0ZWQhJywgcmVjb3Jkcyk7XG4gKiB9KTtcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlIGV4dGVuZHMgT2JzZXJ2YWJsZTxyZWFkb25seSBNdXRhdGlvblJlY29yZFtdPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQ6IE5vZGUgPSBpbmplY3QoRWxlbWVudFJlZikubmF0aXZlRWxlbWVudDtcblxuICAgICAgICBzdXBlcigoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgU2FmZU9ic2VydmVyKChyZWNvcmRzKSA9PiB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlY29yZHMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUobmF0aXZlRWxlbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgICAgICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Inject, Injectable, NgZone, Optional } from '@angular/core';
|
|
2
|
+
import { RouterLinkActive } from '@angular/router';
|
|
3
|
+
import { EMPTY, merge, Observable, timer } from 'rxjs';
|
|
4
|
+
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
5
|
+
import { ANIMATION_FRAME } from '../utils/tokens/animation-frame';
|
|
6
|
+
import { evoZoneOptimized } from '../utils/observables/zone-free';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/router";
|
|
9
|
+
import * as i2 from "rxjs";
|
|
10
|
+
/**
|
|
11
|
+
* Сервис создает поток, отслеживающий состояние активности
|
|
12
|
+
* `RouterLinkActive` в реальном времени с использованием `requestAnimationFrame`.
|
|
13
|
+
*
|
|
14
|
+
* Наследуется от `Observable<boolean>` и эмитит `true` или `false`, когда состояние `isActive`
|
|
15
|
+
* меняется. Если `RouterLinkActive` не передан — поток будет пустым (`EMPTY`).
|
|
16
|
+
*/
|
|
17
|
+
export class RouterLinkActiveService extends Observable {
|
|
18
|
+
constructor(routerLinkActive, ngZone, animationFrame$) {
|
|
19
|
+
const stream$ = routerLinkActive
|
|
20
|
+
? merge(timer(0), animationFrame$).pipe(map(() => routerLinkActive.isActive), distinctUntilChanged(), evoZoneOptimized(ngZone))
|
|
21
|
+
: EMPTY;
|
|
22
|
+
super((subscriber) => stream$.subscribe(subscriber));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
RouterLinkActiveService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RouterLinkActiveService, deps: [{ token: RouterLinkActive, optional: true }, { token: NgZone }, { token: ANIMATION_FRAME }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
26
|
+
RouterLinkActiveService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RouterLinkActiveService });
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RouterLinkActiveService, decorators: [{
|
|
28
|
+
type: Injectable
|
|
29
|
+
}], ctorParameters: function () { return [{ type: i1.RouterLinkActive, decorators: [{
|
|
30
|
+
type: Optional
|
|
31
|
+
}, {
|
|
32
|
+
type: Inject,
|
|
33
|
+
args: [RouterLinkActive]
|
|
34
|
+
}] }, { type: i0.NgZone, decorators: [{
|
|
35
|
+
type: Inject,
|
|
36
|
+
args: [NgZone]
|
|
37
|
+
}] }, { type: i2.Observable, decorators: [{
|
|
38
|
+
type: Inject,
|
|
39
|
+
args: [ANIMATION_FRAME]
|
|
40
|
+
}] }]; } });
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLWxpbmstYWN0aXZlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldm8tdWkta2l0L3NyYy9saWIvc2VydmljZXMvcm91dGVyLWxpbmstYWN0aXZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7Ozs7QUFFaEU7Ozs7OztHQU1HO0FBRUgsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFVBQW1CO0lBQzVELFlBR0ksZ0JBQXlDLEVBQ3pCLE1BQWMsRUFDTCxlQUFtQztRQUU1RCxNQUFNLE9BQU8sR0FBRyxnQkFBZ0I7WUFDNUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQ3BDLG9CQUFvQixFQUFFLEVBQ3RCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUMzQjtZQUNILENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFWixLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDOztxSEFqQlEsdUJBQXVCLGtCQUdwQixnQkFBZ0IsNkJBRWhCLE1BQU0sYUFDTixlQUFlO3lIQU5sQix1QkFBdUI7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVTs7MEJBR0YsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUV2QixNQUFNOzJCQUFDLE1BQU07OzBCQUNiLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyTGlua0FjdGl2ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RU1QVFksIG1lcmdlLCBPYnNlcnZhYmxlLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QU5JTUFUSU9OX0ZSQU1FfSBmcm9tICcuLi91dGlscy90b2tlbnMvYW5pbWF0aW9uLWZyYW1lJztcbmltcG9ydCB7ZXZvWm9uZU9wdGltaXplZH0gZnJvbSAnLi4vdXRpbHMvb2JzZXJ2YWJsZXMvem9uZS1mcmVlJztcblxuLyoqXG4gKiDQodC10YDQstC40YEg0YHQvtC30LTQsNC10YIg0L/QvtGC0L7Quiwg0L7RgtGB0LvQtdC20LjQstCw0Y7RidC40Lkg0YHQvtGB0YLQvtGP0L3QuNC1INCw0LrRgtC40LLQvdC+0YHRgtC4XG4gKiBgUm91dGVyTGlua0FjdGl2ZWAg0LIg0YDQtdCw0LvRjNC90L7QvCDQstGA0LXQvNC10L3QuCDRgSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC8IGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLlxuICpcbiAqINCd0LDRgdC70LXQtNGD0LXRgtGB0Y8g0L7RgiBgT2JzZXJ2YWJsZTxib29sZWFuPmAg0Lgg0Y3QvNC40YLQuNGCIGB0cnVlYCDQuNC70LggYGZhbHNlYCwg0LrQvtCz0LTQsCDRgdC+0YHRgtC+0Y/QvdC40LUgYGlzQWN0aXZlYFxuICog0LzQtdC90Y/QtdGC0YHRjy4g0JXRgdC70LggYFJvdXRlckxpbmtBY3RpdmVgINC90LUg0L/QtdGA0LXQtNCw0L0g4oCUINC/0L7RgtC+0Log0LHRg9C00LXRgiDQv9GD0YHRgtGL0LwgKGBFTVBUWWApLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUm91dGVyTGlua0FjdGl2ZVNlcnZpY2UgZXh0ZW5kcyBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChSb3V0ZXJMaW5rQWN0aXZlKVxuICAgICAgICByb3V0ZXJMaW5rQWN0aXZlOiBSb3V0ZXJMaW5rQWN0aXZlIHwgbnVsbCxcbiAgICAgICAgQEluamVjdChOZ1pvbmUpIG5nWm9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KEFOSU1BVElPTl9GUkFNRSkgYW5pbWF0aW9uRnJhbWUkOiBPYnNlcnZhYmxlPG51bWJlcj4sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHN0cmVhbSQgPSByb3V0ZXJMaW5rQWN0aXZlXG4gICAgICAgICAgICA/IG1lcmdlKHRpbWVyKDApLCBhbmltYXRpb25GcmFtZSQpLnBpcGUoXG4gICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gcm91dGVyTGlua0FjdGl2ZS5pc0FjdGl2ZSksXG4gICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgICAgZXZvWm9uZU9wdGltaXplZChuZ1pvbmUpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IEVNUFRZO1xuXG4gICAgICAgIHN1cGVyKChzdWJzY3JpYmVyKSA9PiBzdHJlYW0kLnN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Observable, pipe } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* Кратко:
|
|
4
|
+
* 🔥 evoZonefull — тащит всё в Angular-зону.
|
|
5
|
+
* 🧊 evoZonefree — игнорирует Angular-зону, экономит CD.
|
|
6
|
+
* ⚖️ evoZoneOptimized — как утро с кофе: просыпаешься вовремя и не дергаешь лишний раз change detection.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Оператор `evoZonefull` обеспечивает полное выполнение потока внутри зоны Angular.
|
|
10
|
+
*
|
|
11
|
+
* Все `next`, `error` и `complete` вызовы оборачиваются в `NgZone.run`, чтобы гарантировать
|
|
12
|
+
* корректный запуск change detection.
|
|
13
|
+
*
|
|
14
|
+
* Используй, если поток формируется вне зоны или ты не уверен, что Angular узнает об изменениях.
|
|
15
|
+
*
|
|
16
|
+
* @param zone Сервис `NgZone` из Angular DI.
|
|
17
|
+
* @returns Оператор, оборачивающий поток в `NgZone.run()`.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* source$.pipe(evoZonefull(this.ngZone)).subscribe(...);
|
|
21
|
+
*/
|
|
22
|
+
export function evoZonefull(zone) {
|
|
23
|
+
return (source) => new Observable((subscriber) => source.subscribe({
|
|
24
|
+
next: (value) => zone.run(() => subscriber.next(value)),
|
|
25
|
+
error: (error) => zone.run(() => subscriber.error(error)),
|
|
26
|
+
complete: () => zone.run(() => subscriber.complete()),
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Оператор `evoZonefree` исполняет весь поток вне зоны Angular.
|
|
31
|
+
*
|
|
32
|
+
* Это помогает избежать лишних срабатываний change detection и повысить производительность,
|
|
33
|
+
* особенно для часто испускаемых потоков (например, `scroll`, `animationFrame`, таймеры).
|
|
34
|
+
*
|
|
35
|
+
* Используй, если тебе не нужно обновлять Angular view внутри этого потока.
|
|
36
|
+
*
|
|
37
|
+
* @param zone Сервис `NgZone` из Angular DI.
|
|
38
|
+
* @returns Оператор, исполняющий подписку вне Angular-зоны.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* source$.pipe(evoZonefree(this.ngZone)).subscribe(...);
|
|
42
|
+
*/
|
|
43
|
+
export function evoZonefree(zone) {
|
|
44
|
+
return (source) => new Observable((subscriber) => zone.runOutsideAngular(() => source.subscribe(subscriber)));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Оператор `evoZoneOptimized` — комбо из `evoZonefree` и `evoZonefull`.
|
|
48
|
+
*
|
|
49
|
+
* Сначала поток исполняется вне Angular-зоны (`runOutsideAngular`), чтобы избежать лишнего
|
|
50
|
+
* change detection. Но события `next`, `error` и `complete` всё равно возвращаются в Angular-зону.
|
|
51
|
+
*
|
|
52
|
+
* Это идеальный баланс, если тебе нужен быстрый поток без лишнего CD, но ты всё равно хочешь,
|
|
53
|
+
* чтобы Angular знал о результатах.
|
|
54
|
+
*
|
|
55
|
+
* @param zone Сервис `NgZone` из Angular DI.
|
|
56
|
+
* @returns Оператор, оптимизированный по производительности.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* source$.pipe(evoZoneOptimized(this.ngZone)).subscribe(...);
|
|
60
|
+
*/
|
|
61
|
+
export function evoZoneOptimized(zone) {
|
|
62
|
+
return pipe(evoZonefree(zone), evoZonefull(zone));
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS1mcmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL3V0aWxzL29ic2VydmFibGVzL3pvbmUtZnJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQTJCLFVBQVUsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEU7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBSSxJQUFZO0lBQ3ZDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNkLElBQUksVUFBVSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNiLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELEtBQUssRUFBRSxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUN4RCxDQUFDLENBQ0wsQ0FBQztBQUNWLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBSSxJQUFZO0lBQ3ZDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEgsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFJLElBQVk7SUFDNUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nWm9uZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZSwgcGlwZX0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICog0JrRgNCw0YLQutC+OlxuICog8J+UpSBldm9ab25lZnVsbCDigJQg0YLQsNGJ0LjRgiDQstGB0ZEg0LIgQW5ndWxhci3Qt9C+0L3Rgy5cbiAqIPCfp4ogZXZvWm9uZWZyZWUg4oCUINC40LPQvdC+0YDQuNGA0YPQtdGCIEFuZ3VsYXIt0LfQvtC90YMsINGN0LrQvtC90L7QvNC40YIgQ0QuXG4gKiDimpbvuI8gZXZvWm9uZU9wdGltaXplZCDigJQg0LrQsNC6INGD0YLRgNC+INGBINC60L7RhNC1OiDQv9GA0L7RgdGL0L/QsNC10YjRjNGB0Y8g0LLQvtCy0YDQtdC80Y8g0Lgg0L3QtSDQtNC10YDQs9Cw0LXRiNGMINC70LjRiNC90LjQuSDRgNCw0LcgY2hhbmdlIGRldGVjdGlvbi5cbiAqL1xuXG4vKipcbiAqINCe0L/QtdGA0LDRgtC+0YAgYGV2b1pvbmVmdWxsYCDQvtCx0LXRgdC/0LXRh9C40LLQsNC10YIg0L/QvtC70L3QvtC1INCy0YvQv9C+0LvQvdC10L3QuNC1INC/0L7RgtC+0LrQsCDQstC90YPRgtGA0Lgg0LfQvtC90YsgQW5ndWxhci5cbiAqXG4gKiDQktGB0LUgYG5leHRgLCBgZXJyb3JgINC4IGBjb21wbGV0ZWAg0LLRi9C30L7QstGLINC+0LHQvtGA0LDRh9C40LLQsNGO0YLRgdGPINCyIGBOZ1pvbmUucnVuYCwg0YfRgtC+0LHRiyDQs9Cw0YDQsNC90YLQuNGA0L7QstCw0YLRjFxuICog0LrQvtGA0YDQtdC60YLQvdGL0Lkg0LfQsNC/0YPRgdC6IGNoYW5nZSBkZXRlY3Rpb24uXG4gKlxuICog0JjRgdC/0L7Qu9GM0LfRg9C5LCDQtdGB0LvQuCDQv9C+0YLQvtC6INGE0L7RgNC80LjRgNGD0LXRgtGB0Y8g0LLQvdC1INC30L7QvdGLINC40LvQuCDRgtGLINC90LUg0YPQstC10YDQtdC9LCDRh9GC0L4gQW5ndWxhciDRg9C30L3QsNC10YIg0L7QsSDQuNC30LzQtdC90LXQvdC40Y/RhS5cbiAqXG4gKiBAcGFyYW0gem9uZSDQodC10YDQstC40YEgYE5nWm9uZWAg0LjQtyBBbmd1bGFyIERJLlxuICogQHJldHVybnMg0J7Qv9C10YDQsNGC0L7RgCwg0L7QsdC+0YDQsNGH0LjQstCw0Y7RidC40Lkg0L/QvtGC0L7QuiDQsiBgTmdab25lLnJ1bigpYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogc291cmNlJC5waXBlKGV2b1pvbmVmdWxsKHRoaXMubmdab25lKSkuc3Vic2NyaWJlKC4uLik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldm9ab25lZnVsbDxUPih6b25lOiBOZ1pvbmUpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICAgIHJldHVybiAoc291cmNlKSA9PlxuICAgICAgICBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT5cbiAgICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4gem9uZS5ydW4oKCkgPT4gc3Vic2NyaWJlci5uZXh0KHZhbHVlKSksXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogdW5rbm93bikgPT4gem9uZS5ydW4oKCkgPT4gc3Vic2NyaWJlci5lcnJvcihlcnJvcikpLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB6b25lLnJ1bigoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG59XG5cbi8qKlxuICog0J7Qv9C10YDQsNGC0L7RgCBgZXZvWm9uZWZyZWVgINC40YHQv9C+0LvQvdGP0LXRgiDQstC10YHRjCDQv9C+0YLQvtC6INCy0L3QtSDQt9C+0L3RiyBBbmd1bGFyLlxuICpcbiAqINCt0YLQviDQv9C+0LzQvtCz0LDQtdGCINC40LfQsdC10LbQsNGC0Ywg0LvQuNGI0L3QuNGFINGB0YDQsNCx0LDRgtGL0LLQsNC90LjQuSBjaGFuZ2UgZGV0ZWN0aW9uINC4INC/0L7QstGL0YHQuNGC0Ywg0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70YzQvdC+0YHRgtGMLFxuICog0L7RgdC+0LHQtdC90L3QviDQtNC70Y8g0YfQsNGB0YLQviDQuNGB0L/Rg9GB0LrQsNC10LzRi9GFINC/0L7RgtC+0LrQvtCyICjQvdCw0L/RgNC40LzQtdGALCBgc2Nyb2xsYCwgYGFuaW1hdGlvbkZyYW1lYCwg0YLQsNC50LzQtdGA0YspLlxuICpcbiAqINCY0YHQv9C+0LvRjNC30YPQuSwg0LXRgdC70Lgg0YLQtdCx0LUg0L3QtSDQvdGD0LbQvdC+INC+0LHQvdC+0LLQu9GP0YLRjCBBbmd1bGFyIHZpZXcg0LLQvdGD0YLRgNC4INGN0YLQvtCz0L4g0L/QvtGC0L7QutCwLlxuICpcbiAqIEBwYXJhbSB6b25lINCh0LXRgNCy0LjRgSBgTmdab25lYCDQuNC3IEFuZ3VsYXIgREkuXG4gKiBAcmV0dXJucyDQntC/0LXRgNCw0YLQvtGALCDQuNGB0L/QvtC70L3Rj9GO0YnQuNC5INC/0L7QtNC/0LjRgdC60YMg0LLQvdC1IEFuZ3VsYXIt0LfQvtC90YsuXG4gKlxuICogQGV4YW1wbGVcbiAqIHNvdXJjZSQucGlwZShldm9ab25lZnJlZSh0aGlzLm5nWm9uZSkpLnN1YnNjcmliZSguLi4pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gZXZvWm9uZWZyZWU8VD4oem9uZTogTmdab25lKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgICByZXR1cm4gKHNvdXJjZSkgPT4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKSkpO1xufVxuXG4vKipcbiAqINCe0L/QtdGA0LDRgtC+0YAgYGV2b1pvbmVPcHRpbWl6ZWRgIOKAlCDQutC+0LzQsdC+INC40LcgYGV2b1pvbmVmcmVlYCDQuCBgZXZvWm9uZWZ1bGxgLlxuICpcbiAqINCh0L3QsNGH0LDQu9CwINC/0L7RgtC+0Log0LjRgdC/0L7Qu9C90Y/QtdGC0YHRjyDQstC90LUgQW5ndWxhci3Qt9C+0L3RiyAoYHJ1bk91dHNpZGVBbmd1bGFyYCksINGH0YLQvtCx0Ysg0LjQt9Cx0LXQttCw0YLRjCDQu9C40YjQvdC10LPQvlxuICogY2hhbmdlIGRldGVjdGlvbi4g0J3QviDRgdC+0LHRi9GC0LjRjyBgbmV4dGAsIGBlcnJvcmAg0LggYGNvbXBsZXRlYCDQstGB0ZEg0YDQsNCy0L3QviDQstC+0LfQstGA0LDRidCw0Y7RgtGB0Y8g0LIgQW5ndWxhci3Qt9C+0L3Rgy5cbiAqXG4gKiDQrdGC0L4g0LjQtNC10LDQu9GM0L3Ri9C5INCx0LDQu9Cw0L3RgSwg0LXRgdC70Lgg0YLQtdCx0LUg0L3Rg9C20LXQvSDQsdGL0YHRgtGA0YvQuSDQv9C+0YLQvtC6INCx0LXQtyDQu9C40YjQvdC10LPQviBDRCwg0L3QviDRgtGLINCy0YHRkSDRgNCw0LLQvdC+INGF0L7Rh9C10YjRjCxcbiAqINGH0YLQvtCx0YsgQW5ndWxhciDQt9C90LDQuyDQviDRgNC10LfRg9C70YzRgtCw0YLQsNGFLlxuICpcbiAqIEBwYXJhbSB6b25lINCh0LXRgNCy0LjRgSBgTmdab25lYCDQuNC3IEFuZ3VsYXIgREkuXG4gKiBAcmV0dXJucyDQntC/0LXRgNCw0YLQvtGALCDQvtC/0YLQuNC80LjQt9C40YDQvtCy0LDQvdC90YvQuSDQv9C+INC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuC5cbiAqXG4gKiBAZXhhbXBsZVxuICogc291cmNlJC5waXBlKGV2b1pvbmVPcHRpbWl6ZWQodGhpcy5uZ1pvbmUpKS5zdWJzY3JpYmUoLi4uKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2b1pvbmVPcHRpbWl6ZWQ8VD4oem9uZTogTmdab25lKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgICByZXR1cm4gcGlwZShldm9ab25lZnJlZSh6b25lKSwgZXZvWm9uZWZ1bGwoem9uZSkpO1xufVxuIl19
|