@firestitch/popover 12.1.3 → 12.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/app/class/popover-ref.d.ts +34 -34
  2. package/app/components/popover/popover.component.d.ts +6 -50
  3. package/app/components/popover-wrapper/popover-wrapper.component.d.ts +41 -39
  4. package/app/directives/popover.directive.d.ts +55 -0
  5. package/app/enums/position.d.ts +6 -6
  6. package/app/fs-popover.module.d.ts +11 -10
  7. package/app/helpers/create-injector.d.ts +4 -4
  8. package/app/helpers/create-overlay-ref.d.ts +4 -4
  9. package/app/helpers/create-position-strategy.d.ts +4 -4
  10. package/app/helpers/create-template-portal.d.ts +4 -4
  11. package/app/helpers/point-in-rect.d.ts +1 -1
  12. package/app/interfaces/popover-config.interface.d.ts +16 -16
  13. package/app/services/popover.service.d.ts +21 -20
  14. package/bundles/firestitch-popover.umd.js +994 -937
  15. package/bundles/firestitch-popover.umd.js.map +1 -1
  16. package/esm2015/app/class/popover-ref.js +85 -85
  17. package/esm2015/app/components/popover/popover.component.js +17 -191
  18. package/esm2015/app/components/popover-wrapper/popover-wrapper.component.js +121 -118
  19. package/esm2015/app/directives/popover.directive.js +216 -0
  20. package/esm2015/app/enums/position.js +7 -7
  21. package/esm2015/app/fs-popover.module.js +38 -33
  22. package/esm2015/app/helpers/create-injector.js +8 -8
  23. package/esm2015/app/helpers/create-overlay-ref.js +11 -11
  24. package/esm2015/app/helpers/create-position-strategy.js +55 -55
  25. package/esm2015/app/helpers/create-template-portal.js +4 -4
  26. package/esm2015/app/helpers/point-in-rect.js +3 -3
  27. package/esm2015/app/interfaces/popover-config.interface.js +1 -1
  28. package/esm2015/app/services/popover.service.js +64 -59
  29. package/esm2015/firestitch-popover.js +4 -4
  30. package/esm2015/public_api.js +9 -8
  31. package/fesm2015/firestitch-popover.js +572 -521
  32. package/fesm2015/firestitch-popover.js.map +1 -1
  33. package/firestitch-popover.d.ts +5 -5
  34. package/package.json +1 -1
  35. package/public_api.d.ts +6 -5
@@ -1,191 +1,17 @@
1
- import { ChangeDetectionStrategy, Component, ElementRef, Input, NgZone, Optional, TemplateRef, HostBinding, } from '@angular/core';
2
- import { NavigationEnd, Router } from '@angular/router';
3
- import { fromEvent, pipe, Subject, timer, merge } from 'rxjs';
4
- import { debounceTime, delay, distinctUntilChanged, filter, finalize, mapTo, startWith, switchMap, takeUntil, tap, withLatestFrom, } from 'rxjs/operators';
5
- import { guid } from '@firestitch/common';
6
- import { Position } from './../../enums/position';
7
- import { FsPopoverService } from '../../services/popover.service';
8
- import { pointInRect } from '../../helpers/point-in-rect';
9
- import { FsPopoverRef } from '../../class/popover-ref';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "../../services/popover.service";
12
- import * as i2 from "@angular/router";
13
- export class FsPopoverComponent {
14
- constructor(_elRef, _popoverService, _ngZone, _router) {
15
- this._elRef = _elRef;
16
- this._popoverService = _popoverService;
17
- this._ngZone = _ngZone;
18
- this._router = _router;
19
- this._guid = guid('xxxxxxx');
20
- this.leaveDelay = 100;
21
- this.showDelay = 0;
22
- this.maxWidth = 250;
23
- this.autoShow = true;
24
- this.autoClose = true;
25
- this.loadingDiameter = 20;
26
- this.loading = true;
27
- this.indication = true;
28
- this.position = Position.South;
29
- this.theme = 'light';
30
- this.size = 'normal';
31
- this.trigger = 'mouseover';
32
- this._mouseEnter$ = fromEvent(this._elRef.nativeElement, 'mouseenter');
33
- this._mouseMove$ = fromEvent(document, 'mousemove', { passive: true });
34
- this._mouseLeave$ = fromEvent(this._elRef.nativeElement, 'mouseleave');
35
- this._popoverClosed$ = new Subject();
36
- this._destroy$ = new Subject();
37
- }
38
- get openTimer$() {
39
- return timer(this.showDelay);
40
- }
41
- get closeTimer$() {
42
- return timer(this.leaveDelay);
43
- }
44
- ngOnInit() {
45
- this._popoverRef = new FsPopoverRef({
46
- maxWidth: this.maxWidth,
47
- wrapperClass: this.wrapperClass,
48
- autoShow: this.autoShow,
49
- autoClose: this.autoClose,
50
- loadingDiameter: this.loadingDiameter,
51
- loading: this.loading,
52
- size: this.size,
53
- theme: this.theme,
54
- });
55
- this._ngZone.runOutsideAngular(() => {
56
- if (this.trigger === 'click') {
57
- this._listenMouseHostClick();
58
- }
59
- else {
60
- this._listenMouseHostEnter();
61
- }
62
- });
63
- this._listenRouteChange();
64
- }
65
- ngOnDestroy() {
66
- this._popoverClosed$.next();
67
- this._destroy$.next();
68
- }
69
- _closePopover() {
70
- this._popoverClosed$.next();
71
- this._ngZone.run(() => {
72
- this._wrapperElement = null;
73
- if (this._popoverService.hasActivePopover) {
74
- this._popoverService.close(this._popoverRef);
75
- }
76
- });
77
- }
78
- _listenRouteChange() {
79
- this._router.events
80
- .pipe(filter((event) => {
81
- return event instanceof NavigationEnd;
82
- }), pipe(takeUntil(this._destroy$
83
- .pipe(delay(200)))))
84
- .subscribe(() => {
85
- this._closePopover();
86
- });
87
- }
88
- _listenMouseHostClick() {
89
- fromEvent(this._elRef.nativeElement, 'click', { passive: true })
90
- .pipe(tap((e) => {
91
- e.stopPropagation();
92
- this._openPopover();
93
- }), switchMap(() => this._listenMouseHostLeave$()), switchMap(() => this.closeTimer$), takeUntil(this._destroy$))
94
- .subscribe(() => {
95
- this._closePopover();
96
- });
97
- }
98
- _listenMouseHostEnter() {
99
- const actualMouseState$ = merge(this._mouseLeave$.pipe(mapTo(true)), this._mouseEnter$.pipe(mapTo(false)))
100
- .pipe(startWith(false), distinctUntilChanged());
101
- this._mouseEnter$
102
- .pipe(filter(() => {
103
- return !this._wrapperElement;
104
- }), tap(() => {
105
- this._popoverService.setActivePopoverGUID(this._guid);
106
- }), switchMap(() => this.openTimer$),
107
- // we have to check that after all delays mouse still over an elemen
108
- withLatestFrom(actualMouseState$), filter(([_, mouseLeave]) => {
109
- return !mouseLeave;
110
- }), tap(() => this._openPopover()), switchMap(() => this._listenMouseHostLeave$()), switchMap(() => this.closeTimer$), tap(() => this._closePopover()), finalize(() => this._closePopover()), takeUntil(this._destroy$))
111
- .subscribe();
112
- }
113
- _openPopover() {
114
- if (this.trigger === 'mouseover' && this._popoverService.activeElementGUID !== this._guid) {
115
- return;
116
- }
117
- this._hostBounds = this._elRef.nativeElement.getBoundingClientRect();
118
- this._ngZone.run(() => {
119
- this._wrapperElement = this._popoverService.openPopover(this._elRef, this.template, this.data, this._popoverRef, this.position);
120
- });
121
- }
122
- _listenMouseHostLeave$() {
123
- const mouseMove$ = this._mouseMove$
124
- .pipe(debounceTime(50), filter(() => !!this._wrapperElement), filter((event) => {
125
- return this._popoverRef.autoClose && this._mouseLeftTheTargets(event);
126
- }));
127
- const mouseClick$ = fromEvent(this._elRef.nativeElement, 'click');
128
- return merge(mouseMove$, mouseClick$);
129
- //
130
- // return this._mouseLeave$
131
- // .pipe(
132
- // //
133
- // timeoutWith(200, mouseMove$),
134
- // );
135
- }
136
- // Check if mouse left target or popover rects
137
- _mouseLeftTheTargets(event) {
138
- const hostBounds = this._hostBounds;
139
- const popoverBounds = this._wrapperElement.getBoundingClientRect();
140
- const pointInHostRect = pointInRect(hostBounds.x, hostBounds.y, hostBounds.x + hostBounds.width, hostBounds.y + hostBounds.height, event.x, event.y);
141
- const pointInPopoverRect = pointInRect(popoverBounds.x, popoverBounds.y, popoverBounds.x + popoverBounds.width, popoverBounds.y + popoverBounds.height, event.x, event.y);
142
- return !pointInHostRect && !pointInPopoverRect;
143
- }
144
- }
145
- FsPopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverComponent, deps: [{ token: i0.ElementRef }, { token: i1.FsPopoverService }, { token: i0.NgZone }, { token: i2.Router, optional: true }], target: i0.ɵɵFactoryTarget.Component });
146
- FsPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsPopoverComponent, selector: "fs-popover", inputs: { template: "template", data: "data", leaveDelay: "leaveDelay", showDelay: "showDelay", maxWidth: "maxWidth", wrapperClass: "wrapperClass", autoShow: "autoShow", autoClose: "autoClose", loadingDiameter: "loadingDiameter", loading: "loading", indication: "indication", position: "position", theme: "theme", size: "size", trigger: "trigger" }, host: { properties: { "class.indication": "this.indication" } }, ngImport: i0, template: "<span class=\"popover-container\"><ng-content></ng-content></span>\n", styles: [":host{display:inline-flex;cursor:pointer;position:relative}::ng-deep fs-popover.indication .popover-container{text-decoration:underline;-webkit-text-decoration-style:dashed;text-decoration-style:dashed;-webkit-text-decoration-color:#ccc;text-decoration-color:#ccc;text-underline-offset:3px;text-decoration-thickness:1px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
147
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverComponent, decorators: [{
148
- type: Component,
149
- args: [{
150
- selector: 'fs-popover',
151
- templateUrl: 'popover.component.html',
152
- styleUrls: ['popover.component.scss'],
153
- changeDetection: ChangeDetectionStrategy.OnPush
154
- }]
155
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FsPopoverService }, { type: i0.NgZone }, { type: i2.Router, decorators: [{
156
- type: Optional
157
- }] }]; }, propDecorators: { template: [{
158
- type: Input
159
- }], data: [{
160
- type: Input
161
- }], leaveDelay: [{
162
- type: Input
163
- }], showDelay: [{
164
- type: Input
165
- }], maxWidth: [{
166
- type: Input
167
- }], wrapperClass: [{
168
- type: Input
169
- }], autoShow: [{
170
- type: Input
171
- }], autoClose: [{
172
- type: Input
173
- }], loadingDiameter: [{
174
- type: Input
175
- }], loading: [{
176
- type: Input
177
- }], indication: [{
178
- type: Input
179
- }, {
180
- type: HostBinding,
181
- args: ['class.indication']
182
- }], position: [{
183
- type: Input
184
- }], theme: [{
185
- type: Input
186
- }], size: [{
187
- type: Input
188
- }], trigger: [{
189
- type: Input
190
- }] } });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBR04sUUFBUSxFQUNSLFdBQVcsRUFDWCxXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFjLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRSxPQUFPLEVBQ0wsWUFBWSxFQUNaLEtBQUssRUFDTCxvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILGNBQWMsR0FDZixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQVN2RCxNQUFNLE9BQU8sa0JBQWtCO0lBNkQ3QixZQUNVLE1BQWtCLEVBQ2xCLGVBQWlDLEVBQ2pDLE9B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QUFTO3NCQURmLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxlQUFlO3NCQURyQixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFLQyxVQUFVO3NCQUZoQixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGtCQUFrQjtnQkFJeEIsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLEtBQUs7c0JBRFgsS0FBSztnQkFJQyxJQUFJO3NCQURWLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgSG9zdEJpbmRpbmcsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgZnJvbUV2ZW50LCBwaXBlLCBTdWJqZWN0LCB0aW1lciwgT2JzZXJ2YWJsZSwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZpbmFsaXplLFxuICBtYXBUbyxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxuICB3aXRoTGF0ZXN0RnJvbSxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBndWlkIH0gZnJvbSAnQGZpcmVzdGl0Y2gvY29tbW9uJztcblxuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLy4uLy4uL2VudW1zL3Bvc2l0aW9uJztcbmltcG9ydCB7IEZzUG9wb3ZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wb3BvdmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9pbnRJblJlY3QgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3BvaW50LWluLXJlY3QnO1xuaW1wb3J0IHsgRnNQb3BvdmVyUmVmIH0gZnJvbSAnLi4vLi4vY2xhc3MvcG9wb3Zlci1yZWYnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJ3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJ3BvcG92ZXIuY29tcG9uZW50LnNjc3MnIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEZzUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9ndWlkID0gZ3VpZCgneHh4eHh4eCcpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YTogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsZWF2ZURlbGF5ID0gMTAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93RGVsYXkgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhXaWR0aCA9IDI1MDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgd3JhcHBlckNsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9TaG93ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgYXV0b0Nsb3NlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbG9hZGluZ0RpYW1ldGVyID0gMjA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaW5kaWNhdGlvbicpXG4gIHB1YmxpYyBpbmRpY2F0aW9uID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcG9zaXRpb246IFBvc2l0aW9uID0gUG9zaXRpb24uU291dGg7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRoZW1lOiAnbGlnaHQnIHwgJ2RhcmsnID0gJ2xpZ2h0JztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2l6ZTogJ3RpbnknIHwgJ3NtYWxsJyB8ICdub3JtYWwnID0gJ25vcm1hbCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRyaWdnZXI6ICdjbGljaycgfCAnbW91c2VvdmVyJyA9ICdtb3VzZW92ZXInO1xuXG4gIHByaXZhdGUgX3BvcG92ZXJSZWY6IEZzUG9wb3ZlclJlZjtcbiAgcHJpdmF0ZSBfd3JhcHBlckVsZW1lbnQ6IEVsZW1lbnQ7XG4gIHByaXZhdGUgX2hvc3RCb3VuZHM6IERPTVJlY3Q7XG5cbiAgcHJpdmF0ZSBfbW91c2VFbnRlciQgPSBmcm9tRXZlbnQodGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlZW50ZXInKTtcbiAgcHJpdmF0ZSBfbW91c2VNb3ZlJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlbW92ZScsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBfbW91c2VMZWF2ZSQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlbGVhdmUnKTtcblxuICBwcml2YXRlIF9wb3BvdmVyQ2xvc2VkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9wb3BvdmVyU2VydmljZTogRnNQb3BvdmVyU2VydmljZSxcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9wZW5UaW1lciQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGltZXIodGhpcy5zaG93RGVsYXkpO1xuICB9XG5cbiAgcHVibGljIGdldCBjbG9zZVRpbWVyJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aW1lcih0aGlzLmxlYXZlRGVsYXkpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX3BvcG92ZXJSZWYgPSBuZXcgRnNQb3BvdmVyUmVmKHtcbiAgICAgIG1heFdpZHRoOiB0aGlzLm1heFdpZHRoLFxuICAgICAgd3JhcHBlckNsYXNzOiB0aGlzLndyYXBwZXJDbGFzcyxcbiAgICAgIGF1dG9TaG93OiB0aGlzLmF1dG9TaG93LFxuICAgICAgYXV0b0Nsb3NlOiB0aGlzLmF1dG9DbG9zZSxcbiAgICAgIGxvYWRpbmdEaWFtZXRlcjogdGhpcy5sb2FkaW5nRGlhbWV0ZXIsXG4gICAgICBsb2FkaW5nOiB0aGlzLmxvYWRpbmcsXG4gICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICB0aGVtZTogdGhpcy50aGVtZSxcbiAgICB9KTtcblxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk1vdXNlSG9zdENsaWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9saXN0ZW5Nb3VzZUhvc3RFbnRlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbGlzdGVuUm91dGVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9wb3BvdmVyQ2xvc2VkJC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xvc2VQb3BvdmVyKCkge1xuICAgIHRoaXMuX3BvcG92ZXJDbG9zZWQkLm5leHQoKTtcblxuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5fd3JhcHBlckVsZW1lbnQgPSBudWxsO1xuXG4gICAgICBpZiAodGhpcy5fcG9wb3ZlclNlcnZpY2UuaGFzQWN0aXZlUG9wb3Zlcikge1xuICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5jbG9zZSh0aGlzLl9wb3BvdmVyUmVmKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlblJvdXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDtcbiAgICAgICAgfSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKFxuICAgICAgICAgICAgdGhpcy5fZGVzdHJveSRcbiAgICAgICAgICAgICAgLnBpcGUoZGVsYXkoMjAwKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2Nsb3NlUG9wb3ZlcigpO1xuICAgICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3Rlbk1vdXNlSG9zdENsaWNrKCk6IHZvaWQge1xuICAgIGZyb21FdmVudCh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgdGhpcy5fb3BlblBvcG92ZXIoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9saXN0ZW5Nb3VzZUhvc3RMZWF2ZSQoKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNsb3NlVGltZXIkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuTW91c2VIb3N0RW50ZXIoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0dWFsTW91c2VTdGF0ZSQgPSBtZXJnZShcbiAgICAgIHRoaXMuX21vdXNlTGVhdmUkLnBpcGUobWFwVG8odHJ1ZSkpLFxuICAgICAgdGhpcy5fbW91c2VFbnRlciQucGlwZShtYXBUbyhmYWxzZSkpLFxuICAgIClcbiAgICAucGlwZShcbiAgICAgIHN0YXJ0V2l0aChmYWxzZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICk7XG5cbiAgICB0aGlzLl9tb3VzZUVudGVyJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICF0aGlzLl93cmFwcGVyRWxlbWVudDtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2Uuc2V0QWN0aXZlUG9wb3ZlckdVSUQodGhpcy5fZ3VpZCk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5vcGVuVGltZXIkKSxcbiAgICAgICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGF0IGFmdGVyIGFsbCBkZWxheXMgbW91c2Ugc3RpbGwgb3ZlciBhbiBlbGVtZW5cbiAgICAgICAgd2l0aExhdGVzdEZyb20oYWN0dWFsTW91c2VTdGF0ZSQpLFxuICAgICAgICBmaWx0ZXIoKFtfLCBtb3VzZUxlYXZlXSkgPT4ge1xuICAgICAgICAgIHJldHVybiAhbW91c2VMZWF2ZTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9vcGVuUG9wb3ZlcigpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2xpc3Rlbk1vdXNlSG9zdExlYXZlJCgpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2xvc2VUaW1lciQpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fY2xvc2VQb3BvdmVyKCkpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLl9jbG9zZVBvcG92ZXIoKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9vcGVuUG9wb3ZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnbW91c2VvdmVyJyAmJiB0aGlzLl9wb3BvdmVyU2VydmljZS5hY3RpdmVFbGVtZW50R1VJRCAhPT0gdGhpcy5fZ3VpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2hvc3RCb3VuZHMgPSB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLl93cmFwcGVyRWxlbWVudCA9IHRoaXMuX3BvcG92ZXJTZXJ2aWNlLm9wZW5Qb3BvdmVyKFxuICAgICAgICB0aGlzLl9lbFJlZixcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLl9wb3BvdmVyUmVmLFxuICAgICAgICB0aGlzLnBvc2l0aW9uXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuTW91c2VIb3N0TGVhdmUkKCk6IE9ic2VydmFibGU8TW91c2VFdmVudD4ge1xuICAgIGNvbnN0IG1vdXNlTW92ZSQgPSB0aGlzLl9tb3VzZU1vdmUkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5fd3JhcHBlckVsZW1lbnQpLFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXJSZWYuYXV0b0Nsb3NlICYmIHRoaXMuX21vdXNlTGVmdFRoZVRhcmdldHMoZXZlbnQpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICBjb25zdCBtb3VzZUNsaWNrJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snKTtcblxuICAgIHJldHVybiBtZXJnZShcbiAgICAgIG1vdXNlTW92ZSQsXG4gICAgICBtb3VzZUNsaWNrJCxcbiAgICApO1xuICAgIC8vXG4gICAgLy8gcmV0dXJuIHRoaXMuX21vdXNlTGVhdmUkXG4gICAgLy8gICAucGlwZShcbiAgICAvLyAgICAgLy9cbiAgICAvLyAgICAgdGltZW91dFdpdGgoMjAwLCBtb3VzZU1vdmUkKSxcbiAgICAvLyAgICk7XG4gIH1cblxuICAvLyBDaGVjayBpZiBtb3VzZSBsZWZ0IHRhcmdldCBvciBwb3BvdmVyIHJlY3RzXG4gIHByaXZhdGUgX21vdXNlTGVmdFRoZVRhcmdldHMoZXZlbnQ6IE1vdXNlRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBob3N0Qm91bmRzID0gdGhpcy5faG9zdEJvdW5kcztcbiAgICBjb25zdCBwb3BvdmVyQm91bmRzID0gdGhpcy5fd3JhcHBlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCBwb2ludEluSG9zdFJlY3QgPSBwb2ludEluUmVjdChcbiAgICAgIGhvc3RCb3VuZHMueCxcbiAgICAgIGhvc3RCb3VuZHMueSxcbiAgICAgIGhvc3RCb3VuZHMueCArIGhvc3RCb3VuZHMud2lkdGgsXG4gICAgICBob3N0Qm91bmRzLnkgKyBob3N0Qm91bmRzLmhlaWdodCxcbiAgICAgIGV2ZW50LngsXG4gICAgICBldmVudC55XG4gICAgKTtcblxuICAgIGNvbnN0IHBvaW50SW5Qb3BvdmVyUmVjdCA9IHBvaW50SW5SZWN0KFxuICAgICAgcG9wb3ZlckJvdW5kcy54LFxuICAgICAgcG9wb3ZlckJvdW5kcy55LFxuICAgICAgcG9wb3ZlckJvdW5kcy54ICsgcG9wb3ZlckJvdW5kcy53aWR0aCxcbiAgICAgIHBvcG92ZXJCb3VuZHMueSArIHBvcG92ZXJCb3VuZHMuaGVpZ2h0LFxuICAgICAgZXZlbnQueCxcbiAgICAgIGV2ZW50LnlcbiAgICApO1xuXG4gICAgcmV0dXJuICFwb2ludEluSG9zdFJlY3QgJiYgIXBvaW50SW5Qb3BvdmVyUmVjdDtcbiAgfVxufVxuIiwiPHNwYW4gY2xhc3M9XCJwb3BvdmVyLWNvbnRhaW5lclwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L3NwYW4+XG4iXX0=
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { FsPopoverDirective } from '../../directives/popover.directive';
3
+ import * as i0 from "@angular/core";
4
+ export class FsPopoverComponent extends FsPopoverDirective {
5
+ }
6
+ FsPopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7
+ FsPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsPopoverComponent, selector: "fs-popover", usesInheritance: true, ngImport: i0, template: "<span class=\"popover-container\"><ng-content></ng-content></span>\n", styles: [":host{display:inline-flex;cursor:pointer;position:relative}::ng-deep fs-popover.indication .popover-container{text-decoration:underline;-webkit-text-decoration-style:dashed;text-decoration-style:dashed;-webkit-text-decoration-color:#ccc;text-decoration-color:#ccc;text-underline-offset:3px;text-decoration-thickness:1px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverComponent, decorators: [{
9
+ type: Component,
10
+ args: [{
11
+ selector: 'fs-popover',
12
+ templateUrl: 'popover.component.html',
13
+ styleUrls: ['popover.component.scss'],
14
+ changeDetection: ChangeDetectionStrategy.OnPush
15
+ }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFTeEUsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGtCQUFrQjs7Z0hBQTdDLGtCQUFrQjtvR0FBbEIsa0JBQWtCLHlFQ1YvQixzRUFDQTs0RkRTYSxrQkFBa0I7a0JBTjlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFdBQVcsRUFBRSx3QkFBd0I7b0JBQ3JDLFNBQVMsRUFBRSxDQUFFLHdCQUF3QixDQUFFO29CQUN2QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGc1BvcG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3BvcG92ZXIuZGlyZWN0aXZlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1wb3BvdmVyJyxcbiAgdGVtcGxhdGVVcmw6ICdwb3BvdmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICdwb3BvdmVyLmNvbXBvbmVudC5zY3NzJyBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBGc1BvcG92ZXJDb21wb25lbnQgZXh0ZW5kcyBGc1BvcG92ZXJEaXJlY3RpdmUge31cbiIsIjxzcGFuIGNsYXNzPVwicG9wb3Zlci1jb250YWluZXJcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuIl19
@@ -1,118 +1,121 @@
1
- import { ChangeDetectionStrategy, Component, ElementRef, ViewChild, HostBinding, NgZone, } from '@angular/core';
2
- import { BasePortalOutlet, CdkPortalOutlet } from '@angular/cdk/portal';
3
- import { fromEvent, Subject } from 'rxjs';
4
- import { debounceTime, filter, takeUntil } from 'rxjs/operators';
5
- import { FsPopoverRef } from '../../class/popover-ref';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../../class/popover-ref";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "@angular/cdk/portal";
10
- export class FsPopoverWrapperComponent extends BasePortalOutlet {
11
- constructor(popoverRef, _el, _zone) {
12
- super();
13
- this.popoverRef = popoverRef;
14
- this._el = _el;
15
- this._zone = _zone;
16
- this.hidden = false;
17
- this._updatePosition = new Subject();
18
- this._destroy$ = new Subject();
19
- this._updateClass();
20
- this.wrapperClass = this.popoverRef.wrapperClass;
21
- this.maxWidth = this.popoverRef.maxWidth;
22
- }
23
- set maxWidth(value) {
24
- this._el.nativeElement.style.maxWidth = value ? value + 'px' : void 0;
25
- }
26
- set wrapperClass(value) {
27
- this._wrapperClass = value;
28
- this._updateClass();
29
- }
30
- ngOnInit() {
31
- if (!this.popoverRef.autoShow && this.popoverRef.componentLoading) {
32
- this._watchMousePosition();
33
- }
34
- this._observeContentChanges();
35
- this._listenUpdatePositionRequests();
36
- }
37
- ngOnDestroy() {
38
- this._contentChangesObserver.disconnect();
39
- this._destroy$.next();
40
- this._destroy$.complete();
41
- }
42
- /**
43
- * Attach a TemplatePortal as content to this popover container.
44
- * @param portal Portal to be attached as the popover content.
45
- */
46
- attachTemplatePortal(portal) {
47
- if (this._portalOutlet.hasAttached()) {
48
- throw Error('Popover template already attached');
49
- }
50
- return this._portalOutlet.attachTemplatePortal(portal);
51
- }
52
- /**
53
- * Attach a ComponentPortal as content to this popover container.
54
- * @param portal Portal to be attached as the popover content.
55
- */
56
- attachComponentPortal(portal) {
57
- if (this._portalOutlet.hasAttached()) {
58
- throw Error('Popover component already attached');
59
- }
60
- return this._portalOutlet.attachComponentPortal(portal);
61
- }
62
- updatePosition() {
63
- this._updatePosition.next();
64
- }
65
- _watchMousePosition() {
66
- const componentVisibilityChange$ = this.popoverRef.componentVisible$
67
- .pipe(filter((value) => value === true));
68
- this._zone.runOutsideAngular(() => {
69
- fromEvent(document, 'mousemove')
70
- .pipe(takeUntil(componentVisibilityChange$), takeUntil(this._destroy$))
71
- .subscribe((e) => {
72
- this.spinner.nativeElement.style.left = e.x + 'px';
73
- this.spinner.nativeElement.style.top = (e.y + 20) + 'px';
74
- });
75
- });
76
- }
77
- _updateClass() {
78
- this.class = ['popover-wrapper', this._wrapperClass].filter(Boolean).join(' ');
79
- }
80
- _observeContentChanges() {
81
- const config = {
82
- childList: true,
83
- subtree: true
84
- };
85
- this._contentChangesObserver = new MutationObserver(() => {
86
- this.updatePosition();
87
- });
88
- this._contentChangesObserver.observe(this._el.nativeElement, config);
89
- }
90
- _listenUpdatePositionRequests() {
91
- this._updatePosition
92
- .pipe(debounceTime(50), takeUntil(this._destroy$))
93
- .subscribe(() => {
94
- this.popoverRef.updatePosition();
95
- });
96
- }
97
- }
98
- FsPopoverWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverWrapperComponent, deps: [{ token: i1.FsPopoverRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
99
- FsPopoverWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsPopoverWrapperComponent, selector: "fs-popover-wrapper", host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "_portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }, { propertyName: "spinner", first: true, predicate: ["spinner"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"wrapper\" [ngClass]=\"{\n 'theme-dark' : popoverRef.theme === 'dark',\n 'size-tiny': popoverRef.size === 'tiny',\n 'size-small': popoverRef.size === 'small',\n 'hidden': !(popoverRef.componentVisible$ | async)\n }\">\n <div class=\"mat-elevation-z4 popover-content\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n\n <div class=\"fs-popover-arrow light\"></div>\n <div class=\"fs-popover-arrow dark\"></div>\n</div>\n\n<div class=\"loading-spinner\"\n #spinner\n *ngIf=\"popoverRef.loading && !(popoverRef.componentVisible$ | async)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.width]=\"popoverRef.loadingDiameter\" [attr.height]=\"popoverRef.loadingDiameter\" viewBox=\"0 0 42 42\" stroke=\"grey\">\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(1 1)\" stroke-width=\"3\">\n <circle stroke-opacity=\".5\" cx=\"18\" cy=\"18\" r=\"18\"/>\n <path d=\"M36 18c0-9.94-8.06-18-18-18\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 18 18\" to=\"360 18 18\" dur=\"1s\" repeatCount=\"indefinite\"/>\n </path>\n </g>\n </g>\n </svg>\n</div>\n", styles: [".wrapper{padding:6px;animation:fadeIn ease .2s}.wrapper.hidden{display:none}.wrapper .popover-content{background:#fff;border-radius:4px;padding:8px;color:#1b1b1b;box-sizing:border-box;overflow:hidden}.wrapper.theme-dark .popover-content{background-color:#707070;color:#fff}.wrapper.size-small .popover-content{font-size:80%}.wrapper.size-tiny .popover-content{font-size:70%}.wrapper .fs-popover-arrow{width:0;height:0;font-size:0;line-height:0;position:absolute;z-index:200;z-index:1}.wrapper .fs-popover-arrow.dark{z-index:0}::ng-deep .fs-popover-top .fs-popover-arrow,::ng-deep .fs-popover-bottom .fs-popover-arrow{border-left:10px solid transparent;border-right:10px solid transparent}::ng-deep .fs-popover-left .fs-popover-arrow,::ng-deep .fs-popover-right .fs-popover-arrow{border-top:10px solid transparent;border-bottom:10px solid transparent}::ng-deep .fs-popover-top .fs-popover-arrow{bottom:-3px;left:calc(50% - 10px);border-top:10px solid #fff}::ng-deep .fs-popover-top .fs-popover-arrow.dark{border-top-color:#dfdfdf40;bottom:-4px}::ng-deep .fs-popover-bottom .fs-popover-arrow{top:-3px;left:calc(50% - 10px);border-bottom:10px solid #fff}::ng-deep .fs-popover-bottom .fs-popover-arrow.dark{border-bottom-color:#dfdfdf40;top:-4px}::ng-deep .fs-popover-left .fs-popover-arrow{left:-3px;top:calc(50% - 10px);border-right:10px solid #fff}::ng-deep .fs-popover-left .fs-popover-arrow.dark{border-right-color:#dfdfdf40;left:-4px}::ng-deep .fs-popover-right .fs-popover-arrow{right:-3px;top:calc(50% - 10px);border-left:10px solid #fff}::ng-deep .fs-popover-right .fs-popover-arrow.dark{border-left-color:#dfdfdf40;right:-4px}::ng-deep .fs-popover-bottom .wrapper.theme-dark .fs-popover-arrow{border-bottom-color:#707070}::ng-deep .fs-popover-left .wrapper.theme-dark .fs-popover-arrow{border-right-color:#707070}::ng-deep .fs-popover-right .wrapper.theme-dark .fs-popover-arrow{border-left-color:#707070}::ng-deep .fs-popover-top .wrapper.theme-dark .fs-popover-arrow{border-top-color:#707070}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i2.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverWrapperComponent, decorators: [{
101
- type: Component,
102
- args: [{
103
- selector: 'fs-popover-wrapper',
104
- templateUrl: 'popover-wrapper.component.html',
105
- styleUrls: ['popover-wrapper.component.scss'],
106
- changeDetection: ChangeDetectionStrategy.OnPush,
107
- }]
108
- }], ctorParameters: function () { return [{ type: i1.FsPopoverRef }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { _portalOutlet: [{
109
- type: ViewChild,
110
- args: [CdkPortalOutlet, { static: true }]
111
- }], spinner: [{
112
- type: ViewChild,
113
- args: ['spinner']
114
- }], class: [{
115
- type: HostBinding,
116
- args: ['class']
117
- }] } });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyLXdyYXBwZXIvcG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyLXdyYXBwZXIvcG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFVBQVUsRUFFVixTQUFTLEVBQ1QsV0FBVyxFQUNBLE1BQU0sR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixlQUFlLEVBR2hCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7OztBQVN2RCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsZ0JBQWdCO0lBa0I3RCxZQUNTLFVBQXdCLEVBQ3ZCLEdBQWUsRUFDZixLQUFhO1FBRXJCLEtBQUssRUFBRSxDQUFDO1FBSkQsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQUN2QixRQUFHLEdBQUgsR0FBRyxDQUFZO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQVhoQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBSWQsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRXRDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBUXRDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixJQUFJLENBQUMsWUFBWSxH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V0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIFZpZXdDaGlsZCxcbiAgSG9zdEJpbmRpbmcsXG4gIE9uRGVzdHJveSwgTmdab25lLFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBCYXNlUG9ydGFsT3V0bGV0LFxuICBDZGtQb3J0YWxPdXRsZXQsXG4gIENvbXBvbmVudFBvcnRhbCxcbiAgVGVtcGxhdGVQb3J0YWxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5cbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRnNQb3BvdmVyUmVmIH0gZnJvbSAnLi4vLi4vY2xhc3MvcG9wb3Zlci1yZWYnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLXBvcG92ZXItd3JhcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAncG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICdwb3BvdmVyLXdyYXBwZXIuY29tcG9uZW50LnNjc3MnIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGc1BvcG92ZXJXcmFwcGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZVBvcnRhbE91dGxldCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKENka1BvcnRhbE91dGxldCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIF9wb3J0YWxPdXRsZXQ6IENka1BvcnRhbE91dGxldDtcblxuICBAVmlld0NoaWxkKCdzcGlubmVyJylcbiAgcHVibGljIHNwaW5uZXI7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzO1xuXG4gIHB1YmxpYyBoaWRkZW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF93cmFwcGVyQ2xhc3M7XG4gIHByaXZhdGUgX2NvbnRlbnRDaGFuZ2VzT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgX3VwZGF0ZVBvc2l0aW9uID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBvcG92ZXJSZWY6IEZzUG9wb3ZlclJlZixcbiAgICBwcml2YXRlIF9lbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF96b25lOiBOZ1pvbmUsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdXBkYXRlQ2xhc3MoKTtcblxuICAgIHRoaXMud3JhcHBlckNsYXNzID0gdGhpcy5wb3BvdmVyUmVmLndyYXBwZXJDbGFzcztcbiAgICB0aGlzLm1heFdpZHRoID0gdGhpcy5wb3BvdmVyUmVmLm1heFdpZHRoO1xuICB9XG5cbiAgcHVibGljIHNldCBtYXhXaWR0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9IHZhbHVlID8gdmFsdWUgKyAncHgnIDogdm9pZCAwO1xuICB9XG5cbiAgcHVibGljIHNldCB3cmFwcGVyQ2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3dyYXBwZXJDbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZUNsYXNzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBvcG92ZXJSZWYuYXV0b1Nob3cgJiYgdGhpcy5wb3BvdmVyUmVmLmNvbXBvbmVudExvYWRpbmcpIHtcbiAgICAgIHRoaXMuX3dhdGNoTW91c2VQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuX29ic2VydmVDb250ZW50Q2hhbmdlcygpO1xuICAgIHRoaXMuX2xpc3RlblVwZGF0ZVBvc2l0aW9uUmVxdWVzdHMoKTtcbiAgfVxuXG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2NvbnRlbnRDaGFuZ2VzT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCBhIFRlbXBsYXRlUG9ydGFsIGFzIGNvbnRlbnQgdG8gdGhpcyBwb3BvdmVyIGNvbnRhaW5lci5cbiAgICogQHBhcmFtIHBvcnRhbCBQb3J0YWwgdG8gYmUgYXR0YWNoZWQgYXMgdGhlIHBvcG92ZXIgY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBhdHRhY2hUZW1wbGF0ZVBvcnRhbDxDPihwb3J0YWw6IFRlbXBsYXRlUG9ydGFsPEM+KTogRW1iZWRkZWRWaWV3UmVmPEM+IHtcblxuICAgIGlmICh0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1BvcG92ZXIgdGVtcGxhdGUgYWxyZWFkeSBhdHRhY2hlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwocG9ydGFsKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEF0dGFjaCBhIENvbXBvbmVudFBvcnRhbCBhcyBjb250ZW50IHRvIHRoaXMgcG9wb3ZlciBjb250YWluZXIuXG4gICAqIEBwYXJhbSBwb3J0YWwgUG9ydGFsIHRvIGJlIGF0dGFjaGVkIGFzIHRoZSBwb3BvdmVyIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgYXR0YWNoQ29tcG9uZW50UG9ydGFsPFQ+KHBvcnRhbDogQ29tcG9uZW50UG9ydGFsPFQ+KTogQ29tcG9uZW50UmVmPFQ+IHtcblxuICAgIGlmICh0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1BvcG92ZXIgY29tcG9uZW50IGFscmVhZHkgYXR0YWNoZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChwb3J0YWwpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgIHRoaXMuX3VwZGF0ZVBvc2l0aW9uLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoTW91c2VQb3NpdGlvbigpIHtcbiAgICBjb25zdCBjb21wb25lbnRWaXNpYmlsaXR5Q2hhbmdlJCA9IHRoaXMucG9wb3ZlclJlZi5jb21wb25lbnRWaXNpYmxlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+IHZhbHVlID09PSB0cnVlKVxuICAgICAgKTtcblxuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKGNvbXBvbmVudFZpc2liaWxpdHlDaGFuZ2UkKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLnNwaW5uZXIubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gZS54ICsgJ3B4JztcbiAgICAgICAgICB0aGlzLnNwaW5uZXIubmF0aXZlRWxlbWVudC5zdHlsZS50b3AgPSAoZS55ICsgMjApICsgJ3B4JztcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVDbGFzcygpIHtcbiAgICB0aGlzLmNsYXNzID0gWydwb3BvdmVyLXdyYXBwZXInLCB0aGlzLl93cmFwcGVyQ2xhc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIF9vYnNlcnZlQ29udGVudENoYW5nZXMoKSB7XG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH07XG5cbiAgICB0aGlzLl9jb250ZW50Q2hhbmdlc09ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fY29udGVudENoYW5nZXNPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQsIGNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5VcGRhdGVQb3NpdGlvblJlcXVlc3RzKCkge1xuICAgIHRoaXMuX3VwZGF0ZVBvc2l0aW9uXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcG92ZXJSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH0pXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3cmFwcGVyXCIgW25nQ2xhc3NdPVwie1xuICAndGhlbWUtZGFyaycgOiBwb3BvdmVyUmVmLnRoZW1lID09PSAnZGFyaycsXG4gICdzaXplLXRpbnknOiBwb3BvdmVyUmVmLnNpemUgPT09ICd0aW55JyxcbiAgJ3NpemUtc21hbGwnOiBwb3BvdmVyUmVmLnNpemUgPT09ICdzbWFsbCcsXG4gICdoaWRkZW4nOiAhKHBvcG92ZXJSZWYuY29tcG9uZW50VmlzaWJsZSQgfCBhc3luYylcbiAgfVwiPlxuICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16NCBwb3BvdmVyLWNvbnRlbnRcIj5cbiAgICA8bmctdGVtcGxhdGUgY2RrUG9ydGFsT3V0bGV0PjwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJmcy1wb3BvdmVyLWFycm93IGxpZ2h0XCI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmcy1wb3BvdmVyLWFycm93IGRhcmtcIj48L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCJcbiAgICAjc3Bpbm5lclxuICAgICpuZ0lmPVwicG9wb3ZlclJlZi5sb2FkaW5nICYmICEocG9wb3ZlclJlZi5jb21wb25lbnRWaXNpYmxlJCB8IGFzeW5jKVwiPlxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBbYXR0ci53aWR0aF09XCJwb3BvdmVyUmVmLmxvYWRpbmdEaWFtZXRlclwiIFthdHRyLmhlaWdodF09XCJwb3BvdmVyUmVmLmxvYWRpbmdEaWFtZXRlclwiIHZpZXdCb3g9XCIwIDAgNDIgNDJcIiBzdHJva2U9XCJncmV5XCI+XG4gICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMSAxKVwiIHN0cm9rZS13aWR0aD1cIjNcIj5cbiAgICAgICAgPGNpcmNsZSBzdHJva2Utb3BhY2l0eT1cIi41XCIgY3g9XCIxOFwiIGN5PVwiMThcIiByPVwiMThcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJNMzYgMThjMC05Ljk0LTguMDYtMTgtMTgtMThcIj5cbiAgICAgICAgICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPVwidHJhbnNmb3JtXCIgdHlwZT1cInJvdGF0ZVwiIGZyb209XCIwIDE4IDE4XCIgdG89XCIzNjAgMTggMThcIiBkdXI9XCIxc1wiIHJlcGVhdENvdW50PVwiaW5kZWZpbml0ZVwiLz5cbiAgICAgICAgPC9wYXRoPlxuICAgICAgPC9nPlxuICAgIDwvZz5cbiAgPC9zdmc+XG48L2Rpdj5cbiJdfQ==
1
+ import { ChangeDetectionStrategy, Component, ElementRef, ViewChild, HostBinding, NgZone, } from '@angular/core';
2
+ import { BasePortalOutlet, CdkPortalOutlet } from '@angular/cdk/portal';
3
+ import { fromEvent, Subject } from 'rxjs';
4
+ import { debounceTime, filter, takeUntil } from 'rxjs/operators';
5
+ import { FsPopoverRef } from '../../class/popover-ref';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../class/popover-ref";
8
+ import * as i2 from "@angular/common";
9
+ import * as i3 from "@angular/cdk/portal";
10
+ export class FsPopoverWrapperComponent extends BasePortalOutlet {
11
+ constructor(popoverRef, _el, _zone) {
12
+ super();
13
+ this.popoverRef = popoverRef;
14
+ this._el = _el;
15
+ this._zone = _zone;
16
+ this.hidden = false;
17
+ this._updatePosition = new Subject();
18
+ this._destroy$ = new Subject();
19
+ this._updateClass();
20
+ this.wrapperClass = this.popoverRef.wrapperClass;
21
+ this.maxWidth = this.popoverRef.maxWidth;
22
+ }
23
+ set maxWidth(value) {
24
+ this._el.nativeElement.style.maxWidth = value ? value + 'px' : void 0;
25
+ }
26
+ set wrapperClass(value) {
27
+ this._wrapperClass = value;
28
+ this._updateClass();
29
+ }
30
+ ngOnInit() {
31
+ if (!this.popoverRef.autoShow && this.popoverRef.componentLoading) {
32
+ this._watchMousePosition();
33
+ }
34
+ this._observeContentChanges();
35
+ this._listenUpdatePositionRequests();
36
+ }
37
+ ngOnDestroy() {
38
+ this._contentChangesObserver.disconnect();
39
+ this._destroy$.next();
40
+ this._destroy$.complete();
41
+ }
42
+ /**
43
+ * Attach a TemplatePortal as content to this popover container.
44
+ * @param portal Portal to be attached as the popover content.
45
+ */
46
+ attachTemplatePortal(portal) {
47
+ if (this._portalOutlet.hasAttached()) {
48
+ throw Error('Popover template already attached');
49
+ }
50
+ return this._portalOutlet.attachTemplatePortal(portal);
51
+ }
52
+ /**
53
+ * Attach a ComponentPortal as content to this popover container.
54
+ * @param portal Portal to be attached as the popover content.
55
+ */
56
+ attachComponentPortal(portal) {
57
+ if (this._portalOutlet.hasAttached()) {
58
+ throw Error('Popover component already attached');
59
+ }
60
+ return this._portalOutlet.attachComponentPortal(portal);
61
+ }
62
+ setTextualContent(content) {
63
+ this.content = content;
64
+ }
65
+ updatePosition() {
66
+ this._updatePosition.next();
67
+ }
68
+ _watchMousePosition() {
69
+ const componentVisibilityChange$ = this.popoverRef.componentVisible$
70
+ .pipe(filter((value) => value === true));
71
+ this._zone.runOutsideAngular(() => {
72
+ fromEvent(document, 'mousemove')
73
+ .pipe(takeUntil(componentVisibilityChange$), takeUntil(this._destroy$))
74
+ .subscribe((e) => {
75
+ this.spinner.nativeElement.style.left = e.x + 'px';
76
+ this.spinner.nativeElement.style.top = (e.y + 20) + 'px';
77
+ });
78
+ });
79
+ }
80
+ _updateClass() {
81
+ this.class = ['popover-wrapper', this._wrapperClass].filter(Boolean).join(' ');
82
+ }
83
+ _observeContentChanges() {
84
+ const config = {
85
+ childList: true,
86
+ subtree: true
87
+ };
88
+ this._contentChangesObserver = new MutationObserver(() => {
89
+ this.updatePosition();
90
+ });
91
+ this._contentChangesObserver.observe(this._el.nativeElement, config);
92
+ }
93
+ _listenUpdatePositionRequests() {
94
+ this._updatePosition
95
+ .pipe(debounceTime(50), takeUntil(this._destroy$))
96
+ .subscribe(() => {
97
+ this.popoverRef.updatePosition();
98
+ });
99
+ }
100
+ }
101
+ FsPopoverWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverWrapperComponent, deps: [{ token: i1.FsPopoverRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
102
+ FsPopoverWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsPopoverWrapperComponent, selector: "fs-popover-wrapper", host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "_portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }, { propertyName: "spinner", first: true, predicate: ["spinner"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"wrapper\" [ngClass]=\"{\n 'theme-dark' : popoverRef.theme === 'dark',\n 'size-tiny': popoverRef.size === 'tiny',\n 'size-small': popoverRef.size === 'small',\n 'hidden': !(popoverRef.componentVisible$ | async)\n }\">\n <div class=\"mat-elevation-z4 popover-content\">\n <ng-container *ngIf=\"content\">\n {{content}}\n </ng-container>\n\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n\n <div class=\"fs-popover-arrow light\"></div>\n <div class=\"fs-popover-arrow dark\"></div>\n</div>\n\n<div class=\"loading-spinner\"\n #spinner\n *ngIf=\"popoverRef.loading && !(popoverRef.componentVisible$ | async)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.width]=\"popoverRef.loadingDiameter\" [attr.height]=\"popoverRef.loadingDiameter\" viewBox=\"0 0 42 42\" stroke=\"grey\">\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(1 1)\" stroke-width=\"3\">\n <circle stroke-opacity=\".5\" cx=\"18\" cy=\"18\" r=\"18\"/>\n <path d=\"M36 18c0-9.94-8.06-18-18-18\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 18 18\" to=\"360 18 18\" dur=\"1s\" repeatCount=\"indefinite\"/>\n </path>\n </g>\n </g>\n </svg>\n</div>\n", styles: [".wrapper{padding:6px;animation:fadeIn ease .2s}.wrapper.hidden{display:none}.wrapper .popover-content{background:#fff;border-radius:4px;padding:8px;color:#1b1b1b;box-sizing:border-box;overflow:hidden}.wrapper.theme-dark .popover-content{background-color:#707070;color:#fff}.wrapper.size-small .popover-content{font-size:80%}.wrapper.size-tiny .popover-content{font-size:70%}.wrapper .fs-popover-arrow{width:0;height:0;font-size:0;line-height:0;position:absolute;z-index:200;z-index:1}.wrapper .fs-popover-arrow.dark{z-index:0}::ng-deep .fs-popover-top .fs-popover-arrow,::ng-deep .fs-popover-bottom .fs-popover-arrow{border-left:10px solid transparent;border-right:10px solid transparent}::ng-deep .fs-popover-left .fs-popover-arrow,::ng-deep .fs-popover-right .fs-popover-arrow{border-top:10px solid transparent;border-bottom:10px solid transparent}::ng-deep .fs-popover-top .fs-popover-arrow{bottom:-3px;left:calc(50% - 10px);border-top:10px solid #fff}::ng-deep .fs-popover-top .fs-popover-arrow.dark{border-top-color:#dfdfdf40;bottom:-4px}::ng-deep .fs-popover-bottom .fs-popover-arrow{top:-3px;left:calc(50% - 10px);border-bottom:10px solid #fff}::ng-deep .fs-popover-bottom .fs-popover-arrow.dark{border-bottom-color:#dfdfdf40;top:-4px}::ng-deep .fs-popover-left .fs-popover-arrow{left:-3px;top:calc(50% - 10px);border-right:10px solid #fff}::ng-deep .fs-popover-left .fs-popover-arrow.dark{border-right-color:#dfdfdf40;left:-4px}::ng-deep .fs-popover-right .fs-popover-arrow{right:-3px;top:calc(50% - 10px);border-left:10px solid #fff}::ng-deep .fs-popover-right .fs-popover-arrow.dark{border-left-color:#dfdfdf40;right:-4px}::ng-deep .fs-popover-bottom .wrapper.theme-dark .fs-popover-arrow{border-bottom-color:#707070}::ng-deep .fs-popover-left .wrapper.theme-dark .fs-popover-arrow{border-right-color:#707070}::ng-deep .fs-popover-right .wrapper.theme-dark .fs-popover-arrow{border-left-color:#707070}::ng-deep .fs-popover-top .wrapper.theme-dark .fs-popover-arrow{border-top-color:#707070}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}\n"], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], pipes: { "async": i2.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverWrapperComponent, decorators: [{
104
+ type: Component,
105
+ args: [{
106
+ selector: 'fs-popover-wrapper',
107
+ templateUrl: 'popover-wrapper.component.html',
108
+ styleUrls: ['popover-wrapper.component.scss'],
109
+ changeDetection: ChangeDetectionStrategy.OnPush,
110
+ }]
111
+ }], ctorParameters: function () { return [{ type: i1.FsPopoverRef }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { _portalOutlet: [{
112
+ type: ViewChild,
113
+ args: [CdkPortalOutlet, { static: true }]
114
+ }], spinner: [{
115
+ type: ViewChild,
116
+ args: ['spinner']
117
+ }], class: [{
118
+ type: HostBinding,
119
+ args: ['class']
120
+ }] } });
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyLXdyYXBwZXIvcG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyLXdyYXBwZXIvcG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFVBQVUsRUFFVixTQUFTLEVBQ1QsV0FBVyxFQUNBLE1BQU0sR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixlQUFlLEVBR2hCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7OztBQVN2RCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsZ0JBQWdCO0lBbUI3RCxZQUNTLFVBQXdCLEVBQ3ZCLEdBQWUsRUFDZixLQUFhO1FBRXJCLEtBQUssRUFBRSxDQUFDO1FBSkQsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQUN2QixRQUFHLEdBQUgsR0FBRyxDQUFZO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQVhoQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBSWQsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRXRDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBUXRDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixJQUFJLENBQUMsWUFBWSxH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TSxFQUFFLElBQUksRUFBRTtnQkFJckMsT0FBTztzQkFEYixTQUFTO3VCQUFDLFNBQVM7Z0JBR0UsS0FBSztzQkFBMUIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIFZpZXdDaGlsZCxcbiAgSG9zdEJpbmRpbmcsXG4gIE9uRGVzdHJveSwgTmdab25lLFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBCYXNlUG9ydGFsT3V0bGV0LFxuICBDZGtQb3J0YWxPdXRsZXQsXG4gIENvbXBvbmVudFBvcnRhbCxcbiAgVGVtcGxhdGVQb3J0YWxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5cbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRnNQb3BvdmVyUmVmIH0gZnJvbSAnLi4vLi4vY2xhc3MvcG9wb3Zlci1yZWYnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLXBvcG92ZXItd3JhcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAncG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICdwb3BvdmVyLXdyYXBwZXIuY29tcG9uZW50LnNjc3MnIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGc1BvcG92ZXJXcmFwcGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZVBvcnRhbE91dGxldCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKENka1BvcnRhbE91dGxldCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIF9wb3J0YWxPdXRsZXQ6IENka1BvcnRhbE91dGxldDtcblxuICBAVmlld0NoaWxkKCdzcGlubmVyJylcbiAgcHVibGljIHNwaW5uZXI7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzO1xuXG4gIHB1YmxpYyBjb250ZW50OiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF93cmFwcGVyQ2xhc3M7XG4gIHByaXZhdGUgX2NvbnRlbnRDaGFuZ2VzT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgX3VwZGF0ZVBvc2l0aW9uID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBvcG92ZXJSZWY6IEZzUG9wb3ZlclJlZixcbiAgICBwcml2YXRlIF9lbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF96b25lOiBOZ1pvbmUsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdXBkYXRlQ2xhc3MoKTtcblxuICAgIHRoaXMud3JhcHBlckNsYXNzID0gdGhpcy5wb3BvdmVyUmVmLndyYXBwZXJDbGFzcztcbiAgICB0aGlzLm1heFdpZHRoID0gdGhpcy5wb3BvdmVyUmVmLm1heFdpZHRoO1xuICB9XG5cbiAgcHVibGljIHNldCBtYXhXaWR0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9IHZhbHVlID8gdmFsdWUgKyAncHgnIDogdm9pZCAwO1xuICB9XG5cbiAgcHVibGljIHNldCB3cmFwcGVyQ2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3dyYXBwZXJDbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZUNsYXNzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBvcG92ZXJSZWYuYXV0b1Nob3cgJiYgdGhpcy5wb3BvdmVyUmVmLmNvbXBvbmVudExvYWRpbmcpIHtcbiAgICAgIHRoaXMuX3dhdGNoTW91c2VQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuX29ic2VydmVDb250ZW50Q2hhbmdlcygpO1xuICAgIHRoaXMuX2xpc3RlblVwZGF0ZVBvc2l0aW9uUmVxdWVzdHMoKTtcbiAgfVxuXG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2NvbnRlbnRDaGFuZ2VzT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCBhIFRlbXBsYXRlUG9ydGFsIGFzIGNvbnRlbnQgdG8gdGhpcyBwb3BvdmVyIGNvbnRhaW5lci5cbiAgICogQHBhcmFtIHBvcnRhbCBQb3J0YWwgdG8gYmUgYXR0YWNoZWQgYXMgdGhlIHBvcG92ZXIgY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBhdHRhY2hUZW1wbGF0ZVBvcnRhbDxDPihwb3J0YWw6IFRlbXBsYXRlUG9ydGFsPEM+KTogRW1iZWRkZWRWaWV3UmVmPEM+IHtcblxuICAgIGlmICh0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1BvcG92ZXIgdGVtcGxhdGUgYWxyZWFkeSBhdHRhY2hlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwocG9ydGFsKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEF0dGFjaCBhIENvbXBvbmVudFBvcnRhbCBhcyBjb250ZW50IHRvIHRoaXMgcG9wb3ZlciBjb250YWluZXIuXG4gICAqIEBwYXJhbSBwb3J0YWwgUG9ydGFsIHRvIGJlIGF0dGFjaGVkIGFzIHRoZSBwb3BvdmVyIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgYXR0YWNoQ29tcG9uZW50UG9ydGFsPFQ+KHBvcnRhbDogQ29tcG9uZW50UG9ydGFsPFQ+KTogQ29tcG9uZW50UmVmPFQ+IHtcblxuICAgIGlmICh0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1BvcG92ZXIgY29tcG9uZW50IGFscmVhZHkgYXR0YWNoZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChwb3J0YWwpO1xuICB9XG5cbiAgcHVibGljIHNldFRleHR1YWxDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgdGhpcy5fdXBkYXRlUG9zaXRpb24ubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hNb3VzZVBvc2l0aW9uKCkge1xuICAgIGNvbnN0IGNvbXBvbmVudFZpc2liaWxpdHlDaGFuZ2UkID0gdGhpcy5wb3BvdmVyUmVmLmNvbXBvbmVudFZpc2libGUkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHRydWUpXG4gICAgICApO1xuXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZW1vdmUnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwoY29tcG9uZW50VmlzaWJpbGl0eUNoYW5nZSQpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3Bpbm5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBlLnggKyAncHgnO1xuICAgICAgICAgIHRoaXMuc3Bpbm5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IChlLnkgKyAyMCkgKyAncHgnO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUNsYXNzKCkge1xuICAgIHRoaXMuY2xhc3MgPSBbJ3BvcG92ZXItd3JhcHBlcicsIHRoaXMuX3dyYXBwZXJDbGFzc10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgX29ic2VydmVDb250ZW50Q2hhbmdlcygpIHtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbnRlbnRDaGFuZ2VzT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb250ZW50Q2hhbmdlc09ic2VydmVyLm9ic2VydmUodGhpcy5fZWwubmF0aXZlRWxlbWVudCwgY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlblVwZGF0ZVBvc2l0aW9uUmVxdWVzdHMoKSB7XG4gICAgdGhpcy5fdXBkYXRlUG9zaXRpb25cbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucG9wb3ZlclJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfSlcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIndyYXBwZXJcIiBbbmdDbGFzc109XCJ7XG4gICd0aGVtZS1kYXJrJyA6IHBvcG92ZXJSZWYudGhlbWUgPT09ICdkYXJrJyxcbiAgJ3NpemUtdGlueSc6IHBvcG92ZXJSZWYuc2l6ZSA9PT0gJ3RpbnknLFxuICAnc2l6ZS1zbWFsbCc6IHBvcG92ZXJSZWYuc2l6ZSA9PT0gJ3NtYWxsJyxcbiAgJ2hpZGRlbic6ICEocG9wb3ZlclJlZi5jb21wb25lbnRWaXNpYmxlJCB8IGFzeW5jKVxuICB9XCI+XG4gIDxkaXYgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo0IHBvcG92ZXItY29udGVudFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50XCI+XG4gICAgICB7e2NvbnRlbnR9fVxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlIGNka1BvcnRhbE91dGxldD48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZnMtcG9wb3Zlci1hcnJvdyBsaWdodFwiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZnMtcG9wb3Zlci1hcnJvdyBkYXJrXCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiXG4gICAgI3NwaW5uZXJcbiAgICAqbmdJZj1cInBvcG92ZXJSZWYubG9hZGluZyAmJiAhKHBvcG92ZXJSZWYuY29tcG9uZW50VmlzaWJsZSQgfCBhc3luYylcIj5cbiAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgW2F0dHIud2lkdGhdPVwicG9wb3ZlclJlZi5sb2FkaW5nRGlhbWV0ZXJcIiBbYXR0ci5oZWlnaHRdPVwicG9wb3ZlclJlZi5sb2FkaW5nRGlhbWV0ZXJcIiB2aWV3Qm94PVwiMCAwIDQyIDQyXCIgc3Ryb2tlPVwiZ3JleVwiPlxuICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEgMSlcIiBzdHJva2Utd2lkdGg9XCIzXCI+XG4gICAgICAgIDxjaXJjbGUgc3Ryb2tlLW9wYWNpdHk9XCIuNVwiIGN4PVwiMThcIiBjeT1cIjE4XCIgcj1cIjE4XCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTM2IDE4YzAtOS45NC04LjA2LTE4LTE4LTE4XCI+XG4gICAgICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT1cInRyYW5zZm9ybVwiIHR5cGU9XCJyb3RhdGVcIiBmcm9tPVwiMCAxOCAxOFwiIHRvPVwiMzYwIDE4IDE4XCIgZHVyPVwiMXNcIiByZXBlYXRDb3VudD1cImluZGVmaW5pdGVcIi8+XG4gICAgICAgIDwvcGF0aD5cbiAgICAgIDwvZz5cbiAgICA8L2c+XG4gIDwvc3ZnPlxuPC9kaXY+XG4iXX0=