@firestitch/popover 14.0.0 → 16.0.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.
- package/app/components/popover/popover.component.d.ts +1 -1
- package/app/components/popover-wrapper/popover-wrapper.component.d.ts +1 -1
- package/app/directives/popover.directive.d.ts +1 -1
- package/esm2022/app/class/popover-ref.mjs +93 -0
- package/{esm2020 → esm2022}/app/components/popover/popover.component.mjs +4 -4
- package/esm2022/app/components/popover-wrapper/popover-wrapper.component.mjs +126 -0
- package/esm2022/app/directives/popover.directive.mjs +232 -0
- package/{esm2020 → esm2022}/app/fs-popover.module.mjs +10 -10
- package/esm2022/app/services/popover.service.mjs +68 -0
- package/{fesm2020 → fesm2022}/firestitch-popover.mjs +77 -46
- package/{fesm2020 → fesm2022}/firestitch-popover.mjs.map +1 -1
- package/package.json +5 -11
- package/esm2020/app/class/popover-ref.mjs +0 -86
- package/esm2020/app/components/popover-wrapper/popover-wrapper.component.mjs +0 -117
- package/esm2020/app/directives/popover.directive.mjs +0 -221
- package/esm2020/app/services/popover.service.mjs +0 -64
- package/fesm2015/firestitch-popover.mjs +0 -611
- package/fesm2015/firestitch-popover.mjs.map +0 -1
- /package/{esm2020 → esm2022}/app/enums/position.mjs +0 -0
- /package/{esm2020 → esm2022}/app/helpers/create-injector.mjs +0 -0
- /package/{esm2020 → esm2022}/app/helpers/create-overlay-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/app/helpers/create-position-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/app/helpers/create-template-portal.mjs +0 -0
- /package/{esm2020 → esm2022}/app/helpers/point-in-rect.mjs +0 -0
- /package/{esm2020 → esm2022}/app/interfaces/popover-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/firestitch-popover.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
|
@@ -2,5 +2,5 @@ import { FsPopoverDirective } from '../../directives/popover.directive';
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export declare class FsPopoverComponent extends FsPopoverDirective {
|
|
4
4
|
static ɵfac: i0.ɵɵFactoryDeclaration<FsPopoverComponent, never>;
|
|
5
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FsPopoverComponent, "fs-popover", never, {}, {}, never, ["*"], false>;
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FsPopoverComponent, "fs-popover", never, {}, {}, never, ["*"], false, never>;
|
|
6
6
|
}
|
|
@@ -36,5 +36,5 @@ export declare class FsPopoverWrapperComponent extends BasePortalOutlet implemen
|
|
|
36
36
|
private _observeContentChanges;
|
|
37
37
|
private _listenUpdatePositionRequests;
|
|
38
38
|
static ɵfac: i0.ɵɵFactoryDeclaration<FsPopoverWrapperComponent, never>;
|
|
39
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FsPopoverWrapperComponent, "fs-popover-wrapper", never, {}, {}, never, never, false>;
|
|
39
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FsPopoverWrapperComponent, "fs-popover-wrapper", never, {}, {}, never, never, false, never>;
|
|
40
40
|
}
|
|
@@ -51,5 +51,5 @@ export declare class FsPopoverDirective implements OnInit, OnChanges, OnDestroy
|
|
|
51
51
|
private _listenMouseHostLeave$;
|
|
52
52
|
private _mouseLeftTheTargets;
|
|
53
53
|
static ɵfac: i0.ɵɵFactoryDeclaration<FsPopoverDirective, [null, null, null, { optional: true; }]>;
|
|
54
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<FsPopoverDirective, "[fsPopover]", never, { "text": "text"; "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"; "enabled": "enabled"; }, {}, never, never, false>;
|
|
54
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<FsPopoverDirective, "[fsPopover]", never, { "text": { "alias": "text"; "required": false; }; "template": { "alias": "template"; "required": false; }; "data": { "alias": "data"; "required": false; }; "leaveDelay": { "alias": "leaveDelay"; "required": false; }; "showDelay": { "alias": "showDelay"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; "wrapperClass": { "alias": "wrapperClass"; "required": false; }; "autoShow": { "alias": "autoShow"; "required": false; }; "autoClose": { "alias": "autoClose"; "required": false; }; "loadingDiameter": { "alias": "loadingDiameter"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "indication": { "alias": "indication"; "required": false; }; "position": { "alias": "position"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "size": { "alias": "size"; "required": false; }; "trigger": { "alias": "trigger"; "required": false; }; "enabled": { "alias": "enabled"; "required": false; }; }, {}, never, never, false, never>;
|
|
55
55
|
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
export class FsPopoverRef {
|
|
4
|
+
overlayRef;
|
|
5
|
+
_autoShow$ = new BehaviorSubject(true);
|
|
6
|
+
_autoClose$ = new BehaviorSubject(true);
|
|
7
|
+
_componentLoading$ = new BehaviorSubject(true);
|
|
8
|
+
_maxWidth;
|
|
9
|
+
_wrapperClass;
|
|
10
|
+
_loadingDiameter;
|
|
11
|
+
_loading;
|
|
12
|
+
_theme;
|
|
13
|
+
_size;
|
|
14
|
+
constructor(config = {}) {
|
|
15
|
+
this._init(config);
|
|
16
|
+
}
|
|
17
|
+
get loadingDiameter() {
|
|
18
|
+
return this._loadingDiameter;
|
|
19
|
+
}
|
|
20
|
+
get size() {
|
|
21
|
+
return this._size;
|
|
22
|
+
}
|
|
23
|
+
get theme() {
|
|
24
|
+
return this._theme;
|
|
25
|
+
}
|
|
26
|
+
get loading() {
|
|
27
|
+
return this._loading;
|
|
28
|
+
}
|
|
29
|
+
get autoShow$() {
|
|
30
|
+
return this._autoShow$.asObservable();
|
|
31
|
+
}
|
|
32
|
+
get autoShow() {
|
|
33
|
+
return this._autoShow$.getValue();
|
|
34
|
+
}
|
|
35
|
+
set autoShow(value) {
|
|
36
|
+
this._autoShow$.next(value);
|
|
37
|
+
}
|
|
38
|
+
get autoClose$() {
|
|
39
|
+
return this._autoClose$.asObservable();
|
|
40
|
+
}
|
|
41
|
+
get autoClose() {
|
|
42
|
+
return this._autoClose$.getValue();
|
|
43
|
+
}
|
|
44
|
+
set autoClose(value) {
|
|
45
|
+
this._autoClose$.next(value);
|
|
46
|
+
}
|
|
47
|
+
get componentVisible$() {
|
|
48
|
+
return combineLatest([
|
|
49
|
+
this.autoShow$,
|
|
50
|
+
this.componentLoading$,
|
|
51
|
+
]).pipe(map(([autoShow, componentLoading]) => {
|
|
52
|
+
return autoShow || !componentLoading;
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
get componentLoading$() {
|
|
56
|
+
return this._componentLoading$.asObservable();
|
|
57
|
+
}
|
|
58
|
+
get componentLoading() {
|
|
59
|
+
return this._componentLoading$.getValue();
|
|
60
|
+
}
|
|
61
|
+
get wrapperClass() {
|
|
62
|
+
return this._wrapperClass;
|
|
63
|
+
}
|
|
64
|
+
get maxWidth() {
|
|
65
|
+
return this._maxWidth;
|
|
66
|
+
}
|
|
67
|
+
show() {
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
this._componentLoading$.next(false);
|
|
70
|
+
setTimeout(() => {
|
|
71
|
+
this.updatePosition();
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
close() {
|
|
76
|
+
this.overlayRef.detach();
|
|
77
|
+
this._componentLoading$.next(true);
|
|
78
|
+
}
|
|
79
|
+
updatePosition() {
|
|
80
|
+
this.overlayRef.updatePosition();
|
|
81
|
+
}
|
|
82
|
+
_init(config) {
|
|
83
|
+
this._wrapperClass = config.wrapperClass;
|
|
84
|
+
this._maxWidth = config.maxWidth;
|
|
85
|
+
this._loading = config.loading;
|
|
86
|
+
this._loadingDiameter = config.loadingDiameter;
|
|
87
|
+
this._size = config.size;
|
|
88
|
+
this._theme = config.theme;
|
|
89
|
+
this._autoShow$.next(config.autoShow);
|
|
90
|
+
this._autoClose$.next(config.autoClose);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1yZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2NsYXNzL3BvcG92ZXItcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtyQyxNQUFNLE9BQU8sWUFBWTtJQUVoQixVQUFVLENBQWE7SUFFYixVQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDaEQsV0FBVyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2pELGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2pFLFNBQVMsQ0FBUztJQUNsQixhQUFhLENBQVM7SUFDdEIsZ0JBQWdCLENBQVM7SUFDekIsUUFBUSxDQUFVO0lBQ2xCLE1BQU0sQ0FBUztJQUNmLEtBQUssQ0FBUztJQUV0QixZQUFZLFNBQXlCLEVBQUU7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxRQUFRLENBQUMsS0FBYztRQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBVyxTQUFTLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxhQUFhLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVM7WUFDZCxJQUFJLENBQUMsaUJBQWlCO1NBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFO1lBQ25DLE9BQU8sUUFBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVNLElBQUk7UUFDVCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sS0FBSyxDQUFDLE1BQXNCO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSVBvcG92ZXJDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvcG92ZXItY29uZmlnLmludGVyZmFjZSc7XG5cblxuZXhwb3J0IGNsYXNzIEZzUG9wb3ZlclJlZiB7XG5cbiAgcHVibGljIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b1Nob3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b0Nsb3NlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbXBvbmVudExvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSBfbWF4V2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfd3JhcHBlckNsYXNzOiBzdHJpbmc7XG4gIHByaXZhdGUgX2xvYWRpbmdEaWFtZXRlcjogbnVtYmVyO1xuICBwcml2YXRlIF9sb2FkaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF90aGVtZTogc3RyaW5nO1xuICBwcml2YXRlIF9zaXplOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBJUG9wb3ZlckNvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy5faW5pdChjb25maWcpO1xuICB9XG5cbiAgcHVibGljIGdldCBsb2FkaW5nRGlhbWV0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmdEaWFtZXRlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGhlbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RoZW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBsb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICB9XG5cbiAgcHVibGljIGdldCBhdXRvU2hvdyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9TaG93JC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXV0b1Nob3coKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9TaG93JC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldCBhdXRvU2hvdyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2F1dG9TaG93JC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXV0b0Nsb3NlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b0Nsb3NlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXV0b0Nsb3NlKCkge1xuICAgIHJldHVybiB0aGlzLl9hdXRvQ2xvc2UkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0IGF1dG9DbG9zZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2F1dG9DbG9zZSQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbXBvbmVudFZpc2libGUkKCkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuYXV0b1Nob3ckLFxuICAgICAgdGhpcy5jb21wb25lbnRMb2FkaW5nJCxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbYXV0b1Nob3csIGNvbXBvbmVudExvYWRpbmddKSA9PiB7XG4gICAgICAgIHJldHVybiBhdXRvU2hvdyB8fCAhY29tcG9uZW50TG9hZGluZztcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcHVibGljIGdldCBjb21wb25lbnRMb2FkaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50TG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbXBvbmVudExvYWRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudExvYWRpbmckLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHdyYXBwZXJDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBlckNsYXNzO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXhXaWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4V2lkdGg7XG4gIH1cblxuICBwdWJsaWMgc2hvdygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NvbXBvbmVudExvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNsb3NlKCkge1xuICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICB0aGlzLl9jb21wb25lbnRMb2FkaW5nJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdChjb25maWc6IElQb3BvdmVyQ29uZmlnKSB7XG4gICAgdGhpcy5fd3JhcHBlckNsYXNzID0gY29uZmlnLndyYXBwZXJDbGFzcztcbiAgICB0aGlzLl9tYXhXaWR0aCA9IGNvbmZpZy5tYXhXaWR0aDtcbiAgICB0aGlzLl9sb2FkaW5nID0gY29uZmlnLmxvYWRpbmc7XG4gICAgdGhpcy5fbG9hZGluZ0RpYW1ldGVyID0gY29uZmlnLmxvYWRpbmdEaWFtZXRlcjtcbiAgICB0aGlzLl9zaXplID0gY29uZmlnLnNpemU7XG4gICAgdGhpcy5fdGhlbWUgPSBjb25maWcudGhlbWU7XG4gICAgdGhpcy5fYXV0b1Nob3ckLm5leHQoY29uZmlnLmF1dG9TaG93KTtcbiAgICB0aGlzLl9hdXRvQ2xvc2UkLm5leHQoY29uZmlnLmF1dG9DbG9zZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -3,13 +3,13 @@ import { FsPopoverDirective } from '../../directives/popover.directive';
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@angular/common";
|
|
5
5
|
export class FsPopoverComponent extends FsPopoverDirective {
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsPopoverComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
7
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", 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", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6
8
|
}
|
|
7
|
-
|
|
8
|
-
FsPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", 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", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
9
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FsPopoverComponent, decorators: [{
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsPopoverComponent, decorators: [{
|
|
10
10
|
type: Component,
|
|
11
11
|
args: [{ selector: 'fs-popover', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
12
12
|
'class': 'fs-popover-component',
|
|
13
13
|
}, template: "<span [ngClass]=\"{'popover-container': enabled}\">\n <ng-content></ng-content>\n</span>\n" }]
|
|
14
14
|
}] });
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBV3hFLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxrQkFBa0I7d0dBQTdDLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDJIQ1ovQiw2RkFHQTs7NEZEU2Esa0JBQWtCO2tCQVI5QixTQUFTOytCQUNFLFlBQVksbUJBRUwsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixPQUFPLEVBQUUsc0JBQXNCO3FCQUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZzUG9wb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcG9wb3Zlci5kaXJlY3RpdmUnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLXBvcG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJ3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdmcy1wb3BvdmVyLWNvbXBvbmVudCcsXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgRnNQb3BvdmVyQ29tcG9uZW50IGV4dGVuZHMgRnNQb3BvdmVyRGlyZWN0aXZlIHt9XG4iLCI8c3BhbiBbbmdDbGFzc109XCJ7J3BvcG92ZXItY29udGFpbmVyJzogZW5hYmxlZH1cIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9zcGFuPlxuIl19
|
|
@@ -0,0 +1,126 @@
|
|
|
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
|
+
popoverRef;
|
|
12
|
+
_el;
|
|
13
|
+
_zone;
|
|
14
|
+
_renderer;
|
|
15
|
+
_portalOutlet;
|
|
16
|
+
spinner;
|
|
17
|
+
content;
|
|
18
|
+
_wrapperClass;
|
|
19
|
+
_contentChangesObserver;
|
|
20
|
+
_updatePosition = new Subject();
|
|
21
|
+
_destroy$ = new Subject();
|
|
22
|
+
constructor(popoverRef, _el, _zone, _renderer) {
|
|
23
|
+
super();
|
|
24
|
+
this.popoverRef = popoverRef;
|
|
25
|
+
this._el = _el;
|
|
26
|
+
this._zone = _zone;
|
|
27
|
+
this._renderer = _renderer;
|
|
28
|
+
this._updateClass();
|
|
29
|
+
this.wrapperClass = this.popoverRef.wrapperClass;
|
|
30
|
+
this.maxWidth = this.popoverRef.maxWidth;
|
|
31
|
+
}
|
|
32
|
+
set maxWidth(value) {
|
|
33
|
+
this._el.nativeElement.style.maxWidth = value ? value + 'px' : void 0;
|
|
34
|
+
}
|
|
35
|
+
set wrapperClass(value) {
|
|
36
|
+
this._wrapperClass = value;
|
|
37
|
+
this._updateClass();
|
|
38
|
+
}
|
|
39
|
+
ngOnInit() {
|
|
40
|
+
if (!this.popoverRef.autoShow && this.popoverRef.componentLoading) {
|
|
41
|
+
this._watchMousePosition();
|
|
42
|
+
}
|
|
43
|
+
this._observeContentChanges();
|
|
44
|
+
this._listenUpdatePositionRequests();
|
|
45
|
+
}
|
|
46
|
+
ngOnDestroy() {
|
|
47
|
+
this._contentChangesObserver.disconnect();
|
|
48
|
+
this._destroy$.next();
|
|
49
|
+
this._destroy$.complete();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Attach a TemplatePortal as content to this popover container.
|
|
53
|
+
* @param portal Portal to be attached as the popover content.
|
|
54
|
+
*/
|
|
55
|
+
attachTemplatePortal(portal) {
|
|
56
|
+
if (this._portalOutlet.hasAttached()) {
|
|
57
|
+
throw Error('Popover template already attached');
|
|
58
|
+
}
|
|
59
|
+
return this._portalOutlet.attachTemplatePortal(portal);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Attach a ComponentPortal as content to this popover container.
|
|
63
|
+
* @param portal Portal to be attached as the popover content.
|
|
64
|
+
*/
|
|
65
|
+
attachComponentPortal(portal) {
|
|
66
|
+
if (this._portalOutlet.hasAttached()) {
|
|
67
|
+
throw Error('Popover component already attached');
|
|
68
|
+
}
|
|
69
|
+
return this._portalOutlet.attachComponentPortal(portal);
|
|
70
|
+
}
|
|
71
|
+
setTextualContent(content) {
|
|
72
|
+
this.content = content;
|
|
73
|
+
}
|
|
74
|
+
updatePosition() {
|
|
75
|
+
this._updatePosition.next();
|
|
76
|
+
}
|
|
77
|
+
_watchMousePosition() {
|
|
78
|
+
const componentVisibilityChange$ = this.popoverRef.componentVisible$
|
|
79
|
+
.pipe(filter((value) => value === true));
|
|
80
|
+
this._zone.runOutsideAngular(() => {
|
|
81
|
+
fromEvent(document, 'mousemove')
|
|
82
|
+
.pipe(takeUntil(componentVisibilityChange$), takeUntil(this._destroy$))
|
|
83
|
+
.subscribe((e) => {
|
|
84
|
+
this.spinner.nativeElement.style.left = e.x + 'px';
|
|
85
|
+
this.spinner.nativeElement.style.top = (e.y + 20) + 'px';
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
_updateClass() {
|
|
90
|
+
if (this._wrapperClass) {
|
|
91
|
+
this._renderer.addClass(this._el.nativeElement, this._wrapperClass);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
_observeContentChanges() {
|
|
95
|
+
const config = {
|
|
96
|
+
childList: true,
|
|
97
|
+
subtree: true
|
|
98
|
+
};
|
|
99
|
+
this._contentChangesObserver = new MutationObserver(() => {
|
|
100
|
+
this.updatePosition();
|
|
101
|
+
});
|
|
102
|
+
this._contentChangesObserver.observe(this._el.nativeElement, config);
|
|
103
|
+
}
|
|
104
|
+
_listenUpdatePositionRequests() {
|
|
105
|
+
this._updatePosition
|
|
106
|
+
.pipe(debounceTime(50), takeUntil(this._destroy$))
|
|
107
|
+
.subscribe(() => {
|
|
108
|
+
this.popoverRef.updatePosition();
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsPopoverWrapperComponent, deps: [{ token: i1.FsPopoverRef }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
112
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", 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"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
113
|
+
}
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsPopoverWrapperComponent, decorators: [{
|
|
115
|
+
type: Component,
|
|
116
|
+
args: [{ selector: 'fs-popover-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
117
|
+
'class': 'fs-popover-wrapper',
|
|
118
|
+
}, 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"] }]
|
|
119
|
+
}], ctorParameters: function () { return [{ type: i1.FsPopoverRef }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }]; }, propDecorators: { _portalOutlet: [{
|
|
120
|
+
type: ViewChild,
|
|
121
|
+
args: [CdkPortalOutlet, { static: true }]
|
|
122
|
+
}], spinner: [{
|
|
123
|
+
type: ViewChild,
|
|
124
|
+
args: ['spinner']
|
|
125
|
+
}] } });
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyLXdyYXBwZXIvcG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyLXdyYXBwZXIvcG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFVBQVUsRUFFVixTQUFTLEVBRVQsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGVBQWUsR0FHaEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBWXZELE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxnQkFBZ0I7SUFpQnBEO0lBQ0M7SUFDQTtJQUNBO0lBakJILGFBQWEsQ0FBa0I7SUFHL0IsT0FBTyxDQUFhO0lBRXBCLE9BQU8sQ0FBUztJQUVmLGFBQWEsQ0FBUztJQUN0Qix1QkFBdUIsQ0FBbUI7SUFDMUMsZUFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFdEMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFeEMsWUFDUyxVQUF3QixFQUN2QixHQUFlLEVBQ2YsS0FBYSxFQUNiLFNBQW9CO1FBRTVCLEtBQUssRUFBRSxDQUFDO1FBTEQsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQUN2QixRQUFHLEdBQUgs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RUFBRSxvQkFBb0I7cUJBQzlCO3lLQUtNLGFBQWE7c0JBRG5CLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJckMsT0FBTztzQkFEYixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgVmlld0NoaWxkLFxuICBPbkRlc3Ryb3ksXG4gIE5nWm9uZSxcbiAgT25Jbml0LFxuICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBCYXNlUG9ydGFsT3V0bGV0LFxuICBDZGtQb3J0YWxPdXRsZXQsXG4gIENvbXBvbmVudFBvcnRhbCxcbiAgVGVtcGxhdGVQb3J0YWwsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZzUG9wb3ZlclJlZiB9IGZyb20gJy4uLy4uL2NsYXNzL3BvcG92ZXItcmVmJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1wb3BvdmVyLXdyYXBwZXInLFxuICB0ZW1wbGF0ZVVybDogJ3BvcG92ZXItd3JhcHBlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWyAncG9wb3Zlci13cmFwcGVyLmNvbXBvbmVudC5zY3NzJyBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdmcy1wb3BvdmVyLXdyYXBwZXInLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBGc1BvcG92ZXJXcmFwcGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZVBvcnRhbE91dGxldCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKENka1BvcnRhbE91dGxldCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIF9wb3J0YWxPdXRsZXQ6IENka1BvcnRhbE91dGxldDtcblxuICBAVmlld0NoaWxkKCdzcGlubmVyJylcbiAgcHVibGljIHNwaW5uZXI6IEVsZW1lbnRSZWY7XG5cbiAgcHVibGljIGNvbnRlbnQ6IHN0cmluZztcblxuICBwcml2YXRlIF93cmFwcGVyQ2xhc3M6IHN0cmluZztcbiAgcHJpdmF0ZSBfY29udGVudENoYW5nZXNPYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBfdXBkYXRlUG9zaXRpb24gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcG9wb3ZlclJlZjogRnNQb3BvdmVyUmVmLFxuICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3VwZGF0ZUNsYXNzKCk7XG5cbiAgICB0aGlzLndyYXBwZXJDbGFzcyA9IHRoaXMucG9wb3ZlclJlZi53cmFwcGVyQ2xhc3M7XG4gICAgdGhpcy5tYXhXaWR0aCA9IHRoaXMucG9wb3ZlclJlZi5tYXhXaWR0aDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgbWF4V2lkdGgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSB2YWx1ZSA/IHZhbHVlICsgJ3B4JyA6IHZvaWQgMDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgd3JhcHBlckNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl93cmFwcGVyQ2xhc3MgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVDbGFzcygpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wb3BvdmVyUmVmLmF1dG9TaG93ICYmIHRoaXMucG9wb3ZlclJlZi5jb21wb25lbnRMb2FkaW5nKSB7XG4gICAgICB0aGlzLl93YXRjaE1vdXNlUG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLl9vYnNlcnZlQ29udGVudENoYW5nZXMoKTtcbiAgICB0aGlzLl9saXN0ZW5VcGRhdGVQb3NpdGlvblJlcXVlc3RzKCk7XG4gIH1cblxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9jb250ZW50Q2hhbmdlc09ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSBUZW1wbGF0ZVBvcnRhbCBhcyBjb250ZW50IHRvIHRoaXMgcG9wb3ZlciBjb250YWluZXIuXG4gICAqIEBwYXJhbSBwb3J0YWwgUG9ydGFsIHRvIGJlIGF0dGFjaGVkIGFzIHRoZSBwb3BvdmVyIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgYXR0YWNoVGVtcGxhdGVQb3J0YWw8Qz4ocG9ydGFsOiBUZW1wbGF0ZVBvcnRhbDxDPik6IEVtYmVkZGVkVmlld1JlZjxDPiB7XG5cbiAgICBpZiAodGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgIHRocm93IEVycm9yKCdQb3BvdmVyIHRlbXBsYXRlIGFscmVhZHkgYXR0YWNoZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaFRlbXBsYXRlUG9ydGFsKHBvcnRhbCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSBDb21wb25lbnRQb3J0YWwgYXMgY29udGVudCB0byB0aGlzIHBvcG92ZXIgY29udGFpbmVyLlxuICAgKiBAcGFyYW0gcG9ydGFsIFBvcnRhbCB0byBiZSBhdHRhY2hlZCBhcyB0aGUgcG9wb3ZlciBjb250ZW50LlxuICAgKi9cbiAgcHVibGljIGF0dGFjaENvbXBvbmVudFBvcnRhbDxUPihwb3J0YWw6IENvbXBvbmVudFBvcnRhbDxUPik6IENvbXBvbmVudFJlZjxUPiB7XG5cbiAgICBpZiAodGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgIHRocm93IEVycm9yKCdQb3BvdmVyIGNvbXBvbmVudCBhbHJlYWR5IGF0dGFjaGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hDb21wb25lbnRQb3J0YWwocG9ydGFsKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUZXh0dWFsQ29udGVudChjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgIHRoaXMuX3VwZGF0ZVBvc2l0aW9uLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoTW91c2VQb3NpdGlvbigpIHtcbiAgICBjb25zdCBjb21wb25lbnRWaXNpYmlsaXR5Q2hhbmdlJCA9IHRoaXMucG9wb3ZlclJlZi5jb21wb25lbnRWaXNpYmxlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+IHZhbHVlID09PSB0cnVlKVxuICAgICAgKTtcblxuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKGNvbXBvbmVudFZpc2liaWxpdHlDaGFuZ2UkKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLnNwaW5uZXIubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gZS54ICsgJ3B4JztcbiAgICAgICAgICB0aGlzLnNwaW5uZXIubmF0aXZlRWxlbWVudC5zdHlsZS50b3AgPSAoZS55ICsgMjApICsgJ3B4JztcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVDbGFzcygpIHtcbiAgICBpZiAodGhpcy5fd3JhcHBlckNsYXNzKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LCB0aGlzLl93cmFwcGVyQ2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29ic2VydmVDb250ZW50Q2hhbmdlcygpIHtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbnRlbnRDaGFuZ2VzT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb250ZW50Q2hhbmdlc09ic2VydmVyLm9ic2VydmUodGhpcy5fZWwubmF0aXZlRWxlbWVudCwgY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlblVwZGF0ZVBvc2l0aW9uUmVxdWVzdHMoKSB7XG4gICAgdGhpcy5fdXBkYXRlUG9zaXRpb25cbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucG9wb3ZlclJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfSlcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIndyYXBwZXJcIiBbbmdDbGFzc109XCJ7XG4gICd0aGVtZS1kYXJrJyA6IHBvcG92ZXJSZWYudGhlbWUgPT09ICdkYXJrJyxcbiAgJ3NpemUtdGlueSc6IHBvcG92ZXJSZWYuc2l6ZSA9PT0gJ3RpbnknLFxuICAnc2l6ZS1zbWFsbCc6IHBvcG92ZXJSZWYuc2l6ZSA9PT0gJ3NtYWxsJyxcbiAgJ2hpZGRlbic6ICEocG9wb3ZlclJlZi5jb21wb25lbnRWaXNpYmxlJCB8IGFzeW5jKVxuICB9XCI+XG4gIDxkaXYgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo0IHBvcG92ZXItY29udGVudFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50XCI+XG4gICAgICB7e2NvbnRlbnR9fVxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlIGNka1BvcnRhbE91dGxldD48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZnMtcG9wb3Zlci1hcnJvdyBsaWdodFwiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZnMtcG9wb3Zlci1hcnJvdyBkYXJrXCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiXG4gICAgI3NwaW5uZXJcbiAgICAqbmdJZj1cInBvcG92ZXJSZWYubG9hZGluZyAmJiAhKHBvcG92ZXJSZWYuY29tcG9uZW50VmlzaWJsZSQgfCBhc3luYylcIj5cbiAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgW2F0dHIud2lkdGhdPVwicG9wb3ZlclJlZi5sb2FkaW5nRGlhbWV0ZXJcIiBbYXR0ci5oZWlnaHRdPVwicG9wb3ZlclJlZi5sb2FkaW5nRGlhbWV0ZXJcIiB2aWV3Qm94PVwiMCAwIDQyIDQyXCIgc3Ryb2tlPVwiZ3JleVwiPlxuICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEgMSlcIiBzdHJva2Utd2lkdGg9XCIzXCI+XG4gICAgICAgIDxjaXJjbGUgc3Ryb2tlLW9wYWNpdHk9XCIuNVwiIGN4PVwiMThcIiBjeT1cIjE4XCIgcj1cIjE4XCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTM2IDE4YzAtOS45NC04LjA2LTE4LTE4LTE4XCI+XG4gICAgICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT1cInRyYW5zZm9ybVwiIHR5cGU9XCJyb3RhdGVcIiBmcm9tPVwiMCAxOCAxOFwiIHRvPVwiMzYwIDE4IDE4XCIgZHVyPVwiMXNcIiByZXBlYXRDb3VudD1cImluZGVmaW5pdGVcIi8+XG4gICAgICAgIDwvcGF0aD5cbiAgICAgIDwvZz5cbiAgICA8L2c+XG4gIDwvc3ZnPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { ElementRef, Input, NgZone, Optional, TemplateRef, HostBinding, Directive, } 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 FsPopoverDirective {
|
|
14
|
+
_elRef;
|
|
15
|
+
_popoverService;
|
|
16
|
+
_ngZone;
|
|
17
|
+
_router;
|
|
18
|
+
_guid = guid('xxxxxxx');
|
|
19
|
+
text;
|
|
20
|
+
template;
|
|
21
|
+
data;
|
|
22
|
+
leaveDelay = 100;
|
|
23
|
+
showDelay = 0;
|
|
24
|
+
maxWidth = 250;
|
|
25
|
+
wrapperClass;
|
|
26
|
+
autoShow = true;
|
|
27
|
+
autoClose = true;
|
|
28
|
+
loadingDiameter = 20;
|
|
29
|
+
loading = true;
|
|
30
|
+
indication = true;
|
|
31
|
+
position = Position.South;
|
|
32
|
+
theme = 'light';
|
|
33
|
+
size = 'normal';
|
|
34
|
+
trigger = 'mouseover';
|
|
35
|
+
enabled = true;
|
|
36
|
+
_initialized = false;
|
|
37
|
+
_popoverRef;
|
|
38
|
+
_wrapperElement;
|
|
39
|
+
_hostBounds;
|
|
40
|
+
_mouseEnter$ = fromEvent(this._elRef.nativeElement, 'mouseenter');
|
|
41
|
+
_mouseMove$ = fromEvent(document, 'mousemove', { passive: true });
|
|
42
|
+
_mouseLeave$ = fromEvent(this._elRef.nativeElement, 'mouseleave');
|
|
43
|
+
_popoverClosed$ = new Subject();
|
|
44
|
+
_destroy$ = new Subject();
|
|
45
|
+
constructor(_elRef, _popoverService, _ngZone, _router) {
|
|
46
|
+
this._elRef = _elRef;
|
|
47
|
+
this._popoverService = _popoverService;
|
|
48
|
+
this._ngZone = _ngZone;
|
|
49
|
+
this._router = _router;
|
|
50
|
+
}
|
|
51
|
+
get openTimer$() {
|
|
52
|
+
return timer(this.showDelay);
|
|
53
|
+
}
|
|
54
|
+
get closeTimer$() {
|
|
55
|
+
return timer(this.leaveDelay);
|
|
56
|
+
}
|
|
57
|
+
ngOnInit() {
|
|
58
|
+
if (this.enabled) {
|
|
59
|
+
this._initialize();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
ngOnChanges(changes) {
|
|
63
|
+
if (changes.enabled?.currentValue !== changes.enabled?.previousValue) {
|
|
64
|
+
if (this.enabled && !this._initialized) {
|
|
65
|
+
this._initialize();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
ngOnDestroy() {
|
|
70
|
+
this._popoverClosed$.next();
|
|
71
|
+
this._destroy$.next();
|
|
72
|
+
}
|
|
73
|
+
_closePopover() {
|
|
74
|
+
this._popoverClosed$.next();
|
|
75
|
+
this._ngZone.run(() => {
|
|
76
|
+
this._wrapperElement = null;
|
|
77
|
+
if (this._popoverService.hasActivePopover) {
|
|
78
|
+
this._popoverService.close(this._popoverRef);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
_initialize() {
|
|
83
|
+
if (this._initialized) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this._popoverRef = new FsPopoverRef({
|
|
87
|
+
maxWidth: this.maxWidth,
|
|
88
|
+
wrapperClass: this.wrapperClass,
|
|
89
|
+
autoShow: this.autoShow,
|
|
90
|
+
autoClose: this.autoClose,
|
|
91
|
+
loadingDiameter: this.loadingDiameter,
|
|
92
|
+
loading: this.loading,
|
|
93
|
+
size: this.size,
|
|
94
|
+
theme: this.theme,
|
|
95
|
+
});
|
|
96
|
+
this._ngZone.runOutsideAngular(() => {
|
|
97
|
+
if (this.trigger === 'click') {
|
|
98
|
+
this._listenMouseHostClick();
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this._listenMouseHostEnter();
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
this._listenRouteChange();
|
|
105
|
+
this._initialized = true;
|
|
106
|
+
}
|
|
107
|
+
_listenRouteChange() {
|
|
108
|
+
this._router.events
|
|
109
|
+
.pipe(filter((event) => {
|
|
110
|
+
return event instanceof NavigationEnd;
|
|
111
|
+
}), pipe(takeUntil(this._destroy$
|
|
112
|
+
.pipe(delay(200)))))
|
|
113
|
+
.subscribe(() => {
|
|
114
|
+
this._closePopover();
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
_listenMouseHostClick() {
|
|
118
|
+
fromEvent(this._elRef.nativeElement, 'click', { passive: true })
|
|
119
|
+
.pipe(filter(() => this.enabled), tap((e) => {
|
|
120
|
+
e.stopPropagation();
|
|
121
|
+
this._openPopover();
|
|
122
|
+
}), switchMap(() => this._listenMouseHostLeave$()), switchMap(() => this.closeTimer$), takeUntil(this._destroy$))
|
|
123
|
+
.subscribe(() => {
|
|
124
|
+
this._closePopover();
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
_listenMouseHostEnter() {
|
|
128
|
+
const actualMouseState$ = merge(this._mouseLeave$.pipe(mapTo(true)), this._mouseEnter$.pipe(mapTo(false)))
|
|
129
|
+
.pipe(startWith(false), distinctUntilChanged());
|
|
130
|
+
this._mouseEnter$
|
|
131
|
+
.pipe(filter(() => this.enabled), filter(() => {
|
|
132
|
+
return !this._wrapperElement;
|
|
133
|
+
}), tap(() => {
|
|
134
|
+
this._popoverService.setActivePopoverGUID(this._guid);
|
|
135
|
+
}), switchMap(() => this.openTimer$),
|
|
136
|
+
// we have to check that after all delays mouse still over an elemen
|
|
137
|
+
withLatestFrom(actualMouseState$), filter(([_, mouseLeave]) => {
|
|
138
|
+
return !mouseLeave;
|
|
139
|
+
}), tap(() => this._openPopover()), switchMap(() => this._listenMouseHostLeave$()), switchMap(() => this.closeTimer$), tap(() => this._closePopover()), finalize(() => this._closePopover()), takeUntil(this._destroy$))
|
|
140
|
+
.subscribe();
|
|
141
|
+
}
|
|
142
|
+
_openPopover() {
|
|
143
|
+
if (this.trigger === 'mouseover' && this._popoverService.activeElementGUID !== this._guid) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
this._hostBounds = this._elRef.nativeElement.getBoundingClientRect();
|
|
147
|
+
this._ngZone.run(() => {
|
|
148
|
+
if (this.template) {
|
|
149
|
+
this._wrapperElement = this._popoverService.openPopover(this._elRef, this.template, this.data, this._popoverRef, this.position);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
this._wrapperElement = this._popoverService.openPopover(this._elRef, this.text, this.data, this._popoverRef, this.position);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
_listenMouseHostLeave$() {
|
|
157
|
+
const mouseMove$ = this._mouseMove$
|
|
158
|
+
.pipe(debounceTime(50), filter(() => !!this._wrapperElement), filter((event) => {
|
|
159
|
+
return this._popoverRef.autoClose && this._mouseLeftTheTargets(event);
|
|
160
|
+
}));
|
|
161
|
+
const mouseClick$ = fromEvent(this._elRef.nativeElement, 'click');
|
|
162
|
+
return merge(mouseMove$, mouseClick$);
|
|
163
|
+
//
|
|
164
|
+
// return this._mouseLeave$
|
|
165
|
+
// .pipe(
|
|
166
|
+
// //
|
|
167
|
+
// timeoutWith(200, mouseMove$),
|
|
168
|
+
// );
|
|
169
|
+
}
|
|
170
|
+
// Check if mouse left target or popover rects
|
|
171
|
+
_mouseLeftTheTargets(event) {
|
|
172
|
+
const hostBounds = this._hostBounds;
|
|
173
|
+
const popoverBounds = this._wrapperElement.getBoundingClientRect();
|
|
174
|
+
const pointInHostRect = pointInRect(hostBounds.x, hostBounds.y, hostBounds.x + hostBounds.width, hostBounds.y + hostBounds.height, event.x, event.y);
|
|
175
|
+
const pointInPopoverRect = pointInRect(popoverBounds.x, popoverBounds.y, popoverBounds.x + popoverBounds.width, popoverBounds.y + popoverBounds.height, event.x, event.y);
|
|
176
|
+
return !pointInHostRect && !pointInPopoverRect;
|
|
177
|
+
}
|
|
178
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsPopoverDirective, deps: [{ token: i0.ElementRef }, { token: i1.FsPopoverService }, { token: i0.NgZone }, { token: i2.Router, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
179
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FsPopoverDirective, selector: "[fsPopover]", inputs: { text: "text", 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", enabled: "enabled" }, host: { properties: { "class.indication": "this.indication", "class.fs-popover-enabled": "this.enabled" }, classAttribute: "fs-popover" }, usesOnChanges: true, ngImport: i0 });
|
|
180
|
+
}
|
|
181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsPopoverDirective, decorators: [{
|
|
182
|
+
type: Directive,
|
|
183
|
+
args: [{
|
|
184
|
+
selector: '[fsPopover]',
|
|
185
|
+
host: {
|
|
186
|
+
'class': 'fs-popover',
|
|
187
|
+
},
|
|
188
|
+
}]
|
|
189
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FsPopoverService }, { type: i0.NgZone }, { type: i2.Router, decorators: [{
|
|
190
|
+
type: Optional
|
|
191
|
+
}] }]; }, propDecorators: { text: [{
|
|
192
|
+
type: Input
|
|
193
|
+
}], template: [{
|
|
194
|
+
type: Input
|
|
195
|
+
}], data: [{
|
|
196
|
+
type: Input
|
|
197
|
+
}], leaveDelay: [{
|
|
198
|
+
type: Input
|
|
199
|
+
}], showDelay: [{
|
|
200
|
+
type: Input
|
|
201
|
+
}], maxWidth: [{
|
|
202
|
+
type: Input
|
|
203
|
+
}], wrapperClass: [{
|
|
204
|
+
type: Input
|
|
205
|
+
}], autoShow: [{
|
|
206
|
+
type: Input
|
|
207
|
+
}], autoClose: [{
|
|
208
|
+
type: Input
|
|
209
|
+
}], loadingDiameter: [{
|
|
210
|
+
type: Input
|
|
211
|
+
}], loading: [{
|
|
212
|
+
type: Input
|
|
213
|
+
}], indication: [{
|
|
214
|
+
type: Input
|
|
215
|
+
}, {
|
|
216
|
+
type: HostBinding,
|
|
217
|
+
args: ['class.indication']
|
|
218
|
+
}], position: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], theme: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], size: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], trigger: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], enabled: [{
|
|
227
|
+
type: Input
|
|
228
|
+
}, {
|
|
229
|
+
type: HostBinding,
|
|
230
|
+
args: ['class.fs-popover-enabled']
|
|
231
|
+
}] } });
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvcG9wb3Zlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUdOLFFBQVEsRUFDUixXQUFXLEVBQ1gsV0FBVyxFQUNYLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFDTCxZQUFZLEVBQ1osS0FBSyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEVBQ0gsY0FBYyxHQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBU3BELE1BQU0sT0FBTyxrQkFBa0I7SUF1RW5CO0lBQ0E7SUFDQTtJQUNZO0lBeEVkLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFHekIsSUFBSSxDQUFTO0lBR2IsUUFBUSxDQUFtQjtJQUczQixJQUFJLENBQU07SUFHVixVQUFVLEdBQUcsR0FB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Szs7c0JBQ0wsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBSXhCLFFBQVE7c0JBRGQsS0FBSztnQkFJQyxLQUFLO3NCQURYLEtBQUs7Z0JBSUMsSUFBSTtzQkFEVixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFLQyxPQUFPO3NCQUZiLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIERpcmVjdGl2ZSxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IGZyb21FdmVudCwgcGlwZSwgU3ViamVjdCwgdGltZXIsIE9ic2VydmFibGUsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRlbGF5LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBmaW5hbGl6ZSxcbiAgbWFwVG8sXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbiAgd2l0aExhdGVzdEZyb20sXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgZ3VpZCB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvbW1vbic7XG5cbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnLi4vZW51bXMvcG9zaXRpb24nO1xuaW1wb3J0IHsgRnNQb3BvdmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BvcG92ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBwb2ludEluUmVjdCB9IGZyb20gJy4uL2hlbHBlcnMvcG9pbnQtaW4tcmVjdCc7XG5pbXBvcnQgeyBGc1BvcG92ZXJSZWYgfSBmcm9tICcuLi9jbGFzcy9wb3BvdmVyLXJlZic7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzUG9wb3Zlcl0nLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2ZzLXBvcG92ZXInLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBGc1BvcG92ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9ndWlkID0gZ3VpZCgneHh4eHh4eCcpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZXh0OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhOiBhbnk7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxlYXZlRGVsYXkgPSAxMDA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dEZWxheSA9IDA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1heFdpZHRoID0gMjUwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB3cmFwcGVyQ2xhc3M6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgYXV0b1Nob3cgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhdXRvQ2xvc2UgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2FkaW5nRGlhbWV0ZXIgPSAyMDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pbmRpY2F0aW9uJylcbiAgcHVibGljIGluZGljYXRpb24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwb3NpdGlvbjogUG9zaXRpb24gPSBQb3NpdGlvbi5Tb3V0aDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgPSAnbGlnaHQnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaXplOiAndGlueScgfCAnc21hbGwnIHwgJ25vcm1hbCcgPSAnbm9ybWFsJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdHJpZ2dlcjogJ2NsaWNrJyB8ICdtb3VzZW92ZXInID0gJ21vdXNlb3Zlcic7XG5cbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mcy1wb3BvdmVyLWVuYWJsZWQnKVxuICBwdWJsaWMgZW5hYmxlZCA9IHRydWU7XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9wb3BvdmVyUmVmOiBGc1BvcG92ZXJSZWY7XG4gIHByaXZhdGUgX3dyYXBwZXJFbGVtZW50OiBFbGVtZW50O1xuICBwcml2YXRlIF9ob3N0Qm91bmRzOiBET01SZWN0O1xuXG4gIHByaXZhdGUgX21vdXNlRW50ZXIkID0gZnJvbUV2ZW50KHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWVudGVyJyk7XG4gIHByaXZhdGUgX21vdXNlTW92ZSQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIHByaXZhdGUgX21vdXNlTGVhdmUkID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJyk7XG5cbiAgcHJpdmF0ZSBfcG9wb3ZlckNsb3NlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfcG9wb3ZlclNlcnZpY2U6IEZzUG9wb3ZlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICkge1xuICB9XG5cbiAgcHVibGljIGdldCBvcGVuVGltZXIkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRpbWVyKHRoaXMuc2hvd0RlbGF5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2xvc2VUaW1lciQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGltZXIodGhpcy5sZWF2ZURlbGF5KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICB0aGlzLl9pbml0aWFsaXplKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5lbmFibGVkPy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuZW5hYmxlZD8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiAhdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9wb3BvdmVyQ2xvc2VkJC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xvc2VQb3BvdmVyKCkge1xuICAgIHRoaXMuX3BvcG92ZXJDbG9zZWQkLm5leHQoKTtcblxuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5fd3JhcHBlckVsZW1lbnQgPSBudWxsO1xuXG4gICAgICBpZiAodGhpcy5fcG9wb3ZlclNlcnZpY2UuaGFzQWN0aXZlUG9wb3Zlcikge1xuICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5jbG9zZSh0aGlzLl9wb3BvdmVyUmVmKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYWxpemUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcG9wb3ZlclJlZiA9IG5ldyBGc1BvcG92ZXJSZWYoe1xuICAgICAgbWF4V2lkdGg6IHRoaXMubWF4V2lkdGgsXG4gICAgICB3cmFwcGVyQ2xhc3M6IHRoaXMud3JhcHBlckNsYXNzLFxuICAgICAgYXV0b1Nob3c6IHRoaXMuYXV0b1Nob3csXG4gICAgICBhdXRvQ2xvc2U6IHRoaXMuYXV0b0Nsb3NlLFxuICAgICAgbG9hZGluZ0RpYW1ldGVyOiB0aGlzLmxvYWRpbmdEaWFtZXRlcixcbiAgICAgIGxvYWRpbmc6IHRoaXMubG9hZGluZyxcbiAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgIHRoZW1lOiB0aGlzLnRoZW1lLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuTW91c2VIb3N0Q2xpY2soKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk1vdXNlSG9zdEVudGVyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9saXN0ZW5Sb3V0ZUNoYW5nZSgpO1xuXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuUm91dGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kO1xuICAgICAgICB9KSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICB0YWtlVW50aWwoXG4gICAgICAgICAgICB0aGlzLl9kZXN0cm95JFxuICAgICAgICAgICAgICAucGlwZShkZWxheSgyMDApKSxcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuTW91c2VIb3N0Q2xpY2soKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50KHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsIHsgcGFzc2l2ZTogdHJ1ZSB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmVuYWJsZWQpLFxuICAgICAgICB0YXAoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgdGhpcy5fb3BlblBvcG92ZXIoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9saXN0ZW5Nb3VzZUhvc3RMZWF2ZSQoKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNsb3NlVGltZXIkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuTW91c2VIb3N0RW50ZXIoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0dWFsTW91c2VTdGF0ZSQgPSBtZXJnZShcbiAgICAgIHRoaXMuX21vdXNlTGVhdmUkLnBpcGUobWFwVG8odHJ1ZSkpLFxuICAgICAgdGhpcy5fbW91c2VFbnRlciQucGlwZShtYXBUbyhmYWxzZSkpLFxuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoZmFsc2UpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgKTtcblxuICAgIHRoaXMuX21vdXNlRW50ZXIkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZW5hYmxlZCksXG4gICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICF0aGlzLl93cmFwcGVyRWxlbWVudDtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2Uuc2V0QWN0aXZlUG9wb3ZlckdVSUQodGhpcy5fZ3VpZCk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5vcGVuVGltZXIkKSxcbiAgICAgICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGF0IGFmdGVyIGFsbCBkZWxheXMgbW91c2Ugc3RpbGwgb3ZlciBhbiBlbGVtZW5cbiAgICAgICAgd2l0aExhdGVzdEZyb20oYWN0dWFsTW91c2VTdGF0ZSQpLFxuICAgICAgICBmaWx0ZXIoKFtfLCBtb3VzZUxlYXZlXSkgPT4ge1xuICAgICAgICAgIHJldHVybiAhbW91c2VMZWF2ZTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9vcGVuUG9wb3ZlcigpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2xpc3Rlbk1vdXNlSG9zdExlYXZlJCgpKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2xvc2VUaW1lciQpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fY2xvc2VQb3BvdmVyKCkpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLl9jbG9zZVBvcG92ZXIoKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9vcGVuUG9wb3ZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnbW91c2VvdmVyJyAmJiB0aGlzLl9wb3BvdmVyU2VydmljZS5hY3RpdmVFbGVtZW50R1VJRCAhPT0gdGhpcy5fZ3VpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2hvc3RCb3VuZHMgPSB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICBpZiAodGhpcy50ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLl93cmFwcGVyRWxlbWVudCA9IHRoaXMuX3BvcG92ZXJTZXJ2aWNlLm9wZW5Qb3BvdmVyKFxuICAgICAgICAgIHRoaXMuX2VsUmVmLFxuICAgICAgICAgIHRoaXMudGVtcGxhdGUsXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHRoaXMuX3BvcG92ZXJSZWYsXG4gICAgICAgICAgdGhpcy5wb3NpdGlvblxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fd3JhcHBlckVsZW1lbnQgPSB0aGlzLl9wb3BvdmVyU2VydmljZS5vcGVuUG9wb3ZlcihcbiAgICAgICAgICB0aGlzLl9lbFJlZixcbiAgICAgICAgICB0aGlzLnRleHQsXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHRoaXMuX3BvcG92ZXJSZWYsXG4gICAgICAgICAgdGhpcy5wb3NpdGlvblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuTW91c2VIb3N0TGVhdmUkKCk6IE9ic2VydmFibGU8TW91c2VFdmVudD4ge1xuICAgIGNvbnN0IG1vdXNlTW92ZSQgPSB0aGlzLl9tb3VzZU1vdmUkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5fd3JhcHBlckVsZW1lbnQpLFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXJSZWYuYXV0b0Nsb3NlICYmIHRoaXMuX21vdXNlTGVmdFRoZVRhcmdldHMoZXZlbnQpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICBjb25zdCBtb3VzZUNsaWNrJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snKTtcblxuICAgIHJldHVybiBtZXJnZShcbiAgICAgIG1vdXNlTW92ZSQsXG4gICAgICBtb3VzZUNsaWNrJCxcbiAgICApO1xuICAgIC8vXG4gICAgLy8gcmV0dXJuIHRoaXMuX21vdXNlTGVhdmUkXG4gICAgLy8gICAucGlwZShcbiAgICAvLyAgICAgLy9cbiAgICAvLyAgICAgdGltZW91dFdpdGgoMjAwLCBtb3VzZU1vdmUkKSxcbiAgICAvLyAgICk7XG4gIH1cblxuICAvLyBDaGVjayBpZiBtb3VzZSBsZWZ0IHRhcmdldCBvciBwb3BvdmVyIHJlY3RzXG4gIHByaXZhdGUgX21vdXNlTGVmdFRoZVRhcmdldHMoZXZlbnQ6IE1vdXNlRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBob3N0Qm91bmRzID0gdGhpcy5faG9zdEJvdW5kcztcbiAgICBjb25zdCBwb3BvdmVyQm91bmRzID0gdGhpcy5fd3JhcHBlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCBwb2ludEluSG9zdFJlY3QgPSBwb2ludEluUmVjdChcbiAgICAgIGhvc3RCb3VuZHMueCxcbiAgICAgIGhvc3RCb3VuZHMueSxcbiAgICAgIGhvc3RCb3VuZHMueCArIGhvc3RCb3VuZHMud2lkdGgsXG4gICAgICBob3N0Qm91bmRzLnkgKyBob3N0Qm91bmRzLmhlaWdodCxcbiAgICAgIGV2ZW50LngsXG4gICAgICBldmVudC55XG4gICAgKTtcblxuICAgIGNvbnN0IHBvaW50SW5Qb3BvdmVyUmVjdCA9IHBvaW50SW5SZWN0KFxuICAgICAgcG9wb3ZlckJvdW5kcy54LFxuICAgICAgcG9wb3ZlckJvdW5kcy55LFxuICAgICAgcG9wb3ZlckJvdW5kcy54ICsgcG9wb3ZlckJvdW5kcy53aWR0aCxcbiAgICAgIHBvcG92ZXJCb3VuZHMueSArIHBvcG92ZXJCb3VuZHMuaGVpZ2h0LFxuICAgICAgZXZlbnQueCxcbiAgICAgIGV2ZW50LnlcbiAgICApO1xuXG4gICAgcmV0dXJuICFwb2ludEluSG9zdFJlY3QgJiYgIXBvaW50SW5Qb3BvdmVyUmVjdDtcbiAgfVxufVxuIl19
|