@ngutil/floating 0.0.80 → 0.0.82

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.
@@ -1,103 +0,0 @@
1
- import { Inject, Injectable, InjectionToken } from "@angular/core";
2
- import { combineLatest, debounceTime, EMPTY, filter, map, ReplaySubject, shareReplay, startWith, take, takeUntil, takeWhile } from "rxjs";
3
- import { Lifecycle } from "@ngutil/common";
4
- import { ContainerRef } from "../layer/container-ref";
5
- import { LayerService } from "../layer/layer.service";
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../layer/layer.service";
8
- import * as i2 from "../layer/container-ref";
9
- export const TRAITS = new InjectionToken("TRAITS");
10
- let UID_COUNTER = 0;
11
- export class FloatingRef {
12
- #traits;
13
- #untilCleanup;
14
- #untilDisposed;
15
- constructor(layerSvc, container, traits) {
16
- this.layerSvc = layerSvc;
17
- this.container = container;
18
- this.channel = new ReplaySubject(1);
19
- this.state = new Lifecycle({
20
- init: {},
21
- showing: {},
22
- shown: {},
23
- closing: { cancellable: false, order: "sequential" },
24
- disposing: { cancellable: false },
25
- disposed: { cancellable: false, order: "sequential" },
26
- cleanup: { cancellable: false, order: "sequential" }
27
- });
28
- this.#traits = {};
29
- this.#untilCleanup = this.state.onExecute("cleanup");
30
- this.#untilDisposed = this.state.onExecute("disposed");
31
- this.uid = `${++UID_COUNTER}`;
32
- Object.assign(container.nativeElement.style, {
33
- overflow: "hidden",
34
- visibility: "hidden",
35
- pointerEvents: "none"
36
- });
37
- container.nativeElement.setAttribute("data-floating", this.uid);
38
- this.#traits = traits;
39
- this.traitState$ = this.#traitState().pipe(shareReplay(1));
40
- this.state.current$.pipe(takeWhile(state => state !== "cleanup", true)).subscribe(state => {
41
- this.emit({ type: state });
42
- });
43
- this.state.on("init", () => this.traitState$.pipe(takeUntil(this.#untilCleanup), debounceTime(5), take(1)));
44
- this.state.on("showing", () => {
45
- container.nativeElement.style.visibility = "visible";
46
- });
47
- this.state.on("shown", () => {
48
- container.nativeElement.style.pointerEvents = null;
49
- });
50
- this.state.on("disposing", () => {
51
- container.nativeElement.style.pointerEvents = "none";
52
- });
53
- this.state.control(container.state);
54
- }
55
- show() {
56
- return this.state.run("init", "showing", "shown");
57
- }
58
- /**
59
- * @deprecated
60
- */
61
- hide() {
62
- return this.close(true);
63
- }
64
- close(force = false) {
65
- if (force) {
66
- return this.state.run("disposing", "disposed", "cleanup");
67
- }
68
- else {
69
- return this.state.run("closing", "disposing", "disposed", "cleanup");
70
- }
71
- }
72
- emit(event) {
73
- this.channel.next({ ...event, floatingRef: this });
74
- }
75
- setResult(data) {
76
- this.emit({ type: "result", data });
77
- this.close(true).subscribe();
78
- }
79
- watchTrait(name) {
80
- return this.traitState$.pipe(takeUntil(this.#untilDisposed), map(state => state[name]), filter(value => value != null));
81
- }
82
- #traitState() {
83
- const src = {};
84
- for (const [k, v] of Object.entries(this.#traits)) {
85
- src[k] = v.connect(this).pipe(takeUntil(this.#untilDisposed), startWith(null));
86
- }
87
- if (Object.keys(src).length === 0) {
88
- return EMPTY;
89
- }
90
- else {
91
- return combineLatest(src).pipe(shareReplay(1));
92
- }
93
- }
94
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FloatingRef, deps: [{ token: i1.LayerService }, { token: i2.ContainerRef }, { token: TRAITS }], target: i0.ɵɵFactoryTarget.Injectable }); }
95
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FloatingRef }); }
96
- }
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FloatingRef, decorators: [{
98
- type: Injectable
99
- }], ctorParameters: () => [{ type: i1.LayerService }, { type: i2.ContainerRef }, { type: undefined, decorators: [{
100
- type: Inject,
101
- args: [TRAITS]
102
- }] }] });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmctcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmxvYXRpbmcvc3JjL2Zsb2F0aW5nL2Zsb2F0aW5nLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFbEUsT0FBTyxFQUNILGFBQWEsRUFDYixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixHQUFHLEVBRUgsYUFBYSxFQUNiLFdBQVcsRUFDWCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxNQUFNLENBQUE7QUFFYixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTs7OztBQUtyRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQVMsUUFBUSxDQUFDLENBQUE7QUFlMUQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFBO0FBR25CLE1BQU0sT0FBTyxXQUFXO0lBYVgsT0FBTyxDQUFhO0lBR3BCLGFBQWEsQ0FBa0M7SUFDL0MsY0FBYyxDQUFtQztJQUkxRCxZQUNhLFFBQXNCLEVBQ3RCLFNBQXVCLEVBQ2hCLE1BQWM7UUFGckIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBdEIzQixZQUFPLEdBQUcsSUFBSSxhQUFhLENBQWtCLENBQUMsQ0FBQyxDQUFBO1FBRS9DLFVBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUMzQixJQUFJLEVBQUUsRUFBRTtZQUNSLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLEVBQUU7WUFDVCxPQUFPLEVBQUUsRUFBRSxX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Q0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2xGLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sS0FBSyxDQUFBO1FBQ2hCLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xELENBQUM7SUFDTCxDQUFDOzhHQXJHUSxXQUFXLDBFQXdCUixNQUFNO2tIQXhCVCxXQUFXOzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVOzswQkF5QkYsTUFBTTsyQkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHtcbiAgICBjb21iaW5lTGF0ZXN0LFxuICAgIGRlYm91bmNlVGltZSxcbiAgICBFTVBUWSxcbiAgICBmaWx0ZXIsXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBzdGFydFdpdGgsXG4gICAgdGFrZSxcbiAgICB0YWtlVW50aWwsXG4gICAgdGFrZVdoaWxlXG59IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgTGlmZWN5Y2xlIH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgQ29udGFpbmVyUmVmIH0gZnJvbSBcIi4uL2xheWVyL2NvbnRhaW5lci1yZWZcIlxuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL2xheWVyL2xheWVyLnNlcnZpY2VcIlxuaW1wb3J0IHsgRmxvYXRpbmdUcmFpdCB9IGZyb20gXCIuL3RyYWl0cy9fYmFzZVwiXG5cbmV4cG9ydCB0eXBlIFRyYWl0cyA9IHsgW2tleTogc3RyaW5nXTogRmxvYXRpbmdUcmFpdCB9XG5cbmV4cG9ydCBjb25zdCBUUkFJVFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48VHJhaXRzPihcIlRSQUlUU1wiKVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb2F0aW5nQ2hhbm5lbCB7XG4gICAgZmxvYXRpbmdSZWY6IEZsb2F0aW5nUmVmXG4gICAgdHlwZTogc3RyaW5nXG4gICAgZGF0YT86IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb2F0aW5nVHJhaXRFdmVudCB7XG4gICAgbmFtZTogc3RyaW5nXG4gICAgZGF0YTogb2JqZWN0XG59XG5cbnR5cGUgVHJhaXRTdGF0ZSA9IHsgW2tleTogc3RyaW5nXTogRmxvYXRpbmdUcmFpdEV2ZW50IHwgbnVsbCB9XG5cbmxldCBVSURfQ09VTlRFUiA9IDBcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZsb2F0aW5nUmVmPEMgZXh0ZW5kcyBGbG9hdGluZ0NoYW5uZWwgPSBGbG9hdGluZ0NoYW5uZWwsIFQgZXh0ZW5kcyBIVE1MRWxlbWVudCA9IEhUTUxFbGVtZW50PiB7XG4gICAgcmVhZG9ubHkgY2hhbm5lbCA9IG5ldyBSZXBsYXlTdWJqZWN0PEZsb2F0aW5nQ2hhbm5lbD4oMSlcblxuICAgIHJlYWRvbmx5IHN0YXRlID0gbmV3IExpZmVjeWNsZSh7XG4gICAgICAgIGluaXQ6IHt9LFxuICAgICAgICBzaG93aW5nOiB7fSxcbiAgICAgICAgc2hvd246IHt9LFxuICAgICAgICBjbG9zaW5nOiB7IGNhbmNlbGxhYmxlOiBmYWxzZSwgb3JkZXI6IFwic2VxdWVudGlhbFwiIH0sXG4gICAgICAgIGRpc3Bvc2luZzogeyBjYW5jZWxsYWJsZTogZmFsc2UgfSxcbiAgICAgICAgZGlzcG9zZWQ6IHsgY2FuY2VsbGFibGU6IGZhbHNlLCBvcmRlcjogXCJzZXF1ZW50aWFsXCIgfSxcbiAgICAgICAgY2xlYW51cDogeyBjYW5jZWxsYWJsZTogZmFsc2UsIG9yZGVyOiBcInNlcXVlbnRpYWxcIiB9XG4gICAgfSlcblxuICAgIHJlYWRvbmx5ICN0cmFpdHM6IFRyYWl0cyA9IHt9XG4gICAgcmVhZG9ubHkgdHJhaXRTdGF0ZSQ6IE9ic2VydmFibGU8VHJhaXRTdGF0ZT5cblxuICAgIHJlYWRvbmx5ICN1bnRpbENsZWFudXAgPSB0aGlzLnN0YXRlLm9uRXhlY3V0ZShcImNsZWFudXBcIilcbiAgICByZWFkb25seSAjdW50aWxEaXNwb3NlZCA9IHRoaXMuc3RhdGUub25FeGVjdXRlKFwiZGlzcG9zZWRcIilcblxuICAgIHJlYWRvbmx5IHVpZCA9IGAkeysrVUlEX0NPVU5URVJ9YFxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHJlYWRvbmx5IGxheWVyU3ZjOiBMYXllclNlcnZpY2UsXG4gICAgICAgIHJlYWRvbmx5IGNvbnRhaW5lcjogQ29udGFpbmVyUmVmLFxuICAgICAgICBASW5qZWN0KFRSQUlUUykgdHJhaXRzOiBUcmFpdHNcbiAgICApIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihjb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZSwge1xuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCJcbiAgICAgICAgfSlcbiAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1mbG9hdGluZ1wiLCB0aGlzLnVpZClcblxuICAgICAgICB0aGlzLiN0cmFpdHMgPSB0cmFpdHNcbiAgICAgICAgdGhpcy50cmFpdFN0YXRlJCA9IHRoaXMuI3RyYWl0U3RhdGUoKS5waXBlKHNoYXJlUmVwbGF5KDEpKVxuXG4gICAgICAgIHRoaXMuc3RhdGUuY3VycmVudCQucGlwZSh0YWtlV2hpbGUoc3RhdGUgPT4gc3RhdGUgIT09IFwiY2xlYW51cFwiLCB0cnVlKSkuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCh7IHR5cGU6IHN0YXRlIH0gYXMgQylcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5zdGF0ZS5vbihcImluaXRcIiwgKCkgPT4gdGhpcy50cmFpdFN0YXRlJC5waXBlKHRha2VVbnRpbCh0aGlzLiN1bnRpbENsZWFudXApLCBkZWJvdW5jZVRpbWUoNSksIHRha2UoMSkpKVxuICAgICAgICB0aGlzLnN0YXRlLm9uKFwic2hvd2luZ1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCJcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5zdGF0ZS5vbihcInNob3duXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBudWxsIGFzIGFueVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnN0YXRlLm9uKFwiZGlzcG9zaW5nXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIlxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuc3RhdGUuY29udHJvbChjb250YWluZXIuc3RhdGUpXG4gICAgfVxuXG4gICAgc2hvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUucnVuKFwiaW5pdFwiLCBcInNob3dpbmdcIiwgXCJzaG93blwiKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgaGlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2UodHJ1ZSlcbiAgICB9XG5cbiAgICBjbG9zZShmb3JjZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUucnVuKFwiZGlzcG9zaW5nXCIsIFwiZGlzcG9zZWRcIiwgXCJjbGVhbnVwXCIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5ydW4oXCJjbG9zaW5nXCIsIFwiZGlzcG9zaW5nXCIsIFwiZGlzcG9zZWRcIiwgXCJjbGVhbnVwXCIpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbWl0KGV2ZW50OiBPbWl0PEMsIFwiZmxvYXRpbmdSZWZcIj4pIHtcbiAgICAgICAgdGhpcy5jaGFubmVsLm5leHQoeyAuLi5ldmVudCwgZmxvYXRpbmdSZWY6IHRoaXMgfSBhcyBhbnkpXG4gICAgfVxuXG4gICAgc2V0UmVzdWx0KGRhdGE6IGFueSkge1xuICAgICAgICB0aGlzLmVtaXQoeyB0eXBlOiBcInJlc3VsdFwiLCBkYXRhIH0gYXMgQylcbiAgICAgICAgdGhpcy5jbG9zZSh0cnVlKS5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIHdhdGNoVHJhaXQ8VD4obmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWl0U3RhdGUkLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy4jdW50aWxEaXNwb3NlZCksXG4gICAgICAgICAgICBtYXAoc3RhdGUgPT4gc3RhdGVbbmFtZV0pLFxuICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9IG51bGwpXG4gICAgICAgICkgYXMgT2JzZXJ2YWJsZTxUPlxuICAgIH1cblxuICAgICN0cmFpdFN0YXRlKCk6IE9ic2VydmFibGU8VHJhaXRTdGF0ZT4ge1xuICAgICAgICBjb25zdCBzcmM6IHsgW2tleTogc3RyaW5nXTogT2JzZXJ2YWJsZTxGbG9hdGluZ1RyYWl0RXZlbnQgfCBudWxsPiB9ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLiN0cmFpdHMpKSB7XG4gICAgICAgICAgICBzcmNba10gPSB2LmNvbm5lY3QodGhpcykucGlwZSh0YWtlVW50aWwodGhpcy4jdW50aWxEaXNwb3NlZCksIHN0YXJ0V2l0aChudWxsKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzcmMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChzcmMpLnBpcGUoc2hhcmVSZXBsYXkoMSkpXG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,133 +0,0 @@
1
- import { inject, Injectable, TemplateRef } from "@angular/core";
2
- import { Observable } from "rxjs";
3
- import { LayerService } from "../layer/layer.service";
4
- import { FloatingRef, TRAITS } from "./floating-ref";
5
- import { position } from "./traits/position";
6
- import * as i0 from "@angular/core";
7
- export class FloatingFactory {
8
- #providers;
9
- constructor(floatingSvc) {
10
- this.floatingSvc = floatingSvc;
11
- this.traits = {};
12
- this.#providers = [];
13
- this.subscribe = (...args) => this.show().subscribe(...args);
14
- }
15
- trait(...traits) {
16
- for (const trait of traits) {
17
- if (Array.isArray(trait)) {
18
- this.trait(...trait);
19
- }
20
- else {
21
- this.traits[trait.name] = trait;
22
- }
23
- }
24
- return this;
25
- }
26
- show() {
27
- return new Observable((dest) => {
28
- let disposing = false;
29
- const ref = this.create();
30
- const channelSub = ref.channel.subscribe(event => {
31
- dest.next(event);
32
- if (event.type === "disposing") {
33
- disposing = true;
34
- }
35
- if (event.type === "cleanup") {
36
- dest.complete();
37
- }
38
- });
39
- const showSub = ref.show().subscribe();
40
- return () => {
41
- showSub.unsubscribe();
42
- channelSub.unsubscribe();
43
- if (!disposing) {
44
- ref.hide().subscribe();
45
- }
46
- };
47
- });
48
- }
49
- providers(providers) {
50
- if (!providers) {
51
- providers = [];
52
- }
53
- providers = [
54
- ...providers,
55
- { provide: TRAITS, useValue: this.traits },
56
- { provide: LayerService, useValue: this.floatingSvc.layer },
57
- { provide: FloatingService, useValue: this.floatingSvc },
58
- FloatingRef,
59
- ...this.#providers
60
- ];
61
- return providers;
62
- }
63
- position(options) {
64
- return this.trait(position(options));
65
- }
66
- provides(providers) {
67
- if (Array.isArray(providers)) {
68
- this.#providers = [...this.#providers, ...providers];
69
- }
70
- else {
71
- this.#providers = [...this.#providers, providers];
72
- }
73
- return this;
74
- }
75
- }
76
- export class FloatingTemplateFactory extends FloatingFactory {
77
- constructor(floatingSvc, tpl, options) {
78
- super(floatingSvc);
79
- this.tpl = tpl;
80
- this.options = options;
81
- }
82
- create() {
83
- const options = { ...this.options };
84
- options.providers = this.providers(options.providers);
85
- const container = this.floatingSvc.layer.newTemplatePortal(this.tpl, options);
86
- return container.injector.get(FloatingRef);
87
- }
88
- }
89
- export class FloatingComponentFactory extends FloatingFactory {
90
- constructor(floatingSvc, component, options) {
91
- super(floatingSvc);
92
- this.component = component;
93
- this.options = options;
94
- }
95
- create() {
96
- const options = { ...this.options };
97
- options.providers = this.providers(options.providers);
98
- const container = this.floatingSvc.layer.newComponentPortal(this.component, options);
99
- return container.injector.get(FloatingRef);
100
- }
101
- }
102
- /**
103
- * @example
104
- * ```typescript
105
- * class SomeComponent {}
106
- *
107
- * class SomeList {
108
- * readonly floating = inject(FloatingService)
109
- *
110
- * showComponent() {
111
- * this.floating.from(SomeComponent).traits(position(), backdrop()).subscribe()
112
- * }
113
- * ```
114
- */
115
- export class FloatingService {
116
- constructor() {
117
- this.layer = inject(LayerService);
118
- }
119
- from(value, opts) {
120
- if (value instanceof TemplateRef) {
121
- return new FloatingTemplateFactory(this, value, opts);
122
- }
123
- else {
124
- return new FloatingComponentFactory(this, value, opts);
125
- }
126
- }
127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FloatingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
128
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FloatingService }); }
129
- }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FloatingService, decorators: [{
131
- type: Injectable
132
- }] });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zsb2F0aW5nL3NyYy9mbG9hdGluZy9mbG9hdGluZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFZLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV6RSxPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBRTdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUVyRCxPQUFPLEVBQW1CLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVyRSxPQUFPLEVBQUUsUUFBUSxFQUE2QixNQUFNLG1CQUFtQixDQUFBOztBQUl2RSxNQUFNLE9BQWdCLGVBQWU7SUFHakMsVUFBVSxDQUFpQjtJQUUzQixZQUErQixXQUE0QjtRQUE1QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFKeEMsV0FBTSxHQUFxQyxFQUFFLENBQUE7UUFFaEUsZUFBVSxHQUFlLEVBQUUsQ0FBQTtRQTJDM0IsY0FBUyxHQUE2QyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7SUF6QzFDLENBQUM7SUFFL0QsS0FBSyxDQUFDLEdBQUcsTUFBaUM7UUFDdEMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN6QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFBO1lBQ3hCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUE7WUFDbkMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxJQUFJO1FBQ0EsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQWlDLEVBQUUsRUFBRTtZQUN4RCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFFckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFBO1lBQ3pCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNoQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7b0JBQzdCLFNBQVMsR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLENBQUM7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7Z0JBQ25CLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQTtZQUVGLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtZQUV0QyxPQUFPLEdBQUcsRUFBRTtnQkFDUixPQUFPLENBQUMsV0FBVyxFQUFFLENBQUE7Z0JBQ3JCLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtnQkFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNiLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtnQkFDMUIsQ0FBQztZQUNMLENBQUMsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUlTLFNBQVMsQ0FBQyxTQUFzQjtRQUN0QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDYixTQUFTLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLENBQUM7UUFFRCxTQUFTLEdBQUc7WUFDUixHQUFHLFNBQVM7WUFDWixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDMUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtZQUMzRCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDeEQsV0FBVztZQUNYLEdBQUcsSUFBSSxDQUFDLFVBQVU7U0FDckIsQ0FBQTtRQUVELE9BQU8sU0FBUyxDQUFBO0lBQ3BCLENBQUM7SUFJRCxRQUFRLENBQUMsT0FBNkI7UUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQ3hDLENBQUM7SUFFRCxRQUFRLENBQUMsU0FBZ0M7UUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFBO1FBQ3hELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUNyRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sdUJBQTBDLFNBQVEsZUFBZTtJQUMxRSxZQUNJLFdBQTRCLEVBQ1osR0FBbUIsRUFDbkIsT0FBaUM7UUFFakQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBSEYsUUFBRyxHQUFILEdBQUcsQ0FBZ0I7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7SUFHckQsQ0FBQztJQUVrQixNQUFNO1FBQ3JCLE1BQU0sT0FBTyxHQUE2QixFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzdELE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDckQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUM3RSxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzlDLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyx3QkFBdUQsU0FBUSxlQUFlO0lBQ3ZGLFlBQ0ksV0FBNEIsRUFDWixTQUFZLEVBQ1osT0FBa0M7UUFFbEQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBSEYsY0FBUyxHQUFULFNBQVMsQ0FBRztRQUNaLFlBQU8sR0FBUCxPQUFPLENBQTJCO0lBR3RELENBQUM7SUFFa0IsTUFBTTtRQUNyQixNQUFNLE9BQU8sR0FBOEIsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUM5RCxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDcEYsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0NBQ0o7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVhLFVBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7S0FjeEM7SUFQRyxJQUFJLENBQUksS0FBd0MsRUFBRSxJQUFTO1FBQ3ZELElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsS0FBWSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ2hFLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxJQUFJLHdCQUF3QixDQUFDLElBQUksRUFBRSxLQUFZLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDakUsQ0FBQztJQUNMLENBQUM7OEdBZFEsZUFBZTtrSEFBZixlQUFlOzsyRkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgUHJvdmlkZXIsIFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpYmVyIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBMYXllclNlcnZpY2UgfSBmcm9tIFwiLi4vbGF5ZXIvbGF5ZXIuc2VydmljZVwiXG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWxPcHRpb25zLCBUZW1wbGF0ZVBvcnRhbE9wdGlvbnMgfSBmcm9tIFwiLi4vbGF5ZXIvcG9ydGFsLXJlZlwiXG5pbXBvcnQgeyBGbG9hdGluZ0NoYW5uZWwsIEZsb2F0aW5nUmVmLCBUUkFJVFMgfSBmcm9tIFwiLi9mbG9hdGluZy1yZWZcIlxuaW1wb3J0IHsgdHlwZSBGbG9hdGluZ1RyYWl0IH0gZnJvbSBcIi4vdHJhaXRzL19iYXNlXCJcbmltcG9ydCB7IHBvc2l0aW9uLCB0eXBlIFBvc2l0aW9uVHJhaXRPcHRpb25zIH0gZnJvbSBcIi4vdHJhaXRzL3Bvc2l0aW9uXCJcblxuZXhwb3J0IHR5cGUgRmxvYXRpbmdUcmFpdElucHV0ID0gRmxvYXRpbmdUcmFpdCB8IEFycmF5PEZsb2F0aW5nVHJhaXRJbnB1dD5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZsb2F0aW5nRmFjdG9yeSB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYWl0czogeyBba2V5OiBzdHJpbmddOiBGbG9hdGluZ1RyYWl0IH0gPSB7fVxuXG4gICAgI3Byb3ZpZGVyczogUHJvdmlkZXJbXSA9IFtdXG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgZmxvYXRpbmdTdmM6IEZsb2F0aW5nU2VydmljZSkge31cblxuICAgIHRyYWl0KC4uLnRyYWl0czogQXJyYXk8RmxvYXRpbmdUcmFpdElucHV0Pikge1xuICAgICAgICBmb3IgKGNvbnN0IHRyYWl0IG9mIHRyYWl0cykge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHJhaXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFpdCguLi50cmFpdClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFpdHNbdHJhaXQubmFtZV0gPSB0cmFpdFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBzaG93KCk6IE9ic2VydmFibGU8RmxvYXRpbmdDaGFubmVsPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoZGVzdDogU3Vic2NyaWJlcjxGbG9hdGluZ0NoYW5uZWw+KSA9PiB7XG4gICAgICAgICAgICBsZXQgZGlzcG9zaW5nID0gZmFsc2VcblxuICAgICAgICAgICAgY29uc3QgcmVmID0gdGhpcy5jcmVhdGUoKVxuICAgICAgICAgICAgY29uc3QgY2hhbm5lbFN1YiA9IHJlZi5jaGFubmVsLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgZGVzdC5uZXh0KGV2ZW50KVxuICAgICAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBcImRpc3Bvc2luZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3Bvc2luZyA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xlYW51cFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3QuY29tcGxldGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGNvbnN0IHNob3dTdWIgPSByZWYuc2hvdygpLnN1YnNjcmliZSgpXG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2hvd1N1Yi51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICAgICAgY2hhbm5lbFN1Yi51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICAgICAgaWYgKCFkaXNwb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLmhpZGUoKS5zdWJzY3JpYmUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzdWJzY3JpYmU6IE9ic2VydmFibGU8RmxvYXRpbmdDaGFubmVsPltcInN1YnNjcmliZVwiXSA9ICguLi5hcmdzOiBhbnlbXSkgPT4gdGhpcy5zaG93KCkuc3Vic2NyaWJlKC4uLmFyZ3MpXG5cbiAgICBwcm90ZWN0ZWQgcHJvdmlkZXJzKHByb3ZpZGVycz86IFByb3ZpZGVyW10pOiBQcm92aWRlcltdIHtcbiAgICAgICAgaWYgKCFwcm92aWRlcnMpIHtcbiAgICAgICAgICAgIHByb3ZpZGVycyA9IFtdXG4gICAgICAgIH1cblxuICAgICAgICBwcm92aWRlcnMgPSBbXG4gICAgICAgICAgICAuLi5wcm92aWRlcnMsXG4gICAgICAgICAgICB7IHByb3ZpZGU6IFRSQUlUUywgdXNlVmFsdWU6IHRoaXMudHJhaXRzIH0sXG4gICAgICAgICAgICB7IHByb3ZpZGU6IExheWVyU2VydmljZSwgdXNlVmFsdWU6IHRoaXMuZmxvYXRpbmdTdmMubGF5ZXIgfSxcbiAgICAgICAgICAgIHsgcHJvdmlkZTogRmxvYXRpbmdTZXJ2aWNlLCB1c2VWYWx1ZTogdGhpcy5mbG9hdGluZ1N2YyB9LFxuICAgICAgICAgICAgRmxvYXRpbmdSZWYsXG4gICAgICAgICAgICAuLi50aGlzLiNwcm92aWRlcnNcbiAgICAgICAgXVxuXG4gICAgICAgIHJldHVybiBwcm92aWRlcnNcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlKCk6IEZsb2F0aW5nUmVmPEZsb2F0aW5nQ2hhbm5lbD5cblxuICAgIHBvc2l0aW9uKG9wdGlvbnM6IFBvc2l0aW9uVHJhaXRPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWl0KHBvc2l0aW9uKG9wdGlvbnMpKVxuICAgIH1cblxuICAgIHByb3ZpZGVzKHByb3ZpZGVyczogUHJvdmlkZXIgfCBQcm92aWRlcltdKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3ZpZGVycykpIHtcbiAgICAgICAgICAgIHRoaXMuI3Byb3ZpZGVycyA9IFsuLi50aGlzLiNwcm92aWRlcnMsIC4uLnByb3ZpZGVyc11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI3Byb3ZpZGVycyA9IFsuLi50aGlzLiNwcm92aWRlcnMsIHByb3ZpZGVyc11cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZsb2F0aW5nVGVtcGxhdGVGYWN0b3J5PFQgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgRmxvYXRpbmdGYWN0b3J5IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgZmxvYXRpbmdTdmM6IEZsb2F0aW5nU2VydmljZSxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHRwbDogVGVtcGxhdGVSZWY8VD4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBUZW1wbGF0ZVBvcnRhbE9wdGlvbnM8VD5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoZmxvYXRpbmdTdmMpXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGNyZWF0ZSgpOiBGbG9hdGluZ1JlZjxGbG9hdGluZ0NoYW5uZWw+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uczogVGVtcGxhdGVQb3J0YWxPcHRpb25zPFQ+ID0geyAuLi50aGlzLm9wdGlvbnMgfVxuICAgICAgICBvcHRpb25zLnByb3ZpZGVycyA9IHRoaXMucHJvdmlkZXJzKG9wdGlvbnMucHJvdmlkZXJzKVxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmZsb2F0aW5nU3ZjLmxheWVyLm5ld1RlbXBsYXRlUG9ydGFsKHRoaXMudHBsLCBvcHRpb25zKVxuICAgICAgICByZXR1cm4gY29udGFpbmVyLmluamVjdG9yLmdldChGbG9hdGluZ1JlZilcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGbG9hdGluZ0NvbXBvbmVudEZhY3Rvcnk8VCBleHRlbmRzIENvbXBvbmVudFR5cGU8YW55Pj4gZXh0ZW5kcyBGbG9hdGluZ0ZhY3Rvcnkge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBmbG9hdGluZ1N2YzogRmxvYXRpbmdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50OiBULFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgb3B0aW9uczogQ29tcG9uZW50UG9ydGFsT3B0aW9uczxUPlxuICAgICkge1xuICAgICAgICBzdXBlcihmbG9hdGluZ1N2YylcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY3JlYXRlKCk6IEZsb2F0aW5nUmVmPEZsb2F0aW5nQ2hhbm5lbD4ge1xuICAgICAgICBjb25zdCBvcHRpb25zOiBDb21wb25lbnRQb3J0YWxPcHRpb25zPFQ+ID0geyAuLi50aGlzLm9wdGlvbnMgfVxuICAgICAgICBvcHRpb25zLnByb3ZpZGVycyA9IHRoaXMucHJvdmlkZXJzKG9wdGlvbnMucHJvdmlkZXJzKVxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmZsb2F0aW5nU3ZjLmxheWVyLm5ld0NvbXBvbmVudFBvcnRhbCh0aGlzLmNvbXBvbmVudCwgb3B0aW9ucylcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5pbmplY3Rvci5nZXQoRmxvYXRpbmdSZWYpXG4gICAgfVxufVxuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBTb21lQ29tcG9uZW50IHt9XG4gKlxuICogY2xhc3MgU29tZUxpc3Qge1xuICogICAgICByZWFkb25seSBmbG9hdGluZyA9IGluamVjdChGbG9hdGluZ1NlcnZpY2UpXG4gKlxuICogICAgICBzaG93Q29tcG9uZW50KCkge1xuICogICAgICAgICAgdGhpcy5mbG9hdGluZy5mcm9tKFNvbWVDb21wb25lbnQpLnRyYWl0cyhwb3NpdGlvbigpLCBiYWNrZHJvcCgpKS5zdWJzY3JpYmUoKVxuICogICAgICB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZsb2F0aW5nU2VydmljZSB7XG4gICAgcmVhZG9ubHkgbGF5ZXIgPSBpbmplY3QoTGF5ZXJTZXJ2aWNlKVxuICAgIC8vIHJlYWRvbmx5IHBhcmVudCA9IGluamVjdChGbG9hdGluZ1JlZiwgeyBza2lwU2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSlcblxuICAgIGZyb208VCBleHRlbmRzIENvbXBvbmVudFR5cGU8YW55Pj4oY29tcG9uZW50OiBULCBvcHRzPzogQ29tcG9uZW50UG9ydGFsT3B0aW9uczxUPik6IEZsb2F0aW5nQ29tcG9uZW50RmFjdG9yeTxUPlxuXG4gICAgZnJvbTxUIGV4dGVuZHMgb2JqZWN0Pih0cGw6IFRlbXBsYXRlUmVmPFQ+LCBvcHRzPzogVGVtcGxhdGVQb3J0YWxPcHRpb25zPFQ+KTogRmxvYXRpbmdUZW1wbGF0ZUZhY3Rvcnk8VD5cblxuICAgIGZyb208VD4odmFsdWU6IENvbXBvbmVudFR5cGU8VD4gfCBUZW1wbGF0ZVJlZjxUPiwgb3B0czogYW55KTogRmxvYXRpbmdGYWN0b3J5IHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXRpbmdUZW1wbGF0ZUZhY3RvcnkodGhpcywgdmFsdWUgYXMgYW55LCBvcHRzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdGluZ0NvbXBvbmVudEZhY3RvcnkodGhpcywgdmFsdWUgYXMgYW55LCBvcHRzKVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,4 +0,0 @@
1
- export * from "./traits";
2
- export * from "./floating-ref";
3
- export * from "./floating.service";
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mbG9hdGluZy9zcmMvZmxvYXRpbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLG9CQUFvQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vdHJhaXRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Zsb2F0aW5nLXJlZlwiXG5leHBvcnQgKiBmcm9tIFwiLi9mbG9hdGluZy5zZXJ2aWNlXCJcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Jhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mbG9hdGluZy9zcmMvZmxvYXRpbmcvdHJhaXRzL19iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgdHlwZSB7IEZsb2F0aW5nUmVmIH0gZnJvbSBcIi4uL2Zsb2F0aW5nLXJlZlwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvYXRpbmdUcmFpdDxUID0gYW55PiB7XG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG5cbiAgICBjb25uZWN0KGZsb2F0aW5nUmVmOiBGbG9hdGluZ1JlZjxhbnk+KTogT2JzZXJ2YWJsZTxUPlxufVxuIl19
@@ -1,129 +0,0 @@
1
- import { animate, AnimationBuilder, style } from "@angular/animations";
2
- import { map, Observable, of, switchMap, take, tap } from "rxjs";
3
- import { animationObservable, maxPossibleRadius } from "@ngutil/graphics";
4
- import { Duration, Ease, rectContainsPoint, rectOrigin } from "@ngutil/style";
5
- // https://tympanus.net/Development/ModalWindowEffects/
6
- const timing = `${Duration.FastMs}ms ${Ease.Deceleration}`;
7
- export class AnimationTrait {
8
- constructor(animation, params) {
9
- this.animation = animation;
10
- this.params = params;
11
- this.name = "animation";
12
- }
13
- connect(floatingRef) {
14
- return new Observable((dst) => {
15
- const builder = floatingRef.container.injector.get(AnimationBuilder);
16
- const element = floatingRef.container.nativeElement;
17
- floatingRef.state.on("showing", () => animationParams(floatingRef, this.params).pipe(switchMap(params => animationObservable({
18
- builder,
19
- element,
20
- animation: this.animation.show,
21
- options: { params }
22
- }))));
23
- floatingRef.state.on("disposing", () => animationParams(floatingRef, this.params).pipe(switchMap(params => animationObservable({
24
- builder,
25
- element,
26
- animation: this.animation.hide,
27
- options: { params }
28
- })), tap(() => (element.style.display = "none"))));
29
- floatingRef.state.on("disposing", () => dst.complete());
30
- dst.next();
31
- });
32
- }
33
- }
34
- function animationParams(floatingRef, params) {
35
- if (params == null) {
36
- return of({});
37
- }
38
- return floatingRef.watchTrait("position").pipe(take(1), map(params));
39
- }
40
- export const FallAnimation = {
41
- show: [
42
- style({
43
- transform: "scale({{ scale }})",
44
- visibility: "visible",
45
- opacity: "0"
46
- }),
47
- animate(timing, style({
48
- transform: "scale(1)",
49
- opacity: "1"
50
- }))
51
- ],
52
- hide: [
53
- animate(timing, style({
54
- transform: "scale({{ scale }})",
55
- visibility: "visible",
56
- opacity: "0"
57
- }))
58
- ]
59
- };
60
- export function fallAnimation(scale = 1.5) {
61
- return new AnimationTrait(FallAnimation, () => {
62
- return { scale };
63
- });
64
- }
65
- export const FadeAnimation = {
66
- show: [style({ opacity: 0 }), animate(timing, style({ opacity: 1 }))],
67
- hide: [animate(timing, style({ opacity: 0 }))]
68
- };
69
- export function fadeAnimation() {
70
- return new AnimationTrait(FadeAnimation);
71
- }
72
- const SlideAnimation = {
73
- show: [
74
- style({
75
- transform: "translate({{ tx }}, {{ ty }})",
76
- opacity: "0",
77
- // transformOrigin: "{{ origin }}",
78
- visibility: "visible"
79
- }),
80
- animate(timing, style({
81
- opacity: "1",
82
- transform: "translate(0px, 0px)"
83
- }))
84
- ],
85
- hide: [animate(timing, style({ opacity: 0, transform: "translate(calc({{ tx }} * -1), calc({{ ty }} * -1))" }))]
86
- };
87
- const SlideAnimationParams = {
88
- center: { tx: 0, ty: 0 },
89
- up: { tx: 0, ty: 1 },
90
- down: { tx: 0, ty: -1 },
91
- left: { tx: 1, ty: 0 },
92
- right: { tx: -1, ty: 0 }
93
- };
94
- function slideAnimation(size) {
95
- return new AnimationTrait(SlideAnimation, position => {
96
- const { tx, ty } = SlideAnimationParams[position.direction];
97
- return { tx: `${tx * size}px`, ty: `${ty * size}px` };
98
- });
99
- }
100
- export function slideNearAnimation(size = 40) {
101
- return slideAnimation(size * -1);
102
- }
103
- export function slideAwayAnimation(size = 40) {
104
- return slideAnimation(size);
105
- }
106
- const RippleRevealAnimation = {
107
- show: [
108
- style({ clipPath: "circle({{ radiusStart }} at {{ origin }})" }),
109
- animate(`{{ duration }}ms ${Ease.Acceleration}`, style({ clipPath: "circle({{ radiusEnd }} at {{ origin }})" }))
110
- ],
111
- hide: [animate(timing, style({ opacity: 0 }))]
112
- };
113
- export function rippleRevealAnimation(options) {
114
- const { origin, initialRadius = 0, duration = Duration.SlowMs } = options;
115
- return new AnimationTrait(RippleRevealAnimation, position => {
116
- const animOrigin = rectContainsPoint(position.content.rect, origin)
117
- ? origin
118
- : rectOrigin(position.content.rect, "center middle");
119
- const { x, y, width, height } = position.content.rect;
120
- const radius = maxPossibleRadius(animOrigin.x, animOrigin.y, width, height);
121
- return {
122
- radiusStart: `${initialRadius}px`,
123
- radiusEnd: `${radius}px`,
124
- origin: `${animOrigin.x - x}px ${animOrigin.y - y}px`,
125
- duration: duration
126
- };
127
- });
128
- }
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmxvYXRpbmcvc3JjL2Zsb2F0aW5nL3RyYWl0cy9hbmltYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBcUIsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFekYsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFjLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRTVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pFLE9BQU8sRUFDSCxRQUFRLEVBQ1IsSUFBSSxFQUlKLGlCQUFpQixFQUNqQixVQUFVLEVBQ2IsTUFBTSxlQUFlLENBQUE7QUFPdEIsdURBQXVEO0FBRXZELE1BQU0sTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7QUFJMUQsTUFBTSxPQUFPLGNBQWM7SUFHdkIsWUFDYSxTQUF1QixFQUN2QixNQUE2QjtRQUQ3QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBSmpDLFNBQUksR0FBRyxXQUFXLENBQUE7SUFLeEIsQ0FBQztJQUVKLE9BQU8sQ0FBQyxXQUF3QjtRQUM1QixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsR0FBd0IsRUFBRSxFQUFFO1lBQy9DLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1lBQ3BFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFBO1lBRW5ELFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFD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Q0FBQyxDQUFDLE1BQU07WUFDUixDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQ3hELE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUNyRCxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzNFLE9BQU87WUFDSCxXQUFXLEVBQUUsR0FBRyxhQUFhLElBQUk7WUFDakMsU0FBUyxFQUFFLEdBQUcsTUFBTSxJQUFJO1lBQ3hCLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQ3JELFFBQVEsRUFBRSxRQUFRO1NBQ3JCLENBQUE7SUFDTCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBBbmltYXRpb25CdWlsZGVyLCBBbmltYXRpb25NZXRhZGF0YSwgc3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiXG5cbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmliZXIsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBhbmltYXRpb25PYnNlcnZhYmxlLCBtYXhQb3NzaWJsZVJhZGl1cyB9IGZyb20gXCJAbmd1dGlsL2dyYXBoaWNzXCJcbmltcG9ydCB7XG4gICAgRHVyYXRpb24sXG4gICAgRWFzZSxcbiAgICBGbG9hdGluZ1Bvc2l0aW9uLFxuICAgIEZsb2F0aW5nUG9zaXRpb25EaXJlY3Rpb24sXG4gICAgUG9zaXRpb24sXG4gICAgcmVjdENvbnRhaW5zUG9pbnQsXG4gICAgcmVjdE9yaWdpblxufSBmcm9tIFwiQG5ndXRpbC9zdHlsZVwiXG5cbmltcG9ydCB7IEZsb2F0aW5nUmVmIH0gZnJvbSBcIi4uL2Zsb2F0aW5nLXJlZlwiXG5pbXBvcnQgeyBGbG9hdGluZ1RyYWl0IH0gZnJvbSBcIi4vX2Jhc2VcIlxuXG5leHBvcnQgdHlwZSBBbmltYXRpb25TZXQgPSB7IHNob3c6IEFuaW1hdGlvbk1ldGFkYXRhW107IGhpZGU6IEFuaW1hdGlvbk1ldGFkYXRhW10gfVxuXG4vLyBodHRwczovL3R5bXBhbnVzLm5ldC9EZXZlbG9wbWVudC9Nb2RhbFdpbmRvd0VmZmVjdHMvXG5cbmNvbnN0IHRpbWluZyA9IGAke0R1cmF0aW9uLkZhc3RNc31tcyAke0Vhc2UuRGVjZWxlcmF0aW9ufWBcblxuZXhwb3J0IHR5cGUgQW5pbWF0aW9uVHJhaXRQYXJhbXMgPSAocG9zaXRpb246IEZsb2F0aW5nUG9zaXRpb24pID0+IG9iamVjdFxuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uVHJhaXQgaW1wbGVtZW50cyBGbG9hdGluZ1RyYWl0PHVua25vd24+IHtcbiAgICByZWFkb25seSBuYW1lID0gXCJhbmltYXRpb25cIlxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHJlYWRvbmx5IGFuaW1hdGlvbjogQW5pbWF0aW9uU2V0LFxuICAgICAgICByZWFkb25seSBwYXJhbXM/OiBBbmltYXRpb25UcmFpdFBhcmFtc1xuICAgICkge31cblxuICAgIGNvbm5lY3QoZmxvYXRpbmdSZWY6IEZsb2F0aW5nUmVmKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoZHN0OiBTdWJzY3JpYmVyPHVua25vd24+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWlsZGVyID0gZmxvYXRpbmdSZWYuY29udGFpbmVyLmluamVjdG9yLmdldChBbmltYXRpb25CdWlsZGVyKVxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGZsb2F0aW5nUmVmLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50XG5cbiAgICAgICAgICAgIGZsb2F0aW5nUmVmLnN0YXRlLm9uKFwic2hvd2luZ1wiLCAoKSA9PlxuICAgICAgICAgICAgICAgIGFuaW1hdGlvblBhcmFtcyhmbG9hdGluZ1JlZiwgdGhpcy5wYXJhbXMpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChwYXJhbXMgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbk9ic2VydmFibGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IHRoaXMuYW5pbWF0aW9uLnNob3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogeyBwYXJhbXMgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGZsb2F0aW5nUmVmLnN0YXRlLm9uKFwiZGlzcG9zaW5nXCIsICgpID0+XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uUGFyYW1zKGZsb2F0aW5nUmVmLCB0aGlzLnBhcmFtcykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKHBhcmFtcyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uT2JzZXJ2YWJsZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogdGhpcy5hbmltYXRpb24uaGlkZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7IHBhcmFtcyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4gKGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBmbG9hdGluZ1JlZi5zdGF0ZS5vbihcImRpc3Bvc2luZ1wiLCAoKSA9PiBkc3QuY29tcGxldGUoKSlcbiAgICAgICAgICAgIGRzdC5uZXh0KClcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFuaW1hdGlvblBhcmFtcyhmbG9hdGluZ1JlZjogRmxvYXRpbmdSZWYsIHBhcmFtcz86IEFuaW1hdGlvblRyYWl0UGFyYW1zKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICBpZiAocGFyYW1zID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG9mKHt9KVxuICAgIH1cblxuICAgIHJldHVybiBmbG9hdGluZ1JlZi53YXRjaFRyYWl0PEZsb2F0aW5nUG9zaXRpb24+KFwicG9zaXRpb25cIikucGlwZSh0YWtlKDEpLCBtYXAocGFyYW1zKSlcbn1cblxuZXhwb3J0IGNvbnN0IEZhbGxBbmltYXRpb246IEFuaW1hdGlvblNldCA9IHtcbiAgICBzaG93OiBbXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogXCJzY2FsZSh7eyBzY2FsZSB9fSlcIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgICAgICAgb3BhY2l0eTogXCIwXCJcbiAgICAgICAgfSksXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgICB0aW1pbmcsXG4gICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBcInNjYWxlKDEpXCIsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogXCIxXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICBdLFxuICAgIGhpZGU6IFtcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAgIHRpbWluZyxcbiAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFwic2NhbGUoe3sgc2NhbGUgfX0pXCIsXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogXCIwXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICBdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWxsQW5pbWF0aW9uKHNjYWxlOiBudW1iZXIgPSAxLjUpIHtcbiAgICByZXR1cm4gbmV3IEFuaW1hdGlvblRyYWl0KEZhbGxBbmltYXRpb24sICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgc2NhbGUgfVxuICAgIH0pXG59XG5cbmV4cG9ydCBjb25zdCBGYWRlQW5pbWF0aW9uOiBBbmltYXRpb25TZXQgPSB7XG4gICAgc2hvdzogW3N0eWxlKHsgb3BhY2l0eTogMCB9KSwgYW5pbWF0ZSh0aW1pbmcsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSldLFxuICAgIGhpZGU6IFthbmltYXRlKHRpbWluZywgc3R5bGUoeyBvcGFjaXR5OiAwIH0pKV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhZGVBbmltYXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBBbmltYXRpb25UcmFpdChGYWRlQW5pbWF0aW9uKVxufVxuXG5jb25zdCBTbGlkZUFuaW1hdGlvbjogQW5pbWF0aW9uU2V0ID0ge1xuICAgIHNob3c6IFtcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSh7eyB0eCB9fSwge3sgdHkgfX0pXCIsXG4gICAgICAgICAgICBvcGFjaXR5OiBcIjBcIixcbiAgICAgICAgICAgIC8vIHRyYW5zZm9ybU9yaWdpbjogXCJ7eyBvcmlnaW4gfX1cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiXG4gICAgICAgIH0pLFxuICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgdGltaW5nLFxuICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IFwiMVwiLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMHB4LCAwcHgpXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICBdLFxuICAgIGhpZGU6IFthbmltYXRlKHRpbWluZywgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKGNhbGMoe3sgdHggfX0gKiAtMSksIGNhbGMoe3sgdHkgfX0gKiAtMSkpXCIgfSkpXVxufVxuXG5jb25zdCBTbGlkZUFuaW1hdGlvblBhcmFtczogeyBbSyBpbiBGbG9hdGluZ1Bvc2l0aW9uRGlyZWN0aW9uXTogeyB0eDogbnVtYmVyOyB0eTogbnVtYmVyIH0gfSA9IHtcbiAgICBjZW50ZXI6IHsgdHg6IDAsIHR5OiAwIH0sXG4gICAgdXA6IHsgdHg6IDAsIHR5OiAxIH0sXG4gICAgZG93bjogeyB0eDogMCwgdHk6IC0xIH0sXG4gICAgbGVmdDogeyB0eDogMSwgdHk6IDAgfSxcbiAgICByaWdodDogeyB0eDogLTEsIHR5OiAwIH1cbn1cblxuZnVuY3Rpb24gc2xpZGVBbmltYXRpb24oc2l6ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBBbmltYXRpb25UcmFpdChTbGlkZUFuaW1hdGlvbiwgcG9zaXRpb24gPT4ge1xuICAgICAgICBjb25zdCB7IHR4LCB0eSB9ID0gU2xpZGVBbmltYXRpb25QYXJhbXNbcG9zaXRpb24uZGlyZWN0aW9uXVxuICAgICAgICByZXR1cm4geyB0eDogYCR7dHggKiBzaXplfXB4YCwgdHk6IGAke3R5ICogc2l6ZX1weGAgfVxuICAgIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGlkZU5lYXJBbmltYXRpb24oc2l6ZTogbnVtYmVyID0gNDApIHtcbiAgICByZXR1cm4gc2xpZGVBbmltYXRpb24oc2l6ZSAqIC0xKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xpZGVBd2F5QW5pbWF0aW9uKHNpemU6IG51bWJlciA9IDQwKSB7XG4gICAgcmV0dXJuIHNsaWRlQW5pbWF0aW9uKHNpemUpXG59XG5cbmNvbnN0IFJpcHBsZVJldmVhbEFuaW1hdGlvbjogQW5pbWF0aW9uU2V0ID0ge1xuICAgIHNob3c6IFtcbiAgICAgICAgc3R5bGUoeyBjbGlwUGF0aDogXCJjaXJjbGUoe3sgcmFkaXVzU3RhcnQgfX0gYXQge3sgb3JpZ2luIH19KVwiIH0pLFxuICAgICAgICBhbmltYXRlKGB7eyBkdXJhdGlvbiB9fW1zICR7RWFzZS5BY2NlbGVyYXRpb259YCwgc3R5bGUoeyBjbGlwUGF0aDogXCJjaXJjbGUoe3sgcmFkaXVzRW5kIH19IGF0IHt7IG9yaWdpbiB9fSlcIiB9KSlcbiAgICBdLFxuICAgIGhpZGU6IFthbmltYXRlKHRpbWluZywgc3R5bGUoeyBvcGFjaXR5OiAwIH0pKV1cbn1cblxudHlwZSBSaXBwbGVSZXZlYWxBbmltYXRpb25PcHRpb25zID0ge1xuICAgIG9yaWdpbjogUG9zaXRpb25cbiAgICBpbml0aWFsUmFkaXVzPzogbnVtYmVyXG4gICAgZHVyYXRpb24/OiBudW1iZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpcHBsZVJldmVhbEFuaW1hdGlvbihvcHRpb25zOiBSaXBwbGVSZXZlYWxBbmltYXRpb25PcHRpb25zKSB7XG4gICAgY29uc3QgeyBvcmlnaW4sIGluaXRpYWxSYWRpdXMgPSAwLCBkdXJhdGlvbiA9IER1cmF0aW9uLlNsb3dNcyB9ID0gb3B0aW9uc1xuICAgIHJldHVybiBuZXcgQW5pbWF0aW9uVHJhaXQoUmlwcGxlUmV2ZWFsQW5pbWF0aW9uLCBwb3NpdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IGFuaW1PcmlnaW4gPSByZWN0Q29udGFpbnNQb2ludChwb3NpdGlvbi5jb250ZW50LnJlY3QsIG9yaWdpbilcbiAgICAgICAgICAgID8gb3JpZ2luXG4gICAgICAgICAgICA6IHJlY3RPcmlnaW4ocG9zaXRpb24uY29udGVudC5yZWN0LCBcImNlbnRlciBtaWRkbGVcIilcbiAgICAgICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBwb3NpdGlvbi5jb250ZW50LnJlY3RcbiAgICAgICAgY29uc3QgcmFkaXVzID0gbWF4UG9zc2libGVSYWRpdXMoYW5pbU9yaWdpbi54LCBhbmltT3JpZ2luLnksIHdpZHRoLCBoZWlnaHQpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByYWRpdXNTdGFydDogYCR7aW5pdGlhbFJhZGl1c31weGAsXG4gICAgICAgICAgICByYWRpdXNFbmQ6IGAke3JhZGl1c31weGAsXG4gICAgICAgICAgICBvcmlnaW46IGAke2FuaW1PcmlnaW4ueCAtIHh9cHggJHthbmltT3JpZ2luLnkgLSB5fXB4YCxcbiAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblxuICAgICAgICB9XG4gICAgfSlcbn1cbiJdfQ==
@@ -1,26 +0,0 @@
1
- import { of } from "rxjs";
2
- export class AttributeTrait {
3
- constructor(attrs) {
4
- this.attrs = attrs;
5
- this.name = "attribute";
6
- }
7
- connect(floatingRef) {
8
- const el = floatingRef.container.nativeElement;
9
- for (const [k, v] of Object.entries(this.attrs)) {
10
- if (k === "dataset") {
11
- v && Object.assign(el.dataset, v);
12
- }
13
- else if (v == null) {
14
- el.removeAttribute(k);
15
- }
16
- else {
17
- el.setAttribute(k, v.toString());
18
- }
19
- }
20
- return of(this.attrs);
21
- }
22
- }
23
- export function attribute(attrs) {
24
- return new AttributeTrait(attrs);
25
- }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZmxvYXRpbmcvc3JjL2Zsb2F0aW5nL3RyYWl0cy9hdHRyaWJ1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQVNyQyxNQUFNLE9BQU8sY0FBYztJQUd2QixZQUFxQixLQUFpQjtRQUFqQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBRjdCLFNBQUksR0FBRyxXQUFXLENBQUE7SUFFYyxDQUFDO0lBRTFDLE9BQU8sQ0FBQyxXQUF3QjtRQUM1QixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQTtRQUU5QyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUNyQyxDQUFDO2lCQUFNLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtZQUNwQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QixDQUFDO0NBQ0o7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWlCO0lBQ3ZDLE9BQU8sSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBQcmltaXRpdmUgfSBmcm9tIFwidXRpbGl0eS10eXBlc1wiXG5cbmltcG9ydCB7IEZsb2F0aW5nUmVmIH0gZnJvbSBcIi4uL2Zsb2F0aW5nLXJlZlwiXG5pbXBvcnQgeyBGbG9hdGluZ1RyYWl0IH0gZnJvbSBcIi4vX2Jhc2VcIlxuXG5leHBvcnQgdHlwZSBBdHRyaWJ1dGVzID0geyBba2V5OiBzdHJpbmddOiBQcmltaXRpdmUgfSB8IHsgZGF0YXNldDogeyBba2V5OiBzdHJpbmddOiBQcmltaXRpdmUgfSB9XG5cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVUcmFpdCBpbXBsZW1lbnRzIEZsb2F0aW5nVHJhaXQ8QXR0cmlidXRlcz4ge1xuICAgIHJlYWRvbmx5IG5hbWUgPSBcImF0dHJpYnV0ZVwiXG5cbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBhdHRyczogQXR0cmlidXRlcykge31cblxuICAgIGNvbm5lY3QoZmxvYXRpbmdSZWY6IEZsb2F0aW5nUmVmKTogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVzPiB7XG4gICAgICAgIGNvbnN0IGVsID0gZmxvYXRpbmdSZWYuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnRcblxuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmF0dHJzKSkge1xuICAgICAgICAgICAgaWYgKGsgPT09IFwiZGF0YXNldFwiKSB7XG4gICAgICAgICAgICAgICAgdiAmJiBPYmplY3QuYXNzaWduKGVsLmRhdGFzZXQsIHYpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoaywgdi50b1N0cmluZygpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuYXR0cnMpXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXR0cmlidXRlKGF0dHJzOiBBdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVUcmFpdChhdHRycylcbn1cbiJdfQ==
@@ -1,37 +0,0 @@
1
- import { AnimationBuilder } from "@angular/animations";
2
- import { Observable } from "rxjs";
3
- import { animationObservable } from "@ngutil/graphics";
4
- import { FadeAnimation } from "./animation";
5
- export class BackdropTrait {
6
- constructor(options) {
7
- this.options = options;
8
- this.name = "backdrop";
9
- }
10
- connect(floatingRef) {
11
- return new Observable((dest) => {
12
- const animationBuilder = floatingRef.container.injector.get(AnimationBuilder);
13
- const options = { ...this.options };
14
- const backdrop = floatingRef.layerSvc.newBackdrop(floatingRef.container, options);
15
- floatingRef.container.nativeElement.setAttribute("data-floating-has-backdrop", "true");
16
- backdrop.nativeElement.setAttribute("data-floating-backdrop", floatingRef.uid);
17
- backdrop.state.on("showing", () => animationObservable({
18
- builder: animationBuilder,
19
- element: backdrop.nativeElement,
20
- animation: FadeAnimation.show
21
- }));
22
- backdrop.state.on("disposing", () => animationObservable({
23
- builder: animationBuilder,
24
- element: backdrop.nativeElement,
25
- animation: FadeAnimation.hide
26
- }));
27
- backdrop.state.on("disposed", () => dest.complete());
28
- floatingRef.state.on("disposing", () => backdrop.dispose());
29
- dest.add(backdrop.show().subscribe());
30
- dest.next(backdrop);
31
- });
32
- }
33
- }
34
- export function backdrop(options) {
35
- return new BackdropTrait(options);
36
- }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2Ryb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mbG9hdGluZy9zcmMvZmxvYXRpbmcvdHJhaXRzL2JhY2tkcm9wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRXRELE9BQU8sRUFBRSxVQUFVLEVBQWMsTUFBTSxNQUFNLENBQUE7QUFFN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFnQixNQUFNLGtCQUFrQixDQUFBO0FBS3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFNM0MsTUFBTSxPQUFPLGFBQWE7SUFHdEIsWUFBcUIsT0FBNkI7UUFBN0IsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFGekMsU0FBSSxHQUFHLFVBQVUsQ0FBQTtJQUUyQixDQUFDO0lBRXRELE9BQU8sQ0FBQyxXQUE2QjtRQUNqQyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsSUFBNkIsRUFBRSxFQUFFO1lBQ3BELE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDN0UsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUNuQyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBRWpGLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUN0RixRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7WUFFOUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUM5QixtQkFBbUIsQ0FBQztnQkFDaEIsT0FBTyxFQUFFLGdCQUFnQjtnQkFDekIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxhQUFhO2dCQUMvQixTQUFTLEVBQUUsYUFBYSxDQUFDLElBQUk7YUFDaEMsQ0FBQyxDQUNMLENBQUE7WUFDRCxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQ2hDLG1CQUFtQixDQUFDO2dCQUNoQixPQUFPLEVBQUUsZ0JBQWdCO2dCQUN6QixPQUFPLEVBQUUsUUFBUSxDQUFDLGFBQWE7Z0JBQy9CLFNBQVMsRUFBRSxhQUFhLENBQUMsSUFBSTthQUNoQyxDQUFDLENBQ0wsQ0FBQTtZQUVELFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtZQUVwRCxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFFM0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZCLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztDQUNKO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUE2QjtJQUNsRCxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbmltYXRpb25CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIlxuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpYmVyIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBhbmltYXRpb25PYnNlcnZhYmxlLCBDb3Zlck9wdGlvbnMgfSBmcm9tIFwiQG5ndXRpbC9ncmFwaGljc1wiXG5cbmltcG9ydCB7IEJhY2tkcm9wUmVmIH0gZnJvbSBcIi4uLy4uL2xheWVyXCJcbmltcG9ydCB7IHR5cGUgRmxvYXRpbmdSZWYgfSBmcm9tIFwiLi4vZmxvYXRpbmctcmVmXCJcbmltcG9ydCB7IEZsb2F0aW5nVHJhaXQgfSBmcm9tIFwiLi9fYmFzZVwiXG5pbXBvcnQgeyBGYWRlQW5pbWF0aW9uIH0gZnJvbSBcIi4vYW5pbWF0aW9uXCJcblxuaW50ZXJmYWNlIENvbW1vbk9wdGlvbnMge31cblxuZXhwb3J0IHR5cGUgQmFja2Ryb3BUcmFpdE9wdGlvbnMgPSBDb3Zlck9wdGlvbnMgJiBDb21tb25PcHRpb25zXG5cbmV4cG9ydCBjbGFzcyBCYWNrZHJvcFRyYWl0IGltcGxlbWVudHMgRmxvYXRpbmdUcmFpdDxCYWNrZHJvcFJlZj4ge1xuICAgIHJlYWRvbmx5IG5hbWUgPSBcImJhY2tkcm9wXCJcblxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG9wdGlvbnM6IEJhY2tkcm9wVHJhaXRPcHRpb25zKSB7fVxuXG4gICAgY29ubmVjdChmbG9hdGluZ1JlZjogRmxvYXRpbmdSZWY8YW55Pik6IE9ic2VydmFibGU8QmFja2Ryb3BSZWY+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChkZXN0OiBTdWJzY3JpYmVyPEJhY2tkcm9wUmVmPikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYW5pbWF0aW9uQnVpbGRlciA9IGZsb2F0aW5nUmVmLmNvbnRhaW5lci5pbmplY3Rvci5nZXQoQW5pbWF0aW9uQnVpbGRlcilcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucyB9XG4gICAgICAgICAgICBjb25zdCBiYWNrZHJvcCA9IGZsb2F0aW5nUmVmLmxheWVyU3ZjLm5ld0JhY2tkcm9wKGZsb2F0aW5nUmVmLmNvbnRhaW5lciwgb3B0aW9ucylcblxuICAgICAgICAgICAgZmxvYXRpbmdSZWYuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1mbG9hdGluZy1oYXMtYmFja2Ryb3BcIiwgXCJ0cnVlXCIpXG4gICAgICAgICAgICBiYWNrZHJvcC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtZmxvYXRpbmctYmFja2Ryb3BcIiwgZmxvYXRpbmdSZWYudWlkKVxuXG4gICAgICAgICAgICBiYWNrZHJvcC5zdGF0ZS5vbihcInNob3dpbmdcIiwgKCkgPT5cbiAgICAgICAgICAgICAgICBhbmltYXRpb25PYnNlcnZhYmxlKHtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRlcjogYW5pbWF0aW9uQnVpbGRlcixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogYmFja2Ryb3AubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBGYWRlQW5pbWF0aW9uLnNob3dcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYmFja2Ryb3Auc3RhdGUub24oXCJkaXNwb3NpbmdcIiwgKCkgPT5cbiAgICAgICAgICAgICAgICBhbmltYXRpb25PYnNlcnZhYmxlKHtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRlcjogYW5pbWF0aW9uQnVpbGRlcixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogYmFja2Ryb3AubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBGYWRlQW5pbWF0aW9uLmhpZGVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBiYWNrZHJvcC5zdGF0ZS5vbihcImRpc3Bvc2VkXCIsICgpID0+IGRlc3QuY29tcGxldGUoKSlcblxuICAgICAgICAgICAgZmxvYXRpbmdSZWYuc3RhdGUub24oXCJkaXNwb3NpbmdcIiwgKCkgPT4gYmFja2Ryb3AuZGlzcG9zZSgpKVxuXG4gICAgICAgICAgICBkZXN0LmFkZChiYWNrZHJvcC5zaG93KCkuc3Vic2NyaWJlKCkpXG4gICAgICAgICAgICBkZXN0Lm5leHQoYmFja2Ryb3ApXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja2Ryb3Aob3B0aW9uczogQmFja2Ryb3BUcmFpdE9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wVHJhaXQob3B0aW9ucylcbn1cbiJdfQ==
@@ -1,90 +0,0 @@
1
- import { distinctUntilChanged, exhaustMap, filter, from, fromEvent, map, Observable, of, race } from "rxjs";
2
- import { KeystrokeService } from "@ngutil/aria";
3
- import { coerceElement } from "@ngutil/common";
4
- class CloseTriggerTrait {
5
- constructor(options = {}) {
6
- this.options = options;
7
- this.name = "close-trigger";
8
- }
9
- connect(floatingRef) {
10
- const { keystroke, clickOutside, trigger } = this.options;
11
- const container = floatingRef.container.nativeElement;
12
- const triggers = [];
13
- const selfUid = Number(floatingRef.uid);
14
- if (keystroke) {
15
- const ks = floatingRef.container.injector.get(KeystrokeService);
16
- triggers.push(ks.watch(container, { key: "Escape", state: "up" }).pipe(map(() => {
17
- return { source: "keystroke" };
18
- })));
19
- // TODO: angular auxiliary route
20
- }
21
- if (clickOutside) {
22
- const allowedElements = typeof clickOutside === "boolean" ? [] : clickOutside.allowedElements?.map(coerceElement) || [];
23
- triggers.push(fromEvent(document, "click", { capture: true, passive: true }).pipe(filter(event => {
24
- if (!(event.target instanceof HTMLElement)) {
25
- return false;
26
- }
27
- const target = event.target;
28
- for (const allowed of allowedElements) {
29
- if (target === allowed || allowed.contains(target)) {
30
- return false;
31
- }
32
- }
33
- const floatingUid = getFloatingUid(target, "data-floating", "floating");
34
- const backdropUid = getFloatingUid(target, "data-floating-backdrop", "floatingBackdrop");
35
- const otherBackdropUid = floatingUid != null && floatingUid !== selfUid
36
- ? getFloatingUid(document.querySelector(`[data-floating-backdrop="${floatingUid}"]`), "data-floating-backdrop", "floatingBackdrop")
37
- : undefined;
38
- // console.log({ floatingUid, backdropUid, otherBackdropUid, self: selfUid })
39
- if (floatingUid == null && backdropUid == null) {
40
- return true;
41
- }
42
- else {
43
- return (
44
- // click on self or erlier backdrop
45
- (backdropUid != null && backdropUid <= selfUid) ||
46
- // click on other floating element, whitout backdrop
47
- (floatingUid != null && otherBackdropUid == null && floatingUid < selfUid) ||
48
- // click on other floating element that opened erlier
49
- (floatingUid != null && floatingUid < selfUid));
50
- }
51
- }), map(() => {
52
- return { source: "click" };
53
- })));
54
- }
55
- if (trigger) {
56
- triggers.push(from(trigger).pipe(map(() => {
57
- return { source: "trigger" };
58
- })));
59
- }
60
- if (triggers.length === 0) {
61
- return of();
62
- }
63
- else {
64
- return new Observable(dst => floatingRef.state.on("shown", () => {
65
- race(...triggers)
66
- .pipe(exhaustMap(event => floatingRef.close().pipe(map(() => event), distinctUntilChanged())))
67
- .subscribe(dst);
68
- }));
69
- }
70
- }
71
- }
72
- export function closeTrigger(options = { clickOutside: true, keystroke: true }) {
73
- return new CloseTriggerTrait(options);
74
- }
75
- function getFloatingUid(el, attr, dataset) {
76
- if (el == null) {
77
- return undefined;
78
- }
79
- if (el.matches(`[${attr}]`)) {
80
- return Number(el.dataset[dataset]) || undefined;
81
- }
82
- else {
83
- const parent = el.closest(`[${attr}]`);
84
- if (parent) {
85
- return Number(parent.dataset[dataset]) || undefined;
86
- }
87
- }
88
- return undefined;
89
- }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvc2UtdHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zsb2F0aW5nL3NyYy9mbG9hdGluZy90cmFpdHMvY2xvc2UtdHJpZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLFVBQVUsRUFDVixNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ0gsVUFBVSxFQUVWLEVBQUUsRUFDRixJQUFJLEVBQ1AsTUFBTSxNQUFNLENBQUE7QUFFYixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQWlDNUQsTUFBTSxpQkFBaUI7SUFHbkIsWUFBcUIsVUFBK0IsRUFBRTtRQUFqQyxZQUFPLEdBQVAsT0FBTyxDQUEwQjtRQUY3QyxTQUFJLEdBQUcsZUFBZSxDQUFBO0lBRTBCLENBQUM7SUFFMUQsT0FBTyxDQUFDLFdBQXdCO1FBQzVCLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUE7UUFFekQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUE7UUFDckQsTUFBTSxRQUFRLEdBQTJCLEVBQUUsQ0FBQTtRQUMzQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRXZDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtZQUUvRCxRQUFRLENBQUMsSUFBSSxDQUNULEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFL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TyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQTtRQUN2RCxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFBO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIGV4aGF1c3RNYXAsXG4gICAgZmlsdGVyLFxuICAgIGZyb20sXG4gICAgZnJvbUV2ZW50LFxuICAgIG1hcCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIE9ic2VydmFibGVJbnB1dCxcbiAgICBvZixcbiAgICByYWNlXG59IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgS2V5c3Ryb2tlU2VydmljZSB9IGZyb20gXCJAbmd1dGlsL2FyaWFcIlxuaW1wb3J0IHsgY29lcmNlRWxlbWVudCwgRWxlbWVudElucHV0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgRmxvYXRpbmdSZWYgfSBmcm9tIFwiLi4vZmxvYXRpbmctcmVmXCJcbmltcG9ydCB7IEZsb2F0aW5nVHJhaXQgfSBmcm9tIFwiLi9fYmFzZVwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpY2tPdXRzaWRlT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogSWYgY2xpY2tzIGhhcHBlbmVkIG9uIHRoaXMgZWxlbWVudCwgdGhhdCBub3QgdHJpZ2dlciB0aGUgY2xvc2UgZXZlbnRcbiAgICAgKi9cbiAgICBhbGxvd2VkRWxlbWVudHM/OiBFbGVtZW50SW5wdXRbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3NlVHJpZ2dlck9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIENsb3NlIGZsb2F0aW5nIHdoZW4gY2xpY2sgb3V0c2lkZSBvZiBmbG9hdGluZyBlbGVtZW50XG4gICAgICovXG4gICAgY2xpY2tPdXRzaWRlPzogYm9vbGVhbiB8IENsaWNrT3V0c2lkZU9wdGlvbnNcblxuICAgIC8qKlxuICAgICAqIE9ubHkgd29ya3Mgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpcyBmb2N1c2VkXG4gICAgICovXG4gICAga2V5c3Ryb2tlPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogQ2xvc2Ugd2hlbiBlbWl0dGluZyBhbnkgdmFsdWVcbiAgICAgKi9cbiAgICB0cmlnZ2VyPzogT2JzZXJ2YWJsZUlucHV0PGFueT5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbG9zZVRyaWdnZXJFdmVudCB7XG4gICAgc291cmNlOiBcImNsaWNrXCIgfCBcImtleXN0cm9rZVwiIHwgXCJiYWNrYnV0dG9uXCIgfCBcInRyaWdnZXJcIlxufVxuXG5jbGFzcyBDbG9zZVRyaWdnZXJUcmFpdCBpbXBsZW1lbnRzIEZsb2F0aW5nVHJhaXQge1xuICAgIHJlYWRvbmx5IG5hbWUgPSBcImNsb3NlLXRyaWdnZXJcIlxuXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgb3B0aW9uczogQ2xvc2VUcmlnZ2VyT3B0aW9ucyA9IHt9KSB7fVxuXG4gICAgY29ubmVjdChmbG9hdGluZ1JlZjogRmxvYXRpbmdSZWYpOiBPYnNlcnZhYmxlPENsb3NlVHJpZ2dlckV2ZW50IHwgdm9pZD4ge1xuICAgICAgICBjb25zdCB7IGtleXN0cm9rZSwgY2xpY2tPdXRzaWRlLCB0cmlnZ2VyIH0gPSB0aGlzLm9wdGlvbnNcblxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBmbG9hdGluZ1JlZi5jb250YWluZXIubmF0aXZlRWxlbWVudFxuICAgICAgICBjb25zdCB0cmlnZ2VyczogQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PiA9IFtdXG4gICAgICAgIGNvbnN0IHNlbGZVaWQgPSBOdW1iZXIoZmxvYXRpbmdSZWYudWlkKVxuXG4gICAgICAgIGlmIChrZXlzdHJva2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGtzID0gZmxvYXRpbmdSZWYuY29udGFpbmVyLmluamVjdG9yLmdldChLZXlzdHJva2VTZXJ2aWNlKVxuXG4gICAgICAgICAgICB0cmlnZ2Vycy5wdXNoKFxuICAgICAgICAgICAgICAgIGtzLndhdGNoKGNvbnRhaW5lciwgeyBrZXk6IFwiRXNjYXBlXCIsIHN0YXRlOiBcInVwXCIgfSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHNvdXJjZTogXCJrZXlzdHJva2VcIiBhcyBjb25zdCB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAvLyBUT0RPOiBhbmd1bGFyIGF1eGlsaWFyeSByb3V0ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsaWNrT3V0c2lkZSkge1xuICAgICAgICAgICAgY29uc3QgYWxsb3dlZEVsZW1lbnRzID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgY2xpY2tPdXRzaWRlID09PSBcImJvb2xlYW5cIiA/IFtdIDogY2xpY2tPdXRzaWRlLmFsbG93ZWRFbGVtZW50cz8ubWFwKGNvZXJjZUVsZW1lbnQpIHx8IFtdXG5cbiAgICAgICAgICAgIHRyaWdnZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCBcImNsaWNrXCIsIHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXRcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhbGxvd2VkIG9mIGFsbG93ZWRFbGVtZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IGFsbG93ZWQgfHwgYWxsb3dlZC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXRpbmdVaWQgPSBnZXRGbG9hdGluZ1VpZCh0YXJnZXQsIFwiZGF0YS1mbG9hdGluZ1wiLCBcImZsb2F0aW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYWNrZHJvcFVpZCA9IGdldEZsb2F0aW5nVWlkKHRhcmdldCwgXCJkYXRhLWZsb2F0aW5nLWJhY2tkcm9wXCIsIFwiZmxvYXRpbmdCYWNrZHJvcFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJCYWNrZHJvcFVpZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmdVaWQgIT0gbnVsbCAmJiBmbG9hdGluZ1VpZCAhPT0gc2VsZlVpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGdldEZsb2F0aW5nVWlkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1mbG9hdGluZy1iYWNrZHJvcD1cIiR7ZmxvYXRpbmdVaWR9XCJdYCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1mbG9hdGluZy1iYWNrZHJvcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZsb2F0aW5nQmFja2Ryb3BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeyBmbG9hdGluZ1VpZCwgYmFja2Ryb3BVaWQsIG90aGVyQmFja2Ryb3BVaWQsIHNlbGY6IHNlbGZVaWQgfSlcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0aW5nVWlkID09IG51bGwgJiYgYmFja2Ryb3BVaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsaWNrIG9uIHNlbGYgb3IgZXJsaWVyIGJhY2tkcm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiYWNrZHJvcFVpZCAhPSBudWxsICYmIGJhY2tkcm9wVWlkIDw9IHNlbGZVaWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsaWNrIG9uIG90aGVyIGZsb2F0aW5nIGVsZW1lbnQsIHdoaXRvdXQgYmFja2Ryb3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0aW5nVWlkICE9IG51bGwgJiYgb3RoZXJCYWNrZHJvcFVpZCA9PSBudWxsICYmIGZsb2F0aW5nVWlkIDwgc2VsZlVpZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xpY2sgb24gb3RoZXIgZmxvYXRpbmcgZWxlbWVudCB0aGF0IG9wZW5lZCBlcmxpZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0aW5nVWlkICE9IG51bGwgJiYgZmxvYXRpbmdVaWQgPCBzZWxmVWlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBzb3VyY2U6IFwiY2xpY2tcIiBhcyBjb25zdCB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgICAgIHRyaWdnZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgZnJvbSh0cmlnZ2VyKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgc291cmNlOiBcInRyaWdnZXJcIiBhcyBjb25zdCB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyaWdnZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShkc3QgPT5cbiAgICAgICAgICAgICAgICBmbG9hdGluZ1JlZi5zdGF0ZS5vbihcInNob3duXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmFjZSguLi50cmlnZ2VycylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aGF1c3RNYXAoZXZlbnQgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmdSZWYuY2xvc2UoKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IGV2ZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZHN0KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVRyaWdnZXIob3B0aW9uczogQ2xvc2VUcmlnZ2VyT3B0aW9ucyA9IHsgY2xpY2tPdXRzaWRlOiB0cnVlLCBrZXlzdHJva2U6IHRydWUgfSkge1xuICAgIHJldHVybiBuZXcgQ2xvc2VUcmlnZ2VyVHJhaXQob3B0aW9ucylcbn1cblxuZnVuY3Rpb24gZ2V0RmxvYXRpbmdVaWQoZWw6IEhUTUxFbGVtZW50IHwgbnVsbCwgYXR0cjogc3RyaW5nLCBkYXRhc2V0OiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmIChlbCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoZWwubWF0Y2hlcyhgWyR7YXR0cn1dYCkpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihlbC5kYXRhc2V0W2RhdGFzZXRdKSB8fCB1bmRlZmluZWRcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBlbC5jbG9zZXN0KGBbJHthdHRyfV1gKSBhcyBIVE1MRWxlbWVudFxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHBhcmVudC5kYXRhc2V0W2RhdGFzZXRdKSB8fCB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG59XG4iXX0=