@ngutil/graphics 0.0.51 → 0.0.52
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/cover.service.d.ts +47 -11
- package/esm2022/cover.service.mjs +117 -25
- package/esm2022/index.mjs +3 -3
- package/esm2022/ripple/ripple.directive.mjs +2 -6
- package/esm2022/util/animation-observable.mjs +2 -1
- package/esm2022/util/index.mjs +3 -0
- package/esm2022/util/polygon.mjs +60 -0
- package/fesm2022/ngutil-graphics.mjs +194 -47
- package/fesm2022/ngutil-graphics.mjs.map +1 -1
- package/index.d.ts +2 -2
- package/package.json +3 -3
- package/util/index.d.ts +2 -0
- package/util/polygon.d.ts +7 -0
package/cover.service.d.ts
CHANGED
|
@@ -1,20 +1,38 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ElementRef } from "@angular/core";
|
|
2
|
+
import { Observable, ObservableInput, Subscriber, TeardownLogic } from "rxjs";
|
|
2
3
|
import { ElementInput } from "@ngutil/common";
|
|
3
|
-
import { Rect } from "@ngutil/style";
|
|
4
|
+
import { Rect, RectWatcher, SidesInput } from "@ngutil/style";
|
|
5
|
+
import { Polygon } from "./util";
|
|
4
6
|
import * as i0 from "@angular/core";
|
|
5
|
-
export interface
|
|
6
|
-
container: ElementInput;
|
|
7
|
+
export interface CommonCoverOptions {
|
|
7
8
|
color: "transparent" | string;
|
|
9
|
+
style?: Partial<CSSStyleDeclaration>;
|
|
8
10
|
}
|
|
9
|
-
export interface SolidCoverOptions extends
|
|
11
|
+
export interface SolidCoverOptions extends CommonCoverOptions {
|
|
12
|
+
type: "solid";
|
|
10
13
|
}
|
|
11
|
-
export interface CropCoverOptions extends
|
|
14
|
+
export interface CropCoverOptions extends CommonCoverOptions {
|
|
15
|
+
type: "crop";
|
|
12
16
|
/**
|
|
13
17
|
* Element that will be interactive while the cover is visible
|
|
14
18
|
*/
|
|
15
|
-
crop: ElementInput |
|
|
19
|
+
crop: ElementInput | ObservableInput<Rect | ElementInput>;
|
|
20
|
+
shape: CropShapeOptions;
|
|
21
|
+
expand?: SidesInput;
|
|
22
|
+
contract?: SidesInput;
|
|
23
|
+
disablePointerEvents?: boolean;
|
|
16
24
|
}
|
|
17
|
-
export
|
|
25
|
+
export type CropShapeOptions = CropRectOptions | CropCircleOptions | CropShapeCustom;
|
|
26
|
+
export interface CropRectOptions {
|
|
27
|
+
type: "rect";
|
|
28
|
+
borderRadius?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface CropCircleOptions {
|
|
31
|
+
type: "circle";
|
|
32
|
+
}
|
|
33
|
+
export type CropShapeCustom = (container: Rect, crop: Rect) => Polygon;
|
|
34
|
+
export interface RevealCoverOptions extends CommonCoverOptions {
|
|
35
|
+
type: "reveal";
|
|
18
36
|
/**
|
|
19
37
|
* Left and right coordinates inside the container
|
|
20
38
|
*/
|
|
@@ -23,11 +41,29 @@ export interface RevealCoverOptions extends CoverOptions {
|
|
|
23
41
|
top: number;
|
|
24
42
|
};
|
|
25
43
|
}
|
|
44
|
+
export type CoverOptions = SolidCoverOptions | CropCoverOptions | RevealCoverOptions;
|
|
45
|
+
export declare abstract class CoverRef<O extends CommonCoverOptions, R = void> extends ElementRef<HTMLElement> {
|
|
46
|
+
readonly container: ElementInput;
|
|
47
|
+
readonly options: O;
|
|
48
|
+
protected readonly watcher: RectWatcher;
|
|
49
|
+
constructor(container: ElementInput, options: O, watcher: RectWatcher);
|
|
50
|
+
show(): Observable<R>;
|
|
51
|
+
protected applyStyle(mask: HTMLElement): void;
|
|
52
|
+
protected abstract _show(dest: Subscriber<unknown>): TeardownLogic;
|
|
53
|
+
}
|
|
54
|
+
export declare class SolidCoverRef extends CoverRef<SolidCoverOptions> {
|
|
55
|
+
protected _show(dest: Subscriber<unknown>): TeardownLogic;
|
|
56
|
+
}
|
|
57
|
+
export declare class CropCoverRef extends CoverRef<CropCoverOptions> {
|
|
58
|
+
#private;
|
|
59
|
+
protected _show(dest: Subscriber<unknown>): TeardownLogic;
|
|
60
|
+
}
|
|
61
|
+
export declare class RevealCoverRef extends CoverRef<RevealCoverOptions> {
|
|
62
|
+
protected _show(dest: Subscriber<unknown>): TeardownLogic;
|
|
63
|
+
}
|
|
26
64
|
export declare class CoverService {
|
|
27
65
|
#private;
|
|
28
|
-
|
|
29
|
-
crop(options: CropCoverOptions): Observable<HTMLDivElement>;
|
|
30
|
-
reveal(options: RevealCoverOptions): Observable<HTMLDivElement>;
|
|
66
|
+
create(container: ElementInput, options: CoverOptions): SolidCoverRef | CropCoverRef | RevealCoverRef;
|
|
31
67
|
static ɵfac: i0.ɵɵFactoryDeclaration<CoverService, never>;
|
|
32
68
|
static ɵprov: i0.ɵɵInjectableDeclaration<CoverService>;
|
|
33
69
|
}
|
|
@@ -1,36 +1,128 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { Observable, of } from "rxjs";
|
|
3
|
-
import { coerceElement } from "@ngutil/common";
|
|
1
|
+
import { ElementRef, inject, Injectable } from "@angular/core";
|
|
2
|
+
import { combineLatest, filter, from, map, Observable, of, switchMap } from "rxjs";
|
|
3
|
+
import { coerceElement, isElementInput } from "@ngutil/common";
|
|
4
|
+
import { rectContract, rectExpand, RectWatcher } from "@ngutil/style";
|
|
5
|
+
import { maxPossibleRadius, polygonArc, polygonRect, polygonRoundedRect, polygonToCss } from "./util";
|
|
4
6
|
import * as i0 from "@angular/core";
|
|
5
|
-
export class
|
|
6
|
-
|
|
7
|
+
export class CoverRef extends ElementRef {
|
|
8
|
+
constructor(container, options, watcher) {
|
|
9
|
+
super(document.createElement("div"));
|
|
10
|
+
this.container = container;
|
|
11
|
+
this.options = options;
|
|
12
|
+
this.watcher = watcher;
|
|
13
|
+
Object.assign(this.nativeElement.style, {
|
|
14
|
+
position: "absolute",
|
|
15
|
+
inset: "0px"
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
show() {
|
|
7
19
|
return new Observable(dest => {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return () => {
|
|
13
|
-
cover.parentElement?.removeChild(cover);
|
|
14
|
-
};
|
|
20
|
+
const element = this.nativeElement;
|
|
21
|
+
coerceElement(this.container).appendChild(element);
|
|
22
|
+
dest.add(() => element.parentElement?.removeChild(element));
|
|
23
|
+
return this._show(dest);
|
|
15
24
|
});
|
|
16
25
|
}
|
|
17
|
-
|
|
18
|
-
|
|
26
|
+
applyStyle(mask) {
|
|
27
|
+
const options = this.options;
|
|
28
|
+
const backgroundColor = options.color === "transparent" ? "rgba(255, 255, 255, 0.0001)" : options.color;
|
|
29
|
+
if (options.style) {
|
|
30
|
+
Object.assign(mask.style, { backgroundColor, ...options.style });
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
Object.assign(mask.style, { backgroundColor });
|
|
34
|
+
}
|
|
19
35
|
}
|
|
20
|
-
|
|
21
|
-
|
|
36
|
+
}
|
|
37
|
+
export class SolidCoverRef extends CoverRef {
|
|
38
|
+
_show(dest) {
|
|
39
|
+
this.applyStyle(this.nativeElement);
|
|
22
40
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
41
|
+
}
|
|
42
|
+
export class CropCoverRef extends CoverRef {
|
|
43
|
+
_show(dest) {
|
|
44
|
+
const options = this.options;
|
|
45
|
+
const crop = isElementInput(options.crop) ? of(options.crop) : from(options.crop);
|
|
46
|
+
let maskEl = this.nativeElement;
|
|
47
|
+
// TODO: a backdrop filter kicsit ksőbb jelenik meg így
|
|
48
|
+
if (this.options.disablePointerEvents) {
|
|
49
|
+
maskEl = document.createElement("div");
|
|
50
|
+
Object.assign(maskEl.style, {
|
|
51
|
+
position: "absolute",
|
|
52
|
+
inset: "0px"
|
|
53
|
+
});
|
|
54
|
+
this.applyStyle(maskEl);
|
|
55
|
+
// maskEl.style.backdropFilter = null as any
|
|
56
|
+
this.nativeElement.appendChild(maskEl);
|
|
57
|
+
this.nativeElement.style.background = "rgba(0, 0, 0, 0.1)";
|
|
58
|
+
// this.nativeElement.style.backdropFilter = this.options.style?.backdropFilter as any
|
|
29
59
|
}
|
|
30
60
|
else {
|
|
31
|
-
|
|
61
|
+
this.applyStyle(this.nativeElement);
|
|
62
|
+
}
|
|
63
|
+
return combineLatest({
|
|
64
|
+
container: this.watcher.watch(this.container, "border-box"),
|
|
65
|
+
crop: crop.pipe(filter(value => value != null), switchMap(crop => {
|
|
66
|
+
if (isElementInput(crop)) {
|
|
67
|
+
return this.watcher.watch(coerceElement(crop), "border-box");
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return of(crop);
|
|
71
|
+
}
|
|
72
|
+
}), map(crop => {
|
|
73
|
+
if (this.options.expand) {
|
|
74
|
+
crop = rectExpand(crop, this.options.expand);
|
|
75
|
+
}
|
|
76
|
+
if (this.options.contract) {
|
|
77
|
+
crop = rectContract(crop, this.options.contract);
|
|
78
|
+
}
|
|
79
|
+
return crop;
|
|
80
|
+
}))
|
|
81
|
+
}).subscribe(({ container, crop }) => {
|
|
82
|
+
const outer = polygonRect({ x: 0, y: 0 }, { x: container.width, y: container.height });
|
|
83
|
+
const croppedArea = this.#polygon(container, crop).reverse();
|
|
84
|
+
const polygon = [...outer, ...croppedArea];
|
|
85
|
+
maskEl.style.clipPath = polygonToCss(polygon);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
#polygon(container, crop) {
|
|
89
|
+
const shape = this.options.shape;
|
|
90
|
+
if (typeof shape === "function") {
|
|
91
|
+
return shape(container, crop);
|
|
92
|
+
}
|
|
93
|
+
else if (shape.type === "circle") {
|
|
94
|
+
const r = maxPossibleRadius(crop.x, crop.y, crop.width, crop.height);
|
|
95
|
+
return polygonArc({ x: crop.x + r, y: crop.y + r }, r, 0, Math.PI * 2);
|
|
96
|
+
}
|
|
97
|
+
else if (shape.type === "rect") {
|
|
98
|
+
const top = Math.round(Math.max(crop.y - container.y, 0));
|
|
99
|
+
const right = Math.round(Math.max(crop.x + crop.width));
|
|
100
|
+
const bottom = Math.round(Math.max(crop.y + crop.height));
|
|
101
|
+
const left = Math.round(Math.max(crop.x - container.x));
|
|
102
|
+
if (shape.borderRadius != null) {
|
|
103
|
+
return polygonRoundedRect({ x: left, y: top }, { x: right, y: bottom }, shape.borderRadius);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return polygonRect({ x: left, y: top }, { x: right, y: bottom });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export class RevealCoverRef extends CoverRef {
|
|
113
|
+
_show(dest) { }
|
|
114
|
+
}
|
|
115
|
+
export class CoverService {
|
|
116
|
+
#watcher = inject(RectWatcher);
|
|
117
|
+
create(container, options) {
|
|
118
|
+
switch (options.type) {
|
|
119
|
+
case "solid":
|
|
120
|
+
return new SolidCoverRef(container, options, this.#watcher);
|
|
121
|
+
case "crop":
|
|
122
|
+
return new CropCoverRef(container, options, this.#watcher);
|
|
123
|
+
case "reveal":
|
|
124
|
+
return new RevealCoverRef(container, options, this.#watcher);
|
|
32
125
|
}
|
|
33
|
-
return el;
|
|
34
126
|
}
|
|
35
127
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: CoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
36
128
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: CoverService, providedIn: "root" }); }
|
|
@@ -39,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
39
131
|
type: Injectable,
|
|
40
132
|
args: [{ providedIn: "root" }]
|
|
41
133
|
}] });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoaWNzL3NyYy9jb3Zlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFckMsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQTs7QUF5QjVELE1BQU0sT0FBTyxZQUFZO0lBQ3JCLEtBQUssQ0FBQyxPQUEwQjtRQUM1QixPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUMxQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFFaEIsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsS0FBSyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDM0MsQ0FBQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQXlCO1FBQzFCLE9BQU8sRUFBRSxFQUFFLENBQUE7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQTJCO1FBQzlCLE9BQU8sRUFBRSxFQUFFLENBQUE7SUFDZixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQXFCO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDeEMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO1FBQzlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQTtRQUV2RSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDbEMsRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsNkJBQTZCLENBQUE7UUFDNUQsQ0FBQzthQUFNLENBQUM7WUFDSixFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFBO1FBQzVDLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQTtJQUNiLENBQUM7OEdBbENRLFlBQVk7a0hBQVosWUFBWSxjQURDLE1BQU07OzJGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBjb2VyY2VFbGVtZW50LCBFbGVtZW50SW5wdXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuaW1wb3J0IHsgUmVjdCB9IGZyb20gXCJAbmd1dGlsL3N0eWxlXCJcblxuZXhwb3J0IGludGVyZmFjZSBDb3Zlck9wdGlvbnMge1xuICAgIGNvbnRhaW5lcjogRWxlbWVudElucHV0XG4gICAgY29sb3I6IFwidHJhbnNwYXJlbnRcIiB8IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvbGlkQ292ZXJPcHRpb25zIGV4dGVuZHMgQ292ZXJPcHRpb25zIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JvcENvdmVyT3B0aW9ucyBleHRlbmRzIENvdmVyT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogRWxlbWVudCB0aGF0IHdpbGwgYmUgaW50ZXJhY3RpdmUgd2hpbGUgdGhlIGNvdmVyIGlzIHZpc2libGVcbiAgICAgKi9cbiAgICBjcm9wOiBFbGVtZW50SW5wdXQgfCBPYnNlcnZhYmxlPFJlY3Q+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV2ZWFsQ292ZXJPcHRpb25zIGV4dGVuZHMgQ292ZXJPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBMZWZ0IGFuZCByaWdodCBjb29yZGluYXRlcyBpbnNpZGUgdGhlIGNvbnRhaW5lclxuICAgICAqL1xuICAgIG9yaWdpbjogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyIH1cbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIENvdmVyU2VydmljZSB7XG4gICAgc29saWQob3B0aW9uczogU29saWRDb3Zlck9wdGlvbnMpOiBPYnNlcnZhYmxlPEhUTUxEaXZFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShkZXN0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvZXJjZUVsZW1lbnQob3B0aW9ucy5jb250YWluZXIpXG4gICAgICAgICAgICBjb25zdCBjb3ZlciA9IHRoaXMuI2NyZWF0ZUVsZW1lbnQob3B0aW9ucylcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb3ZlcilcbiAgICAgICAgICAgIGRlc3QubmV4dChjb3ZlcilcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb3Zlci5wYXJlbnRFbGVtZW50Py5yZW1vdmVDaGlsZChjb3ZlcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjcm9wKG9wdGlvbnM6IENyb3BDb3Zlck9wdGlvbnMpOiBPYnNlcnZhYmxlPEhUTUxEaXZFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiBvZigpXG4gICAgfVxuXG4gICAgcmV2ZWFsKG9wdGlvbnM6IFJldmVhbENvdmVyT3B0aW9ucyk6IE9ic2VydmFibGU8SFRNTERpdkVsZW1lbnQ+IHtcbiAgICAgICAgcmV0dXJuIG9mKClcbiAgICB9XG5cbiAgICAjY3JlYXRlRWxlbWVudChvcHRpb25zOiBDb3Zlck9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gICAgICAgIGVsLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiXG4gICAgICAgIGVsLnN0eWxlLnRvcCA9IGVsLnN0eWxlLnJpZ2h0ID0gZWwuc3R5bGUuYm90dG9tID0gZWwuc3R5bGUubGVmdCA9IFwiMHB4XCJcblxuICAgICAgICBpZiAob3B0aW9ucy5jb2xvciA9PT0gXCJ0cmFuc3BhcmVudFwiKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMDAxKVwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmNvbG9yXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWxcbiAgICB9XG59XG4iXX0=
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoaWNzL3NyYy9jb3Zlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUU5RCxPQUFPLEVBQ0gsYUFBYSxFQUNiLE1BQU0sRUFDTixJQUFJLEVBQ0osR0FBRyxFQUNILFVBQVUsRUFFVixFQUFFLEVBRUYsU0FBUyxFQUVaLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDNUUsT0FBTyxFQUFRLFlBQVksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFjLE1BQU0sZUFBZSxDQUFBO0FBRXZGLE9BQU8sRUFBRSxpQkFBaUIsRUFBVyxVQUFVLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQTs7QUE4QzlHLE1BQU0sT0FBZ0IsUUFBaUQsU0FBUSxVQUF1QjtJQUdsRyxZQUNhLFNBQXVCLEVBQ3ZCLE9BQVUsRUFDbkIsT0FBb0I7UUFFcEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUozQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQUc7UUFJbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFFdEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUNwQyxRQUFRLEVBQUUsVUFBVTtZQUNwQixLQUFLLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxJQUFJO1FBQ0EsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6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QUksWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQzlELEtBQUssUUFBUTtnQkFDVCxPQUFPLElBQUksY0FBYyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3BFLENBQUM7SUFDTCxDQUFDOzhHQVpRLFlBQVk7a0hBQVosWUFBWSxjQURDLE1BQU07OzJGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHtcbiAgICBjb21iaW5lTGF0ZXN0LFxuICAgIGZpbHRlcixcbiAgICBmcm9tLFxuICAgIG1hcCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIE9ic2VydmFibGVJbnB1dCxcbiAgICBvZixcbiAgICBTdWJzY3JpYmVyLFxuICAgIHN3aXRjaE1hcCxcbiAgICBUZWFyZG93bkxvZ2ljXG59IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgY29lcmNlRWxlbWVudCwgRWxlbWVudElucHV0LCBpc0VsZW1lbnRJbnB1dCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5pbXBvcnQgeyBSZWN0LCByZWN0Q29udHJhY3QsIHJlY3RFeHBhbmQsIFJlY3RXYXRjaGVyLCBTaWRlc0lucHV0IH0gZnJvbSBcIkBuZ3V0aWwvc3R5bGVcIlxuXG5pbXBvcnQgeyBtYXhQb3NzaWJsZVJhZGl1cywgUG9seWdvbiwgcG9seWdvbkFyYywgcG9seWdvblJlY3QsIHBvbHlnb25Sb3VuZGVkUmVjdCwgcG9seWdvblRvQ3NzIH0gZnJvbSBcIi4vdXRpbFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uQ292ZXJPcHRpb25zIHtcbiAgICBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIHwgc3RyaW5nXG4gICAgc3R5bGU/OiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29saWRDb3Zlck9wdGlvbnMgZXh0ZW5kcyBDb21tb25Db3Zlck9wdGlvbnMge1xuICAgIHR5cGU6IFwic29saWRcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyb3BDb3Zlck9wdGlvbnMgZXh0ZW5kcyBDb21tb25Db3Zlck9wdGlvbnMge1xuICAgIHR5cGU6IFwiY3JvcFwiXG4gICAgLyoqXG4gICAgICogRWxlbWVudCB0aGF0IHdpbGwgYmUgaW50ZXJhY3RpdmUgd2hpbGUgdGhlIGNvdmVyIGlzIHZpc2libGVcbiAgICAgKi9cbiAgICBjcm9wOiBFbGVtZW50SW5wdXQgfCBPYnNlcnZhYmxlSW5wdXQ8UmVjdCB8IEVsZW1lbnRJbnB1dD5cbiAgICBzaGFwZTogQ3JvcFNoYXBlT3B0aW9uc1xuICAgIGV4cGFuZD86IFNpZGVzSW5wdXRcbiAgICBjb250cmFjdD86IFNpZGVzSW5wdXRcbiAgICBkaXNhYmxlUG9pbnRlckV2ZW50cz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgQ3JvcFNoYXBlT3B0aW9ucyA9IENyb3BSZWN0T3B0aW9ucyB8IENyb3BDaXJjbGVPcHRpb25zIHwgQ3JvcFNoYXBlQ3VzdG9tXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JvcFJlY3RPcHRpb25zIHtcbiAgICB0eXBlOiBcInJlY3RcIlxuICAgIGJvcmRlclJhZGl1cz86IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyb3BDaXJjbGVPcHRpb25zIHtcbiAgICB0eXBlOiBcImNpcmNsZVwiXG59XG5cbmV4cG9ydCB0eXBlIENyb3BTaGFwZUN1c3RvbSA9IChjb250YWluZXI6IFJlY3QsIGNyb3A6IFJlY3QpID0+IFBvbHlnb25cblxuZXhwb3J0IGludGVyZmFjZSBSZXZlYWxDb3Zlck9wdGlvbnMgZXh0ZW5kcyBDb21tb25Db3Zlck9wdGlvbnMge1xuICAgIHR5cGU6IFwicmV2ZWFsXCJcbiAgICAvKipcbiAgICAgKiBMZWZ0IGFuZCByaWdodCBjb29yZGluYXRlcyBpbnNpZGUgdGhlIGNvbnRhaW5lclxuICAgICAqL1xuICAgIG9yaWdpbjogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyIH1cbn1cblxuZXhwb3J0IHR5cGUgQ292ZXJPcHRpb25zID0gU29saWRDb3Zlck9wdGlvbnMgfCBDcm9wQ292ZXJPcHRpb25zIHwgUmV2ZWFsQ292ZXJPcHRpb25zXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb3ZlclJlZjxPIGV4dGVuZHMgQ29tbW9uQ292ZXJPcHRpb25zLCBSID0gdm9pZD4gZXh0ZW5kcyBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHdhdGNoZXI6IFJlY3RXYXRjaGVyXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcmVhZG9ubHkgY29udGFpbmVyOiBFbGVtZW50SW5wdXQsXG4gICAgICAgIHJlYWRvbmx5IG9wdGlvbnM6IE8sXG4gICAgICAgIHdhdGNoZXI6IFJlY3RXYXRjaGVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpXG4gICAgICAgIHRoaXMud2F0Y2hlciA9IHdhdGNoZXJcblxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubmF0aXZlRWxlbWVudC5zdHlsZSwge1xuICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgIGluc2V0OiBcIjBweFwiXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2hvdygpOiBPYnNlcnZhYmxlPFI+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGRlc3QgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgY29lcmNlRWxlbWVudCh0aGlzLmNvbnRhaW5lcikuYXBwZW5kQ2hpbGQoZWxlbWVudClcbiAgICAgICAgICAgIGRlc3QuYWRkKCgpID0+IGVsZW1lbnQucGFyZW50RWxlbWVudD8ucmVtb3ZlQ2hpbGQoZWxlbWVudCkpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hvdyhkZXN0KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhcHBseVN0eWxlKG1hc2s6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcbiAgICAgICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5jb2xvciA9PT0gXCJ0cmFuc3BhcmVudFwiID8gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDAwMSlcIiA6IG9wdGlvbnMuY29sb3JcblxuICAgICAgICBpZiAob3B0aW9ucy5zdHlsZSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtYXNrLnN0eWxlLCB7IGJhY2tncm91bmRDb2xvciwgLi4ub3B0aW9ucy5zdHlsZSB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtYXNrLnN0eWxlLCB7IGJhY2tncm91bmRDb2xvciB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF9zaG93KGRlc3Q6IFN1YnNjcmliZXI8dW5rbm93bj4pOiBUZWFyZG93bkxvZ2ljXG59XG5cbmV4cG9ydCBjbGFzcyBTb2xpZENvdmVyUmVmIGV4dGVuZHMgQ292ZXJSZWY8U29saWRDb3Zlck9wdGlvbnM+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3Nob3coZGVzdDogU3Vic2NyaWJlcjx1bmtub3duPik6IFRlYXJkb3duTG9naWMge1xuICAgICAgICB0aGlzLmFwcGx5U3R5bGUodGhpcy5uYXRpdmVFbGVtZW50KVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyb3BDb3ZlclJlZiBleHRlbmRzIENvdmVyUmVmPENyb3BDb3Zlck9wdGlvbnM+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3Nob3coZGVzdDogU3Vic2NyaWJlcjx1bmtub3duPik6IFRlYXJkb3duTG9naWMge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zXG4gICAgICAgIGNvbnN0IGNyb3AgPSBpc0VsZW1lbnRJbnB1dChvcHRpb25zLmNyb3ApID8gb2Yob3B0aW9ucy5jcm9wKSA6IGZyb20ob3B0aW9ucy5jcm9wKVxuICAgICAgICBsZXQgbWFza0VsID0gdGhpcy5uYXRpdmVFbGVtZW50XG5cbiAgICAgICAgLy8gVE9ETzogYSBiYWNrZHJvcCBmaWx0ZXIga2ljc2l0IGtzxZFiYiBqZWxlbmlrIG1lZyDDrWd5XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZVBvaW50ZXJFdmVudHMpIHtcbiAgICAgICAgICAgIG1hc2tFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWFza0VsLnN0eWxlLCB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgICAgICBpbnNldDogXCIwcHhcIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuYXBwbHlTdHlsZShtYXNrRWwpXG4gICAgICAgICAgICAvLyBtYXNrRWwuc3R5bGUuYmFja2Ryb3BGaWx0ZXIgPSBudWxsIGFzIGFueVxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKG1hc2tFbClcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gXCJyZ2JhKDAsIDAsIDAsIDAuMSlcIlxuICAgICAgICAgICAgLy8gdGhpcy5uYXRpdmVFbGVtZW50LnN0eWxlLmJhY2tkcm9wRmlsdGVyID0gdGhpcy5vcHRpb25zLnN0eWxlPy5iYWNrZHJvcEZpbHRlciBhcyBhbnlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlTdHlsZSh0aGlzLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMud2F0Y2hlci53YXRjaCh0aGlzLmNvbnRhaW5lciwgXCJib3JkZXItYm94XCIpLFxuICAgICAgICAgICAgY3JvcDogY3JvcC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPSBudWxsKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoY3JvcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0VsZW1lbnRJbnB1dChjcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2F0Y2hlci53YXRjaChjb2VyY2VFbGVtZW50KGNyb3ApLCBcImJvcmRlci1ib3hcIilcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjcm9wKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKGNyb3AgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmV4cGFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JvcCA9IHJlY3RFeHBhbmQoY3JvcCwgdGhpcy5vcHRpb25zLmV4cGFuZClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29udHJhY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyb3AgPSByZWN0Q29udHJhY3QoY3JvcCwgdGhpcy5vcHRpb25zLmNvbnRyYWN0KVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyb3BcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICB9KS5zdWJzY3JpYmUoKHsgY29udGFpbmVyLCBjcm9wIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyID0gcG9seWdvblJlY3QoeyB4OiAwLCB5OiAwIH0sIHsgeDogY29udGFpbmVyLndpZHRoLCB5OiBjb250YWluZXIuaGVpZ2h0IH0pXG4gICAgICAgICAgICBjb25zdCBjcm9wcGVkQXJlYSA9IHRoaXMuI3BvbHlnb24oY29udGFpbmVyLCBjcm9wKS5yZXZlcnNlKClcbiAgICAgICAgICAgIGNvbnN0IHBvbHlnb24gPSBbLi4ub3V0ZXIsIC4uLmNyb3BwZWRBcmVhXVxuXG4gICAgICAgICAgICBtYXNrRWwuc3R5bGUuY2xpcFBhdGggPSBwb2x5Z29uVG9Dc3MocG9seWdvbilcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAjcG9seWdvbihjb250YWluZXI6IFJlY3QsIGNyb3A6IFJlY3QpOiBQb2x5Z29uIHtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB0aGlzLm9wdGlvbnMuc2hhcGVcbiAgICAgICAgaWYgKHR5cGVvZiBzaGFwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gc2hhcGUoY29udGFpbmVyLCBjcm9wKVxuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlLnR5cGUgPT09IFwiY2lyY2xlXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBtYXhQb3NzaWJsZVJhZGl1cyhjcm9wLngsIGNyb3AueSwgY3JvcC53aWR0aCwgY3JvcC5oZWlnaHQpXG4gICAgICAgICAgICByZXR1cm4gcG9seWdvbkFyYyh7IHg6IGNyb3AueCArIHIsIHk6IGNyb3AueSArIHIgfSwgciwgMCwgTWF0aC5QSSAqIDIpXG4gICAgICAgIH0gZWxzZSBpZiAoc2hhcGUudHlwZSA9PT0gXCJyZWN0XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IE1hdGgucm91bmQoTWF0aC5tYXgoY3JvcC55IC0gY29udGFpbmVyLnksIDApKVxuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLnJvdW5kKE1hdGgubWF4KGNyb3AueCArIGNyb3Aud2lkdGgpKVxuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gTWF0aC5yb3VuZChNYXRoLm1heChjcm9wLnkgKyBjcm9wLmhlaWdodCkpXG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gTWF0aC5yb3VuZChNYXRoLm1heChjcm9wLnggLSBjb250YWluZXIueCkpXG5cbiAgICAgICAgICAgIGlmIChzaGFwZS5ib3JkZXJSYWRpdXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb2x5Z29uUm91bmRlZFJlY3QoeyB4OiBsZWZ0LCB5OiB0b3AgfSwgeyB4OiByaWdodCwgeTogYm90dG9tIH0sIHNoYXBlLmJvcmRlclJhZGl1cylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvbHlnb25SZWN0KHsgeDogbGVmdCwgeTogdG9wIH0sIHsgeDogcmlnaHQsIHk6IGJvdHRvbSB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJldmVhbENvdmVyUmVmIGV4dGVuZHMgQ292ZXJSZWY8UmV2ZWFsQ292ZXJPcHRpb25zPiB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF9zaG93KGRlc3Q6IFN1YnNjcmliZXI8dW5rbm93bj4pOiBUZWFyZG93bkxvZ2ljIHt9XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBDb3ZlclNlcnZpY2Uge1xuICAgIHJlYWRvbmx5ICN3YXRjaGVyID0gaW5qZWN0KFJlY3RXYXRjaGVyKVxuXG4gICAgY3JlYXRlKGNvbnRhaW5lcjogRWxlbWVudElucHV0LCBvcHRpb25zOiBDb3Zlck9wdGlvbnMpIHtcbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzb2xpZFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU29saWRDb3ZlclJlZihjb250YWluZXIsIG9wdGlvbnMsIHRoaXMuI3dhdGNoZXIpXG4gICAgICAgICAgICBjYXNlIFwiY3JvcFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ3JvcENvdmVyUmVmKGNvbnRhaW5lciwgb3B0aW9ucywgdGhpcy4jd2F0Y2hlcilcbiAgICAgICAgICAgIGNhc2UgXCJyZXZlYWxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJldmVhbENvdmVyUmVmKGNvbnRhaW5lciwgb3B0aW9ucywgdGhpcy4jd2F0Y2hlcilcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
package/esm2022/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from "./ripple/ripple.directive";
|
|
2
|
-
export
|
|
3
|
-
export * from "./util
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export * from "./cover.service";
|
|
3
|
+
export * from "./util";
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmFwaGljcy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmVcIlxuZXhwb3J0ICogZnJvbSBcIi4vY292ZXIuc2VydmljZVwiXG5leHBvcnQgKiBmcm9tIFwiLi91dGlsXCJcbiJdfQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Directive, ElementRef, NgZone, TemplateRef } from "@angular/core";
|
|
2
2
|
import { Destructible } from "@ngutil/common";
|
|
3
|
+
import { maxPossibleRadius } from "../util";
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export class RippleDirective extends Destructible {
|
|
5
6
|
#current;
|
|
@@ -151,9 +152,4 @@ export class Ripple {
|
|
|
151
152
|
this.el.style.opacity = "0";
|
|
152
153
|
}
|
|
153
154
|
}
|
|
154
|
-
function maxPossibleRadius(x, y, w, h) {
|
|
155
|
-
const distX = Math.max(x, Math.abs(w - x));
|
|
156
|
-
const distY = Math.max(y, Math.abs(h - y));
|
|
157
|
-
return Math.sqrt(distX * distX + distY * distY);
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlwcGxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoaWNzL3NyYy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFFLE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQTs7QUFPMUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsWUFBWTtJQUM3QyxRQUFRLENBQVM7SUFFakIsWUFDcUIsTUFBd0IsRUFDeEIsSUFBWSxFQUNaLEVBQW9CO1FBRXJDLEtBQUssRUFBRSxDQUFBO1FBSlUsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFDeEIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLE9BQUUsR0FBRixFQUFFLENBQWtCO1FBR3JDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUE7WUFDN0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFDdkQsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQTtZQUNoRixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQWlCO1FBQ25CLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUE7UUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtB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Q0FBQTtJQUNwQixDQUFDO0lBRUQsV0FBVyxDQUdWO0lBRUQsU0FBUyxDQWdCUjtJQUVELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7UUFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQTtJQUMvQixDQUFDO0NBQ0o7QUFFRCxTQUFTLGlCQUFpQixDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7SUFDakUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMxQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQTtBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBOZ1pvbmUsIFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBEZXN0cnVjdGlibGUsIElEaXNwb3NhYmxlIH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJuZy10ZW1wbGF0ZVtudVJpcHBsZV1cIixcbiAgICBleHBvcnRBczogXCJudVJpcHBsZVwiXG59KVxuZXhwb3J0IGNsYXNzIFJpcHBsZURpcmVjdGl2ZSBleHRlbmRzIERlc3RydWN0aWJsZSB7XG4gICAgI2N1cnJlbnQ/OiBSaXBwbGVcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRwbFJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWw6IEVsZW1lbnRSZWY8Tm9kZT5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoKVxuICAgICAgICB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudFxuICAgICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMuI29uTW91c2VEb3duKVxuICAgICAgICAgICAgICAgIHRoaXMuZC5hbnkoKCkgPT4gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdGhpcy4jb25Nb3VzZURvd24pKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGJlZ2luKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuI2N1cnJlbnQ/LmF1dG9EZXN0cm95KClcbiAgICAgICAgY29uc3QgY2ZnID0gdGhpcy4jY3JlYXRlUmlwcGxlQ29uZmlnKGV2ZW50KVxuICAgICAgICBjb25zdCByaXBwbGUgPSB0aGlzLiNjcmVhdGVSaXBwbGUoY2ZnKVxuICAgICAgICB0aGlzLiNjdXJyZW50ID0gcmlwcGxlXG5cbiAgICAgICAgY29uc3QgcmVmRWwgPSB0aGlzLnRwbFJlZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnRcbiAgICAgICAgcmVmRWwucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKHJpcHBsZS5lbCwgcmVmRWwpXG4gICAgICAgIHJpcHBsZS5zdGFydCgpXG4gICAgfVxuXG4gICAgZW5kKCkge1xuICAgICAgICB0aGlzLiNjdXJyZW50Py5hdXRvRGVzdHJveSgpXG4gICAgfVxuXG4gICAgI2NyZWF0ZVJpcHBsZShjb25maWc6IFJpcHBsZUNvbmZpZykge1xuICAgICAgICBjb25zdCByaXBwbGUgPSBuZXcgUmlwcGxlKGNvbmZpZywgdGhpcy56b25lLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy4jY3VycmVudCA9PT0gcmlwcGxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jY3VycmVudCA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmQuZGlzcG9zYWJsZShyaXBwbGUpXG4gICAgICAgIHJldHVybiByaXBwbGVcbiAgICB9XG5cbiAgICAjY3JlYXRlUmlwcGxlQ29uZmlnKGV2ZW50OiBNb3VzZUV2ZW50KTogUmlwcGxlQ29uZmlnIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgICBjb25zdCBib3VuZHMgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgY29uc3QgdyA9IGJvdW5kcy53aWR0aFxuICAgICAgICBjb25zdCBoID0gYm91bmRzLmhlaWdodFxuICAgICAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WCAtIGJvdW5kcy5sZWZ0XG4gICAgICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZIC0gYm91bmRzLnRvcFxuICAgICAgICBjb25zdCByID0gbWF4UG9zc2libGVSYWRpdXMoeCwgeSwgdywgaCkgKyBNYXRoLm1pbih3LCBoKVxuICAgICAgICByZXR1cm4geyB4LCB5LCB3LCBoLCByLCBkOiA2MDAgfVxuICAgIH1cblxuICAgICNvbk1vdXNlRG93biA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLmJlZ2luKGV2ZW50KVxuICAgIH1cbn1cblxudHlwZSBSaXBwbGVDb25maWcgPSB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3OiBudW1iZXI7IGg6IG51bWJlcjsgcjogbnVtYmVyOyBkOiBudW1iZXIgfVxuXG5leHBvcnQgY2xhc3MgUmlwcGxlIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICAgIHB1YmxpYyByZWFkb25seSBlbDogSFRNTERpdkVsZW1lbnRcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNSdW5uaW5nOiBib29sZWFuID0gZmFsc2VcblxuICAgICNhdXRvRGVzdHJveSA9IGZhbHNlXG4gICAgI2hpZGluZyA9IGZhbHNlXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgY29uZmlnOiBSaXBwbGVDb25maWcsXG4gICAgICAgIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IG9uRGVzdHJveTogKCkgPT4gdm9pZFxuICAgICkge1xuICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgICAgICAgZWwuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCJcbiAgICAgICAgZWwuc3R5bGUudG9wID0gYCR7Y29uZmlnLnkgLSBjb25maWcucn1weGBcbiAgICAgICAgZWwuc3R5bGUubGVmdCA9IGAke2NvbmZpZy54IC0gY29uZmlnLnJ9cHhgXG4gICAgICAgIGVsLnN0eWxlLndpZHRoID0gYCR7Y29uZmlnLnIgKiAyfXB4YFxuICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSBgJHtjb25maWcuciAqIDJ9cHhgXG4gICAgICAgIGVsLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIlxuICAgICAgICBlbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcInZhcigtLXJpcHBsZS1jb2xvcilcIlxuICAgICAgICBlbC5zdHlsZS5ib3JkZXJSYWRpdXMgPSBcIjUwJVwiXG4gICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSBgb3BhY2l0eSAke2NvbmZpZy5kIC8gMn1tcyBlYXNlLW91dCwgdHJhbnNmb3JtICR7Y29uZmlnLmR9bXMgZWFzZS1vdXRgXG4gICAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSBcIjBcIlxuICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBcImNlbnRlclwiXG4gICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9IFwic2NhbGUoMClcIlxuICAgICAgICB0aGlzLmVsID0gZWxcblxuICAgICAgICB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uc3RhcnRcIiwgdGhpcy4jdHJhbnNCZWdpbilcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIHRoaXMuI3RyYW5zRW5kKVxuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25jYW5jZWxcIiwgdGhpcy4jdHJhbnNFbmQpXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLmF1dG9EZXN0cm95LCB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJkcmFnZW5kXCIsIHRoaXMuYXV0b0Rlc3Ryb3ksIHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHN0YXJ0KCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtc2VtaVxuICAgICAgICA7KHRoaXMgYXMgeyBpc1J1bm5pbmc6IGJvb2xlYW4gfSkuaXNSdW5uaW5nID0gdHJ1ZVxuICAgICAgICAvLyBYWFg6IGZvcmNlIHN0eWxlIGFwcGx5XG4gICAgICAgIGNvbnN0IG9wYWNpdHkgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gTnVtYmVyKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwpLm9wYWNpdHkpIDogMVxuICAgICAgICB0aGlzLmVsLnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5ID8gXCIwLjNcIiA6IFwiMC4zXCJcbiAgICAgICAgdGhpcy5lbC5zdHlsZS50cmFuc2Zvcm0gPSBcInNjYWxlKDEpXCJcbiAgICB9XG5cbiAgICBhdXRvRGVzdHJveSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLiNhdXRvRGVzdHJveSA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2ZhZGVPdXQoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbnN0YXJ0XCIsIHRoaXMuI3RyYW5zQmVnaW4pXG4gICAgICAgIHRoaXMuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgdGhpcy4jdHJhbnNFbmQpXG4gICAgICAgIHRoaXMuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25jYW5jZWxcIiwgdGhpcy4jdHJhbnNFbmQpXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuYXV0b0Rlc3Ryb3ksIHsgY2FwdHVyZTogdHJ1ZSB9KVxuICAgICAgICB0aGlzLmVsLnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKHRoaXMuZWwpXG4gICAgICAgIHRoaXMub25EZXN0cm95KClcbiAgICB9XG5cbiAgICAjdHJhbnNCZWdpbiA9ICgpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXNlbWlcbiAgICAgICAgOyh0aGlzIGFzIHsgaXNSdW5uaW5nOiBib29sZWFuIH0pLmlzUnVubmluZyA9IHRydWVcbiAgICB9XG5cbiAgICAjdHJhbnNFbmQgPSAoZXZlbnQ6IFRyYW5zaXRpb25FdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQucHJvcGVydHlOYW1lID09PSBcIm9wYWNpdHlcIikge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2hpZGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcG9zZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiNhdXRvRGVzdHJveSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNmYWRlT3V0KClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQucHJvcGVydHlOYW1lID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtc2VtaVxuICAgICAgICAgICAgOyh0aGlzIGFzIHsgaXNSdW5uaW5nOiBib29sZWFuIH0pLmlzUnVubmluZyA9IGZhbHNlXG4gICAgICAgICAgICBpZiAodGhpcy4jYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2ZhZGVPdXQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNoaWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2hpZGluZyA9IHRydWVcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5vcGFjaXR5ID0gXCIwXCJcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1heFBvc3NpYmxlUmFkaXVzKHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcikge1xuICAgIGNvbnN0IGRpc3RYID0gTWF0aC5tYXgoeCwgTWF0aC5hYnModyAtIHgpKVxuICAgIGNvbnN0IGRpc3RZID0gTWF0aC5tYXgoeSwgTWF0aC5hYnMoaCAtIHkpKVxuICAgIHJldHVybiBNYXRoLnNxcnQoZGlzdFggKiBkaXN0WCArIGRpc3RZICogZGlzdFkpXG59XG4iXX0=
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlwcGxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoaWNzL3NyYy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFFLE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxTQUFTLENBQUE7O0FBTzNDLE1BQU0sT0FBTyxlQUFnQixTQUFRLFlBQVk7SUFDN0MsUUFBUSxDQUFTO0lBRWpCLFlBQ3FCLE1BQXdCLEVBQ3hCLElBQVksRUFDWixFQUFvQjtRQUVyQyxLQUFLLEVBQUUsQ0FBQTtRQUpVLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixPQUFFLEdBQUYsRUFBRSxDQUFrQjtRQUdyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFBO1lBQzdDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7Z0JBQ3ZELElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7WUFDaEYsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFpQjtRQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFBO1FB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QyxFQUFFLENBQUMsQ0FBQTtRQUN4QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDcEIsQ0FBQztJQUVELFdBQVcsQ0FHVjtJQUVELFNBQVMsQ0FnQlI7SUFFRCxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZixPQUFNO1FBQ1YsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO1FBQ25CLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUE7SUFDL0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBOZ1pvbmUsIFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBEZXN0cnVjdGlibGUsIElEaXNwb3NhYmxlIH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgbWF4UG9zc2libGVSYWRpdXMgfSBmcm9tIFwiLi4vdXRpbFwiXG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwibmctdGVtcGxhdGVbbnVSaXBwbGVdXCIsXG4gICAgZXhwb3J0QXM6IFwibnVSaXBwbGVcIlxufSlcbmV4cG9ydCBjbGFzcyBSaXBwbGVEaXJlY3RpdmUgZXh0ZW5kcyBEZXN0cnVjdGlibGUge1xuICAgICNjdXJyZW50PzogUmlwcGxlXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cGxSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgem9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmPE5vZGU+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnRcbiAgICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCB0aGlzLiNvbk1vdXNlRG93bilcbiAgICAgICAgICAgICAgICB0aGlzLmQuYW55KCgpID0+IHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMuI29uTW91c2VEb3duKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBiZWdpbihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLiNjdXJyZW50Py5hdXRvRGVzdHJveSgpXG4gICAgICAgIGNvbnN0IGNmZyA9IHRoaXMuI2NyZWF0ZVJpcHBsZUNvbmZpZyhldmVudClcbiAgICAgICAgY29uc3QgcmlwcGxlID0gdGhpcy4jY3JlYXRlUmlwcGxlKGNmZylcbiAgICAgICAgdGhpcy4jY3VycmVudCA9IHJpcHBsZVxuXG4gICAgICAgIGNvbnN0IHJlZkVsID0gdGhpcy50cGxSZWYuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50XG4gICAgICAgIHJlZkVsLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShyaXBwbGUuZWwsIHJlZkVsKVxuICAgICAgICByaXBwbGUuc3RhcnQoKVxuICAgIH1cblxuICAgIGVuZCgpIHtcbiAgICAgICAgdGhpcy4jY3VycmVudD8uYXV0b0Rlc3Ryb3koKVxuICAgIH1cblxuICAgICNjcmVhdGVSaXBwbGUoY29uZmlnOiBSaXBwbGVDb25maWcpIHtcbiAgICAgICAgY29uc3QgcmlwcGxlID0gbmV3IFJpcHBsZShjb25maWcsIHRoaXMuem9uZSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuI2N1cnJlbnQgPT09IHJpcHBsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2N1cnJlbnQgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kLmRpc3Bvc2FibGUocmlwcGxlKVxuICAgICAgICByZXR1cm4gcmlwcGxlXG4gICAgfVxuXG4gICAgI2NyZWF0ZVJpcHBsZUNvbmZpZyhldmVudDogTW91c2VFdmVudCk6IFJpcHBsZUNvbmZpZyB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICAgICAgY29uc3QgYm91bmRzID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGNvbnN0IHcgPSBib3VuZHMud2lkdGhcbiAgICAgICAgY29uc3QgaCA9IGJvdW5kcy5oZWlnaHRcbiAgICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSBib3VuZHMubGVmdFxuICAgICAgICBjb25zdCB5ID0gZXZlbnQuY2xpZW50WSAtIGJvdW5kcy50b3BcbiAgICAgICAgY29uc3QgciA9IG1heFBvc3NpYmxlUmFkaXVzKHgsIHksIHcsIGgpICsgTWF0aC5taW4odywgaClcbiAgICAgICAgcmV0dXJuIHsgeCwgeSwgdywgaCwgciwgZDogNjAwIH1cbiAgICB9XG5cbiAgICAjb25Nb3VzZURvd24gPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5iZWdpbihldmVudClcbiAgICB9XG59XG5cbnR5cGUgUmlwcGxlQ29uZmlnID0geyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXI7IHI6IG51bWJlcjsgZDogbnVtYmVyIH1cblxuZXhwb3J0IGNsYXNzIFJpcHBsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWw6IEhUTUxEaXZFbGVtZW50XG4gICAgcHVibGljIHJlYWRvbmx5IGlzUnVubmluZzogYm9vbGVhbiA9IGZhbHNlXG5cbiAgICAjYXV0b0Rlc3Ryb3kgPSBmYWxzZVxuICAgICNoaWRpbmcgPSBmYWxzZVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGNvbmZpZzogUmlwcGxlQ29uZmlnLFxuICAgICAgICB6b25lOiBOZ1pvbmUsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBvbkRlc3Ryb3k6ICgpID0+IHZvaWRcbiAgICApIHtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gICAgICAgIGVsLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiXG4gICAgICAgIGVsLnN0eWxlLnRvcCA9IGAke2NvbmZpZy55IC0gY29uZmlnLnJ9cHhgXG4gICAgICAgIGVsLnN0eWxlLmxlZnQgPSBgJHtjb25maWcueCAtIGNvbmZpZy5yfXB4YFxuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGAke2NvbmZpZy5yICogMn1weGBcbiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gYCR7Y29uZmlnLnIgKiAyfXB4YFxuICAgICAgICBlbC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCJcbiAgICAgICAgZWwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCJ2YXIoLS1yaXBwbGUtY29sb3IpXCJcbiAgICAgICAgZWwuc3R5bGUuYm9yZGVyUmFkaXVzID0gXCI1MCVcIlxuICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gYG9wYWNpdHkgJHtjb25maWcuZCAvIDJ9bXMgZWFzZS1vdXQsIHRyYW5zZm9ybSAke2NvbmZpZy5kfW1zIGVhc2Utb3V0YFxuICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gXCIwXCJcbiAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gXCJjZW50ZXJcIlxuICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBcInNjYWxlKDApXCJcbiAgICAgICAgdGhpcy5lbCA9IGVsXG5cbiAgICAgICAgem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbnN0YXJ0XCIsIHRoaXMuI3RyYW5zQmVnaW4pXG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCB0aGlzLiN0cmFuc0VuZClcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uY2FuY2VsXCIsIHRoaXMuI3RyYW5zRW5kKVxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5hdXRvRGVzdHJveSwgeyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiZHJhZ2VuZFwiLCB0aGlzLmF1dG9EZXN0cm95LCB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzdGFydCgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXNlbWlcbiAgICAgICAgOyh0aGlzIGFzIHsgaXNSdW5uaW5nOiBib29sZWFuIH0pLmlzUnVubmluZyA9IHRydWVcbiAgICAgICAgLy8gWFhYOiBmb3JjZSBzdHlsZSBhcHBseVxuICAgICAgICBjb25zdCBvcGFjaXR5ID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IE51bWJlcih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsKS5vcGFjaXR5KSA6IDFcbiAgICAgICAgdGhpcy5lbC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eSA/IFwiMC4zXCIgOiBcIjAuM1wiXG4gICAgICAgIHRoaXMuZWwuc3R5bGUudHJhbnNmb3JtID0gXCJzY2FsZSgxKVwiXG4gICAgfVxuXG4gICAgYXV0b0Rlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzUnVubmluZykge1xuICAgICAgICAgICAgdGhpcy4jYXV0b0Rlc3Ryb3kgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNmYWRlT3V0KClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25zdGFydFwiLCB0aGlzLiN0cmFuc0JlZ2luKVxuICAgICAgICB0aGlzLmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIHRoaXMuI3RyYW5zRW5kKVxuICAgICAgICB0aGlzLmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uY2FuY2VsXCIsIHRoaXMuI3RyYW5zRW5kKVxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLmF1dG9EZXN0cm95LCB7IGNhcHR1cmU6IHRydWUgfSlcbiAgICAgICAgdGhpcy5lbC5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZCh0aGlzLmVsKVxuICAgICAgICB0aGlzLm9uRGVzdHJveSgpXG4gICAgfVxuXG4gICAgI3RyYW5zQmVnaW4gPSAoKSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRyYS1zZW1pXG4gICAgICAgIDsodGhpcyBhcyB7IGlzUnVubmluZzogYm9vbGVhbiB9KS5pc1J1bm5pbmcgPSB0cnVlXG4gICAgfVxuXG4gICAgI3RyYW5zRW5kID0gKGV2ZW50OiBUcmFuc2l0aW9uRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnByb3BlcnR5TmFtZSA9PT0gXCJvcGFjaXR5XCIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNoaWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZmFkZU91dCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnByb3BlcnR5TmFtZSA9PT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXNlbWlcbiAgICAgICAgICAgIDsodGhpcyBhcyB7IGlzUnVubmluZzogYm9vbGVhbiB9KS5pc1J1bm5pbmcgPSBmYWxzZVxuICAgICAgICAgICAgaWYgKHRoaXMuI2F1dG9EZXN0cm95KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICNmYWRlT3V0KCkge1xuICAgICAgICBpZiAodGhpcy4jaGlkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNoaWRpbmcgPSB0cnVlXG4gICAgICAgIHRoaXMuZWwuc3R5bGUub3BhY2l0eSA9IFwiMFwiXG4gICAgfVxufVxuIl19
|
|
@@ -12,8 +12,9 @@ export function animationObservable({ builder, animation, element, options }) {
|
|
|
12
12
|
player.onDone(done);
|
|
13
13
|
player.play();
|
|
14
14
|
return () => {
|
|
15
|
+
player.pause();
|
|
15
16
|
player.destroy();
|
|
16
17
|
};
|
|
17
18
|
});
|
|
18
19
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLW9ic2VydmFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmFwaGljcy9zcmMvdXRpbC9hbmltYXRpb24tb2JzZXJ2YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBRTdDLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7QUFTNUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUE2QjtJQUNuRyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsR0FBcUIsRUFBRSxFQUFFO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDeEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFFOUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ2QsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO1lBQ1YsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQ2xCLENBQUMsQ0FBQTtRQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNuQixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFYixPQUFPLEdBQUcsRUFBRTtZQUNSLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUNkLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNwQixDQUFDLENBQUE7SUFDTCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbmltYXRpb25CdWlsZGVyLCBBbmltYXRpb25NZXRhZGF0YSwgQW5pbWF0aW9uT3B0aW9ucyB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCJcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaWJlciB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgY29lcmNlRWxlbWVudCwgRWxlbWVudElucHV0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuZXhwb3J0IGludGVyZmFjZSBBbmltYXRpb25PYnNlcnZhYmxlUGFyYW1zIHtcbiAgICBidWlsZGVyOiBBbmltYXRpb25CdWlsZGVyXG4gICAgYW5pbWF0aW9uOiBBbmltYXRpb25NZXRhZGF0YSB8IEFuaW1hdGlvbk1ldGFkYXRhW11cbiAgICBlbGVtZW50OiBFbGVtZW50SW5wdXRcbiAgICBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9uc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5pbWF0aW9uT2JzZXJ2YWJsZSh7IGJ1aWxkZXIsIGFuaW1hdGlvbiwgZWxlbWVudCwgb3B0aW9ucyB9OiBBbmltYXRpb25PYnNlcnZhYmxlUGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChkc3Q6IFN1YnNjcmliZXI8dm9pZD4pID0+IHtcbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IGJ1aWxkZXIuYnVpbGQoYW5pbWF0aW9uKVxuICAgICAgICBjb25zdCBwbGF5ZXIgPSBmYWN0b3J5LmNyZWF0ZShjb2VyY2VFbGVtZW50KGVsZW1lbnQpLCBvcHRpb25zKVxuXG4gICAgICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICAgICAgICBkc3QubmV4dCgpXG4gICAgICAgICAgICBkc3QuY29tcGxldGUoKVxuICAgICAgICB9XG5cbiAgICAgICAgcGxheWVyLm9uRGVzdHJveShkb25lKVxuICAgICAgICBwbGF5ZXIub25Eb25lKGRvbmUpXG4gICAgICAgIHBsYXllci5wbGF5KClcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgcGxheWVyLnBhdXNlKClcbiAgICAgICAgICAgIHBsYXllci5kZXN0cm95KClcbiAgICAgICAgfVxuICAgIH0pXG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from "./animation-observable";
|
|
2
|
+
export * from "./polygon";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmFwaGljcy9zcmMvdXRpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFBO0FBQ3RDLGNBQWMsV0FBVyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYW5pbWF0aW9uLW9ic2VydmFibGVcIlxuZXhwb3J0ICogZnJvbSBcIi4vcG9seWdvblwiXG4iXX0=
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export function polygonRect(topLeft, bottomRight) {
|
|
2
|
+
const result = [];
|
|
3
|
+
result.push(topLeft);
|
|
4
|
+
result.push({ x: bottomRight.x, y: topLeft.y });
|
|
5
|
+
result.push(bottomRight);
|
|
6
|
+
result.push({ x: topLeft.x, y: bottomRight.y });
|
|
7
|
+
result.push(topLeft);
|
|
8
|
+
return result;
|
|
9
|
+
}
|
|
10
|
+
const OctoAngle = (Math.PI * 2) / 8;
|
|
11
|
+
export function polygonRoundedRect(topLeft, bottomRight, radius) {
|
|
12
|
+
if (radius <= 0) {
|
|
13
|
+
return polygonRect(topLeft, bottomRight);
|
|
14
|
+
}
|
|
15
|
+
const result = [];
|
|
16
|
+
const maxR = Math.min(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y) / 2;
|
|
17
|
+
const r = Math.min(radius, maxR);
|
|
18
|
+
// top left half
|
|
19
|
+
result.push(...polygonArc({ x: topLeft.x + r, y: topLeft.y + r }, r, OctoAngle * 3, OctoAngle * 2));
|
|
20
|
+
result.push({ x: topLeft.x + r, y: topLeft.y });
|
|
21
|
+
result.push({ x: bottomRight.x - r, y: topLeft.y });
|
|
22
|
+
// top right
|
|
23
|
+
result.push(...polygonArc({ x: bottomRight.x - r, y: topLeft.y + r }, r, OctoAngle * 2, OctoAngle * 0));
|
|
24
|
+
result.push({ x: bottomRight.x, y: topLeft.y + r });
|
|
25
|
+
// bottom right
|
|
26
|
+
result.push(...polygonArc({ x: bottomRight.x - r, y: bottomRight.y - r }, r, OctoAngle * 0, -OctoAngle * 2));
|
|
27
|
+
result.push({ x: bottomRight.x - r, y: bottomRight.y });
|
|
28
|
+
// bottom left
|
|
29
|
+
result.push(...polygonArc({ x: topLeft.x + r, y: bottomRight.y - r }, r, OctoAngle * 6, OctoAngle * 4));
|
|
30
|
+
result.push({ x: topLeft.x, y: bottomRight.y - r });
|
|
31
|
+
// top left half
|
|
32
|
+
result.push({ x: topLeft.x, y: topLeft.y + r });
|
|
33
|
+
result.push(...polygonArc({ x: topLeft.x + r, y: topLeft.y + r }, r, OctoAngle * 4, OctoAngle * 3));
|
|
34
|
+
result.push(result[0]);
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
export function polygonArc(center, radius, startAngle, endAngle) {
|
|
38
|
+
const result = [];
|
|
39
|
+
if (radius === 0) {
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
const reversed = startAngle > endAngle;
|
|
43
|
+
let angle = Math.min(startAngle, endAngle);
|
|
44
|
+
const end = Math.max(startAngle, endAngle);
|
|
45
|
+
for (; angle < end; angle += 0.1) {
|
|
46
|
+
const x = center.x + radius * Math.cos(angle);
|
|
47
|
+
const y = center.y - radius * Math.sin(angle);
|
|
48
|
+
result.push({ x, y });
|
|
49
|
+
}
|
|
50
|
+
return reversed ? result.reverse() : result;
|
|
51
|
+
}
|
|
52
|
+
export function polygonToCss(polygon) {
|
|
53
|
+
return `polygon(${polygon.map(p => `${p.x}px ${p.y}px`).join(",")})`;
|
|
54
|
+
}
|
|
55
|
+
export function maxPossibleRadius(x, y, w, h) {
|
|
56
|
+
const distX = Math.max(x, Math.abs(w - x));
|
|
57
|
+
const distY = Math.max(y, Math.abs(h - y));
|
|
58
|
+
return Math.sqrt(distX * distX + distY * distY);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoaWNzL3NyYy91dGlsL3BvbHlnb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUFpQixFQUFFLFdBQXFCO0lBQ2hFLE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQTtJQUUxQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFcEIsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQztBQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7QUFFbkMsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQWlCLEVBQUUsV0FBcUIsRUFBRSxNQUFjO0lBQ3ZGLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxXQUFXLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBWSxFQUFFLENBQUE7SUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQy9FLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBRWhDLGdCQUFnQjtJQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ25HLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRW5ELFlBQVk7SUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRW5ELGVBQWU7SUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFdkQsY0FBYztJQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdkcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFbkQsZ0JBQWdCO0lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFbkcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUV0QixPQUFPLE1BQU0sQ0FBQTtBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFnQixFQUFFLE1BQWMsRUFBRSxVQUFrQixFQUFFLFFBQWdCO0lBQzdGLE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQTtJQUUxQixJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNmLE9BQU8sTUFBTSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFBO0lBQ3RDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRTFDLE9BQU8sS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM3QyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO0FBQy9DLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQWdCO0lBQ3pDLE9BQU8sV0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO0FBQ3hFLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztJQUN4RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDMUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFBO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gXCJAbmd1dGlsL3N0eWxlXCJcblxuZXhwb3J0IHR5cGUgUG9seWdvbiA9IFBvc2l0aW9uW11cblxuZXhwb3J0IGZ1bmN0aW9uIHBvbHlnb25SZWN0KHRvcExlZnQ6IFBvc2l0aW9uLCBib3R0b21SaWdodDogUG9zaXRpb24pOiBQb2x5Z29uIHtcbiAgICBjb25zdCByZXN1bHQ6IFBvbHlnb24gPSBbXVxuXG4gICAgcmVzdWx0LnB1c2godG9wTGVmdClcbiAgICByZXN1bHQucHVzaCh7IHg6IGJvdHRvbVJpZ2h0LngsIHk6IHRvcExlZnQueSB9KVxuICAgIHJlc3VsdC5wdXNoKGJvdHRvbVJpZ2h0KVxuICAgIHJlc3VsdC5wdXNoKHsgeDogdG9wTGVmdC54LCB5OiBib3R0b21SaWdodC55IH0pXG4gICAgcmVzdWx0LnB1c2godG9wTGVmdClcblxuICAgIHJldHVybiByZXN1bHRcbn1cblxuY29uc3QgT2N0b0FuZ2xlID0gKE1hdGguUEkgKiAyKSAvIDhcblxuZXhwb3J0IGZ1bmN0aW9uIHBvbHlnb25Sb3VuZGVkUmVjdCh0b3BMZWZ0OiBQb3NpdGlvbiwgYm90dG9tUmlnaHQ6IFBvc2l0aW9uLCByYWRpdXM6IG51bWJlcik6IFBvbHlnb24ge1xuICAgIGlmIChyYWRpdXMgPD0gMCkge1xuICAgICAgICByZXR1cm4gcG9seWdvblJlY3QodG9wTGVmdCwgYm90dG9tUmlnaHQpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiBQb2x5Z29uID0gW11cbiAgICBjb25zdCBtYXhSID0gTWF0aC5taW4oYm90dG9tUmlnaHQueCAtIHRvcExlZnQueCwgYm90dG9tUmlnaHQueSAtIHRvcExlZnQueSkgLyAyXG4gICAgY29uc3QgciA9IE1hdGgubWluKHJhZGl1cywgbWF4UilcblxuICAgIC8vIHRvcCBsZWZ0IGhhbGZcbiAgICByZXN1bHQucHVzaCguLi5wb2x5Z29uQXJjKHsgeDogdG9wTGVmdC54ICsgciwgeTogdG9wTGVmdC55ICsgciB9LCByLCBPY3RvQW5nbGUgKiAzLCBPY3RvQW5nbGUgKiAyKSlcbiAgICByZXN1bHQucHVzaCh7IHg6IHRvcExlZnQueCArIHIsIHk6IHRvcExlZnQueSB9KVxuICAgIHJlc3VsdC5wdXNoKHsgeDogYm90dG9tUmlnaHQueCAtIHIsIHk6IHRvcExlZnQueSB9KVxuXG4gICAgLy8gdG9wIHJpZ2h0XG4gICAgcmVzdWx0LnB1c2goLi4ucG9seWdvbkFyYyh7IHg6IGJvdHRvbVJpZ2h0LnggLSByLCB5OiB0b3BMZWZ0LnkgKyByIH0sIHIsIE9jdG9BbmdsZSAqIDIsIE9jdG9BbmdsZSAqIDApKVxuICAgIHJlc3VsdC5wdXNoKHsgeDogYm90dG9tUmlnaHQueCwgeTogdG9wTGVmdC55ICsgciB9KVxuXG4gICAgLy8gYm90dG9tIHJpZ2h0XG4gICAgcmVzdWx0LnB1c2goLi4ucG9seWdvbkFyYyh7IHg6IGJvdHRvbVJpZ2h0LnggLSByLCB5OiBib3R0b21SaWdodC55IC0gciB9LCByLCBPY3RvQW5nbGUgKiAwLCAtT2N0b0FuZ2xlICogMikpXG4gICAgcmVzdWx0LnB1c2goeyB4OiBib3R0b21SaWdodC54IC0gciwgeTogYm90dG9tUmlnaHQueSB9KVxuXG4gICAgLy8gYm90dG9tIGxlZnRcbiAgICByZXN1bHQucHVzaCguLi5wb2x5Z29uQXJjKHsgeDogdG9wTGVmdC54ICsgciwgeTogYm90dG9tUmlnaHQueSAtIHIgfSwgciwgT2N0b0FuZ2xlICogNiwgT2N0b0FuZ2xlICogNCkpXG4gICAgcmVzdWx0LnB1c2goeyB4OiB0b3BMZWZ0LngsIHk6IGJvdHRvbVJpZ2h0LnkgLSByIH0pXG5cbiAgICAvLyB0b3AgbGVmdCBoYWxmXG4gICAgcmVzdWx0LnB1c2goeyB4OiB0b3BMZWZ0LngsIHk6IHRvcExlZnQueSArIHIgfSlcbiAgICByZXN1bHQucHVzaCguLi5wb2x5Z29uQXJjKHsgeDogdG9wTGVmdC54ICsgciwgeTogdG9wTGVmdC55ICsgciB9LCByLCBPY3RvQW5nbGUgKiA0LCBPY3RvQW5nbGUgKiAzKSlcblxuICAgIHJlc3VsdC5wdXNoKHJlc3VsdFswXSlcblxuICAgIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvbHlnb25BcmMoY2VudGVyOiBQb3NpdGlvbiwgcmFkaXVzOiBudW1iZXIsIHN0YXJ0QW5nbGU6IG51bWJlciwgZW5kQW5nbGU6IG51bWJlcik6IFBvbHlnb24ge1xuICAgIGNvbnN0IHJlc3VsdDogUG9seWdvbiA9IFtdXG5cbiAgICBpZiAocmFkaXVzID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICBjb25zdCByZXZlcnNlZCA9IHN0YXJ0QW5nbGUgPiBlbmRBbmdsZVxuICAgIGxldCBhbmdsZSA9IE1hdGgubWluKHN0YXJ0QW5nbGUsIGVuZEFuZ2xlKVxuICAgIGNvbnN0IGVuZCA9IE1hdGgubWF4KHN0YXJ0QW5nbGUsIGVuZEFuZ2xlKVxuXG4gICAgZm9yICg7IGFuZ2xlIDwgZW5kOyBhbmdsZSArPSAwLjEpIHtcbiAgICAgICAgY29uc3QgeCA9IGNlbnRlci54ICsgcmFkaXVzICogTWF0aC5jb3MoYW5nbGUpXG4gICAgICAgIGNvbnN0IHkgPSBjZW50ZXIueSAtIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKVxuICAgICAgICByZXN1bHQucHVzaCh7IHgsIHkgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gcmV2ZXJzZWQgPyByZXN1bHQucmV2ZXJzZSgpIDogcmVzdWx0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2x5Z29uVG9Dc3MocG9seWdvbjogUG9seWdvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBwb2x5Z29uKCR7cG9seWdvbi5tYXAocCA9PiBgJHtwLnh9cHggJHtwLnl9cHhgKS5qb2luKFwiLFwiKX0pYFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF4UG9zc2libGVSYWRpdXMoeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyKSB7XG4gICAgY29uc3QgZGlzdFggPSBNYXRoLm1heCh4LCBNYXRoLmFicyh3IC0geCkpXG4gICAgY29uc3QgZGlzdFkgPSBNYXRoLm1heCh5LCBNYXRoLmFicyhoIC0geSkpXG4gICAgcmV0dXJuIE1hdGguc3FydChkaXN0WCAqIGRpc3RYICsgZGlzdFkgKiBkaXN0WSlcbn1cbiJdfQ==
|
|
@@ -1,7 +1,86 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Directive, Injectable } from '@angular/core';
|
|
3
|
-
import { Destructible,
|
|
4
|
-
import { Observable, of } from 'rxjs';
|
|
2
|
+
import { Directive, ElementRef, inject, Injectable } from '@angular/core';
|
|
3
|
+
import { coerceElement, Destructible, isElementInput } from '@ngutil/common';
|
|
4
|
+
import { Observable, of, from, combineLatest, filter, switchMap, map } from 'rxjs';
|
|
5
|
+
import { rectExpand, rectContract, RectWatcher } from '@ngutil/style';
|
|
6
|
+
|
|
7
|
+
function animationObservable({ builder, animation, element, options }) {
|
|
8
|
+
return new Observable((dst) => {
|
|
9
|
+
const factory = builder.build(animation);
|
|
10
|
+
const player = factory.create(coerceElement(element), options);
|
|
11
|
+
const done = () => {
|
|
12
|
+
dst.next();
|
|
13
|
+
dst.complete();
|
|
14
|
+
};
|
|
15
|
+
player.onDestroy(done);
|
|
16
|
+
player.onDone(done);
|
|
17
|
+
player.play();
|
|
18
|
+
return () => {
|
|
19
|
+
player.pause();
|
|
20
|
+
player.destroy();
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function polygonRect(topLeft, bottomRight) {
|
|
26
|
+
const result = [];
|
|
27
|
+
result.push(topLeft);
|
|
28
|
+
result.push({ x: bottomRight.x, y: topLeft.y });
|
|
29
|
+
result.push(bottomRight);
|
|
30
|
+
result.push({ x: topLeft.x, y: bottomRight.y });
|
|
31
|
+
result.push(topLeft);
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
const OctoAngle = (Math.PI * 2) / 8;
|
|
35
|
+
function polygonRoundedRect(topLeft, bottomRight, radius) {
|
|
36
|
+
if (radius <= 0) {
|
|
37
|
+
return polygonRect(topLeft, bottomRight);
|
|
38
|
+
}
|
|
39
|
+
const result = [];
|
|
40
|
+
const maxR = Math.min(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y) / 2;
|
|
41
|
+
const r = Math.min(radius, maxR);
|
|
42
|
+
// top left half
|
|
43
|
+
result.push(...polygonArc({ x: topLeft.x + r, y: topLeft.y + r }, r, OctoAngle * 3, OctoAngle * 2));
|
|
44
|
+
result.push({ x: topLeft.x + r, y: topLeft.y });
|
|
45
|
+
result.push({ x: bottomRight.x - r, y: topLeft.y });
|
|
46
|
+
// top right
|
|
47
|
+
result.push(...polygonArc({ x: bottomRight.x - r, y: topLeft.y + r }, r, OctoAngle * 2, OctoAngle * 0));
|
|
48
|
+
result.push({ x: bottomRight.x, y: topLeft.y + r });
|
|
49
|
+
// bottom right
|
|
50
|
+
result.push(...polygonArc({ x: bottomRight.x - r, y: bottomRight.y - r }, r, OctoAngle * 0, -OctoAngle * 2));
|
|
51
|
+
result.push({ x: bottomRight.x - r, y: bottomRight.y });
|
|
52
|
+
// bottom left
|
|
53
|
+
result.push(...polygonArc({ x: topLeft.x + r, y: bottomRight.y - r }, r, OctoAngle * 6, OctoAngle * 4));
|
|
54
|
+
result.push({ x: topLeft.x, y: bottomRight.y - r });
|
|
55
|
+
// top left half
|
|
56
|
+
result.push({ x: topLeft.x, y: topLeft.y + r });
|
|
57
|
+
result.push(...polygonArc({ x: topLeft.x + r, y: topLeft.y + r }, r, OctoAngle * 4, OctoAngle * 3));
|
|
58
|
+
result.push(result[0]);
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
function polygonArc(center, radius, startAngle, endAngle) {
|
|
62
|
+
const result = [];
|
|
63
|
+
if (radius === 0) {
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
const reversed = startAngle > endAngle;
|
|
67
|
+
let angle = Math.min(startAngle, endAngle);
|
|
68
|
+
const end = Math.max(startAngle, endAngle);
|
|
69
|
+
for (; angle < end; angle += 0.1) {
|
|
70
|
+
const x = center.x + radius * Math.cos(angle);
|
|
71
|
+
const y = center.y - radius * Math.sin(angle);
|
|
72
|
+
result.push({ x, y });
|
|
73
|
+
}
|
|
74
|
+
return reversed ? result.reverse() : result;
|
|
75
|
+
}
|
|
76
|
+
function polygonToCss(polygon) {
|
|
77
|
+
return `polygon(${polygon.map(p => `${p.x}px ${p.y}px`).join(",")})`;
|
|
78
|
+
}
|
|
79
|
+
function maxPossibleRadius(x, y, w, h) {
|
|
80
|
+
const distX = Math.max(x, Math.abs(w - x));
|
|
81
|
+
const distY = Math.max(y, Math.abs(h - y));
|
|
82
|
+
return Math.sqrt(distX * distX + distY * distY);
|
|
83
|
+
}
|
|
5
84
|
|
|
6
85
|
class RippleDirective extends Destructible {
|
|
7
86
|
#current;
|
|
@@ -153,41 +232,126 @@ class Ripple {
|
|
|
153
232
|
this.el.style.opacity = "0";
|
|
154
233
|
}
|
|
155
234
|
}
|
|
156
|
-
function maxPossibleRadius(x, y, w, h) {
|
|
157
|
-
const distX = Math.max(x, Math.abs(w - x));
|
|
158
|
-
const distY = Math.max(y, Math.abs(h - y));
|
|
159
|
-
return Math.sqrt(distX * distX + distY * distY);
|
|
160
|
-
}
|
|
161
235
|
|
|
162
|
-
class
|
|
163
|
-
|
|
236
|
+
class CoverRef extends ElementRef {
|
|
237
|
+
constructor(container, options, watcher) {
|
|
238
|
+
super(document.createElement("div"));
|
|
239
|
+
this.container = container;
|
|
240
|
+
this.options = options;
|
|
241
|
+
this.watcher = watcher;
|
|
242
|
+
Object.assign(this.nativeElement.style, {
|
|
243
|
+
position: "absolute",
|
|
244
|
+
inset: "0px"
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
show() {
|
|
164
248
|
return new Observable(dest => {
|
|
165
|
-
const
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
return () => {
|
|
170
|
-
cover.parentElement?.removeChild(cover);
|
|
171
|
-
};
|
|
249
|
+
const element = this.nativeElement;
|
|
250
|
+
coerceElement(this.container).appendChild(element);
|
|
251
|
+
dest.add(() => element.parentElement?.removeChild(element));
|
|
252
|
+
return this._show(dest);
|
|
172
253
|
});
|
|
173
254
|
}
|
|
174
|
-
|
|
175
|
-
|
|
255
|
+
applyStyle(mask) {
|
|
256
|
+
const options = this.options;
|
|
257
|
+
const backgroundColor = options.color === "transparent" ? "rgba(255, 255, 255, 0.0001)" : options.color;
|
|
258
|
+
if (options.style) {
|
|
259
|
+
Object.assign(mask.style, { backgroundColor, ...options.style });
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
Object.assign(mask.style, { backgroundColor });
|
|
263
|
+
}
|
|
176
264
|
}
|
|
177
|
-
|
|
178
|
-
|
|
265
|
+
}
|
|
266
|
+
class SolidCoverRef extends CoverRef {
|
|
267
|
+
_show(dest) {
|
|
268
|
+
this.applyStyle(this.nativeElement);
|
|
179
269
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
270
|
+
}
|
|
271
|
+
class CropCoverRef extends CoverRef {
|
|
272
|
+
_show(dest) {
|
|
273
|
+
const options = this.options;
|
|
274
|
+
const crop = isElementInput(options.crop) ? of(options.crop) : from(options.crop);
|
|
275
|
+
let maskEl = this.nativeElement;
|
|
276
|
+
// TODO: a backdrop filter kicsit ksőbb jelenik meg így
|
|
277
|
+
if (this.options.disablePointerEvents) {
|
|
278
|
+
maskEl = document.createElement("div");
|
|
279
|
+
Object.assign(maskEl.style, {
|
|
280
|
+
position: "absolute",
|
|
281
|
+
inset: "0px"
|
|
282
|
+
});
|
|
283
|
+
this.applyStyle(maskEl);
|
|
284
|
+
// maskEl.style.backdropFilter = null as any
|
|
285
|
+
this.nativeElement.appendChild(maskEl);
|
|
286
|
+
this.nativeElement.style.background = "rgba(0, 0, 0, 0.1)";
|
|
287
|
+
// this.nativeElement.style.backdropFilter = this.options.style?.backdropFilter as any
|
|
186
288
|
}
|
|
187
289
|
else {
|
|
188
|
-
|
|
290
|
+
this.applyStyle(this.nativeElement);
|
|
291
|
+
}
|
|
292
|
+
return combineLatest({
|
|
293
|
+
container: this.watcher.watch(this.container, "border-box"),
|
|
294
|
+
crop: crop.pipe(filter(value => value != null), switchMap(crop => {
|
|
295
|
+
if (isElementInput(crop)) {
|
|
296
|
+
return this.watcher.watch(coerceElement(crop), "border-box");
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
return of(crop);
|
|
300
|
+
}
|
|
301
|
+
}), map(crop => {
|
|
302
|
+
if (this.options.expand) {
|
|
303
|
+
crop = rectExpand(crop, this.options.expand);
|
|
304
|
+
}
|
|
305
|
+
if (this.options.contract) {
|
|
306
|
+
crop = rectContract(crop, this.options.contract);
|
|
307
|
+
}
|
|
308
|
+
return crop;
|
|
309
|
+
}))
|
|
310
|
+
}).subscribe(({ container, crop }) => {
|
|
311
|
+
const outer = polygonRect({ x: 0, y: 0 }, { x: container.width, y: container.height });
|
|
312
|
+
const croppedArea = this.#polygon(container, crop).reverse();
|
|
313
|
+
const polygon = [...outer, ...croppedArea];
|
|
314
|
+
maskEl.style.clipPath = polygonToCss(polygon);
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
#polygon(container, crop) {
|
|
318
|
+
const shape = this.options.shape;
|
|
319
|
+
if (typeof shape === "function") {
|
|
320
|
+
return shape(container, crop);
|
|
321
|
+
}
|
|
322
|
+
else if (shape.type === "circle") {
|
|
323
|
+
const r = maxPossibleRadius(crop.x, crop.y, crop.width, crop.height);
|
|
324
|
+
return polygonArc({ x: crop.x + r, y: crop.y + r }, r, 0, Math.PI * 2);
|
|
325
|
+
}
|
|
326
|
+
else if (shape.type === "rect") {
|
|
327
|
+
const top = Math.round(Math.max(crop.y - container.y, 0));
|
|
328
|
+
const right = Math.round(Math.max(crop.x + crop.width));
|
|
329
|
+
const bottom = Math.round(Math.max(crop.y + crop.height));
|
|
330
|
+
const left = Math.round(Math.max(crop.x - container.x));
|
|
331
|
+
if (shape.borderRadius != null) {
|
|
332
|
+
return polygonRoundedRect({ x: left, y: top }, { x: right, y: bottom }, shape.borderRadius);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
return polygonRect({ x: left, y: top }, { x: right, y: bottom });
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return [];
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
class RevealCoverRef extends CoverRef {
|
|
342
|
+
_show(dest) { }
|
|
343
|
+
}
|
|
344
|
+
class CoverService {
|
|
345
|
+
#watcher = inject(RectWatcher);
|
|
346
|
+
create(container, options) {
|
|
347
|
+
switch (options.type) {
|
|
348
|
+
case "solid":
|
|
349
|
+
return new SolidCoverRef(container, options, this.#watcher);
|
|
350
|
+
case "crop":
|
|
351
|
+
return new CropCoverRef(container, options, this.#watcher);
|
|
352
|
+
case "reveal":
|
|
353
|
+
return new RevealCoverRef(container, options, this.#watcher);
|
|
189
354
|
}
|
|
190
|
-
return el;
|
|
191
355
|
}
|
|
192
356
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: CoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
193
357
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: CoverService, providedIn: "root" }); }
|
|
@@ -197,26 +361,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
197
361
|
args: [{ providedIn: "root" }]
|
|
198
362
|
}] });
|
|
199
363
|
|
|
200
|
-
function animationObservable({ builder, animation, element, options }) {
|
|
201
|
-
return new Observable((dst) => {
|
|
202
|
-
const factory = builder.build(animation);
|
|
203
|
-
const player = factory.create(coerceElement(element), options);
|
|
204
|
-
const done = () => {
|
|
205
|
-
dst.next();
|
|
206
|
-
dst.complete();
|
|
207
|
-
};
|
|
208
|
-
player.onDestroy(done);
|
|
209
|
-
player.onDone(done);
|
|
210
|
-
player.play();
|
|
211
|
-
return () => {
|
|
212
|
-
player.destroy();
|
|
213
|
-
};
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
|
|
217
364
|
/**
|
|
218
365
|
* Generated bundle index. Do not edit.
|
|
219
366
|
*/
|
|
220
367
|
|
|
221
|
-
export { CoverService, Ripple, RippleDirective, animationObservable };
|
|
368
|
+
export { CoverRef, CoverService, CropCoverRef, RevealCoverRef, Ripple, RippleDirective, SolidCoverRef, animationObservable, maxPossibleRadius, polygonArc, polygonRect, polygonRoundedRect, polygonToCss };
|
|
222
369
|
//# sourceMappingURL=ngutil-graphics.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngutil-graphics.mjs","sources":["../../../../packages/graphics/src/ripple/ripple.directive.ts","../../../../packages/graphics/src/cover.service.ts","../../../../packages/graphics/src/util/animation-observable.ts","../../../../packages/graphics/src/ngutil-graphics.ts"],"sourcesContent":["import { Directive, ElementRef, NgZone, TemplateRef } from \"@angular/core\"\n\nimport { Destructible, IDisposable } from \"@ngutil/common\"\n\n@Directive({\n standalone: true,\n selector: \"ng-template[nuRipple]\",\n exportAs: \"nuRipple\"\n})\nexport class RippleDirective extends Destructible {\n #current?: Ripple\n\n constructor(\n private readonly tplRef: TemplateRef<any>,\n private readonly zone: NgZone,\n private readonly el: ElementRef<Node>\n ) {\n super()\n zone.runOutsideAngular(() => {\n const target = el.nativeElement.parentElement\n if (target) {\n target.addEventListener(\"mousedown\", this.#onMouseDown)\n this.d.any(() => target.removeEventListener(\"mousedown\", this.#onMouseDown))\n }\n })\n }\n\n begin(event: MouseEvent) {\n this.#current?.autoDestroy()\n const cfg = this.#createRippleConfig(event)\n const ripple = this.#createRipple(cfg)\n this.#current = ripple\n\n const refEl = this.tplRef.elementRef.nativeElement as HTMLElement\n refEl.parentNode?.insertBefore(ripple.el, refEl)\n ripple.start()\n }\n\n end() {\n this.#current?.autoDestroy()\n }\n\n #createRipple(config: RippleConfig) {\n const ripple = new Ripple(config, this.zone, () => {\n if (this.#current === ripple) {\n this.#current = undefined\n }\n })\n this.d.disposable(ripple)\n return ripple\n }\n\n #createRippleConfig(event: MouseEvent): RippleConfig {\n const container = event.currentTarget as HTMLElement\n const bounds = container.getBoundingClientRect()\n const w = bounds.width\n const h = bounds.height\n const x = event.clientX - bounds.left\n const y = event.clientY - bounds.top\n const r = maxPossibleRadius(x, y, w, h) + Math.min(w, h)\n return { x, y, w, h, r, d: 600 }\n }\n\n #onMouseDown = (event: MouseEvent) => {\n this.begin(event)\n }\n}\n\ntype RippleConfig = { x: number; y: number; w: number; h: number; r: number; d: number }\n\nexport class Ripple implements IDisposable {\n public readonly el: HTMLDivElement\n public readonly isRunning: boolean = false\n\n #autoDestroy = false\n #hiding = false\n\n constructor(\n config: RippleConfig,\n zone: NgZone,\n public readonly onDestroy: () => void\n ) {\n const el = document.createElement(\"div\")\n el.style.position = \"absolute\"\n el.style.top = `${config.y - config.r}px`\n el.style.left = `${config.x - config.r}px`\n el.style.width = `${config.r * 2}px`\n el.style.height = `${config.r * 2}px`\n el.style.pointerEvents = \"none\"\n el.style.backgroundColor = \"var(--ripple-color)\"\n el.style.borderRadius = \"50%\"\n el.style.transition = `opacity ${config.d / 2}ms ease-out, transform ${config.d}ms ease-out`\n el.style.opacity = \"0\"\n el.style.transformOrigin = \"center\"\n el.style.transform = \"scale(0)\"\n this.el = el\n\n zone.runOutsideAngular(() => {\n el.addEventListener(\"transitionstart\", this.#transBegin)\n el.addEventListener(\"transitionend\", this.#transEnd)\n el.addEventListener(\"transitioncancel\", this.#transEnd)\n document.addEventListener(\"mouseup\", this.autoDestroy, { capture: true, passive: true })\n document.addEventListener(\"dragend\", this.autoDestroy, { capture: true, passive: true })\n })\n }\n\n start() {\n // eslint-disable-next-line no-extra-semi\n ;(this as { isRunning: boolean }).isRunning = true\n // XXX: force style apply\n const opacity = typeof window !== \"undefined\" ? Number(window.getComputedStyle(this.el).opacity) : 1\n this.el.style.opacity = opacity ? \"0.3\" : \"0.3\"\n this.el.style.transform = \"scale(1)\"\n }\n\n autoDestroy = () => {\n if (this.isRunning) {\n this.#autoDestroy = true\n } else {\n this.#fadeOut()\n }\n }\n\n dispose(): void {\n this.el.removeEventListener(\"transitionstart\", this.#transBegin)\n this.el.removeEventListener(\"transitionend\", this.#transEnd)\n this.el.removeEventListener(\"transitioncancel\", this.#transEnd)\n document.removeEventListener(\"mouseup\", this.autoDestroy, { capture: true })\n this.el.parentNode?.removeChild(this.el)\n this.onDestroy()\n }\n\n #transBegin = () => {\n // eslint-disable-next-line no-extra-semi\n ;(this as { isRunning: boolean }).isRunning = true\n }\n\n #transEnd = (event: TransitionEvent) => {\n if (event.propertyName === \"opacity\") {\n if (this.#hiding) {\n this.dispose()\n } else {\n if (this.#autoDestroy) {\n this.#fadeOut()\n }\n }\n } else if (event.propertyName === \"transform\") {\n // eslint-disable-next-line no-extra-semi\n ;(this as { isRunning: boolean }).isRunning = false\n if (this.#autoDestroy) {\n this.dispose()\n }\n }\n }\n\n #fadeOut() {\n if (this.#hiding) {\n return\n }\n this.#hiding = true\n this.el.style.opacity = \"0\"\n }\n}\n\nfunction maxPossibleRadius(x: number, y: number, w: number, h: number) {\n const distX = Math.max(x, Math.abs(w - x))\n const distY = Math.max(y, Math.abs(h - y))\n return Math.sqrt(distX * distX + distY * distY)\n}\n","import { Injectable } from \"@angular/core\"\n\nimport { Observable, of } from \"rxjs\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\nimport { Rect } from \"@ngutil/style\"\n\nexport interface CoverOptions {\n container: ElementInput\n color: \"transparent\" | string\n}\n\nexport interface SolidCoverOptions extends CoverOptions {}\n\nexport interface CropCoverOptions extends CoverOptions {\n /**\n * Element that will be interactive while the cover is visible\n */\n crop: ElementInput | Observable<Rect>\n}\n\nexport interface RevealCoverOptions extends CoverOptions {\n /**\n * Left and right coordinates inside the container\n */\n origin: { left: number; top: number }\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class CoverService {\n solid(options: SolidCoverOptions): Observable<HTMLDivElement> {\n return new Observable(dest => {\n const container = coerceElement(options.container)\n const cover = this.#createElement(options)\n container.appendChild(cover)\n dest.next(cover)\n\n return () => {\n cover.parentElement?.removeChild(cover)\n }\n })\n }\n\n crop(options: CropCoverOptions): Observable<HTMLDivElement> {\n return of()\n }\n\n reveal(options: RevealCoverOptions): Observable<HTMLDivElement> {\n return of()\n }\n\n #createElement(options: CoverOptions) {\n const el = document.createElement(\"div\")\n el.style.position = \"absolute\"\n el.style.top = el.style.right = el.style.bottom = el.style.left = \"0px\"\n\n if (options.color === \"transparent\") {\n el.style.backgroundColor = \"rgba(255, 255, 255, 0.0001)\"\n } else {\n el.style.backgroundColor = options.color\n }\n\n return el\n }\n}\n","import { AnimationBuilder, AnimationMetadata, AnimationOptions } from \"@angular/animations\"\n\nimport { Observable, Subscriber } from \"rxjs\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nexport interface AnimationObservableParams {\n builder: AnimationBuilder\n animation: AnimationMetadata | AnimationMetadata[]\n element: ElementInput\n options?: AnimationOptions\n}\n\nexport function animationObservable({ builder, animation, element, options }: AnimationObservableParams) {\n return new Observable((dst: Subscriber<void>) => {\n const factory = builder.build(animation)\n const player = factory.create(coerceElement(element), options)\n\n const done = () => {\n dst.next()\n dst.complete()\n }\n\n player.onDestroy(done)\n player.onDone(done)\n player.play()\n\n return () => {\n player.destroy()\n }\n })\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngutil-graphics.mjs","sources":["../../../../packages/graphics/src/util/animation-observable.ts","../../../../packages/graphics/src/util/polygon.ts","../../../../packages/graphics/src/ripple/ripple.directive.ts","../../../../packages/graphics/src/cover.service.ts","../../../../packages/graphics/src/ngutil-graphics.ts"],"sourcesContent":["import { AnimationBuilder, AnimationMetadata, AnimationOptions } from \"@angular/animations\"\n\nimport { Observable, Subscriber } from \"rxjs\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nexport interface AnimationObservableParams {\n builder: AnimationBuilder\n animation: AnimationMetadata | AnimationMetadata[]\n element: ElementInput\n options?: AnimationOptions\n}\n\nexport function animationObservable({ builder, animation, element, options }: AnimationObservableParams) {\n return new Observable((dst: Subscriber<void>) => {\n const factory = builder.build(animation)\n const player = factory.create(coerceElement(element), options)\n\n const done = () => {\n dst.next()\n dst.complete()\n }\n\n player.onDestroy(done)\n player.onDone(done)\n player.play()\n\n return () => {\n player.pause()\n player.destroy()\n }\n })\n}\n","import { Position } from \"@ngutil/style\"\n\nexport type Polygon = Position[]\n\nexport function polygonRect(topLeft: Position, bottomRight: Position): Polygon {\n const result: Polygon = []\n\n result.push(topLeft)\n result.push({ x: bottomRight.x, y: topLeft.y })\n result.push(bottomRight)\n result.push({ x: topLeft.x, y: bottomRight.y })\n result.push(topLeft)\n\n return result\n}\n\nconst OctoAngle = (Math.PI * 2) / 8\n\nexport function polygonRoundedRect(topLeft: Position, bottomRight: Position, radius: number): Polygon {\n if (radius <= 0) {\n return polygonRect(topLeft, bottomRight)\n }\n\n const result: Polygon = []\n const maxR = Math.min(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y) / 2\n const r = Math.min(radius, maxR)\n\n // top left half\n result.push(...polygonArc({ x: topLeft.x + r, y: topLeft.y + r }, r, OctoAngle * 3, OctoAngle * 2))\n result.push({ x: topLeft.x + r, y: topLeft.y })\n result.push({ x: bottomRight.x - r, y: topLeft.y })\n\n // top right\n result.push(...polygonArc({ x: bottomRight.x - r, y: topLeft.y + r }, r, OctoAngle * 2, OctoAngle * 0))\n result.push({ x: bottomRight.x, y: topLeft.y + r })\n\n // bottom right\n result.push(...polygonArc({ x: bottomRight.x - r, y: bottomRight.y - r }, r, OctoAngle * 0, -OctoAngle * 2))\n result.push({ x: bottomRight.x - r, y: bottomRight.y })\n\n // bottom left\n result.push(...polygonArc({ x: topLeft.x + r, y: bottomRight.y - r }, r, OctoAngle * 6, OctoAngle * 4))\n result.push({ x: topLeft.x, y: bottomRight.y - r })\n\n // top left half\n result.push({ x: topLeft.x, y: topLeft.y + r })\n result.push(...polygonArc({ x: topLeft.x + r, y: topLeft.y + r }, r, OctoAngle * 4, OctoAngle * 3))\n\n result.push(result[0])\n\n return result\n}\n\nexport function polygonArc(center: Position, radius: number, startAngle: number, endAngle: number): Polygon {\n const result: Polygon = []\n\n if (radius === 0) {\n return result\n }\n\n const reversed = startAngle > endAngle\n let angle = Math.min(startAngle, endAngle)\n const end = Math.max(startAngle, endAngle)\n\n for (; angle < end; angle += 0.1) {\n const x = center.x + radius * Math.cos(angle)\n const y = center.y - radius * Math.sin(angle)\n result.push({ x, y })\n }\n\n return reversed ? result.reverse() : result\n}\n\nexport function polygonToCss(polygon: Polygon): string {\n return `polygon(${polygon.map(p => `${p.x}px ${p.y}px`).join(\",\")})`\n}\n\nexport function maxPossibleRadius(x: number, y: number, w: number, h: number) {\n const distX = Math.max(x, Math.abs(w - x))\n const distY = Math.max(y, Math.abs(h - y))\n return Math.sqrt(distX * distX + distY * distY)\n}\n","import { Directive, ElementRef, NgZone, TemplateRef } from \"@angular/core\"\n\nimport { Destructible, IDisposable } from \"@ngutil/common\"\n\nimport { maxPossibleRadius } from \"../util\"\n\n@Directive({\n standalone: true,\n selector: \"ng-template[nuRipple]\",\n exportAs: \"nuRipple\"\n})\nexport class RippleDirective extends Destructible {\n #current?: Ripple\n\n constructor(\n private readonly tplRef: TemplateRef<any>,\n private readonly zone: NgZone,\n private readonly el: ElementRef<Node>\n ) {\n super()\n zone.runOutsideAngular(() => {\n const target = el.nativeElement.parentElement\n if (target) {\n target.addEventListener(\"mousedown\", this.#onMouseDown)\n this.d.any(() => target.removeEventListener(\"mousedown\", this.#onMouseDown))\n }\n })\n }\n\n begin(event: MouseEvent) {\n this.#current?.autoDestroy()\n const cfg = this.#createRippleConfig(event)\n const ripple = this.#createRipple(cfg)\n this.#current = ripple\n\n const refEl = this.tplRef.elementRef.nativeElement as HTMLElement\n refEl.parentNode?.insertBefore(ripple.el, refEl)\n ripple.start()\n }\n\n end() {\n this.#current?.autoDestroy()\n }\n\n #createRipple(config: RippleConfig) {\n const ripple = new Ripple(config, this.zone, () => {\n if (this.#current === ripple) {\n this.#current = undefined\n }\n })\n this.d.disposable(ripple)\n return ripple\n }\n\n #createRippleConfig(event: MouseEvent): RippleConfig {\n const container = event.currentTarget as HTMLElement\n const bounds = container.getBoundingClientRect()\n const w = bounds.width\n const h = bounds.height\n const x = event.clientX - bounds.left\n const y = event.clientY - bounds.top\n const r = maxPossibleRadius(x, y, w, h) + Math.min(w, h)\n return { x, y, w, h, r, d: 600 }\n }\n\n #onMouseDown = (event: MouseEvent) => {\n this.begin(event)\n }\n}\n\ntype RippleConfig = { x: number; y: number; w: number; h: number; r: number; d: number }\n\nexport class Ripple implements IDisposable {\n public readonly el: HTMLDivElement\n public readonly isRunning: boolean = false\n\n #autoDestroy = false\n #hiding = false\n\n constructor(\n config: RippleConfig,\n zone: NgZone,\n public readonly onDestroy: () => void\n ) {\n const el = document.createElement(\"div\")\n el.style.position = \"absolute\"\n el.style.top = `${config.y - config.r}px`\n el.style.left = `${config.x - config.r}px`\n el.style.width = `${config.r * 2}px`\n el.style.height = `${config.r * 2}px`\n el.style.pointerEvents = \"none\"\n el.style.backgroundColor = \"var(--ripple-color)\"\n el.style.borderRadius = \"50%\"\n el.style.transition = `opacity ${config.d / 2}ms ease-out, transform ${config.d}ms ease-out`\n el.style.opacity = \"0\"\n el.style.transformOrigin = \"center\"\n el.style.transform = \"scale(0)\"\n this.el = el\n\n zone.runOutsideAngular(() => {\n el.addEventListener(\"transitionstart\", this.#transBegin)\n el.addEventListener(\"transitionend\", this.#transEnd)\n el.addEventListener(\"transitioncancel\", this.#transEnd)\n document.addEventListener(\"mouseup\", this.autoDestroy, { capture: true, passive: true })\n document.addEventListener(\"dragend\", this.autoDestroy, { capture: true, passive: true })\n })\n }\n\n start() {\n // eslint-disable-next-line no-extra-semi\n ;(this as { isRunning: boolean }).isRunning = true\n // XXX: force style apply\n const opacity = typeof window !== \"undefined\" ? Number(window.getComputedStyle(this.el).opacity) : 1\n this.el.style.opacity = opacity ? \"0.3\" : \"0.3\"\n this.el.style.transform = \"scale(1)\"\n }\n\n autoDestroy = () => {\n if (this.isRunning) {\n this.#autoDestroy = true\n } else {\n this.#fadeOut()\n }\n }\n\n dispose(): void {\n this.el.removeEventListener(\"transitionstart\", this.#transBegin)\n this.el.removeEventListener(\"transitionend\", this.#transEnd)\n this.el.removeEventListener(\"transitioncancel\", this.#transEnd)\n document.removeEventListener(\"mouseup\", this.autoDestroy, { capture: true })\n this.el.parentNode?.removeChild(this.el)\n this.onDestroy()\n }\n\n #transBegin = () => {\n // eslint-disable-next-line no-extra-semi\n ;(this as { isRunning: boolean }).isRunning = true\n }\n\n #transEnd = (event: TransitionEvent) => {\n if (event.propertyName === \"opacity\") {\n if (this.#hiding) {\n this.dispose()\n } else {\n if (this.#autoDestroy) {\n this.#fadeOut()\n }\n }\n } else if (event.propertyName === \"transform\") {\n // eslint-disable-next-line no-extra-semi\n ;(this as { isRunning: boolean }).isRunning = false\n if (this.#autoDestroy) {\n this.dispose()\n }\n }\n }\n\n #fadeOut() {\n if (this.#hiding) {\n return\n }\n this.#hiding = true\n this.el.style.opacity = \"0\"\n }\n}\n","import { ElementRef, inject, Injectable } from \"@angular/core\"\n\nimport {\n combineLatest,\n filter,\n from,\n map,\n Observable,\n ObservableInput,\n of,\n Subscriber,\n switchMap,\n TeardownLogic\n} from \"rxjs\"\n\nimport { coerceElement, ElementInput, isElementInput } from \"@ngutil/common\"\nimport { Rect, rectContract, rectExpand, RectWatcher, SidesInput } from \"@ngutil/style\"\n\nimport { maxPossibleRadius, Polygon, polygonArc, polygonRect, polygonRoundedRect, polygonToCss } from \"./util\"\n\nexport interface CommonCoverOptions {\n color: \"transparent\" | string\n style?: Partial<CSSStyleDeclaration>\n}\n\nexport interface SolidCoverOptions extends CommonCoverOptions {\n type: \"solid\"\n}\n\nexport interface CropCoverOptions extends CommonCoverOptions {\n type: \"crop\"\n /**\n * Element that will be interactive while the cover is visible\n */\n crop: ElementInput | ObservableInput<Rect | ElementInput>\n shape: CropShapeOptions\n expand?: SidesInput\n contract?: SidesInput\n disablePointerEvents?: boolean\n}\n\nexport type CropShapeOptions = CropRectOptions | CropCircleOptions | CropShapeCustom\n\nexport interface CropRectOptions {\n type: \"rect\"\n borderRadius?: number\n}\n\nexport interface CropCircleOptions {\n type: \"circle\"\n}\n\nexport type CropShapeCustom = (container: Rect, crop: Rect) => Polygon\n\nexport interface RevealCoverOptions extends CommonCoverOptions {\n type: \"reveal\"\n /**\n * Left and right coordinates inside the container\n */\n origin: { left: number; top: number }\n}\n\nexport type CoverOptions = SolidCoverOptions | CropCoverOptions | RevealCoverOptions\n\nexport abstract class CoverRef<O extends CommonCoverOptions, R = void> extends ElementRef<HTMLElement> {\n protected readonly watcher: RectWatcher\n\n constructor(\n readonly container: ElementInput,\n readonly options: O,\n watcher: RectWatcher\n ) {\n super(document.createElement(\"div\"))\n this.watcher = watcher\n\n Object.assign(this.nativeElement.style, {\n position: \"absolute\",\n inset: \"0px\"\n })\n }\n\n show(): Observable<R> {\n return new Observable(dest => {\n const element = this.nativeElement\n coerceElement(this.container).appendChild(element)\n dest.add(() => element.parentElement?.removeChild(element))\n return this._show(dest)\n })\n }\n\n protected applyStyle(mask: HTMLElement) {\n const options = this.options\n const backgroundColor = options.color === \"transparent\" ? \"rgba(255, 255, 255, 0.0001)\" : options.color\n\n if (options.style) {\n Object.assign(mask.style, { backgroundColor, ...options.style })\n } else {\n Object.assign(mask.style, { backgroundColor })\n }\n }\n\n protected abstract _show(dest: Subscriber<unknown>): TeardownLogic\n}\n\nexport class SolidCoverRef extends CoverRef<SolidCoverOptions> {\n protected override _show(dest: Subscriber<unknown>): TeardownLogic {\n this.applyStyle(this.nativeElement)\n }\n}\n\nexport class CropCoverRef extends CoverRef<CropCoverOptions> {\n protected override _show(dest: Subscriber<unknown>): TeardownLogic {\n const options = this.options\n const crop = isElementInput(options.crop) ? of(options.crop) : from(options.crop)\n let maskEl = this.nativeElement\n\n // TODO: a backdrop filter kicsit ksőbb jelenik meg így\n if (this.options.disablePointerEvents) {\n maskEl = document.createElement(\"div\")\n Object.assign(maskEl.style, {\n position: \"absolute\",\n inset: \"0px\"\n })\n this.applyStyle(maskEl)\n // maskEl.style.backdropFilter = null as any\n this.nativeElement.appendChild(maskEl)\n this.nativeElement.style.background = \"rgba(0, 0, 0, 0.1)\"\n // this.nativeElement.style.backdropFilter = this.options.style?.backdropFilter as any\n } else {\n this.applyStyle(this.nativeElement)\n }\n\n return combineLatest({\n container: this.watcher.watch(this.container, \"border-box\"),\n crop: crop.pipe(\n filter(value => value != null),\n switchMap(crop => {\n if (isElementInput(crop)) {\n return this.watcher.watch(coerceElement(crop), \"border-box\")\n } else {\n return of(crop)\n }\n }),\n map(crop => {\n if (this.options.expand) {\n crop = rectExpand(crop, this.options.expand)\n }\n\n if (this.options.contract) {\n crop = rectContract(crop, this.options.contract)\n }\n\n return crop\n })\n )\n }).subscribe(({ container, crop }) => {\n const outer = polygonRect({ x: 0, y: 0 }, { x: container.width, y: container.height })\n const croppedArea = this.#polygon(container, crop).reverse()\n const polygon = [...outer, ...croppedArea]\n\n maskEl.style.clipPath = polygonToCss(polygon)\n })\n }\n\n #polygon(container: Rect, crop: Rect): Polygon {\n const shape = this.options.shape\n if (typeof shape === \"function\") {\n return shape(container, crop)\n } else if (shape.type === \"circle\") {\n const r = maxPossibleRadius(crop.x, crop.y, crop.width, crop.height)\n return polygonArc({ x: crop.x + r, y: crop.y + r }, r, 0, Math.PI * 2)\n } else if (shape.type === \"rect\") {\n const top = Math.round(Math.max(crop.y - container.y, 0))\n const right = Math.round(Math.max(crop.x + crop.width))\n const bottom = Math.round(Math.max(crop.y + crop.height))\n const left = Math.round(Math.max(crop.x - container.x))\n\n if (shape.borderRadius != null) {\n return polygonRoundedRect({ x: left, y: top }, { x: right, y: bottom }, shape.borderRadius)\n } else {\n return polygonRect({ x: left, y: top }, { x: right, y: bottom })\n }\n }\n return []\n }\n}\n\nexport class RevealCoverRef extends CoverRef<RevealCoverOptions> {\n protected override _show(dest: Subscriber<unknown>): TeardownLogic {}\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class CoverService {\n readonly #watcher = inject(RectWatcher)\n\n create(container: ElementInput, options: CoverOptions) {\n switch (options.type) {\n case \"solid\":\n return new SolidCoverRef(container, options, this.#watcher)\n case \"crop\":\n return new CropCoverRef(container, options, this.#watcher)\n case \"reveal\":\n return new RevealCoverRef(container, options, this.#watcher)\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from "./ripple/ripple.directive";
|
|
2
|
-
export
|
|
3
|
-
export * from "./util
|
|
2
|
+
export * from "./cover.service";
|
|
3
|
+
export * from "./util";
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngutil/graphics",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.52",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/animations": "^17.3.6",
|
|
6
6
|
"@angular/common": "^17.3.6",
|
|
7
7
|
"@angular/core": "^17.3.6",
|
|
8
8
|
"rxjs": "^7.8.1",
|
|
9
|
-
"@ngutil/common": "0.0.
|
|
10
|
-
"@ngutil/style": "0.0.
|
|
9
|
+
"@ngutil/common": "0.0.52",
|
|
10
|
+
"@ngutil/style": "0.0.52"
|
|
11
11
|
},
|
|
12
12
|
"publishConfig": {
|
|
13
13
|
"access": "public",
|
package/util/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Position } from "@ngutil/style";
|
|
2
|
+
export type Polygon = Position[];
|
|
3
|
+
export declare function polygonRect(topLeft: Position, bottomRight: Position): Polygon;
|
|
4
|
+
export declare function polygonRoundedRect(topLeft: Position, bottomRight: Position, radius: number): Polygon;
|
|
5
|
+
export declare function polygonArc(center: Position, radius: number, startAngle: number, endAngle: number): Polygon;
|
|
6
|
+
export declare function polygonToCss(polygon: Polygon): string;
|
|
7
|
+
export declare function maxPossibleRadius(x: number, y: number, w: number, h: number): number;
|