@firestitch/popover 18.0.2 → 18.1.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/class/popover-ref.d.ts +11 -4
- package/app/components/popover/popover.component.d.ts +1 -1
- package/app/directives/popover.directive.d.ts +48 -1
- package/app/helpers/create-overlay-ref.d.ts +6 -2
- package/app/helpers/has-overlay-above.d.ts +10 -0
- package/esm2022/app/class/popover-ref.mjs +11 -2
- package/esm2022/app/components/popover/popover.component.mjs +3 -3
- package/esm2022/app/directives/popover.directive.mjs +158 -6
- package/esm2022/app/helpers/create-overlay-ref.mjs +11 -6
- package/esm2022/app/helpers/has-overlay-above.mjs +24 -0
- package/fesm2022/firestitch-popover.mjs +219 -37
- package/fesm2022/firestitch-popover.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { OverlayRef } from '@angular/cdk/overlay';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
2
3
|
import { IPopoverConfig } from '../interfaces/popover-config.interface';
|
|
3
4
|
export declare class FsPopoverRef {
|
|
4
5
|
overlayRef: OverlayRef;
|
|
5
6
|
private readonly _autoShow$;
|
|
6
7
|
private readonly _autoClose$;
|
|
7
8
|
private readonly _componentLoading$;
|
|
9
|
+
private readonly _closed$;
|
|
8
10
|
private _maxWidth;
|
|
9
11
|
private _maxHeight;
|
|
10
12
|
private _wrapperClass;
|
|
@@ -17,18 +19,23 @@ export declare class FsPopoverRef {
|
|
|
17
19
|
get size(): string;
|
|
18
20
|
get theme(): string;
|
|
19
21
|
get loading(): boolean;
|
|
20
|
-
get autoShow$():
|
|
22
|
+
get autoShow$(): Observable<boolean>;
|
|
21
23
|
get autoShow(): boolean;
|
|
22
24
|
set autoShow(value: boolean);
|
|
23
|
-
get autoClose$():
|
|
25
|
+
get autoClose$(): Observable<boolean>;
|
|
24
26
|
get autoClose(): boolean;
|
|
25
27
|
set autoClose(value: boolean);
|
|
26
|
-
get componentVisible$():
|
|
27
|
-
get componentLoading$():
|
|
28
|
+
get componentVisible$(): Observable<boolean>;
|
|
29
|
+
get componentLoading$(): Observable<boolean>;
|
|
28
30
|
get componentLoading(): boolean;
|
|
29
31
|
get wrapperClass(): string;
|
|
30
32
|
get maxWidth(): number;
|
|
31
33
|
get maxHeight(): number;
|
|
34
|
+
/**
|
|
35
|
+
* Emits after each close(). A panel listens to it, so content that calls
|
|
36
|
+
* `popover.close()` closes the panel the same way Escape or an outside click does.
|
|
37
|
+
*/
|
|
38
|
+
get closed$(): Observable<void>;
|
|
32
39
|
show(): void;
|
|
33
40
|
close(): void;
|
|
34
41
|
updatePosition(): void;
|
|
@@ -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",
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FsPopoverComponent, "fs-popover", ["fsPopover"], {}, {}, never, ["*"], true, never>;
|
|
6
6
|
}
|
|
@@ -21,6 +21,17 @@ export declare class FsPopoverDirective implements OnInit, OnChanges, OnDestroy
|
|
|
21
21
|
size: 'tiny' | 'small' | 'normal';
|
|
22
22
|
trigger: 'click' | 'mouseover';
|
|
23
23
|
enabled: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Panel mode: a host click or open() opens it; it stays open until close(), an outside
|
|
26
|
+
* click, Escape (only when no later overlay with a backdrop sits above it) or `popover.close()`
|
|
27
|
+
* from the content. Focus is trapped inside and returns on close to the element that had it
|
|
28
|
+
* when the panel opened. `trigger`, `showDelay`, `leaveDelay` and `autoClose` don't apply.
|
|
29
|
+
*/
|
|
30
|
+
panel: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
31
|
+
/**
|
|
32
|
+
* Emits each time the panel closes.
|
|
33
|
+
*/
|
|
34
|
+
closed: import("@angular/core").OutputEmitterRef<void>;
|
|
24
35
|
private _initialized;
|
|
25
36
|
private _popoverRef;
|
|
26
37
|
private _wrapperElement;
|
|
@@ -35,12 +46,29 @@ export declare class FsPopoverDirective implements OnInit, OnChanges, OnDestroy
|
|
|
35
46
|
private _ngZone;
|
|
36
47
|
private _router;
|
|
37
48
|
private _guid;
|
|
49
|
+
private _overlay;
|
|
50
|
+
private _injector;
|
|
51
|
+
private _focusTrapFactory;
|
|
52
|
+
private _document;
|
|
53
|
+
private _panelOverlayRef;
|
|
54
|
+
private _panelFocusTrap;
|
|
55
|
+
private _panelOpener;
|
|
56
|
+
private _panelTopmostKeydown;
|
|
57
|
+
private _panelClosed$;
|
|
38
58
|
constructor();
|
|
39
59
|
get openTimer$(): Observable<number>;
|
|
40
60
|
get closeTimer$(): Observable<number>;
|
|
41
61
|
ngOnInit(): void;
|
|
42
62
|
ngOnChanges(changes: SimpleChanges): void;
|
|
43
63
|
ngOnDestroy(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Opens the panel on this element. Panel mode only.
|
|
66
|
+
*/
|
|
67
|
+
open(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Closes the panel, or in hover and click modes the open popover.
|
|
70
|
+
*/
|
|
71
|
+
close(): void;
|
|
44
72
|
private _closePopover;
|
|
45
73
|
private _initialize;
|
|
46
74
|
private _listenRouteChange;
|
|
@@ -49,6 +77,25 @@ export declare class FsPopoverDirective implements OnInit, OnChanges, OnDestroy
|
|
|
49
77
|
private _openPopover;
|
|
50
78
|
private _listenMouseHostLeave$;
|
|
51
79
|
private _mouseLeftTheTargets;
|
|
80
|
+
private _listenPanelHostClick;
|
|
81
|
+
private _openPanel;
|
|
82
|
+
private _attachPanelContent;
|
|
83
|
+
/**
|
|
84
|
+
* The configurable trap also pulls focus back when it lands outside the panel, for
|
|
85
|
+
* example on the first Tab after a calendar inside closed and took the focused element
|
|
86
|
+
* with it. Focus inside other overlays (a select, a calendar) is left alone.
|
|
87
|
+
*/
|
|
88
|
+
private _trapPanelFocus;
|
|
89
|
+
private _listenPanelClose;
|
|
90
|
+
/**
|
|
91
|
+
* Escape closes the panel only when no later overlay with a backdrop sits above it, so
|
|
92
|
+
* Escape in a calendar, select or menu opened from the panel closes only that. The check
|
|
93
|
+
* runs in the capture phase, before any handler inside closes its own overlay; fs-datepicker,
|
|
94
|
+
* for one, closes its calendar from the input's keydown and from a document listener.
|
|
95
|
+
*/
|
|
96
|
+
private _listenPanelEscape;
|
|
97
|
+
private _finishPanel;
|
|
98
|
+
private _restorePanelFocus;
|
|
52
99
|
static ɵfac: i0.ɵɵFactoryDeclaration<FsPopoverDirective, never>;
|
|
53
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<FsPopoverDirective, "[fsPopover]",
|
|
100
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<FsPopoverDirective, "[fsPopover]", ["fsPopover"], { "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; }; "maxHeight": { "alias": "maxHeight"; "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; }; "panel": { "alias": "panel"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
|
|
54
101
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { ElementRef } from '@angular/core';
|
|
2
|
-
import { Overlay } from '@angular/cdk/overlay';
|
|
2
|
+
import { Overlay, OverlayRef } from '@angular/cdk/overlay';
|
|
3
3
|
import { Position } from './../enums/position';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Hover and click popovers have no backdrop. A panel gets a transparent backdrop, so a click
|
|
6
|
+
* anywhere outside it closes it, and the `fs-popover-panel` class on its pane.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createOverlayRef(el: ElementRef, overlay: Overlay, position: Position, panel?: boolean): OverlayRef;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { OverlayRef } from '@angular/cdk/overlay';
|
|
2
|
+
/**
|
|
3
|
+
* True when an overlay with a backdrop was attached after this one and still shows content:
|
|
4
|
+
* a calendar, a select, a menu or a dialog opened from inside it. Overlays without a backdrop
|
|
5
|
+
* (tooltips, toasts, hover popovers) don't count.
|
|
6
|
+
*
|
|
7
|
+
* CDK inserts each backdrop right before its overlay's host, and later overlays after earlier
|
|
8
|
+
* ones, so everything after this overlay's host was attached later.
|
|
9
|
+
*/
|
|
10
|
+
export declare function hasOverlayAbove(overlayRef: OverlayRef): boolean;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
1
|
+
import { BehaviorSubject, Subject, combineLatest } from 'rxjs';
|
|
2
2
|
import { map } from 'rxjs/operators';
|
|
3
3
|
export class FsPopoverRef {
|
|
4
4
|
overlayRef;
|
|
5
5
|
_autoShow$ = new BehaviorSubject(true);
|
|
6
6
|
_autoClose$ = new BehaviorSubject(true);
|
|
7
7
|
_componentLoading$ = new BehaviorSubject(true);
|
|
8
|
+
_closed$ = new Subject();
|
|
8
9
|
_maxWidth;
|
|
9
10
|
_maxHeight;
|
|
10
11
|
_wrapperClass;
|
|
@@ -68,6 +69,13 @@ export class FsPopoverRef {
|
|
|
68
69
|
get maxHeight() {
|
|
69
70
|
return this._maxHeight;
|
|
70
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Emits after each close(). A panel listens to it, so content that calls
|
|
74
|
+
* `popover.close()` closes the panel the same way Escape or an outside click does.
|
|
75
|
+
*/
|
|
76
|
+
get closed$() {
|
|
77
|
+
return this._closed$.asObservable();
|
|
78
|
+
}
|
|
71
79
|
show() {
|
|
72
80
|
setTimeout(() => {
|
|
73
81
|
this._componentLoading$.next(false);
|
|
@@ -79,6 +87,7 @@ export class FsPopoverRef {
|
|
|
79
87
|
close() {
|
|
80
88
|
this.overlayRef.detach();
|
|
81
89
|
this._componentLoading$.next(true);
|
|
90
|
+
this._closed$.next();
|
|
82
91
|
}
|
|
83
92
|
updatePosition() {
|
|
84
93
|
this.overlayRef.updatePosition();
|
|
@@ -95,4 +104,4 @@ export class FsPopoverRef {
|
|
|
95
104
|
this._autoClose$.next(config.autoClose);
|
|
96
105
|
}
|
|
97
106
|
}
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1yZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2NsYXNzL3BvcG92ZXItcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLckMsTUFBTSxPQUFPLFlBQVk7SUFFaEIsVUFBVSxDQUFhO0lBRWIsVUFBVSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2hELFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUNqRCxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUN4RCxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUN4QyxTQUFTLENBQVM7SUFDbEIsVUFBVSxDQUFTO0lBQ25CLGFBQWEsQ0FBUztJQUN0QixnQkFBZ0IsQ0FBUztJQUN6QixRQUFRLENBQVU7SUFDbEIsTUFBTSxDQUFTO0lBQ2YsS0FBSyxDQUFTO0lBRXRCLFlBQVksU0FBeUIsRUFBRTtRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFB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TUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJUG9wb3ZlckNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9wb3Zlci1jb25maWcuaW50ZXJmYWNlJztcblxuXG5leHBvcnQgY2xhc3MgRnNQb3BvdmVyUmVmIHtcblxuICBwdWJsaWMgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvU2hvdyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvQ2xvc2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50TG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jbG9zZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfbWF4V2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWF4SGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgX3dyYXBwZXJDbGFzczogc3RyaW5nO1xuICBwcml2YXRlIF9sb2FkaW5nRGlhbWV0ZXI6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbG9hZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfdGhlbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2l6ZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSVBvcG92ZXJDb25maWcgPSB7fSkge1xuICAgIHRoaXMuX2luaXQoY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZGluZ0RpYW1ldGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nRGlhbWV0ZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRoZW1lKCkge1xuICAgIHJldHVybiB0aGlzLl90aGVtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9hZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXV0b1Nob3ckKCkge1xuICAgIHJldHVybiB0aGlzLl9hdXRvU2hvdyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF1dG9TaG93KCkge1xuICAgIHJldHVybiB0aGlzLl9hdXRvU2hvdyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYXV0b1Nob3codmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hdXRvU2hvdyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF1dG9DbG9zZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9DbG9zZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF1dG9DbG9zZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b0Nsb3NlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldCBhdXRvQ2xvc2UodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hdXRvQ2xvc2UkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb21wb25lbnRWaXNpYmxlJCgpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmF1dG9TaG93JCxcbiAgICAgIHRoaXMuY29tcG9uZW50TG9hZGluZyQsXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2F1dG9TaG93LCBjb21wb25lbnRMb2FkaW5nXSkgPT4ge1xuICAgICAgICByZXR1cm4gYXV0b1Nob3cgfHwgIWNvbXBvbmVudExvYWRpbmc7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50TG9hZGluZyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudExvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb21wb25lbnRMb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRMb2FkaW5nJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCB3cmFwcGVyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZXJDbGFzcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWF4V2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21heFdpZHRoO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXhIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21heEhlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBhZnRlciBlYWNoIGNsb3NlKCkuIEEgcGFuZWwgbGlzdGVucyB0byBpdCwgc28gY29udGVudCB0aGF0IGNhbGxzXG4gICAqIGBwb3BvdmVyLmNsb3NlKClgIGNsb3NlcyB0aGUgcGFuZWwgdGhlIHNhbWUgd2F5IEVzY2FwZSBvciBhbiBvdXRzaWRlIGNsaWNrIGRvZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNsb3NlZCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb3NlZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgc2hvdygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NvbXBvbmVudExvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNsb3NlKCkge1xuICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICB0aGlzLl9jb21wb25lbnRMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuX2Nsb3NlZCQubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdChjb25maWc6IElQb3BvdmVyQ29uZmlnKSB7XG4gICAgdGhpcy5fd3JhcHBlckNsYXNzID0gY29uZmlnLndyYXBwZXJDbGFzcztcbiAgICB0aGlzLl9tYXhXaWR0aCA9IGNvbmZpZy5tYXhXaWR0aDtcbiAgICB0aGlzLl9tYXhIZWlnaHQgPSBjb25maWcubWF4SGVpZ2h0O1xuICAgIHRoaXMuX2xvYWRpbmcgPSBjb25maWcubG9hZGluZztcbiAgICB0aGlzLl9sb2FkaW5nRGlhbWV0ZXIgPSBjb25maWcubG9hZGluZ0RpYW1ldGVyO1xuICAgIHRoaXMuX3NpemUgPSBjb25maWcuc2l6ZTtcbiAgICB0aGlzLl90aGVtZSA9IGNvbmZpZy50aGVtZTtcbiAgICB0aGlzLl9hdXRvU2hvdyQubmV4dChjb25maWcuYXV0b1Nob3cpO1xuICAgIHRoaXMuX2F1dG9DbG9zZSQubmV4dChjb25maWcuYXV0b0Nsb3NlKTtcbiAgfVxufVxuIl19
|
|
@@ -4,12 +4,12 @@ import { NgClass } from '@angular/common';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export class FsPopoverComponent extends FsPopoverDirective {
|
|
6
6
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsPopoverComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
7
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: FsPopoverComponent, isStandalone: true, 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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
7
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: FsPopoverComponent, isStandalone: true, selector: "fs-popover", host: { classAttribute: "fs-popover-component" }, exportAs: ["fsPopover"], usesInheritance: true, ngImport: i0, template: "<span [ngClass]=\"{'popover-container': enabled}\">\n <ng-content></ng-content>\n</span>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8
8
|
}
|
|
9
9
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsPopoverComponent, decorators: [{
|
|
10
10
|
type: Component,
|
|
11
|
-
args: [{ selector: 'fs-popover', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
11
|
+
args: [{ selector: 'fs-popover', exportAs: 'fsPopover', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
12
12
|
'class': 'fs-popover-component',
|
|
13
13
|
}, standalone: true, imports: [NgClass], 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBYzFDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxrQkFBa0I7dUdBQTdDLGtCQUFrQjsyRkFBbEIsa0JBQWtCLHdLQ2hCL0IsNkZBR0EsNENEV2MsT0FBTzs7MkZBRVIsa0JBQWtCO2tCQVg5QixTQUFTOytCQUNJLFlBQVksWUFDWixXQUFXLG1CQUVKLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0YsT0FBTyxFQUFFLHNCQUFzQjtxQkFDbEMsY0FDVyxJQUFJLFdBQ1AsQ0FBQyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGc1BvcG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3BvcG92ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZnMtcG9wb3ZlcicsXG4gICAgZXhwb3J0QXM6ICdmc1BvcG92ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAncG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICAnY2xhc3MnOiAnZnMtcG9wb3Zlci1jb21wb25lbnQnLFxuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdDbGFzc11cbn0pXG5leHBvcnQgY2xhc3MgRnNQb3BvdmVyQ29tcG9uZW50IGV4dGVuZHMgRnNQb3BvdmVyRGlyZWN0aXZlIHt9XG4iLCI8c3BhbiBbbmdDbGFzc109XCJ7J3BvcG92ZXItY29udGFpbmVyJzogZW5hYmxlZH1cIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9zcGFuPlxuIl19
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { Directive, ElementRef, HostBinding, Injector, Input, NgZone, TemplateRef, booleanAttribute, inject, input, output, } from '@angular/core';
|
|
2
3
|
import { NavigationEnd, Router } from '@angular/router';
|
|
4
|
+
import { ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';
|
|
5
|
+
import { hasModifierKey } from '@angular/cdk/keycodes';
|
|
6
|
+
import { Overlay } from '@angular/cdk/overlay';
|
|
7
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
3
8
|
import { guid } from '@firestitch/common';
|
|
4
9
|
import { Subject, fromEvent, merge, pipe, timer } from 'rxjs';
|
|
5
|
-
import { debounceTime, delay, distinctUntilChanged, filter, finalize, mapTo, startWith, switchMap, takeUntil, tap, withLatestFrom, } from 'rxjs/operators';
|
|
10
|
+
import { debounceTime, delay, distinctUntilChanged, filter, finalize, mapTo, startWith, switchMap, take, takeUntil, tap, withLatestFrom, } from 'rxjs/operators';
|
|
6
11
|
import { FsPopoverRef } from '../class/popover-ref';
|
|
12
|
+
import { FsPopoverWrapperComponent } from '../components/popover-wrapper/popover-wrapper.component';
|
|
7
13
|
import { Position } from '../enums/position';
|
|
14
|
+
import { createInjector } from '../helpers/create-injector';
|
|
15
|
+
import { createOverlayRef } from '../helpers/create-overlay-ref';
|
|
16
|
+
import { createTempatePortal } from '../helpers/create-template-portal';
|
|
17
|
+
import { hasOverlayAbove } from '../helpers/has-overlay-above';
|
|
8
18
|
import { pointInRect } from '../helpers/point-in-rect';
|
|
9
19
|
import { FsPopoverService } from '../services/popover.service';
|
|
10
20
|
import * as i0 from "@angular/core";
|
|
@@ -27,6 +37,17 @@ export class FsPopoverDirective {
|
|
|
27
37
|
size = 'normal';
|
|
28
38
|
trigger = 'mouseover';
|
|
29
39
|
enabled = true;
|
|
40
|
+
/**
|
|
41
|
+
* Panel mode: a host click or open() opens it; it stays open until close(), an outside
|
|
42
|
+
* click, Escape (only when no later overlay with a backdrop sits above it) or `popover.close()`
|
|
43
|
+
* from the content. Focus is trapped inside and returns on close to the element that had it
|
|
44
|
+
* when the panel opened. `trigger`, `showDelay`, `leaveDelay` and `autoClose` don't apply.
|
|
45
|
+
*/
|
|
46
|
+
panel = input(false, { transform: booleanAttribute });
|
|
47
|
+
/**
|
|
48
|
+
* Emits each time the panel closes.
|
|
49
|
+
*/
|
|
50
|
+
closed = output();
|
|
30
51
|
_initialized = false;
|
|
31
52
|
_popoverRef;
|
|
32
53
|
_wrapperElement;
|
|
@@ -41,6 +62,15 @@ export class FsPopoverDirective {
|
|
|
41
62
|
_ngZone = inject(NgZone);
|
|
42
63
|
_router = inject(Router, { optional: true });
|
|
43
64
|
_guid = guid('xxxxxxx');
|
|
65
|
+
_overlay = inject(Overlay);
|
|
66
|
+
_injector = inject(Injector);
|
|
67
|
+
_focusTrapFactory = inject(ConfigurableFocusTrapFactory);
|
|
68
|
+
_document = inject(DOCUMENT);
|
|
69
|
+
_panelOverlayRef;
|
|
70
|
+
_panelFocusTrap;
|
|
71
|
+
_panelOpener;
|
|
72
|
+
_panelTopmostKeydown;
|
|
73
|
+
_panelClosed$ = new Subject();
|
|
44
74
|
constructor() {
|
|
45
75
|
this._mouseEnter$ = fromEvent(this._elRef.nativeElement, 'mouseenter');
|
|
46
76
|
this._mouseMove$ = fromEvent(document, 'mousemove', { passive: true });
|
|
@@ -65,9 +95,33 @@ export class FsPopoverDirective {
|
|
|
65
95
|
}
|
|
66
96
|
}
|
|
67
97
|
ngOnDestroy() {
|
|
98
|
+
if (this._panelOverlayRef) {
|
|
99
|
+
this._finishPanel(false);
|
|
100
|
+
}
|
|
68
101
|
this._popoverClosed$.next(null);
|
|
69
102
|
this._destroy$.next(null);
|
|
70
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Opens the panel on this element. Panel mode only.
|
|
106
|
+
*/
|
|
107
|
+
open() {
|
|
108
|
+
if (!this.panel() || !this.enabled || !this._initialized || this._panelOverlayRef) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
this._ngZone.run(() => this._openPanel());
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Closes the panel, or in hover and click modes the open popover.
|
|
115
|
+
*/
|
|
116
|
+
close() {
|
|
117
|
+
if (!this.panel()) {
|
|
118
|
+
this._closePopover();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (this._panelOverlayRef) {
|
|
122
|
+
this._ngZone.run(() => this._popoverRef.close());
|
|
123
|
+
}
|
|
124
|
+
}
|
|
71
125
|
_closePopover() {
|
|
72
126
|
this._popoverClosed$.next(null);
|
|
73
127
|
this._ngZone.run(() => {
|
|
@@ -93,7 +147,10 @@ export class FsPopoverDirective {
|
|
|
93
147
|
theme: this.theme,
|
|
94
148
|
});
|
|
95
149
|
this._ngZone.runOutsideAngular(() => {
|
|
96
|
-
if (this.
|
|
150
|
+
if (this.panel()) {
|
|
151
|
+
this._listenPanelHostClick();
|
|
152
|
+
}
|
|
153
|
+
else if (this.trigger === 'click') {
|
|
97
154
|
this._listenMouseHostClick();
|
|
98
155
|
}
|
|
99
156
|
else {
|
|
@@ -110,7 +167,7 @@ export class FsPopoverDirective {
|
|
|
110
167
|
}), pipe(takeUntil(this._destroy$
|
|
111
168
|
.pipe(delay(200)))))
|
|
112
169
|
.subscribe(() => {
|
|
113
|
-
this.
|
|
170
|
+
this.close();
|
|
114
171
|
});
|
|
115
172
|
}
|
|
116
173
|
_listenMouseHostClick() {
|
|
@@ -169,13 +226,108 @@ export class FsPopoverDirective {
|
|
|
169
226
|
const pointInPopoverRect = pointInRect(popoverBounds.x, popoverBounds.y, popoverBounds.x + popoverBounds.width, popoverBounds.y + popoverBounds.height, event.x, event.y);
|
|
170
227
|
return !pointInHostRect && !pointInPopoverRect;
|
|
171
228
|
}
|
|
229
|
+
_listenPanelHostClick() {
|
|
230
|
+
fromEvent(this._elRef.nativeElement, 'click')
|
|
231
|
+
.pipe(filter(() => this.enabled), tap((event) => {
|
|
232
|
+
event.stopPropagation();
|
|
233
|
+
this.open();
|
|
234
|
+
}), takeUntil(this._destroy$))
|
|
235
|
+
.subscribe();
|
|
236
|
+
}
|
|
237
|
+
_openPanel() {
|
|
238
|
+
this._panelOpener = this._document.activeElement;
|
|
239
|
+
this._panelOverlayRef = createOverlayRef(this._elRef, this._overlay, this.position, true);
|
|
240
|
+
this._popoverRef.overlayRef = this._panelOverlayRef;
|
|
241
|
+
const wrapperElement = this._attachPanelContent(this._panelOverlayRef);
|
|
242
|
+
this._trapPanelFocus(wrapperElement);
|
|
243
|
+
this._listenPanelClose(this._panelOverlayRef);
|
|
244
|
+
this._listenPanelEscape(this._panelOverlayRef);
|
|
245
|
+
}
|
|
246
|
+
_attachPanelContent(overlayRef) {
|
|
247
|
+
const wrapperRef = overlayRef.attach(new ComponentPortal(FsPopoverWrapperComponent, null, createInjector(this._popoverRef, this._injector)));
|
|
248
|
+
if (this.template) {
|
|
249
|
+
wrapperRef.instance
|
|
250
|
+
.attachTemplatePortal(createTempatePortal(this.template, this._popoverRef, this.data));
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
wrapperRef.instance.setTextualContent(this.text);
|
|
254
|
+
}
|
|
255
|
+
return wrapperRef.location.nativeElement;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* The configurable trap also pulls focus back when it lands outside the panel, for
|
|
259
|
+
* example on the first Tab after a calendar inside closed and took the focused element
|
|
260
|
+
* with it. Focus inside other overlays (a select, a calendar) is left alone.
|
|
261
|
+
*/
|
|
262
|
+
_trapPanelFocus(wrapperElement) {
|
|
263
|
+
this._panelFocusTrap = this._focusTrapFactory.create(wrapperElement);
|
|
264
|
+
this._panelFocusTrap.focusInitialElementWhenReady()
|
|
265
|
+
.then((focused) => {
|
|
266
|
+
// Nothing inside takes focus (text only): the panel itself becomes the one
|
|
267
|
+
// tab stop, so the opener behind the backdrop doesn't keep focus.
|
|
268
|
+
if (!focused && wrapperElement.isConnected) {
|
|
269
|
+
wrapperElement.setAttribute('tabindex', '0');
|
|
270
|
+
wrapperElement.style.outline = 'none';
|
|
271
|
+
wrapperElement.focus();
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
_listenPanelClose(overlayRef) {
|
|
276
|
+
overlayRef.backdropClick()
|
|
277
|
+
.pipe(tap(() => this.close()), takeUntil(this._panelClosed$))
|
|
278
|
+
.subscribe();
|
|
279
|
+
// Every close (close(), the backdrop, Escape, or `popover.close()` from the
|
|
280
|
+
// content) goes through FsPopoverRef.close(), which detaches and then emits.
|
|
281
|
+
this._popoverRef.closed$
|
|
282
|
+
.pipe(take(1), tap(() => this._finishPanel(true)), takeUntil(this._panelClosed$))
|
|
283
|
+
.subscribe();
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Escape closes the panel only when no later overlay with a backdrop sits above it, so
|
|
287
|
+
* Escape in a calendar, select or menu opened from the panel closes only that. The check
|
|
288
|
+
* runs in the capture phase, before any handler inside closes its own overlay; fs-datepicker,
|
|
289
|
+
* for one, closes its calendar from the input's keydown and from a document listener.
|
|
290
|
+
*/
|
|
291
|
+
_listenPanelEscape(overlayRef) {
|
|
292
|
+
this._ngZone.runOutsideAngular(() => {
|
|
293
|
+
fromEvent(this._document, 'keydown', { capture: true })
|
|
294
|
+
.pipe(tap((event) => {
|
|
295
|
+
this._panelTopmostKeydown = hasOverlayAbove(overlayRef) ? null : event;
|
|
296
|
+
}), takeUntil(this._panelClosed$))
|
|
297
|
+
.subscribe();
|
|
298
|
+
});
|
|
299
|
+
overlayRef.keydownEvents()
|
|
300
|
+
.pipe(filter((event) => event.key === 'Escape' && !hasModifierKey(event)), filter((event) => event === this._panelTopmostKeydown), tap(() => this.close()), takeUntil(this._panelClosed$))
|
|
301
|
+
.subscribe();
|
|
302
|
+
}
|
|
303
|
+
_finishPanel(emit) {
|
|
304
|
+
const overlayRef = this._panelOverlayRef;
|
|
305
|
+
this._panelOverlayRef = null;
|
|
306
|
+
this._panelTopmostKeydown = null;
|
|
307
|
+
this._panelClosed$.next();
|
|
308
|
+
this._panelFocusTrap?.destroy();
|
|
309
|
+
this._panelFocusTrap = null;
|
|
310
|
+
overlayRef.dispose();
|
|
311
|
+
this._restorePanelFocus();
|
|
312
|
+
if (emit) {
|
|
313
|
+
this.closed.emit();
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
_restorePanelFocus() {
|
|
317
|
+
const opener = this._panelOpener;
|
|
318
|
+
this._panelOpener = null;
|
|
319
|
+
if (opener?.isConnected && typeof opener.focus === 'function') {
|
|
320
|
+
opener.focus();
|
|
321
|
+
}
|
|
322
|
+
}
|
|
172
323
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsPopoverDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
173
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
324
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.7", type: FsPopoverDirective, isStandalone: true, selector: "[fsPopover]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: false, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: false, isRequired: false, transformFunction: null }, leaveDelay: { classPropertyName: "leaveDelay", publicName: "leaveDelay", isSignal: false, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: "showDelay", publicName: "showDelay", isSignal: false, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: false, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: false, isRequired: false, transformFunction: null }, wrapperClass: { classPropertyName: "wrapperClass", publicName: "wrapperClass", isSignal: false, isRequired: false, transformFunction: null }, autoShow: { classPropertyName: "autoShow", publicName: "autoShow", isSignal: false, isRequired: false, transformFunction: null }, autoClose: { classPropertyName: "autoClose", publicName: "autoClose", isSignal: false, isRequired: false, transformFunction: null }, loadingDiameter: { classPropertyName: "loadingDiameter", publicName: "loadingDiameter", isSignal: false, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: false, isRequired: false, transformFunction: null }, indication: { classPropertyName: "indication", publicName: "indication", isSignal: false, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: false, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: false, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: false, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: false, isRequired: false, transformFunction: null }, enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: false, isRequired: false, transformFunction: null }, panel: { classPropertyName: "panel", publicName: "panel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, host: { properties: { "class.indication": "this.indication", "class.fs-popover-enabled": "this.enabled" }, classAttribute: "fs-popover" }, exportAs: ["fsPopover"], usesOnChanges: true, ngImport: i0 });
|
|
174
325
|
}
|
|
175
326
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsPopoverDirective, decorators: [{
|
|
176
327
|
type: Directive,
|
|
177
328
|
args: [{
|
|
178
329
|
selector: '[fsPopover]',
|
|
330
|
+
exportAs: 'fsPopover',
|
|
179
331
|
host: {
|
|
180
332
|
'class': 'fs-popover',
|
|
181
333
|
},
|
|
@@ -224,4 +376,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
224
376
|
type: HostBinding,
|
|
225
377
|
args: ['class.fs-popover-enabled']
|
|
226
378
|
}] } });
|
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvcG9wb3Zlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQStDLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEosT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUNMLFlBQVksRUFDWixLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsRUFDSCxjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFVL0QsTUFBTSxPQUFPLGtCQUFrQjtJQUd0QixJQUFJLENBQVM7SUFHYixRQUFRLENBQW1CO0lBRzNCLElBQUksQ0FBTTtJQUdWLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFHakIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUdkLFFBQVEsR0FBRyxHQUFHLENBQUM7SUFHZixT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UTtzQkFEZCxLQUFLO2dCQUlDLElBQUk7c0JBRFYsS0FBSztnQkFJQyxVQUFVO3NCQURoQixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixLQUFLO2dCQUlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxlQUFlO3NCQURyQixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFLQyxVQUFVO3NCQUZoQixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGtCQUFrQjtnQkFJeEIsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLEtBQUs7c0JBRFgsS0FBSztnQkFJQyxJQUFJO3NCQURWLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUtDLE9BQU87c0JBRmIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgTmdab25lLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBndWlkIH0gZnJvbSAnQGZpcmVzdGl0Y2gvY29tbW9uJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZnJvbUV2ZW50LCBtZXJnZSwgcGlwZSwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZpbmFsaXplLFxuICBtYXBUbyxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxuICB3aXRoTGF0ZXN0RnJvbSxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5cbmltcG9ydCB7IEZzUG9wb3ZlclJlZiB9IGZyb20gJy4uL2NsYXNzL3BvcG92ZXItcmVmJztcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnLi4vZW51bXMvcG9zaXRpb24nO1xuaW1wb3J0IHsgcG9pbnRJblJlY3QgfSBmcm9tICcuLi9oZWxwZXJzL3BvaW50LWluLXJlY3QnO1xuaW1wb3J0IHsgRnNQb3BvdmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BvcG92ZXIuc2VydmljZSc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzUG9wb3Zlcl0nLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2ZzLXBvcG92ZXInLFxuICB9LFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGc1BvcG92ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdGV4dDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YTogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsZWF2ZURlbGF5ID0gMTAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93RGVsYXkgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhXaWR0aCA9IDI1MDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4SGVpZ2h0OiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHdyYXBwZXJDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhdXRvU2hvdyA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9DbG9zZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxvYWRpbmdEaWFtZXRlciA9IDIwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmluZGljYXRpb24nKVxuICBwdWJsaWMgaW5kaWNhdGlvbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHBvc2l0aW9uOiBQb3NpdGlvbiA9IFBvc2l0aW9uLlNvdXRoO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0aGVtZTogJ2xpZ2h0JyB8ICdkYXJrJyA9ICdsaWdodCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNpemU6ICd0aW55JyB8ICdzbWFsbCcgfCAnbm9ybWFsJyA9ICdub3JtYWwnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0cmlnZ2VyOiAnY2xpY2snIHwgJ21vdXNlb3ZlcicgPSAnbW91c2VvdmVyJztcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLXBvcG92ZXItZW5hYmxlZCcpXG4gIHB1YmxpYyBlbmFibGVkID0gdHJ1ZTtcblxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3BvcG92ZXJSZWY6IEZzUG9wb3ZlclJlZjtcbiAgcHJpdmF0ZSBfd3JhcHBlckVsZW1lbnQ6IEVsZW1lbnQ7XG4gIHByaXZhdGUgX2hvc3RCb3VuZHM6IERPTVJlY3Q7XG5cbiAgcHJpdmF0ZSBfbW91c2VFbnRlciQ6IE9ic2VydmFibGU8TW91c2VFdmVudD47XG4gIHByaXZhdGUgX21vdXNlTW92ZSQ6IE9ic2VydmFibGU8RXZlbnQ+O1xuICBwcml2YXRlIF9tb3VzZUxlYXZlJDogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PjtcblxuICBwcml2YXRlIF9wb3BvdmVyQ2xvc2VkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfZWxSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgX3BvcG92ZXJTZXJ2aWNlID0gaW5qZWN0KEZzUG9wb3ZlclNlcnZpY2UpO1xuICBwcml2YXRlIF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSBfcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBfZ3VpZCA9IGd1aWQoJ3h4eHh4eHgnKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9tb3VzZUVudGVyJCA9IGZyb21FdmVudCh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCAnbW91c2VlbnRlcicpO1xuICAgIHRoaXMuX21vdXNlTW92ZSQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgdGhpcy5fbW91c2VMZWF2ZSQgPSBmcm9tRXZlbnQodGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlbGVhdmUnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3BlblRpbWVyJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aW1lcih0aGlzLnNob3dEZWxheSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNsb3NlVGltZXIkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRpbWVyKHRoaXMubGVhdmVEZWxheSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuZW5hYmxlZD8uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmVuYWJsZWQ/LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLmVuYWJsZWQgJiYgIXRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fcG9wb3ZlckNsb3NlZCQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xvc2VQb3BvdmVyKCkge1xuICAgIHRoaXMuX3BvcG92ZXJDbG9zZWQkLm5leHQobnVsbCk7XG5cbiAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuX3dyYXBwZXJFbGVtZW50ID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuX3BvcG92ZXJTZXJ2aWNlLmhhc0FjdGl2ZVBvcG92ZXIpIHtcbiAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2UuY2xvc2UodGhpcy5fcG9wb3ZlclJlZik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BvcG92ZXJSZWYgPSBuZXcgRnNQb3BvdmVyUmVmKHtcbiAgICAgIG1heFdpZHRoOiB0aGlzLm1heFdpZHRoLFxuICAgICAgbWF4SGVpZ2h0OiB0aGlzLm1heEhlaWdodCxcbiAgICAgIHdyYXBwZXJDbGFzczogdGhpcy53cmFwcGVyQ2xhc3MsXG4gICAgICBhdXRvU2hvdzogdGhpcy5hdXRvU2hvdyxcbiAgICAgIGF1dG9DbG9zZTogdGhpcy5hdXRvQ2xvc2UsXG4gICAgICBsb2FkaW5nRGlhbWV0ZXI6IHRoaXMubG9hZGluZ0RpYW1ldGVyLFxuICAgICAgbG9hZGluZzogdGhpcy5sb2FkaW5nLFxuICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgdGhlbWU6IHRoaXMudGhlbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICB0aGlzLl9saXN0ZW5Nb3VzZUhvc3RDbGljaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuTW91c2VIb3N0RW50ZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xpc3RlblJvdXRlQ2hhbmdlKCk7XG5cbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Sb3V0ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQ7XG4gICAgICAgIH0pLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIHRha2VVbnRpbChcbiAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3kkXG4gICAgICAgICAgICAgIC5waXBlKGRlbGF5KDIwMCkpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3Rlbk1vdXNlSG9zdENsaWNrKCk6IHZvaWQge1xuICAgIGZyb21FdmVudCh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5lbmFibGVkKSxcbiAgICAgICAgdGFwKChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIHRoaXMuX29wZW5Qb3BvdmVyKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fbGlzdGVuTW91c2VIb3N0TGVhdmUkKCkpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jbG9zZVRpbWVyJCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3Rlbk1vdXNlSG9zdEVudGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdHVhbE1vdXNlU3RhdGUkID0gbWVyZ2UoXG4gICAgICB0aGlzLl9tb3VzZUxlYXZlJC5waXBlKG1hcFRvKHRydWUpKSxcbiAgICAgIHRoaXMuX21vdXNlRW50ZXIkLnBpcGUobWFwVG8oZmFsc2UpKSxcbiAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICk7XG5cbiAgICB0aGlzLl9tb3VzZUVudGVyJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmVuYWJsZWQpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAhdGhpcy5fd3JhcHBlckVsZW1lbnQ7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLnNldEFjdGl2ZVBvcG92ZXJHVUlEKHRoaXMuX2d1aWQpO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMub3BlblRpbWVyJCksXG4gICAgICAgIC8vIHdlIGhhdmUgdG8gY2hlY2sgdGhhdCBhZnRlciBhbGwgZGVsYXlzIG1vdXNlIHN0aWxsIG92ZXIgYW4gZWxlbWVuXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKGFjdHVhbE1vdXNlU3RhdGUkKSxcbiAgICAgICAgZmlsdGVyKChbXywgbW91c2VMZWF2ZV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gIW1vdXNlTGVhdmU7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fb3BlblBvcG92ZXIoKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9saXN0ZW5Nb3VzZUhvc3RMZWF2ZSQoKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNsb3NlVGltZXIkKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX2Nsb3NlUG9wb3ZlcigpKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5fY2xvc2VQb3BvdmVyKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb3BlblBvcG92ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ21vdXNlb3ZlcicgJiYgdGhpcy5fcG9wb3ZlclNlcnZpY2UuYWN0aXZlRWxlbWVudEdVSUQgIT09IHRoaXMuX2d1aWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9ob3N0Qm91bmRzID0gdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5fd3JhcHBlckVsZW1lbnQgPSB0aGlzLnRlbXBsYXRlID8gdGhpcy5fcG9wb3ZlclNlcnZpY2Uub3BlblBvcG92ZXIoXG4gICAgICAgIHRoaXMuX2VsUmVmLFxuICAgICAgICB0aGlzLnRlbXBsYXRlLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuX3BvcG92ZXJSZWYsXG4gICAgICAgIHRoaXMucG9zaXRpb24sXG4gICAgICApIDogdGhpcy5fcG9wb3ZlclNlcnZpY2Uub3BlblBvcG92ZXIoXG4gICAgICAgIHRoaXMuX2VsUmVmLFxuICAgICAgICB0aGlzLnRleHQsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5fcG9wb3ZlclJlZixcbiAgICAgICAgdGhpcy5wb3NpdGlvbixcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Nb3VzZUhvc3RMZWF2ZSQoKTogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PiB7XG4gICAgY29uc3QgbW91c2VNb3ZlJCA9IHRoaXMuX21vdXNlTW92ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gISF0aGlzLl93cmFwcGVyRWxlbWVudCksXG4gICAgICAgIGZpbHRlcigoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcG9wb3ZlclJlZi5hdXRvQ2xvc2UgJiYgdGhpcy5fbW91c2VMZWZ0VGhlVGFyZ2V0cyhldmVudCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIGNvbnN0IG1vdXNlQ2xpY2skID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycpO1xuXG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgbW91c2VNb3ZlJCxcbiAgICAgIG1vdXNlQ2xpY2skLFxuICAgICk7XG4gICAgLy9cbiAgICAvLyByZXR1cm4gdGhpcy5fbW91c2VMZWF2ZSRcbiAgICAvLyAgIC5waXBlKFxuICAgIC8vICAgICAvL1xuICAgIC8vICAgICB0aW1lb3V0V2l0aCgyMDAsIG1vdXNlTW92ZSQpLFxuICAgIC8vICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIG1vdXNlIGxlZnQgdGFyZ2V0IG9yIHBvcG92ZXIgcmVjdHNcbiAgcHJpdmF0ZSBfbW91c2VMZWZ0VGhlVGFyZ2V0cyhldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhvc3RCb3VuZHMgPSB0aGlzLl9ob3N0Qm91bmRzO1xuICAgIGNvbnN0IHBvcG92ZXJCb3VuZHMgPSB0aGlzLl93cmFwcGVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IHBvaW50SW5Ib3N0UmVjdCA9IHBvaW50SW5SZWN0KFxuICAgICAgaG9zdEJvdW5kcy54LFxuICAgICAgaG9zdEJvdW5kcy55LFxuICAgICAgaG9zdEJvdW5kcy54ICsgaG9zdEJvdW5kcy53aWR0aCxcbiAgICAgIGhvc3RCb3VuZHMueSArIGhvc3RCb3VuZHMuaGVpZ2h0LFxuICAgICAgZXZlbnQueCxcbiAgICAgIGV2ZW50LnksXG4gICAgKTtcblxuICAgIGNvbnN0IHBvaW50SW5Qb3BvdmVyUmVjdCA9IHBvaW50SW5SZWN0KFxuICAgICAgcG9wb3ZlckJvdW5kcy54LFxuICAgICAgcG9wb3ZlckJvdW5kcy55LFxuICAgICAgcG9wb3ZlckJvdW5kcy54ICsgcG9wb3ZlckJvdW5kcy53aWR0aCxcbiAgICAgIHBvcG92ZXJCb3VuZHMueSArIHBvcG92ZXJCb3VuZHMuaGVpZ2h0LFxuICAgICAgZXZlbnQueCxcbiAgICAgIGV2ZW50LnksXG4gICAgKTtcblxuICAgIHJldHVybiAhcG9pbnRJbkhvc3RSZWN0ICYmICFwb2ludEluUG9wb3ZlclJlY3Q7XG4gIH1cbn1cbiJdfQ==
|
|
379
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvcG9wb3Zlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFLTixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLDRCQUE0QixFQUFhLE1BQU0sbUJBQW1CLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTFDLE9BQU8sRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFDTCxZQUFZLEVBQ1osS0FBSyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxFQUNILGNBQWMsR0FDZixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUs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QkFEVixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFLQyxPQUFPO3NCQUZiLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQ29uZmlndXJhYmxlRm9jdXNUcmFwRmFjdG9yeSwgRm9jdXNUcmFwIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgaGFzTW9kaWZpZXJLZXkgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuXG5pbXBvcnQgeyBndWlkIH0gZnJvbSAnQGZpcmVzdGl0Y2gvY29tbW9uJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZnJvbUV2ZW50LCBtZXJnZSwgcGlwZSwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZpbmFsaXplLFxuICBtYXBUbyxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxuICB3aXRoTGF0ZXN0RnJvbSxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5cbmltcG9ydCB7IEZzUG9wb3ZlclJlZiB9IGZyb20gJy4uL2NsYXNzL3BvcG92ZXItcmVmJztcbmltcG9ydCB7IEZzUG9wb3ZlcldyYXBwZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BvcG92ZXItd3JhcHBlci9wb3BvdmVyLXdyYXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnLi4vZW51bXMvcG9zaXRpb24nO1xuaW1wb3J0IHsgY3JlYXRlSW5qZWN0b3IgfSBmcm9tICcuLi9oZWxwZXJzL2NyZWF0ZS1pbmplY3Rvcic7XG5pbXBvcnQgeyBjcmVhdGVPdmVybGF5UmVmIH0gZnJvbSAnLi4vaGVscGVycy9jcmVhdGUtb3ZlcmxheS1yZWYnO1xuaW1wb3J0IHsgY3JlYXRlVGVtcGF0ZVBvcnRhbCB9IGZyb20gJy4uL2hlbHBlcnMvY3JlYXRlLXRlbXBsYXRlLXBvcnRhbCc7XG5pbXBvcnQgeyBoYXNPdmVybGF5QWJvdmUgfSBmcm9tICcuLi9oZWxwZXJzL2hhcy1vdmVybGF5LWFib3ZlJztcbmltcG9ydCB7IHBvaW50SW5SZWN0IH0gZnJvbSAnLi4vaGVscGVycy9wb2ludC1pbi1yZWN0JztcbmltcG9ydCB7IEZzUG9wb3ZlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wb3BvdmVyLnNlcnZpY2UnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc1BvcG92ZXJdJyxcbiAgZXhwb3J0QXM6ICdmc1BvcG92ZXInLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2ZzLXBvcG92ZXInLFxuICB9LFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGc1BvcG92ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdGV4dDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YTogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsZWF2ZURlbGF5ID0gMTAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93RGVsYXkgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhXaWR0aCA9IDI1MDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4SGVpZ2h0OiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHdyYXBwZXJDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhdXRvU2hvdyA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9DbG9zZSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxvYWRpbmdEaWFtZXRlciA9IDIwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2FkaW5nID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmluZGljYXRpb24nKVxuICBwdWJsaWMgaW5kaWNhdGlvbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHBvc2l0aW9uOiBQb3NpdGlvbiA9IFBvc2l0aW9uLlNvdXRoO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0aGVtZTogJ2xpZ2h0JyB8ICdkYXJrJyA9ICdsaWdodCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNpemU6ICd0aW55JyB8ICdzbWFsbCcgfCAnbm9ybWFsJyA9ICdub3JtYWwnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0cmlnZ2VyOiAnY2xpY2snIHwgJ21vdXNlb3ZlcicgPSAnbW91c2VvdmVyJztcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLXBvcG92ZXItZW5hYmxlZCcpXG4gIHB1YmxpYyBlbmFibGVkID0gdHJ1ZTtcblxuICAvKipcbiAgICogUGFuZWwgbW9kZTogYSBob3N0IGNsaWNrIG9yIG9wZW4oKSBvcGVucyBpdDsgaXQgc3RheXMgb3BlbiB1bnRpbCBjbG9zZSgpLCBhbiBvdXRzaWRlXG4gICAqIGNsaWNrLCBFc2NhcGUgKG9ubHkgd2hlbiBubyBsYXRlciBvdmVybGF5IHdpdGggYSBiYWNrZHJvcCBzaXRzIGFib3ZlIGl0KSBvciBgcG9wb3Zlci5jbG9zZSgpYFxuICAgKiBmcm9tIHRoZSBjb250ZW50LiBGb2N1cyBpcyB0cmFwcGVkIGluc2lkZSBhbmQgcmV0dXJucyBvbiBjbG9zZSB0byB0aGUgZWxlbWVudCB0aGF0IGhhZCBpdFxuICAgKiB3aGVuIHRoZSBwYW5lbCBvcGVuZWQuIGB0cmlnZ2VyYCwgYHNob3dEZWxheWAsIGBsZWF2ZURlbGF5YCBhbmQgYGF1dG9DbG9zZWAgZG9uJ3QgYXBwbHkuXG4gICAqL1xuICBwdWJsaWMgcGFuZWwgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGVhY2ggdGltZSB0aGUgcGFuZWwgY2xvc2VzLlxuICAgKi9cbiAgcHVibGljIGNsb3NlZCA9IG91dHB1dDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfcG9wb3ZlclJlZjogRnNQb3BvdmVyUmVmO1xuICBwcml2YXRlIF93cmFwcGVyRWxlbWVudDogRWxlbWVudDtcbiAgcHJpdmF0ZSBfaG9zdEJvdW5kczogRE9NUmVjdDtcblxuICBwcml2YXRlIF9tb3VzZUVudGVyJDogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PjtcbiAgcHJpdmF0ZSBfbW91c2VNb3ZlJDogT2JzZXJ2YWJsZTxFdmVudD47XG4gIHByaXZhdGUgX21vdXNlTGVhdmUkOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuXG4gIHByaXZhdGUgX3BvcG92ZXJDbG9zZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9lbFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBfcG9wb3ZlclNlcnZpY2UgPSBpbmplY3QoRnNQb3BvdmVyU2VydmljZSk7XG4gIHByaXZhdGUgX25nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIF9yb3V0ZXIgPSBpbmplY3QoUm91dGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIF9ndWlkID0gZ3VpZCgneHh4eHh4eCcpO1xuICBwcml2YXRlIF9vdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuICBwcml2YXRlIF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgX2ZvY3VzVHJhcEZhY3RvcnkgPSBpbmplY3QoQ29uZmlndXJhYmxlRm9jdXNUcmFwRmFjdG9yeSk7XG4gIHByaXZhdGUgX2RvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSBfcGFuZWxPdmVybGF5UmVmOiBPdmVybGF5UmVmO1xuICBwcml2YXRlIF9wYW5lbEZvY3VzVHJhcDogRm9jdXNUcmFwO1xuICBwcml2YXRlIF9wYW5lbE9wZW5lcjogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3BhbmVsVG9wbW9zdEtleWRvd246IEtleWJvYXJkRXZlbnQ7XG4gIHByaXZhdGUgX3BhbmVsQ2xvc2VkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fbW91c2VFbnRlciQgPSBmcm9tRXZlbnQodGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlZW50ZXInKTtcbiAgICB0aGlzLl9tb3VzZU1vdmUkID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIHRoaXMuX21vdXNlTGVhdmUkID0gZnJvbUV2ZW50KHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9wZW5UaW1lciQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGltZXIodGhpcy5zaG93RGVsYXkpO1xuICB9XG5cbiAgcHVibGljIGdldCBjbG9zZVRpbWVyJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aW1lcih0aGlzLmxlYXZlRGVsYXkpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuX2luaXRpYWxpemUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmVuYWJsZWQ/LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5lbmFibGVkPy5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5lbmFibGVkICYmICF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLl9wYW5lbE92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMuX2ZpbmlzaFBhbmVsKGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wb3BvdmVyQ2xvc2VkJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIHBhbmVsIG9uIHRoaXMgZWxlbWVudC4gUGFuZWwgbW9kZSBvbmx5LlxuICAgKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhbmVsKCkgfHwgIXRoaXMuZW5hYmxlZCB8fCAhdGhpcy5faW5pdGlhbGl6ZWQgfHwgdGhpcy5fcGFuZWxPdmVybGF5UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLl9vcGVuUGFuZWwoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBwYW5lbCwgb3IgaW4gaG92ZXIgYW5kIGNsaWNrIG1vZGVzIHRoZSBvcGVuIHBvcG92ZXIuXG4gICAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhbmVsKCkpIHtcbiAgICAgIHRoaXMuX2Nsb3NlUG9wb3ZlcigpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BhbmVsT3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLl9wb3BvdmVyUmVmLmNsb3NlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Nsb3NlUG9wb3ZlcigpIHtcbiAgICB0aGlzLl9wb3BvdmVyQ2xvc2VkJC5uZXh0KG51bGwpO1xuXG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLl93cmFwcGVyRWxlbWVudCA9IG51bGw7XG5cbiAgICAgIGlmICh0aGlzLl9wb3BvdmVyU2VydmljZS5oYXNBY3RpdmVQb3BvdmVyKSB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLmNsb3NlKHRoaXMuX3BvcG92ZXJSZWYpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wb3BvdmVyUmVmID0gbmV3IEZzUG9wb3ZlclJlZih7XG4gICAgICBtYXhXaWR0aDogdGhpcy5tYXhXaWR0aCxcbiAgICAgIG1heEhlaWdodDogdGhpcy5tYXhIZWlnaHQsXG4gICAgICB3cmFwcGVyQ2xhc3M6IHRoaXMud3JhcHBlckNsYXNzLFxuICAgICAgYXV0b1Nob3c6IHRoaXMuYXV0b1Nob3csXG4gICAgICBhdXRvQ2xvc2U6IHRoaXMuYXV0b0Nsb3NlLFxuICAgICAgbG9hZGluZ0RpYW1ldGVyOiB0aGlzLmxvYWRpbmdEaWFtZXRlcixcbiAgICAgIGxvYWRpbmc6IHRoaXMubG9hZGluZyxcbiAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgIHRoZW1lOiB0aGlzLnRoZW1lLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnBhbmVsKCkpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuUGFuZWxIb3N0Q2xpY2soKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk1vdXNlSG9zdENsaWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9saXN0ZW5Nb3VzZUhvc3RFbnRlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbGlzdGVuUm91dGVDaGFuZ2UoKTtcblxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlblJvdXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDtcbiAgICAgICAgfSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKFxuICAgICAgICAgICAgdGhpcy5fZGVzdHJveSRcbiAgICAgICAgICAgICAgLnBpcGUoZGVsYXkoMjAwKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3Rlbk1vdXNlSG9zdENsaWNrKCk6IHZvaWQge1xuICAgIGZyb21FdmVudCh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5lbmFibGVkKSxcbiAgICAgICAgdGFwKChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIHRoaXMuX29wZW5Qb3BvdmVyKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fbGlzdGVuTW91c2VIb3N0TGVhdmUkKCkpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jbG9zZVRpbWVyJCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3Rlbk1vdXNlSG9zdEVudGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdHVhbE1vdXNlU3RhdGUkID0gbWVyZ2UoXG4gICAgICB0aGlzLl9tb3VzZUxlYXZlJC5waXBlKG1hcFRvKHRydWUpKSxcbiAgICAgIHRoaXMuX21vdXNlRW50ZXIkLnBpcGUobWFwVG8oZmFsc2UpKSxcbiAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICk7XG5cbiAgICB0aGlzLl9tb3VzZUVudGVyJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmVuYWJsZWQpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAhdGhpcy5fd3JhcHBlckVsZW1lbnQ7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLnNldEFjdGl2ZVBvcG92ZXJHVUlEKHRoaXMuX2d1aWQpO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMub3BlblRpbWVyJCksXG4gICAgICAgIC8vIHdlIGhhdmUgdG8gY2hlY2sgdGhhdCBhZnRlciBhbGwgZGVsYXlzIG1vdXNlIHN0aWxsIG92ZXIgYW4gZWxlbWVuXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKGFjdHVhbE1vdXNlU3RhdGUkKSxcbiAgICAgICAgZmlsdGVyKChbXywgbW91c2VMZWF2ZV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gIW1vdXNlTGVhdmU7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fb3BlblBvcG92ZXIoKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9saXN0ZW5Nb3VzZUhvc3RMZWF2ZSQoKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNsb3NlVGltZXIkKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX2Nsb3NlUG9wb3ZlcigpKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5fY2xvc2VQb3BvdmVyKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb3BlblBvcG92ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ21vdXNlb3ZlcicgJiYgdGhpcy5fcG9wb3ZlclNlcnZpY2UuYWN0aXZlRWxlbWVudEdVSUQgIT09IHRoaXMuX2d1aWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9ob3N0Qm91bmRzID0gdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5fd3JhcHBlckVsZW1lbnQgPSB0aGlzLnRlbXBsYXRlID8gdGhpcy5fcG9wb3ZlclNlcnZpY2Uub3BlblBvcG92ZXIoXG4gICAgICAgIHRoaXMuX2VsUmVmLFxuICAgICAgICB0aGlzLnRlbXBsYXRlLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuX3BvcG92ZXJSZWYsXG4gICAgICAgIHRoaXMucG9zaXRpb24sXG4gICAgICApIDogdGhpcy5fcG9wb3ZlclNlcnZpY2Uub3BlblBvcG92ZXIoXG4gICAgICAgIHRoaXMuX2VsUmVmLFxuICAgICAgICB0aGlzLnRleHQsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5fcG9wb3ZlclJlZixcbiAgICAgICAgdGhpcy5wb3NpdGlvbixcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Nb3VzZUhvc3RMZWF2ZSQoKTogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PiB7XG4gICAgY29uc3QgbW91c2VNb3ZlJCA9IHRoaXMuX21vdXNlTW92ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gISF0aGlzLl93cmFwcGVyRWxlbWVudCksXG4gICAgICAgIGZpbHRlcigoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcG9wb3ZlclJlZi5hdXRvQ2xvc2UgJiYgdGhpcy5fbW91c2VMZWZ0VGhlVGFyZ2V0cyhldmVudCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIGNvbnN0IG1vdXNlQ2xpY2skID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycpO1xuXG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgbW91c2VNb3ZlJCxcbiAgICAgIG1vdXNlQ2xpY2skLFxuICAgICk7XG4gICAgLy9cbiAgICAvLyByZXR1cm4gdGhpcy5fbW91c2VMZWF2ZSRcbiAgICAvLyAgIC5waXBlKFxuICAgIC8vICAgICAvL1xuICAgIC8vICAgICB0aW1lb3V0V2l0aCgyMDAsIG1vdXNlTW92ZSQpLFxuICAgIC8vICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIG1vdXNlIGxlZnQgdGFyZ2V0IG9yIHBvcG92ZXIgcmVjdHNcbiAgcHJpdmF0ZSBfbW91c2VMZWZ0VGhlVGFyZ2V0cyhldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhvc3RCb3VuZHMgPSB0aGlzLl9ob3N0Qm91bmRzO1xuICAgIGNvbnN0IHBvcG92ZXJCb3VuZHMgPSB0aGlzLl93cmFwcGVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IHBvaW50SW5Ib3N0UmVjdCA9IHBvaW50SW5SZWN0KFxuICAgICAgaG9zdEJvdW5kcy54LFxuICAgICAgaG9zdEJvdW5kcy55LFxuICAgICAgaG9zdEJvdW5kcy54ICsgaG9zdEJvdW5kcy53aWR0aCxcbiAgICAgIGhvc3RCb3VuZHMueSArIGhvc3RCb3VuZHMuaGVpZ2h0LFxuICAgICAgZXZlbnQueCxcbiAgICAgIGV2ZW50LnksXG4gICAgKTtcblxuICAgIGNvbnN0IHBvaW50SW5Qb3BvdmVyUmVjdCA9IHBvaW50SW5SZWN0KFxuICAgICAgcG9wb3ZlckJvdW5kcy54LFxuICAgICAgcG9wb3ZlckJvdW5kcy55LFxuICAgICAgcG9wb3ZlckJvdW5kcy54ICsgcG9wb3ZlckJvdW5kcy53aWR0aCxcbiAgICAgIHBvcG92ZXJCb3VuZHMueSArIHBvcG92ZXJCb3VuZHMuaGVpZ2h0LFxuICAgICAgZXZlbnQueCxcbiAgICAgIGV2ZW50LnksXG4gICAgKTtcblxuICAgIHJldHVybiAhcG9pbnRJbkhvc3RSZWN0ICYmICFwb2ludEluUG9wb3ZlclJlY3Q7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5QYW5lbEhvc3RDbGljaygpOiB2b2lkIHtcbiAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJylcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5lbmFibGVkKSxcbiAgICAgICAgdGFwKChldmVudCkgPT4ge1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX29wZW5QYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wYW5lbE9wZW5lciA9IHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5fcGFuZWxPdmVybGF5UmVmID0gY3JlYXRlT3ZlcmxheVJlZih0aGlzLl9lbFJlZiwgdGhpcy5fb3ZlcmxheSwgdGhpcy5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgdGhpcy5fcG9wb3ZlclJlZi5vdmVybGF5UmVmID0gdGhpcy5fcGFuZWxPdmVybGF5UmVmO1xuXG4gICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLl9hdHRhY2hQYW5lbENvbnRlbnQodGhpcy5fcGFuZWxPdmVybGF5UmVmKTtcblxuICAgIHRoaXMuX3RyYXBQYW5lbEZvY3VzKHdyYXBwZXJFbGVtZW50KTtcbiAgICB0aGlzLl9saXN0ZW5QYW5lbENsb3NlKHRoaXMuX3BhbmVsT3ZlcmxheVJlZik7XG4gICAgdGhpcy5fbGlzdGVuUGFuZWxFc2NhcGUodGhpcy5fcGFuZWxPdmVybGF5UmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaFBhbmVsQ29udGVudChvdmVybGF5UmVmOiBPdmVybGF5UmVmKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IHdyYXBwZXJSZWYgPSBvdmVybGF5UmVmLmF0dGFjaChcbiAgICAgIG5ldyBDb21wb25lbnRQb3J0YWwoXG4gICAgICAgIEZzUG9wb3ZlcldyYXBwZXJDb21wb25lbnQsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGNyZWF0ZUluamVjdG9yKHRoaXMuX3BvcG92ZXJSZWYsIHRoaXMuX2luamVjdG9yKSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGlmICh0aGlzLnRlbXBsYXRlKSB7XG4gICAgICB3cmFwcGVyUmVmLmluc3RhbmNlXG4gICAgICAgIC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChjcmVhdGVUZW1wYXRlUG9ydGFsKHRoaXMudGVtcGxhdGUsIHRoaXMuX3BvcG92ZXJSZWYsIHRoaXMuZGF0YSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3cmFwcGVyUmVmLmluc3RhbmNlLnNldFRleHR1YWxDb250ZW50KHRoaXMudGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBwZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhYmxlIHRyYXAgYWxzbyBwdWxscyBmb2N1cyBiYWNrIHdoZW4gaXQgbGFuZHMgb3V0c2lkZSB0aGUgcGFuZWwsIGZvclxuICAgKiBleGFtcGxlIG9uIHRoZSBmaXJzdCBUYWIgYWZ0ZXIgYSBjYWxlbmRhciBpbnNpZGUgY2xvc2VkIGFuZCB0b29rIHRoZSBmb2N1c2VkIGVsZW1lbnRcbiAgICogd2l0aCBpdC4gRm9jdXMgaW5zaWRlIG90aGVyIG92ZXJsYXlzIChhIHNlbGVjdCwgYSBjYWxlbmRhcikgaXMgbGVmdCBhbG9uZS5cbiAgICovXG4gIHByaXZhdGUgX3RyYXBQYW5lbEZvY3VzKHdyYXBwZXJFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3BhbmVsRm9jdXNUcmFwID0gdGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUod3JhcHBlckVsZW1lbnQpO1xuICAgIHRoaXMuX3BhbmVsRm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKVxuICAgICAgLnRoZW4oKGZvY3VzZWQpID0+IHtcbiAgICAgICAgLy8gTm90aGluZyBpbnNpZGUgdGFrZXMgZm9jdXMgKHRleHQgb25seSk6IHRoZSBwYW5lbCBpdHNlbGYgYmVjb21lcyB0aGUgb25lXG4gICAgICAgIC8vIHRhYiBzdG9wLCBzbyB0aGUgb3BlbmVyIGJlaGluZCB0aGUgYmFja2Ryb3AgZG9lc24ndCBrZWVwIGZvY3VzLlxuICAgICAgICBpZiAoIWZvY3VzZWQgJiYgd3JhcHBlckVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICB3cmFwcGVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICB3cmFwcGVyRWxlbWVudC5zdHlsZS5vdXRsaW5lID0gJ25vbmUnO1xuICAgICAgICAgIHdyYXBwZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuUGFuZWxDbG9zZShvdmVybGF5UmVmOiBPdmVybGF5UmVmKTogdm9pZCB7XG4gICAgb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5jbG9zZSgpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3BhbmVsQ2xvc2VkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAvLyBFdmVyeSBjbG9zZSAoY2xvc2UoKSwgdGhlIGJhY2tkcm9wLCBFc2NhcGUsIG9yIGBwb3BvdmVyLmNsb3NlKClgIGZyb20gdGhlXG4gICAgLy8gY29udGVudCkgZ29lcyB0aHJvdWdoIEZzUG9wb3ZlclJlZi5jbG9zZSgpLCB3aGljaCBkZXRhY2hlcyBhbmQgdGhlbiBlbWl0cy5cbiAgICB0aGlzLl9wb3BvdmVyUmVmLmNsb3NlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fZmluaXNoUGFuZWwodHJ1ZSkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fcGFuZWxDbG9zZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFc2NhcGUgY2xvc2VzIHRoZSBwYW5lbCBvbmx5IHdoZW4gbm8gbGF0ZXIgb3ZlcmxheSB3aXRoIGEgYmFja2Ryb3Agc2l0cyBhYm92ZSBpdCwgc29cbiAgICogRXNjYXBlIGluIGEgY2FsZW5kYXIsIHNlbGVjdCBvciBtZW51IG9wZW5lZCBmcm9tIHRoZSBwYW5lbCBjbG9zZXMgb25seSB0aGF0LiBUaGUgY2hlY2tcbiAgICogcnVucyBpbiB0aGUgY2FwdHVyZSBwaGFzZSwgYmVmb3JlIGFueSBoYW5kbGVyIGluc2lkZSBjbG9zZXMgaXRzIG93biBvdmVybGF5OyBmcy1kYXRlcGlja2VyLFxuICAgKiBmb3Igb25lLCBjbG9zZXMgaXRzIGNhbGVuZGFyIGZyb20gdGhlIGlucHV0J3Mga2V5ZG93biBhbmQgZnJvbSBhIGRvY3VtZW50IGxpc3RlbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfbGlzdGVuUGFuZWxFc2NhcGUob3ZlcmxheVJlZjogT3ZlcmxheVJlZik6IHZvaWQge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4odGhpcy5fZG9jdW1lbnQsICdrZXlkb3duJywgeyBjYXB0dXJlOiB0cnVlIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3BhbmVsVG9wbW9zdEtleWRvd24gPSBoYXNPdmVybGF5QWJvdmUob3ZlcmxheVJlZikgPyBudWxsIDogZXZlbnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3BhbmVsQ2xvc2VkJCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH0pO1xuXG4gICAgb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmICFoYXNNb2RpZmllcktleShldmVudCkpLFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCA9PT0gdGhpcy5fcGFuZWxUb3Btb3N0S2V5ZG93biksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmNsb3NlKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fcGFuZWxDbG9zZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmlzaFBhbmVsKGVtaXQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5fcGFuZWxPdmVybGF5UmVmO1xuXG4gICAgdGhpcy5fcGFuZWxPdmVybGF5UmVmID0gbnVsbDtcbiAgICB0aGlzLl9wYW5lbFRvcG1vc3RLZXlkb3duID0gbnVsbDtcbiAgICB0aGlzLl9wYW5lbENsb3NlZCQubmV4dCgpO1xuICAgIHRoaXMuX3BhbmVsRm9jdXNUcmFwPy5kZXN0cm95KCk7XG4gICAgdGhpcy5fcGFuZWxGb2N1c1RyYXAgPSBudWxsO1xuICAgIG92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgIHRoaXMuX3Jlc3RvcmVQYW5lbEZvY3VzKCk7XG5cbiAgICBpZiAoZW1pdCkge1xuICAgICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3RvcmVQYW5lbEZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IG9wZW5lciA9IHRoaXMuX3BhbmVsT3BlbmVyO1xuXG4gICAgdGhpcy5fcGFuZWxPcGVuZXIgPSBudWxsO1xuXG4gICAgaWYgKG9wZW5lcj8uaXNDb25uZWN0ZWQgJiYgdHlwZW9mIG9wZW5lci5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3BlbmVyLmZvY3VzKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|