@firestitch/popover 12.1.3 → 12.2.1
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/app/class/popover-ref.d.ts +34 -34
- package/app/components/popover/popover.component.d.ts +6 -50
- package/app/components/popover-wrapper/popover-wrapper.component.d.ts +40 -39
- package/app/directives/popover.directive.d.ts +55 -0
- package/app/enums/position.d.ts +6 -6
- package/app/fs-popover.module.d.ts +11 -10
- package/app/helpers/create-injector.d.ts +4 -4
- package/app/helpers/create-overlay-ref.d.ts +4 -4
- package/app/helpers/create-position-strategy.d.ts +4 -4
- package/app/helpers/create-template-portal.d.ts +4 -4
- package/app/helpers/point-in-rect.d.ts +1 -1
- package/app/interfaces/popover-config.interface.d.ts +16 -16
- package/app/services/popover.service.d.ts +21 -20
- package/bundles/firestitch-popover.umd.js +1004 -937
- package/bundles/firestitch-popover.umd.js.map +1 -1
- package/esm2015/app/class/popover-ref.js +85 -85
- package/esm2015/app/components/popover/popover.component.js +20 -191
- package/esm2015/app/components/popover-wrapper/popover-wrapper.component.js +123 -118
- package/esm2015/app/directives/popover.directive.js +222 -0
- package/esm2015/app/enums/position.js +7 -7
- package/esm2015/app/fs-popover.module.js +38 -33
- package/esm2015/app/helpers/create-injector.js +8 -8
- package/esm2015/app/helpers/create-overlay-ref.js +11 -11
- package/esm2015/app/helpers/create-position-strategy.js +55 -55
- package/esm2015/app/helpers/create-template-portal.js +4 -4
- package/esm2015/app/helpers/point-in-rect.js +3 -3
- package/esm2015/app/interfaces/popover-config.interface.js +1 -1
- package/esm2015/app/services/popover.service.js +64 -59
- package/esm2015/firestitch-popover.js +4 -4
- package/esm2015/public_api.js +9 -8
- package/fesm2015/firestitch-popover.js +582 -521
- package/fesm2015/firestitch-popover.js.map +1 -1
- package/firestitch-popover.d.ts +5 -5
- package/package.json +1 -1
- package/public_api.d.ts +6 -5
- package/styles.scss +28 -4
|
@@ -1,191 +1,20 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
export class FsPopoverComponent extends FsPopoverDirective {
|
|
6
|
+
}
|
|
7
|
+
FsPopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
8
|
+
FsPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsPopoverComponent, selector: "fs-popover", host: { classAttribute: "fs-popover-component" }, usesInheritance: true, ngImport: i0, template: "<span [ngClass]=\"{'popover-container': enabled}\">\n <ng-content></ng-content>\n</span>\n", directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverComponent, decorators: [{
|
|
10
|
+
type: Component,
|
|
11
|
+
args: [{
|
|
12
|
+
selector: 'fs-popover',
|
|
13
|
+
templateUrl: 'popover.component.html',
|
|
14
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
15
|
+
host: {
|
|
16
|
+
'class': 'fs-popover-component',
|
|
17
|
+
}
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBV3hFLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxrQkFBa0I7O2dIQUE3QyxrQkFBa0I7b0dBQWxCLGtCQUFrQiwySENaL0IsNkZBR0E7NEZEU2Esa0JBQWtCO2tCQVI5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixXQUFXLEVBQUUsd0JBQXdCO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsSUFBSSxFQUFFO3dCQUNKLE9BQU8sRUFBRSxzQkFBc0I7cUJBQ2hDO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnNQb3BvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9wb3BvdmVyLmRpcmVjdGl2ZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtcG9wb3ZlcicsXG4gIHRlbXBsYXRlVXJsOiAncG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2ZzLXBvcG92ZXItY29tcG9uZW50JyxcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBGc1BvcG92ZXJDb21wb25lbnQgZXh0ZW5kcyBGc1BvcG92ZXJEaXJlY3RpdmUge31cbiIsIjxzcGFuIFtuZ0NsYXNzXT1cInsncG9wb3Zlci1jb250YWluZXInOiBlbmFibGVkfVwiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L3NwYW4+XG4iXX0=
|
|
@@ -1,118 +1,123 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ElementRef, ViewChild,
|
|
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.
|
|
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
|
-
|
|
63
|
-
this.
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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, NgZone, Renderer2, } 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, _renderer) {
|
|
12
|
+
super();
|
|
13
|
+
this.popoverRef = popoverRef;
|
|
14
|
+
this._el = _el;
|
|
15
|
+
this._zone = _zone;
|
|
16
|
+
this._renderer = _renderer;
|
|
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
|
+
if (this._wrapperClass) {
|
|
82
|
+
this._renderer.addClass(this._el.nativeElement, this._wrapperClass);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
_observeContentChanges() {
|
|
86
|
+
const config = {
|
|
87
|
+
childList: true,
|
|
88
|
+
subtree: true
|
|
89
|
+
};
|
|
90
|
+
this._contentChangesObserver = new MutationObserver(() => {
|
|
91
|
+
this.updatePosition();
|
|
92
|
+
});
|
|
93
|
+
this._contentChangesObserver.observe(this._el.nativeElement, config);
|
|
94
|
+
}
|
|
95
|
+
_listenUpdatePositionRequests() {
|
|
96
|
+
this._updatePosition
|
|
97
|
+
.pipe(debounceTime(50), takeUntil(this._destroy$))
|
|
98
|
+
.subscribe(() => {
|
|
99
|
+
this.popoverRef.updatePosition();
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
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 }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
104
|
+
FsPopoverWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsPopoverWrapperComponent, selector: "fs-popover-wrapper", host: { classAttribute: "fs-popover-wrapper" }, 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 });
|
|
105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsPopoverWrapperComponent, decorators: [{
|
|
106
|
+
type: Component,
|
|
107
|
+
args: [{
|
|
108
|
+
selector: 'fs-popover-wrapper',
|
|
109
|
+
templateUrl: 'popover-wrapper.component.html',
|
|
110
|
+
styleUrls: ['popover-wrapper.component.scss'],
|
|
111
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
112
|
+
host: {
|
|
113
|
+
'class': 'fs-popover-wrapper',
|
|
114
|
+
},
|
|
115
|
+
}]
|
|
116
|
+
}], ctorParameters: function () { return [{ type: i1.FsPopoverRef }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }]; }, propDecorators: { _portalOutlet: [{
|
|
117
|
+
type: ViewChild,
|
|
118
|
+
args: [CdkPortalOutlet, { static: true }]
|
|
119
|
+
}], spinner: [{
|
|
120
|
+
type: ViewChild,
|
|
121
|
+
args: ['spinner']
|
|
122
|
+
}] } });
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyLXdyYXBwZXIvcG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyLXdyYXBwZXIvcG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFVBQVUsRUFFVixTQUFTLEVBRVQsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGVBQWUsR0FHaEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBWXZELE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxnQkFBZ0I7SUFnQjdELFlBQ1MsVUFBd0IsRUFDdkIsR0FBZSxFQUNmLEtBQWEsRUFDYixTQUFvQjtRQUU1QixLQUFLLEVBQUUsQ0FBQztRQUxELGVBQVUsR0FBVixVQUFVLENBQWM7UUFDdkIsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUNmLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBUnRCLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUV0QyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVN0QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsSUFBSSxD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QUFvQjtxQkFDOUI7aUJBQ0Y7eUtBSVEsYUFBYTtzQkFEbkIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlyQyxPQUFPO3NCQURiLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRWxlbWVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBWaWV3Q2hpbGQsXG4gIE9uRGVzdHJveSxcbiAgTmdab25lLFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEJhc2VQb3J0YWxPdXRsZXQsXG4gIENka1BvcnRhbE91dGxldCxcbiAgQ29tcG9uZW50UG9ydGFsLFxuICBUZW1wbGF0ZVBvcnRhbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5cbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRnNQb3BvdmVyUmVmIH0gZnJvbSAnLi4vLi4vY2xhc3MvcG9wb3Zlci1yZWYnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLXBvcG92ZXItd3JhcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAncG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICdwb3BvdmVyLXdyYXBwZXIuY29tcG9uZW50LnNjc3MnIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2ZzLXBvcG92ZXItd3JhcHBlcicsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEZzUG9wb3ZlcldyYXBwZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlUG9ydGFsT3V0bGV0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoQ2RrUG9ydGFsT3V0bGV0LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgX3BvcnRhbE91dGxldDogQ2RrUG9ydGFsT3V0bGV0O1xuXG4gIEBWaWV3Q2hpbGQoJ3NwaW5uZXInKVxuICBwdWJsaWMgc3Bpbm5lcjogRWxlbWVudFJlZjtcblxuICBwdWJsaWMgY29udGVudDogc3RyaW5nO1xuXG4gIHByaXZhdGUgX3dyYXBwZXJDbGFzczogc3RyaW5nO1xuICBwcml2YXRlIF9jb250ZW50Q2hhbmdlc09ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIF91cGRhdGVQb3NpdGlvbiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBwb3BvdmVyUmVmOiBGc1BvcG92ZXJSZWYsXG4gICAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdXBkYXRlQ2xhc3MoKTtcblxuICAgIHRoaXMud3JhcHBlckNsYXNzID0gdGhpcy5wb3BvdmVyUmVmLndyYXBwZXJDbGFzcztcbiAgICB0aGlzLm1heFdpZHRoID0gdGhpcy5wb3BvdmVyUmVmLm1heFdpZHRoO1xuICB9XG5cbiAgcHVibGljIHNldCBtYXhXaWR0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9IHZhbHVlID8gdmFsdWUgKyAncHgnIDogdm9pZCAwO1xuICB9XG5cbiAgcHVibGljIHNldCB3cmFwcGVyQ2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3dyYXBwZXJDbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZUNsYXNzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBvcG92ZXJSZWYuYXV0b1Nob3cgJiYgdGhpcy5wb3BvdmVyUmVmLmNvbXBvbmVudExvYWRpbmcpIHtcbiAgICAgIHRoaXMuX3dhdGNoTW91c2VQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuX29ic2VydmVDb250ZW50Q2hhbmdlcygpO1xuICAgIHRoaXMuX2xpc3RlblVwZGF0ZVBvc2l0aW9uUmVxdWVzdHMoKTtcbiAgfVxuXG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2NvbnRlbnRDaGFuZ2VzT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCBhIFRlbXBsYXRlUG9ydGFsIGFzIGNvbnRlbnQgdG8gdGhpcyBwb3BvdmVyIGNvbnRhaW5lci5cbiAgICogQHBhcmFtIHBvcnRhbCBQb3J0YWwgdG8gYmUgYXR0YWNoZWQgYXMgdGhlIHBvcG92ZXIgY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBhdHRhY2hUZW1wbGF0ZVBvcnRhbDxDPihwb3J0YWw6IFRlbXBsYXRlUG9ydGFsPEM+KTogRW1iZWRkZWRWaWV3UmVmPEM+IHtcblxuICAgIGlmICh0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1BvcG92ZXIgdGVtcGxhdGUgYWxyZWFkeSBhdHRhY2hlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwocG9ydGFsKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEF0dGFjaCBhIENvbXBvbmVudFBvcnRhbCBhcyBjb250ZW50IHRvIHRoaXMgcG9wb3ZlciBjb250YWluZXIuXG4gICAqIEBwYXJhbSBwb3J0YWwgUG9ydGFsIHRvIGJlIGF0dGFjaGVkIGFzIHRoZSBwb3BvdmVyIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgYXR0YWNoQ29tcG9uZW50UG9ydGFsPFQ+KHBvcnRhbDogQ29tcG9uZW50UG9ydGFsPFQ+KTogQ29tcG9uZW50UmVmPFQ+IHtcblxuICAgIGlmICh0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1BvcG92ZXIgY29tcG9uZW50IGFscmVhZHkgYXR0YWNoZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChwb3J0YWwpO1xuICB9XG5cbiAgcHVibGljIHNldFRleHR1YWxDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgdGhpcy5fdXBkYXRlUG9zaXRpb24ubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hNb3VzZVBvc2l0aW9uKCkge1xuICAgIGNvbnN0IGNvbXBvbmVudFZpc2liaWxpdHlDaGFuZ2UkID0gdGhpcy5wb3BvdmVyUmVmLmNvbXBvbmVudFZpc2libGUkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHRydWUpXG4gICAgICApO1xuXG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZW1vdmUnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwoY29tcG9uZW50VmlzaWJpbGl0eUNoYW5nZSQpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3Bpbm5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBlLnggKyAncHgnO1xuICAgICAgICAgIHRoaXMuc3Bpbm5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IChlLnkgKyAyMCkgKyAncHgnO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUNsYXNzKCkge1xuICAgIGlmICh0aGlzLl93cmFwcGVyQ2xhc3MpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3dyYXBwZXJDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZUNvbnRlbnRDaGFuZ2VzKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9O1xuXG4gICAgdGhpcy5fY29udGVudENoYW5nZXNPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2NvbnRlbnRDaGFuZ2VzT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LCBjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuVXBkYXRlUG9zaXRpb25SZXF1ZXN0cygpIHtcbiAgICB0aGlzLl91cGRhdGVQb3NpdGlvblxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSg1MCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5wb3BvdmVyUmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB9KVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwid3JhcHBlclwiIFtuZ0NsYXNzXT1cIntcbiAgJ3RoZW1lLWRhcmsnIDogcG9wb3ZlclJlZi50aGVtZSA9PT0gJ2RhcmsnLFxuICAnc2l6ZS10aW55JzogcG9wb3ZlclJlZi5zaXplID09PSAndGlueScsXG4gICdzaXplLXNtYWxsJzogcG9wb3ZlclJlZi5zaXplID09PSAnc21hbGwnLFxuICAnaGlkZGVuJzogIShwb3BvdmVyUmVmLmNvbXBvbmVudFZpc2libGUkIHwgYXN5bmMpXG4gIH1cIj5cbiAgPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejQgcG9wb3Zlci1jb250ZW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRcIj5cbiAgICAgIHt7Y29udGVudH19XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgY2RrUG9ydGFsT3V0bGV0PjwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJmcy1wb3BvdmVyLWFycm93IGxpZ2h0XCI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmcy1wb3BvdmVyLWFycm93IGRhcmtcIj48L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCJcbiAgICAjc3Bpbm5lclxuICAgICpuZ0lmPVwicG9wb3ZlclJlZi5sb2FkaW5nICYmICEocG9wb3ZlclJlZi5jb21wb25lbnRWaXNpYmxlJCB8IGFzeW5jKVwiPlxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBbYXR0ci53aWR0aF09XCJwb3BvdmVyUmVmLmxvYWRpbmdEaWFtZXRlclwiIFthdHRyLmhlaWdodF09XCJwb3BvdmVyUmVmLmxvYWRpbmdEaWFtZXRlclwiIHZpZXdCb3g9XCIwIDAgNDIgNDJcIiBzdHJva2U9XCJncmV5XCI+XG4gICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMSAxKVwiIHN0cm9rZS13aWR0aD1cIjNcIj5cbiAgICAgICAgPGNpcmNsZSBzdHJva2Utb3BhY2l0eT1cIi41XCIgY3g9XCIxOFwiIGN5PVwiMThcIiByPVwiMThcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJNMzYgMThjMC05Ljk0LTguMDYtMTgtMTgtMThcIj5cbiAgICAgICAgICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPVwidHJhbnNmb3JtXCIgdHlwZT1cInJvdGF0ZVwiIGZyb209XCIwIDE4IDE4XCIgdG89XCIzNjAgMTggMThcIiBkdXI9XCIxc1wiIHJlcGVhdENvdW50PVwiaW5kZWZpbml0ZVwiLz5cbiAgICAgICAgPC9wYXRoPlxuICAgICAgPC9nPlxuICAgIDwvZz5cbiAgPC9zdmc+XG48L2Rpdj5cbiJdfQ==
|