@mintplayer/ng-bootstrap 16.6.0 → 16.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/color-picker/color-picker.module.d.ts +15 -0
- package/color-picker/components/alpha-strip/alpha-strip.component.d.ts +23 -0
- package/color-picker/components/color-picker/color-picker.component.d.ts +24 -0
- package/color-picker/components/color-wheel/color-wheel.component.d.ts +53 -0
- package/color-picker/components/index.d.ts +5 -0
- package/color-picker/components/luminosity-strip/luminosity-strip.component.d.ts +20 -0
- package/color-picker/components/slider/slider.component.d.ts +35 -0
- package/color-picker/directives/color-picker-value-accessor/color-picker-value-accessor.directive.d.ts +28 -0
- package/color-picker/directives/index.d.ts +1 -0
- package/color-picker/index.d.ts +5 -0
- package/color-picker/interfaces/hs.d.ts +4 -0
- package/color-picker/interfaces/hsl-color.d.ts +5 -0
- package/color-picker/interfaces/index.d.ts +3 -0
- package/color-picker/interfaces/rgb-color.d.ts +5 -0
- package/color-picker/types/html-color.d.ts +1 -0
- package/color-picker/types/index.d.ts +1 -0
- package/container/index.d.ts +1 -0
- package/container/src/container/container.component.d.ts +5 -0
- package/container/src/container.module.d.ts +8 -0
- package/container/src/index.d.ts +2 -0
- package/esm2022/color-picker/color-picker.module.mjs +65 -0
- package/esm2022/color-picker/components/alpha-strip/alpha-strip.component.mjs +80 -0
- package/esm2022/color-picker/components/color-picker/color-picker.component.mjs +60 -0
- package/esm2022/color-picker/components/color-wheel/color-wheel.component.mjs +321 -0
- package/esm2022/color-picker/components/index.mjs +6 -0
- package/esm2022/color-picker/components/luminosity-strip/luminosity-strip.component.mjs +72 -0
- package/esm2022/color-picker/components/slider/slider.component.mjs +125 -0
- package/esm2022/color-picker/directives/color-picker-value-accessor/color-picker-value-accessor.directive.mjs +130 -0
- package/esm2022/color-picker/directives/index.mjs +2 -0
- package/esm2022/color-picker/index.mjs +6 -0
- package/esm2022/color-picker/interfaces/hs.mjs +2 -0
- package/esm2022/color-picker/interfaces/hsl-color.mjs +2 -0
- package/esm2022/color-picker/interfaces/index.mjs +4 -0
- package/esm2022/color-picker/interfaces/rgb-color.mjs +2 -0
- package/esm2022/color-picker/mintplayer-ng-bootstrap-color-picker.mjs +5 -0
- package/esm2022/color-picker/types/html-color.mjs +2 -0
- package/esm2022/color-picker/types/index.mjs +2 -0
- package/esm2022/container/index.mjs +2 -0
- package/esm2022/container/mintplayer-ng-bootstrap-container.mjs +5 -0
- package/esm2022/container/src/container/container.component.mjs +11 -0
- package/esm2022/container/src/container.module.mjs +18 -0
- package/esm2022/container/src/index.mjs +3 -0
- package/esm2022/grid/src/component/grid.component.mjs +5 -4
- package/esm2022/grid/src/grid.module.mjs +5 -4
- package/esm2022/navbar/src/navbar/navbar.component.mjs +6 -5
- package/esm2022/navbar/src/navbar.module.mjs +6 -2
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +819 -0
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-container.mjs +33 -0
- package/fesm2022/mintplayer-ng-bootstrap-container.mjs.map +1 -0
- package/fesm2022/mintplayer-ng-bootstrap-grid.mjs +8 -6
- package/fesm2022/mintplayer-ng-bootstrap-grid.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +12 -7
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
- package/grid/src/grid.module.d.ts +2 -1
- package/navbar/src/navbar.module.d.ts +6 -5
- package/package.json +13 -1
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, combineLatest, debounceTime, map, take, switchMap } from 'rxjs';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
export class BsColorWheelComponent {
|
|
7
|
+
constructor(element) {
|
|
8
|
+
// this.resizeObserver = new ResizeObserver((entries) => {
|
|
9
|
+
// for (const entry of entries) {
|
|
10
|
+
// if (entry.target === this.element.nativeElement) {
|
|
11
|
+
// console.log(entry.contentRect);
|
|
12
|
+
// this.width$.next(entry.contentRect.width);
|
|
13
|
+
// this.height$.next(entry.contentRect.height);
|
|
14
|
+
// break;
|
|
15
|
+
// }
|
|
16
|
+
// }
|
|
17
|
+
// });
|
|
18
|
+
this.element = element;
|
|
19
|
+
this.positionRelative = true;
|
|
20
|
+
//#region Hue/Luminosity
|
|
21
|
+
this.hs$ = new BehaviorSubject({ hue: 0, saturation: 0 });
|
|
22
|
+
this.hsChange = new EventEmitter();
|
|
23
|
+
//#endregion
|
|
24
|
+
//#region Luminosity
|
|
25
|
+
this.luminosity$ = new BehaviorSubject(0);
|
|
26
|
+
//#endregion
|
|
27
|
+
// private resizeObserver: ResizeObserver;
|
|
28
|
+
this.canvasContext = null;
|
|
29
|
+
this.isPointerDown = false;
|
|
30
|
+
this.width$ = new BehaviorSubject(150);
|
|
31
|
+
this.height$ = new BehaviorSubject(150);
|
|
32
|
+
this.diameterRatio$ = new BehaviorSubject(0);
|
|
33
|
+
this.disabled$ = new BehaviorSubject(false);
|
|
34
|
+
this.viewInited$ = new BehaviorSubject(false);
|
|
35
|
+
this.squareSize$ = combineLatest([this.width$, this.height$])
|
|
36
|
+
.pipe(map(([width, height]) => {
|
|
37
|
+
if ((width === null) || (height === null)) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const squareSize = Math.min(width, height);
|
|
41
|
+
return squareSize;
|
|
42
|
+
}));
|
|
43
|
+
this.shiftX$ = combineLatest([this.width$, this.height$])
|
|
44
|
+
.pipe(map(([width, height]) => {
|
|
45
|
+
if ((width === null) || (height === null)) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
else if (width < height) {
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
return (width - height) / 2;
|
|
53
|
+
}
|
|
54
|
+
}));
|
|
55
|
+
this.shiftY$ = combineLatest([this.width$, this.height$])
|
|
56
|
+
.pipe(map(([width, height]) => {
|
|
57
|
+
if ((width === null) || (height === null)) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
else if (width < height) {
|
|
61
|
+
return (height - width) / 2;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
this.innerRadius$ = combineLatest([this.squareSize$, this.diameterRatio$])
|
|
68
|
+
.pipe(map(([squareSize, diameterRatio]) => {
|
|
69
|
+
if (squareSize) {
|
|
70
|
+
return squareSize / 2 * diameterRatio;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
}));
|
|
76
|
+
this.outerRadius$ = combineLatest([this.squareSize$, this.diameterRatio$])
|
|
77
|
+
.pipe(map(([squareSize, diameterRatio]) => {
|
|
78
|
+
if (squareSize) {
|
|
79
|
+
return squareSize / 2;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
return 150;
|
|
83
|
+
}
|
|
84
|
+
}));
|
|
85
|
+
combineLatest([this.innerRadius$, this.outerRadius$, this.shiftX$, this.shiftY$])
|
|
86
|
+
.pipe(debounceTime(20), takeUntilDestroyed())
|
|
87
|
+
.subscribe(([innerRadius, outerRadius, shiftX, shiftY]) => {
|
|
88
|
+
if (this.canvasContext && (innerRadius !== null) && (outerRadius !== null) && (shiftX !== null) && (shiftY !== null)) {
|
|
89
|
+
this.canvasContext.clearRect(0, 0, this.canvas.nativeElement.width, this.canvas.nativeElement.height);
|
|
90
|
+
this.canvasContext.save();
|
|
91
|
+
this.canvasContext.translate(shiftX + outerRadius, shiftY + outerRadius);
|
|
92
|
+
for (let x = 0; x < 360; x++) {
|
|
93
|
+
this.canvasContext.rotate(1 * Math.PI / 180);
|
|
94
|
+
const gradient = this.canvasContext.createLinearGradient(innerRadius, 0, outerRadius, 0);
|
|
95
|
+
gradient.addColorStop(0, `hsl(${x}, 0%, 50%)`);
|
|
96
|
+
gradient.addColorStop(1, `hsl(${x}, 100%, 50%)`);
|
|
97
|
+
this.canvasContext.fillStyle = gradient;
|
|
98
|
+
this.canvasContext.fillRect(innerRadius, 0, outerRadius - innerRadius, outerRadius / 50);
|
|
99
|
+
}
|
|
100
|
+
this.canvasContext.restore();
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
this.markerPosition$ = combineLatest([this.hs$, this.shiftX$, this.shiftY$])
|
|
104
|
+
.pipe(switchMap(([hs, shiftX, shiftY]) => {
|
|
105
|
+
return this.color2position(hs)
|
|
106
|
+
.pipe(map((position) => ({ position, shiftX: (shiftX ?? 0), shiftY: (shiftY ?? 0) })));
|
|
107
|
+
}))
|
|
108
|
+
.pipe(map(({ position, shiftX, shiftY }) => {
|
|
109
|
+
return {
|
|
110
|
+
x: position.x + shiftX,
|
|
111
|
+
y: position.y + shiftY,
|
|
112
|
+
};
|
|
113
|
+
}));
|
|
114
|
+
this.hs$.pipe(takeUntilDestroyed())
|
|
115
|
+
.subscribe((hs) => this.hsChange.emit(hs));
|
|
116
|
+
}
|
|
117
|
+
set diameterRatio(value) {
|
|
118
|
+
this.diameterRatio$.next(value);
|
|
119
|
+
}
|
|
120
|
+
set width(value) {
|
|
121
|
+
this.width$.next(value);
|
|
122
|
+
}
|
|
123
|
+
set height(value) {
|
|
124
|
+
this.height$.next(value);
|
|
125
|
+
}
|
|
126
|
+
get hs() {
|
|
127
|
+
return this.hs$.value;
|
|
128
|
+
}
|
|
129
|
+
set hs(value) {
|
|
130
|
+
this.hs$.next(value);
|
|
131
|
+
}
|
|
132
|
+
get luminosity() {
|
|
133
|
+
return this.luminosity$.value;
|
|
134
|
+
}
|
|
135
|
+
set luminosity(value) {
|
|
136
|
+
this.luminosity$.next(value);
|
|
137
|
+
}
|
|
138
|
+
ngAfterViewInit() {
|
|
139
|
+
// this.resizeObserver.observe(this.element.nativeElement);
|
|
140
|
+
this.viewInited$.next(true);
|
|
141
|
+
this.canvasContext = this.canvas.nativeElement.getContext('2d', { willReadFrequently: true });
|
|
142
|
+
}
|
|
143
|
+
onPointerDown(ev) {
|
|
144
|
+
if (!this.disabled$.value) {
|
|
145
|
+
ev.preventDefault();
|
|
146
|
+
this.isPointerDown = true;
|
|
147
|
+
this.updateColor(ev, !('touches' in ev));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
onPointerMove(ev) {
|
|
151
|
+
if (this.isPointerDown) {
|
|
152
|
+
ev.preventDefault();
|
|
153
|
+
ev.stopPropagation();
|
|
154
|
+
this.updateColor(ev, !('touches' in ev));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
onMouseMove(ev) {
|
|
158
|
+
this.onPointerMove(ev);
|
|
159
|
+
}
|
|
160
|
+
onPointerUp(ev) {
|
|
161
|
+
this.isPointerDown = false;
|
|
162
|
+
}
|
|
163
|
+
updateColor(ev, subtract) {
|
|
164
|
+
let co;
|
|
165
|
+
const rect = this.canvas.nativeElement.getBoundingClientRect();
|
|
166
|
+
if ('touches' in ev) {
|
|
167
|
+
co = {
|
|
168
|
+
x: ev.touches[0].clientX - rect.left,
|
|
169
|
+
y: ev.touches[0].clientY - rect.top,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
co = {
|
|
174
|
+
x: ev.clientX - (subtract ? rect.left : 0),
|
|
175
|
+
y: ev.clientY - (subtract ? rect.top : 0),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
this.position2color(co.x, co.y).pipe(take(1)).subscribe((color) => {
|
|
179
|
+
if (color) {
|
|
180
|
+
this.hs$.next({ hue: color.hue, saturation: color.saturation });
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
console.warn('Color is null');
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
isInsideCircle(x, y) {
|
|
188
|
+
return combineLatest([this.squareSize$, this.shiftX$, this.shiftY$])
|
|
189
|
+
.pipe(map(([squareSize, shiftX, shiftY]) => {
|
|
190
|
+
// Position to the square
|
|
191
|
+
const sx = x - (shiftX ?? 0);
|
|
192
|
+
const sy = y - (shiftY ?? 0);
|
|
193
|
+
// Square radius
|
|
194
|
+
const sr = (squareSize ?? 0) / 2;
|
|
195
|
+
const radius = Math.sqrt(Math.pow(sx - sr, 2) + Math.pow(sy - sr, 2));
|
|
196
|
+
const angle = (Math.atan2(sr - sy, sr - sx) + Math.PI) % 360;
|
|
197
|
+
return {
|
|
198
|
+
inside: radius <= sr,
|
|
199
|
+
angle
|
|
200
|
+
};
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
position2color(x, y) {
|
|
204
|
+
return this.isInsideCircle(x, y).pipe(map((result) => {
|
|
205
|
+
if (!this.canvasContext) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
if (result.inside) {
|
|
209
|
+
const imageData = this.canvasContext.getImageData(x, y, 1, 1).data;
|
|
210
|
+
const hsl = this.rgb2Hsl({ r: imageData[0], g: imageData[1], b: imageData[2] });
|
|
211
|
+
return hsl;
|
|
212
|
+
}
|
|
213
|
+
return { hue: result.angle * 180 / Math.PI, saturation: 1, luminosity: 0.5 };
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
color2position(hs) {
|
|
217
|
+
return combineLatest([this.innerRadius$, this.outerRadius$])
|
|
218
|
+
.pipe(map(([innerRadius, outerRadius]) => {
|
|
219
|
+
if (innerRadius === null) {
|
|
220
|
+
innerRadius = 0;
|
|
221
|
+
}
|
|
222
|
+
if (!outerRadius) {
|
|
223
|
+
outerRadius = 100;
|
|
224
|
+
}
|
|
225
|
+
const theta = hs.hue * Math.PI / 180;
|
|
226
|
+
const c = {
|
|
227
|
+
x: -outerRadius * Math.cos(theta),
|
|
228
|
+
y: -outerRadius * Math.sin(theta)
|
|
229
|
+
};
|
|
230
|
+
const d = hs.saturation * (outerRadius - innerRadius) + innerRadius;
|
|
231
|
+
const o = { x: outerRadius, y: outerRadius };
|
|
232
|
+
return {
|
|
233
|
+
x: o.x - d * (c.x / outerRadius),
|
|
234
|
+
y: o.y - d * (c.y / outerRadius),
|
|
235
|
+
};
|
|
236
|
+
}));
|
|
237
|
+
}
|
|
238
|
+
rgb2Hsl(color) {
|
|
239
|
+
const r01 = this.bound01(color.r, 255);
|
|
240
|
+
const g01 = this.bound01(color.g, 255);
|
|
241
|
+
const b01 = this.bound01(color.b, 255);
|
|
242
|
+
const max = Math.max(r01, g01, b01);
|
|
243
|
+
const min = Math.min(r01, g01, b01);
|
|
244
|
+
let h, s;
|
|
245
|
+
const l = (max + min) / 2;
|
|
246
|
+
if (max === min) {
|
|
247
|
+
h = s = 0;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
const d = max - min;
|
|
251
|
+
s = (l > 0.5) ? (d / (2 - max - min)) : (d / (max + min));
|
|
252
|
+
switch (max) {
|
|
253
|
+
case r01:
|
|
254
|
+
{
|
|
255
|
+
h = (g01 - b01) / d + ((g01 < b01) ? 6 : 0);
|
|
256
|
+
}
|
|
257
|
+
break;
|
|
258
|
+
case g01:
|
|
259
|
+
{
|
|
260
|
+
h = (b01 - r01) / d + 2;
|
|
261
|
+
}
|
|
262
|
+
break;
|
|
263
|
+
case b01:
|
|
264
|
+
{
|
|
265
|
+
h = (r01 - g01) / d + 4;
|
|
266
|
+
}
|
|
267
|
+
break;
|
|
268
|
+
default: {
|
|
269
|
+
throw 'Invalid operation';
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
h /= 6;
|
|
273
|
+
}
|
|
274
|
+
h *= 360;
|
|
275
|
+
return { hue: h, saturation: s, luminosity: l };
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Divide 1 to n, handling floating point errors.
|
|
279
|
+
* Ensures that the value is in between 0 and 1.
|
|
280
|
+
**/
|
|
281
|
+
bound01(n, max) {
|
|
282
|
+
n = Math.min(max, Math.max(0, n));
|
|
283
|
+
if ((Math.abs(n - max) < 0.000001)) {
|
|
284
|
+
return 1;
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
return (n % max) / max;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsColorWheelComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
291
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: BsColorWheelComponent, selector: "bs-color-wheel", inputs: { diameterRatio: "diameterRatio", width: "width", height: "height", hs: "hs", luminosity: "luminosity" }, outputs: { hsChange: "hsChange" }, host: { listeners: { "document:mousemove": "onMouseMove($event)", "document:mouseup": "onPointerUp($event)" }, properties: { "class.position-relative": "this.positionRelative" } }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }], ngImport: i0, template: "<canvas\n class=\"d-block\"\n [width]=\"width$ | async\"\n [height]=\"height$ | async\"\n (mousedown)=\"onPointerDown($event)\"\n (touchstart)=\"onPointerDown($event)\"\n (touchmove)=\"onPointerMove($event)\"\n (touchend)=\"onPointerUp($event)\"\n #canvas></canvas>\n\n<ng-container *ngIf=\"(markerPosition$ | async) as markerPosition\">\n <div class=\"thumb position-absolute pe-none\" [style.left.px]=\"markerPosition.x\" [style.top.px]=\"markerPosition.y\"></div>\n</ng-container>", styles: [".thumb{width:30px;height:30px;border-radius:15px;margin-top:-15px;margin-left:-15px;box-sizing:border-box;border:2px solid white;box-shadow:#0000001a 0 0 10px 5px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
|
|
292
|
+
}
|
|
293
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsColorWheelComponent, decorators: [{
|
|
294
|
+
type: Component,
|
|
295
|
+
args: [{ selector: 'bs-color-wheel', template: "<canvas\n class=\"d-block\"\n [width]=\"width$ | async\"\n [height]=\"height$ | async\"\n (mousedown)=\"onPointerDown($event)\"\n (touchstart)=\"onPointerDown($event)\"\n (touchmove)=\"onPointerMove($event)\"\n (touchend)=\"onPointerUp($event)\"\n #canvas></canvas>\n\n<ng-container *ngIf=\"(markerPosition$ | async) as markerPosition\">\n <div class=\"thumb position-absolute pe-none\" [style.left.px]=\"markerPosition.x\" [style.top.px]=\"markerPosition.y\"></div>\n</ng-container>", styles: [".thumb{width:30px;height:30px;border-radius:15px;margin-top:-15px;margin-left:-15px;box-sizing:border-box;border:2px solid white;box-shadow:#0000001a 0 0 10px 5px}\n"] }]
|
|
296
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { positionRelative: [{
|
|
297
|
+
type: HostBinding,
|
|
298
|
+
args: ['class.position-relative']
|
|
299
|
+
}], diameterRatio: [{
|
|
300
|
+
type: Input
|
|
301
|
+
}], width: [{
|
|
302
|
+
type: Input
|
|
303
|
+
}], height: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], canvas: [{
|
|
306
|
+
type: ViewChild,
|
|
307
|
+
args: ['canvas']
|
|
308
|
+
}], hsChange: [{
|
|
309
|
+
type: Output
|
|
310
|
+
}], hs: [{
|
|
311
|
+
type: Input
|
|
312
|
+
}], luminosity: [{
|
|
313
|
+
type: Input
|
|
314
|
+
}], onMouseMove: [{
|
|
315
|
+
type: HostListener,
|
|
316
|
+
args: ['document:mousemove', ['$event']]
|
|
317
|
+
}], onPointerUp: [{
|
|
318
|
+
type: HostListener,
|
|
319
|
+
args: ['document:mouseup', ['$event']]
|
|
320
|
+
}] } });
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3Itd2hlZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9jb2xvci1waWNrZXIvY29tcG9uZW50cy9jb2xvci13aGVlbC9jb2xvci13aGVlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2NvbG9yLXBpY2tlci9jb21wb25lbnRzL2NvbG9yLXdoZWVsL2NvbG9yLXdoZWVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQVVoRSxNQUFNLE9BQU8scUJBQXFCO0lBRWhDLFlBQW9CLE9BQWdDO1FBQ2xELDBEQUEwRDtRQUMxRCxtQ0FBbUM7UUFDbkMseURBQXlEO1FBQ3pELHdDQUF3QztRQUN4QyxtREFBbUQ7UUFDbkQscURBQXFEO1FBQ3JELGVBQWU7UUFDZixRQUFRO1FBQ1IsTUFBTTtRQUNOLE1BQU07UUFWWSxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQXFHWixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFhaEUsd0JBQXdCO1FBQ3hCLFFBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0MsYUFBUSxH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OUMsV0FBVztzQkFEVixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIG1hcCwgdGFrZSwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBIUyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaHMnO1xuaW1wb3J0IHsgSHNsQ29sb3IgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2hzbC1jb2xvcic7XG5pbXBvcnQgeyBSZ2JDb2xvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmdiLWNvbG9yJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnMtY29sb3Itd2hlZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29sb3Itd2hlZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb2xvci13aGVlbC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJzQ29sb3JXaGVlbENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICAvLyB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgLy8gICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAvLyAgICAgaWYgKGVudHJ5LnRhcmdldCA9PT0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhlbnRyeS5jb250ZW50UmVjdCk7XG4gICAgLy8gICAgICAgdGhpcy53aWR0aCQubmV4dChlbnRyeS5jb250ZW50UmVjdC53aWR0aCk7XG4gICAgLy8gICAgICAgdGhpcy5oZWlnaHQkLm5leHQoZW50cnkuY29udGVudFJlY3QuaGVpZ2h0KTtcbiAgICAvLyAgICAgICBicmVhaztcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfVxuICAgIC8vIH0pO1xuXG4gICAgdGhpcy5zcXVhcmVTaXplJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2lkdGgkLCB0aGlzLmhlaWdodCRdKVxuICAgICAgLnBpcGUobWFwKChbd2lkdGgsIGhlaWdodF0pID0+IHtcbiAgICAgICAgaWYgKCh3aWR0aCA9PT0gbnVsbCkgfHwgKGhlaWdodCA9PT0gbnVsbCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNxdWFyZVNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIHNxdWFyZVNpemU7XG4gICAgICB9KSk7XG5cbiAgICB0aGlzLnNoaWZ0WCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZHRoJCwgdGhpcy5oZWlnaHQkXSlcbiAgICAgIC5waXBlKG1hcCgoW3dpZHRoLCBoZWlnaHRdKSA9PiB7XG4gICAgICAgIGlmICgod2lkdGggPT09IG51bGwpIHx8IChoZWlnaHQgPT09IG51bGwpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAod2lkdGggPCBoZWlnaHQpIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gKHdpZHRoIC0gaGVpZ2h0KSAvIDI7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcblxuICAgIHRoaXMuc2hpZnRZJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2lkdGgkLCB0aGlzLmhlaWdodCRdKVxuICAgICAgLnBpcGUobWFwKChbd2lkdGgsIGhlaWdodF0pID0+IHtcbiAgICAgICAgaWYgKCh3aWR0aCA9PT0gbnVsbCkgfHwgKGhlaWdodCA9PT0gbnVsbCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh3aWR0aCA8IGhlaWdodCkge1xuICAgICAgICAgIHJldHVybiAoaGVpZ2h0IC0gd2lkdGgpIC8gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuXG4gICAgdGhpcy5pbm5lclJhZGl1cyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnNxdWFyZVNpemUkLCB0aGlzLmRpYW1ldGVyUmF0aW8kXSlcbiAgICAgIC5waXBlKG1hcCgoW3NxdWFyZVNpemUsIGRpYW1ldGVyUmF0aW9dKSA9PiB7XG4gICAgICAgIGlmIChzcXVhcmVTaXplKSB7XG4gICAgICAgICAgcmV0dXJuIHNxdWFyZVNpemUgLyAyICogZGlhbWV0ZXJSYXRpbztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuXG4gICAgdGhpcy5vdXRlclJhZGl1cyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnNxdWFyZVNpemUkLCB0aGlzLmRpYW1ldGVyUmF0aW8kXSlcbiAgICAgIC5waXBlKG1hcCgoW3NxdWFyZVNpemUsIGRpYW1ldGVyUmF0aW9dKSA9PiB7XG4gICAgICAgIGlmIChzcXVhcmVTaXplKSB7XG4gICAgICAgICAgcmV0dXJuIHNxdWFyZVNpemUgLyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAxNTA7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5pbm5lclJhZGl1cyQsIHRoaXMub3V0ZXJSYWRpdXMkLCB0aGlzLnNoaWZ0WCQsIHRoaXMuc2hpZnRZJF0pXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjApLCB0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIHNoaWZ0WCwgc2hpZnRZXSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW52YXNDb250ZXh0ICYmIChpbm5lclJhZGl1cyAhPT0gbnVsbCkgJiYgKG91dGVyUmFkaXVzICE9PSBudWxsKSAmJiAoc2hpZnRYICE9PSBudWxsKSAmJiAoc2hpZnRZICE9PSBudWxsKSkge1xuICAgICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC53aWR0aCwgdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5oZWlnaHQpO1xuICAgICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgdGhpcy5jYW52YXNDb250ZXh0LnRyYW5zbGF0ZShzaGlmdFggKyBvdXRlclJhZGl1cywgc2hpZnRZICsgb3V0ZXJSYWRpdXMpO1xuXG4gICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCAzNjA7IHgrKykge1xuICAgICAgICAgICAgdGhpcy5jYW52YXNDb250ZXh0LnJvdGF0ZSgxICogTWF0aC5QSSAvIDE4MCk7XG4gICAgICAgICAgICBjb25zdCBncmFkaWVudCA9IHRoaXMuY2FudmFzQ29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChpbm5lclJhZGl1cywgMCwgb3V0ZXJSYWRpdXMsIDApO1xuXG4gICAgICAgICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMCwgYGhzbCgke3h9LCAwJSwgNTAlKWApO1xuICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsIGBoc2woJHt4fSwgMTAwJSwgNTAlKWApO1xuXG4gICAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRleHQuZmlsbFN0eWxlID0gZ3JhZGllbnQ7XG4gICAgICAgICAgICB0aGlzLmNhbnZhc0NvbnRleHQuZmlsbFJlY3QoaW5uZXJSYWRpdXMsIDAsIG91dGVyUmFkaXVzIC0gaW5uZXJSYWRpdXMsIG91dGVyUmFkaXVzIC8gNTApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5tYXJrZXJQb3NpdGlvbiQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmhzJCwgdGhpcy5zaGlmdFgkLCB0aGlzLnNoaWZ0WSRdKVxuICAgICAgLnBpcGUoc3dpdGNoTWFwKChbaHMsIHNoaWZ0WCwgc2hpZnRZXSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvcjJwb3NpdGlvbihocylcbiAgICAgICAgICAucGlwZShtYXAoKHBvc2l0aW9uKSA9PiAoe3Bvc2l0aW9uLCBzaGlmdFg6IChzaGlmdFggPz8gMCksIHNoaWZ0WTogKHNoaWZ0WSA/PyAwKX0pKSk7XG4gICAgICB9KSlcbiAgICAgIC5waXBlKG1hcCgoe3Bvc2l0aW9uLCBzaGlmdFgsIHNoaWZ0WX0pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBwb3NpdGlvbi54ICsgc2hpZnRYLFxuICAgICAgICAgIHk6IHBvc2l0aW9uLnkgKyBzaGlmdFksXG4gICAgICAgIH07XG4gICAgICB9KSk7XG5cbiAgICB0aGlzLmhzJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoaHMpID0+IHRoaXMuaHNDaGFuZ2UuZW1pdChocykpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wb3NpdGlvbi1yZWxhdGl2ZScpIHBvc2l0aW9uUmVsYXRpdmUgPSB0cnVlO1xuICBcbiAgQElucHV0KCkgc2V0IGRpYW1ldGVyUmF0aW8odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZGlhbWV0ZXJSYXRpbyQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgc2V0IHdpZHRoKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBzZXQgaGVpZ2h0KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmhlaWdodCQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgQFZpZXdDaGlsZCgnY2FudmFzJykgY2FudmFzITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG4gIFxuICAvLyNyZWdpb24gSHVlL0x1bWlub3NpdHlcbiAgaHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIUz4oeyBodWU6IDAsIHNhdHVyYXRpb246IDAgfSk7XG4gIEBPdXRwdXQoKSBoc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SFM+KCk7XG4gIHB1YmxpYyBnZXQgaHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHMkLnZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgaHModmFsdWU6IEhTKSB7XG4gICAgdGhpcy5ocyQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG4gIC8vI3JlZ2lvbiBMdW1pbm9zaXR5XG4gIGx1bWlub3NpdHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwdWJsaWMgZ2V0IGx1bWlub3NpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMubHVtaW5vc2l0eSQudmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCBsdW1pbm9zaXR5KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmx1bWlub3NpdHkkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIGNhbnZhc0NvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzUG9pbnRlckRvd24gPSBmYWxzZTtcbiAgd2lkdGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDE1MCk7XG4gIGhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMTUwKTtcbiAgZGlhbWV0ZXJSYXRpbyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG5cbiAgc3F1YXJlU2l6ZSQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG4gIHNoaWZ0WCQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG4gIHNoaWZ0WSQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG5cbiAgaW5uZXJSYWRpdXMkOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+O1xuICBvdXRlclJhZGl1cyQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG4gIG1hcmtlclBvc2l0aW9uJDogT2JzZXJ2YWJsZTx7eDogbnVtYmVyLCB5OiBudW1iZXJ9PjtcbiAgZGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIFxuICB2aWV3SW5pdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMudmlld0luaXRlZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmNhbnZhc0NvbnRleHQgPSB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmdldENvbnRleHQoJzJkJywgeyB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUgfSk7XG4gIH1cblxuICBvblBvaW50ZXJEb3duKGV2OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCQudmFsdWUpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmlzUG9pbnRlckRvd24gPSB0cnVlO1xuICAgICAgdGhpcy51cGRhdGVDb2xvcihldiwgISgndG91Y2hlcycgaW4gZXYpKTtcbiAgICB9XG4gIH1cblxuICBvblBvaW50ZXJNb3ZlKGV2OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkge1xuICAgIGlmICh0aGlzLmlzUG9pbnRlckRvd24pIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3IoZXYsICEoJ3RvdWNoZXMnIGluIGV2KSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcbiAgb25Nb3VzZU1vdmUoZXY6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uUG9pbnRlck1vdmUoZXYpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gIG9uUG9pbnRlclVwKGV2OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkge1xuICAgIHRoaXMuaXNQb2ludGVyRG93biA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb2xvcihldjogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQsIHN1YnRyYWN0OiBib29sZWFuKSB7XG4gICAgbGV0IGNvOiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH07XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKCd0b3VjaGVzJyBpbiBldikge1xuICAgICAgY28gPSB7XG4gICAgICAgIHg6IGV2LnRvdWNoZXNbMF0uY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgICAgeTogZXYudG91Y2hlc1swXS5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjbyA9IHtcbiAgICAgICAgeDogZXYuY2xpZW50WCAtIChzdWJ0cmFjdCA/IHJlY3QubGVmdCA6IDApLFxuICAgICAgICB5OiBldi5jbGllbnRZIC0gKHN1YnRyYWN0ID8gcmVjdC50b3AgOiAwKSxcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHRoaXMucG9zaXRpb24yY29sb3IoY28ueCwgY28ueSkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGNvbG9yKSA9PiB7XG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgdGhpcy5ocyQubmV4dCh7IGh1ZTogY29sb3IuaHVlLCBzYXR1cmF0aW9uOiBjb2xvci5zYXR1cmF0aW9uIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdDb2xvciBpcyBudWxsJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5zaWRlQ2lyY2xlKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuc3F1YXJlU2l6ZSQsIHRoaXMuc2hpZnRYJCwgdGhpcy5zaGlmdFkkXSlcbiAgICAgIC5waXBlKG1hcCgoW3NxdWFyZVNpemUsIHNoaWZ0WCwgc2hpZnRZXSkgPT4ge1xuICAgICAgICAvLyBQb3NpdGlvbiB0byB0aGUgc3F1YXJlXG4gICAgICAgIGNvbnN0IHN4OiBudW1iZXIgPSB4IC0gKHNoaWZ0WCA/PyAwKTtcbiAgICAgICAgY29uc3Qgc3kgPSB5IC0gKHNoaWZ0WSA/PyAwKTtcbiAgICAgICAgLy8gU3F1YXJlIHJhZGl1c1xuICAgICAgICBjb25zdCBzciA9IChzcXVhcmVTaXplID8/IDApIC8gMjtcblxuICAgICAgICBjb25zdCByYWRpdXMgPSBNYXRoLnNxcnQoTWF0aC5wb3coc3ggLSBzciwgMikgKyBNYXRoLnBvdyhzeSAtIHNyLCAyKSk7XG4gICAgICAgIGNvbnN0IGFuZ2xlID0gKE1hdGguYXRhbjIoc3IgLSBzeSwgc3IgLSBzeCkgKyBNYXRoLlBJKSAlIDM2MDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbnNpZGU6IHJhZGl1cyA8PSBzcixcbiAgICAgICAgICBhbmdsZVxuICAgICAgICB9O1xuICAgICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvbjJjb2xvcih4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmlzSW5zaWRlQ2lyY2xlKHgsIHkpLnBpcGUobWFwKChyZXN1bHQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jYW52YXNDb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0Lmluc2lkZSkge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSB0aGlzLmNhbnZhc0NvbnRleHQuZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGE7XG4gICAgICAgIGNvbnN0IGhzbCA9IHRoaXMucmdiMkhzbCh7IHI6IGltYWdlRGF0YVswXSwgZzogaW1hZ2VEYXRhWzFdLCBiOiBpbWFnZURhdGFbMl0gfSk7XG4gICAgICAgIHJldHVybiBoc2w7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiA8SHNsQ29sb3I+eyBodWU6IHJlc3VsdC5hbmdsZSAqIDE4MCAvIE1hdGguUEksIHNhdHVyYXRpb246IDEsIGx1bWlub3NpdHk6IDAuNSB9O1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sb3IycG9zaXRpb24oaHM6IEhTKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuaW5uZXJSYWRpdXMkLCB0aGlzLm91dGVyUmFkaXVzJF0pXG4gICAgICAucGlwZShtYXAoKFtpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXNdKSA9PiB7XG4gICAgICAgIGlmIChpbm5lclJhZGl1cyA9PT0gbnVsbCkge1xuICAgICAgICAgIGlubmVyUmFkaXVzID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW91dGVyUmFkaXVzKSB7XG4gICAgICAgICAgb3V0ZXJSYWRpdXMgPSAxMDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aGV0YSA9IGhzLmh1ZSAqIE1hdGguUEkgLyAxODA7XG4gICAgICAgIGNvbnN0IGMgPSB7XG4gICAgICAgICAgeDogLW91dGVyUmFkaXVzICogTWF0aC5jb3ModGhldGEpLFxuICAgICAgICAgIHk6IC1vdXRlclJhZGl1cyAqIE1hdGguc2luKHRoZXRhKVxuICAgICAgICB9O1xuICAgIFxuICAgICAgICBjb25zdCBkID0gaHMuc2F0dXJhdGlvbiAqIChvdXRlclJhZGl1cyAtIGlubmVyUmFkaXVzKSArIGlubmVyUmFkaXVzO1xuICAgICAgICBjb25zdCBvID0geyB4OiBvdXRlclJhZGl1cywgeTogb3V0ZXJSYWRpdXMgfTtcbiAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBvLnggLSBkICogKGMueCAvIG91dGVyUmFkaXVzKSxcbiAgICAgICAgICB5OiBvLnkgLSBkICogKGMueSAvIG91dGVyUmFkaXVzKSxcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICB9XG4gIFxuICBwcml2YXRlIHJnYjJIc2woY29sb3I6IFJnYkNvbG9yKSB7XG4gICAgY29uc3QgcjAxID0gdGhpcy5ib3VuZDAxKGNvbG9yLnIsIDI1NSk7XG4gICAgY29uc3QgZzAxID0gdGhpcy5ib3VuZDAxKGNvbG9yLmcsIDI1NSk7XG4gICAgY29uc3QgYjAxID0gdGhpcy5ib3VuZDAxKGNvbG9yLmIsIDI1NSk7XG5cbiAgICBjb25zdCBtYXggPSBNYXRoLm1heChyMDEsIGcwMSwgYjAxKTtcbiAgICBjb25zdCBtaW4gPSBNYXRoLm1pbihyMDEsIGcwMSwgYjAxKTtcblxuICAgIGxldCBoOiBudW1iZXIsIHM6IG51bWJlcjsgY29uc3QgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICAgICAgaCA9IHMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGQgPSBtYXggLSBtaW47XG4gICAgICAgIHMgPSAobCA+IDAuNSkgPyAoZCAvICgyIC0gbWF4IC0gbWluKSkgOiAoZCAvIChtYXggKyBtaW4pKTtcbiAgICAgICAgc3dpdGNoIChtYXgpIHtcbiAgICAgICAgICAgIGNhc2UgcjAxOiB7XG4gICAgICAgICAgICAgICAgaCA9IChnMDEgLSBiMDEpIC8gZCArICgoZzAxIDwgYjAxKSA/IDYgOiAwKTtcbiAgICAgICAgICAgIH0gYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGcwMToge1xuICAgICAgICAgICAgICAgIGggPSAoYjAxIC0gcjAxKSAvIGQgKyAyO1xuICAgICAgICAgICAgfSBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYjAxOiB7XG4gICAgICAgICAgICAgICAgaCA9IChyMDEgLSBnMDEpIC8gZCArIDQ7XG4gICAgICAgICAgICB9IGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRocm93ICdJbnZhbGlkIG9wZXJhdGlvbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGggLz0gNjtcbiAgICB9XG4gICAgXG4gICAgaCAqPSAzNjA7XG5cbiAgICByZXR1cm4gPEhzbENvbG9yPnsgaHVlOiBoLCBzYXR1cmF0aW9uOiBzLCBsdW1pbm9zaXR5OiBsIH07XG4gIH1cblxuICAvKipcbiAgICogRGl2aWRlIDEgdG8gbiwgaGFuZGxpbmcgZmxvYXRpbmcgcG9pbnQgZXJyb3JzLlxuICAgKiBFbnN1cmVzIHRoYXQgdGhlIHZhbHVlIGlzIGluIGJldHdlZW4gMCBhbmQgMS5cbiAgICoqL1xuICBwcml2YXRlIGJvdW5kMDEobjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xuICAgICAgbiA9IE1hdGgubWluKG1heCwgTWF0aC5tYXgoMCwgbikpO1xuICAgICAgaWYgKChNYXRoLmFicyhuIC0gbWF4KSA8IDAuMDAwMDAxKSkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gKG4gJSBtYXgpIC8gbWF4O1xuICAgICAgfVxuICB9XG5cbn1cbiIsIjxjYW52YXNcbiAgICBjbGFzcz1cImQtYmxvY2tcIlxuICAgIFt3aWR0aF09XCJ3aWR0aCQgfCBhc3luY1wiXG4gICAgW2hlaWdodF09XCJoZWlnaHQkIHwgYXN5bmNcIlxuICAgIChtb3VzZWRvd24pPVwib25Qb2ludGVyRG93bigkZXZlbnQpXCJcbiAgICAodG91Y2hzdGFydCk9XCJvblBvaW50ZXJEb3duKCRldmVudClcIlxuICAgICh0b3VjaG1vdmUpPVwib25Qb2ludGVyTW92ZSgkZXZlbnQpXCJcbiAgICAodG91Y2hlbmQpPVwib25Qb2ludGVyVXAoJGV2ZW50KVwiXG4gICAgI2NhbnZhcz48L2NhbnZhcz5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIihtYXJrZXJQb3NpdGlvbiQgfCBhc3luYykgYXMgbWFya2VyUG9zaXRpb25cIj5cbiAgICA8ZGl2IGNsYXNzPVwidGh1bWIgcG9zaXRpb24tYWJzb2x1dGUgcGUtbm9uZVwiIFtzdHlsZS5sZWZ0LnB4XT1cIm1hcmtlclBvc2l0aW9uLnhcIiBbc3R5bGUudG9wLnB4XT1cIm1hcmtlclBvc2l0aW9uLnlcIj48L2Rpdj5cbjwvbmctY29udGFpbmVyPiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './alpha-strip/alpha-strip.component';
|
|
2
|
+
export * from './color-picker/color-picker.component';
|
|
3
|
+
export * from './color-wheel/color-wheel.component';
|
|
4
|
+
export * from './luminosity-strip/luminosity-strip.component';
|
|
5
|
+
export * from './slider/slider.component';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2NvbG9yLXBpY2tlci9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWxwaGEtc3RyaXAvYWxwaGEtc3RyaXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xvci13aGVlbC9jb2xvci13aGVlbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9sdW1pbm9zaXR5LXN0cmlwL2x1bWlub3NpdHktc3RyaXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2xpZGVyL3NsaWRlci5jb21wb25lbnQnOyJdfQ==
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ElementRef } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, combineLatest, map } from 'rxjs';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../slider/slider.component";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
export class BsLuminosityStripComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
//#region HS
|
|
10
|
+
this.hs$ = new BehaviorSubject({ hue: 0, saturation: 0 });
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region Luminosity
|
|
13
|
+
this.luminosity$ = new BehaviorSubject(0.5);
|
|
14
|
+
this.luminosityChange = new EventEmitter();
|
|
15
|
+
//#endregion
|
|
16
|
+
this.canvasContext = null;
|
|
17
|
+
this.hs$.pipe(takeUntilDestroyed()).subscribe((hs) => {
|
|
18
|
+
if (this.canvasContext) {
|
|
19
|
+
const width = this.canvas.nativeElement.width, height = this.canvas.nativeElement.height;
|
|
20
|
+
this.canvasContext.clearRect(0, 0, width, height);
|
|
21
|
+
this.canvasContext.save();
|
|
22
|
+
// HSL
|
|
23
|
+
// - H: 0 - 359
|
|
24
|
+
// - S: "0%" - "100%"
|
|
25
|
+
// - L: "0%" - "50%" - "100%"
|
|
26
|
+
const gradient = this.canvasContext.createLinearGradient(0, 0, width, 0);
|
|
27
|
+
gradient.addColorStop(0, `hsl(${hs.hue}, ${hs.saturation * 100}%, 0%)`);
|
|
28
|
+
gradient.addColorStop(0.5, `hsl(${hs.hue}, ${hs.saturation * 100}%, 50%)`);
|
|
29
|
+
gradient.addColorStop(1, `hsl(${hs.hue}, ${hs.saturation * 100}%, 100%)`);
|
|
30
|
+
this.canvasContext.fillStyle = gradient;
|
|
31
|
+
this.canvasContext.fillRect(0, 0, width, height);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
this.resultBackground$ = combineLatest([this.hs$, this.luminosity$])
|
|
35
|
+
.pipe(map(([hs, luminosity]) => {
|
|
36
|
+
return `hsl(${hs.hue}, ${hs.saturation * 100}%, ${luminosity * 100}%)`;
|
|
37
|
+
}));
|
|
38
|
+
this.luminosity$.pipe(takeUntilDestroyed())
|
|
39
|
+
.subscribe(luminosity => this.luminosityChange.emit(luminosity));
|
|
40
|
+
}
|
|
41
|
+
get hs() {
|
|
42
|
+
return this.hs$.value;
|
|
43
|
+
}
|
|
44
|
+
set hs(value) {
|
|
45
|
+
this.hs$.next(value);
|
|
46
|
+
}
|
|
47
|
+
get luminosity() {
|
|
48
|
+
return this.luminosity$.value;
|
|
49
|
+
}
|
|
50
|
+
set luminosity(value) {
|
|
51
|
+
this.luminosity$.next(value);
|
|
52
|
+
}
|
|
53
|
+
ngAfterViewInit() {
|
|
54
|
+
this.canvasContext = this.canvas.nativeElement.getContext('2d', { willReadFrequently: true });
|
|
55
|
+
}
|
|
56
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsLuminosityStripComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
57
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: BsLuminosityStripComponent, selector: "bs-luminosity-strip", inputs: { hs: "hs", luminosity: "luminosity" }, outputs: { luminosityChange: "luminosityChange" }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }], ngImport: i0, template: "<bs-slider [value]=\"(luminosity$ | async)!\" (valueChange)=\"luminosityChange.emit($event)\">\n <canvas bsTrack class=\"position-absolute w-100\" #canvas></canvas>\n <div bsThumb [style.background]=\"resultBackground$ | async\"></div>\n</bs-slider>", styles: [""], dependencies: [{ kind: "component", type: i1.BsSliderComponent, selector: "bs-slider", inputs: ["value"], outputs: ["valueChange"] }, { kind: "directive", type: i1.BsThumbDirective, selector: "[bsThumb]" }, { kind: "directive", type: i1.BsTrackDirective, selector: "[bsTrack]" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
|
|
58
|
+
}
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsLuminosityStripComponent, decorators: [{
|
|
60
|
+
type: Component,
|
|
61
|
+
args: [{ selector: 'bs-luminosity-strip', template: "<bs-slider [value]=\"(luminosity$ | async)!\" (valueChange)=\"luminosityChange.emit($event)\">\n <canvas bsTrack class=\"position-absolute w-100\" #canvas></canvas>\n <div bsThumb [style.background]=\"resultBackground$ | async\"></div>\n</bs-slider>" }]
|
|
62
|
+
}], ctorParameters: function () { return []; }, propDecorators: { hs: [{
|
|
63
|
+
type: Input
|
|
64
|
+
}], luminosityChange: [{
|
|
65
|
+
type: Output
|
|
66
|
+
}], luminosity: [{
|
|
67
|
+
type: Input
|
|
68
|
+
}], canvas: [{
|
|
69
|
+
type: ViewChild,
|
|
70
|
+
args: ['canvas']
|
|
71
|
+
}] } });
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHVtaW5vc2l0eS1zdHJpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2NvbG9yLXBpY2tlci9jb21wb25lbnRzL2x1bWlub3NpdHktc3RyaXAvbHVtaW5vc2l0eS1zdHJpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2NvbG9yLXBpY2tlci9jb21wb25lbnRzL2x1bWlub3NpdHktc3RyaXAvbHVtaW5vc2l0eS1zdHJpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQVFoRSxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDO1FBOEJBLFlBQVk7UUFDWixRQUFHLEdBQUcsSUFBSSxlQUFlLENBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBT3pELFlBQVk7UUFDWixvQkFBb0I7UUFDcEIsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBUyxHQUFHLENBQUMsQ0FBQztRQUNyQyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBT3hELFlBQVk7UUFFSixrQkFBYSxHQUFvQyxJQUFJLENBQUM7UUFqRDVELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFF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QkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UscUJBQXFCOzBFQXdDWCxFQUFFO3NCQUFyQixLQUFLO2dCQU1JLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFJYSxVQUFVO3NCQUE3QixLQUFLO2dCQU1lLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBIUyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicy1sdW1pbm9zaXR5LXN0cmlwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2x1bWlub3NpdHktc3RyaXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sdW1pbm9zaXR5LXN0cmlwLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQnNMdW1pbm9zaXR5U3RyaXBDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ocyQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChocykgPT4ge1xuICAgICAgaWYgKHRoaXMuY2FudmFzQ29udGV4dCkge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGgsIGhlaWdodCA9IHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuaGVpZ2h0O1xuICAgICAgICB0aGlzLmNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmNhbnZhc0NvbnRleHQuc2F2ZSgpO1xuXG4gICAgICAgIC8vIEhTTFxuICAgICAgICAvLyAtIEg6IDAgLSAzNTlcbiAgICAgICAgLy8gLSBTOiBcIjAlXCIgLSBcIjEwMCVcIlxuICAgICAgICAvLyAtIEw6IFwiMCVcIiAtIFwiNTAlXCIgLSBcIjEwMCVcIlxuXG4gICAgICAgIGNvbnN0IGdyYWRpZW50ID0gdGhpcy5jYW52YXNDb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIHdpZHRoLCAwKTtcbiAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsIGBoc2woJHtocy5odWV9LCAke2hzLnNhdHVyYXRpb24gKiAxMDB9JSwgMCUpYCk7XG4gICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLjUsIGBoc2woJHtocy5odWV9LCAke2hzLnNhdHVyYXRpb24gKiAxMDB9JSwgNTAlKWApO1xuICAgICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMSwgYGhzbCgke2hzLmh1ZX0sICR7aHMuc2F0dXJhdGlvbiAqIDEwMH0lLCAxMDAlKWApO1xuICAgICAgICB0aGlzLmNhbnZhc0NvbnRleHQuZmlsbFN0eWxlID0gZ3JhZGllbnQ7XG4gICAgICAgIHRoaXMuY2FudmFzQ29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLnJlc3VsdEJhY2tncm91bmQkID0gY29tYmluZUxhdGVzdChbdGhpcy5ocyQsIHRoaXMubHVtaW5vc2l0eSRdKVxuICAgICAgLnBpcGUobWFwKChbaHMsIGx1bWlub3NpdHldKSA9PiB7XG4gICAgICAgIHJldHVybiBgaHNsKCR7aHMuaHVlfSwgJHtocy5zYXR1cmF0aW9uICogMTAwfSUsICR7bHVtaW5vc2l0eSAqIDEwMH0lKWA7XG4gICAgICB9KSk7XG4gICAgICBcbiAgICB0aGlzLmx1bWlub3NpdHkkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKGx1bWlub3NpdHkgPT4gdGhpcy5sdW1pbm9zaXR5Q2hhbmdlLmVtaXQobHVtaW5vc2l0eSkpO1xuICB9XG5cbiAgLy8jcmVnaW9uIEhTXG4gIGhzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SFM+KHsgaHVlOiAwLCBzYXR1cmF0aW9uOiAwIH0pO1xuICBwdWJsaWMgZ2V0IGhzKCkge1xuICAgIHJldHVybiB0aGlzLmhzJC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGhzKHZhbHVlOiBIUykge1xuICAgIHRoaXMuaHMkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuICAvLyNyZWdpb24gTHVtaW5vc2l0eVxuICBsdW1pbm9zaXR5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwLjUpO1xuICBAT3V0cHV0KCkgbHVtaW5vc2l0eUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBwdWJsaWMgZ2V0IGx1bWlub3NpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMubHVtaW5vc2l0eSQudmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCBsdW1pbm9zaXR5KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmx1bWlub3NpdHkkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHByaXZhdGUgY2FudmFzQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCA9IG51bGw7XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycpIGNhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jYW52YXNDb250ZXh0ID0gdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcsIHsgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlIH0pO1xuICB9XG5cbiAgcmVzdWx0QmFja2dyb3VuZCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbn1cbiIsIjxicy1zbGlkZXIgW3ZhbHVlXT1cIihsdW1pbm9zaXR5JCB8IGFzeW5jKSFcIiAodmFsdWVDaGFuZ2UpPVwibHVtaW5vc2l0eUNoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgICA8Y2FudmFzIGJzVHJhY2sgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB3LTEwMFwiICNjYW52YXM+PC9jYW52YXM+XG4gICAgPGRpdiBic1RodW1iIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInJlc3VsdEJhY2tncm91bmQkIHwgYXN5bmNcIj48L2Rpdj5cbjwvYnMtc2xpZGVyPiJdfQ==
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Component, Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, NgZone } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { BehaviorSubject, map } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
export class BsSliderComponent {
|
|
7
|
+
constructor(element, zone) {
|
|
8
|
+
this.element = element;
|
|
9
|
+
this.zone = zone;
|
|
10
|
+
this.dBlock = true;
|
|
11
|
+
this.positionRelative = true;
|
|
12
|
+
//#region Value
|
|
13
|
+
this.value$ = new BehaviorSubject(0.5);
|
|
14
|
+
this.valueChange = new EventEmitter();
|
|
15
|
+
//#endregion
|
|
16
|
+
this.isPointerDown$ = new BehaviorSubject(false);
|
|
17
|
+
this.value$.pipe(takeUntilDestroyed())
|
|
18
|
+
.subscribe((value) => this.valueChange.emit(value));
|
|
19
|
+
this.thumbMarginLeft$ = this.value$.pipe(map((value) => {
|
|
20
|
+
const res = value * element.nativeElement.clientWidth - 12;
|
|
21
|
+
return res;
|
|
22
|
+
}));
|
|
23
|
+
this.cursorClass$ = this.isPointerDown$.pipe(map((isPointerDown) => {
|
|
24
|
+
return isPointerDown ? 'cursor-grabbing' : 'cursor-grab';
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
get value() {
|
|
28
|
+
return this.value$.value;
|
|
29
|
+
}
|
|
30
|
+
set value(value) {
|
|
31
|
+
this.value$.next(value);
|
|
32
|
+
}
|
|
33
|
+
onPointerDown(ev) {
|
|
34
|
+
ev.preventDefault();
|
|
35
|
+
this.zone.run(() => this.isPointerDown$.next(true));
|
|
36
|
+
this.updateColor(ev);
|
|
37
|
+
}
|
|
38
|
+
onPointerMove(ev) {
|
|
39
|
+
if (this.isPointerDown$.value) {
|
|
40
|
+
ev.preventDefault();
|
|
41
|
+
ev.stopPropagation();
|
|
42
|
+
this.updateColor(ev);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
onPointerUp(ev) {
|
|
46
|
+
this.isPointerDown$.next(false);
|
|
47
|
+
}
|
|
48
|
+
updateColor(ev) {
|
|
49
|
+
let co;
|
|
50
|
+
const rect = this.track.nativeElement.getBoundingClientRect();
|
|
51
|
+
if ('touches' in ev) {
|
|
52
|
+
co = {
|
|
53
|
+
x: ev.touches[0].clientX - rect.left,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
co = {
|
|
58
|
+
x: ev.clientX - rect.left,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const percent = co.x / this.track.nativeElement.clientWidth;
|
|
62
|
+
const limited = Math.max(0, Math.min(1, percent));
|
|
63
|
+
this.value$.next(limited);
|
|
64
|
+
}
|
|
65
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsSliderComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
66
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: BsSliderComponent, selector: "bs-slider", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "document:mousemove": "onPointerMove($event)", "document:mouseup": "onPointerUp($event)" }, properties: { "class.d-block": "this.dBlock", "class.position-relative": "this.positionRelative" } }, viewQueries: [{ propertyName: "track", first: true, predicate: ["track"], descendants: true }, { propertyName: "thumb", first: true, predicate: ["thumb"], descendants: true }], ngImport: i0, template: "<div class=\"wrapper d-block position-relative\">\n <div #track class=\"track2\"\n (mousedown)=\"onPointerDown($event)\"\n (touchstart)=\"onPointerDown($event)\"\n (touchmove)=\"onPointerMove($event)\"\n (touchend)=\"onPointerUp($event)\">\n <ng-content select=\"[bsTrack]\"></ng-content>\n </div>\n <div #thumb\n (mousedown)=\"onPointerDown($event)\"\n (touchstart)=\"onPointerDown($event)\"\n (touchmove)=\"onPointerMove($event)\"\n (touchend)=\"onPointerUp($event)\"\n [class]=\"cursorClass$ | async\"\n [style.margin-left.px]=\"thumbMarginLeft$ | async\">\n <ng-content select=\"[bsThumb]\"></ng-content>\n </div>\n</div>", styles: [".track2{height:8px}.wrapper{padding-top:8px;padding-bottom:8px}::ng-deep .thumb{width:24px;height:24px;top:0;border-radius:50%;box-shadow:0 0 0 .1rem #646b7240}::ng-deep .track{height:8px;border-radius:8px}\n"], dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
|
|
67
|
+
}
|
|
68
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsSliderComponent, decorators: [{
|
|
69
|
+
type: Component,
|
|
70
|
+
args: [{ selector: 'bs-slider', template: "<div class=\"wrapper d-block position-relative\">\n <div #track class=\"track2\"\n (mousedown)=\"onPointerDown($event)\"\n (touchstart)=\"onPointerDown($event)\"\n (touchmove)=\"onPointerMove($event)\"\n (touchend)=\"onPointerUp($event)\">\n <ng-content select=\"[bsTrack]\"></ng-content>\n </div>\n <div #thumb\n (mousedown)=\"onPointerDown($event)\"\n (touchstart)=\"onPointerDown($event)\"\n (touchmove)=\"onPointerMove($event)\"\n (touchend)=\"onPointerUp($event)\"\n [class]=\"cursorClass$ | async\"\n [style.margin-left.px]=\"thumbMarginLeft$ | async\">\n <ng-content select=\"[bsThumb]\"></ng-content>\n </div>\n</div>", styles: [".track2{height:8px}.wrapper{padding-top:8px;padding-bottom:8px}::ng-deep .thumb{width:24px;height:24px;top:0;border-radius:50%;box-shadow:0 0 0 .1rem #646b7240}::ng-deep .track{height:8px;border-radius:8px}\n"] }]
|
|
71
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { dBlock: [{
|
|
72
|
+
type: HostBinding,
|
|
73
|
+
args: ['class.d-block']
|
|
74
|
+
}], positionRelative: [{
|
|
75
|
+
type: HostBinding,
|
|
76
|
+
args: ['class.position-relative']
|
|
77
|
+
}], track: [{
|
|
78
|
+
type: ViewChild,
|
|
79
|
+
args: ['track']
|
|
80
|
+
}], thumb: [{
|
|
81
|
+
type: ViewChild,
|
|
82
|
+
args: ['thumb']
|
|
83
|
+
}], valueChange: [{
|
|
84
|
+
type: Output
|
|
85
|
+
}], value: [{
|
|
86
|
+
type: Input
|
|
87
|
+
}], onPointerMove: [{
|
|
88
|
+
type: HostListener,
|
|
89
|
+
args: ['document:mousemove', ['$event']]
|
|
90
|
+
}], onPointerUp: [{
|
|
91
|
+
type: HostListener,
|
|
92
|
+
args: ['document:mouseup', ['$event']]
|
|
93
|
+
}] } });
|
|
94
|
+
export class BsThumbDirective {
|
|
95
|
+
constructor() {
|
|
96
|
+
this.thumbClass = true;
|
|
97
|
+
}
|
|
98
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsThumbDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
99
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.2", type: BsThumbDirective, selector: "[bsThumb]", host: { properties: { "class.thumb": "this.thumbClass", "class.position-absolute": "this.thumbClass" } }, ngImport: i0 }); }
|
|
100
|
+
}
|
|
101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsThumbDirective, decorators: [{
|
|
102
|
+
type: Directive,
|
|
103
|
+
args: [{ selector: '[bsThumb]' }]
|
|
104
|
+
}], propDecorators: { thumbClass: [{
|
|
105
|
+
type: HostBinding,
|
|
106
|
+
args: ['class.thumb']
|
|
107
|
+
}, {
|
|
108
|
+
type: HostBinding,
|
|
109
|
+
args: ['class.position-absolute']
|
|
110
|
+
}] } });
|
|
111
|
+
export class BsTrackDirective {
|
|
112
|
+
constructor() {
|
|
113
|
+
this.trackClass = true;
|
|
114
|
+
}
|
|
115
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsTrackDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
116
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.2", type: BsTrackDirective, selector: "[bsTrack]", host: { properties: { "class.track": "this.trackClass" } }, ngImport: i0 }); }
|
|
117
|
+
}
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BsTrackDirective, decorators: [{
|
|
119
|
+
type: Directive,
|
|
120
|
+
args: [{ selector: '[bsTrack]' }]
|
|
121
|
+
}], propDecorators: { trackClass: [{
|
|
122
|
+
type: HostBinding,
|
|
123
|
+
args: ['class.track']
|
|
124
|
+
}] } });
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvY29sb3ItcGlja2VyL2NvbXBvbmVudHMvc2xpZGVyL3NsaWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL2NvbG9yLXBpY2tlci9jb21wb25lbnRzL3NsaWRlci9zbGlkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7O0FBT3hELE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBb0IsT0FBZ0MsRUFBVSxJQUFZO1FBQXRELFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBUTtRQWM1QyxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ0oscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBS2hFLGVBQWU7UUFDZixXQUFNLEdBQUcsSUFBSSxlQUFlLENBQVMsR0FBRyxDQUFDLENBQUM7UUFDaEMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBT25ELFlBQVk7UUFFSixtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBOUIzRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQ25DLFNBQVMs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c0JBQXZELFdBQVc7dUJBQUMseUJBQXlCO2dCQUVsQixLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ0UsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUlSLFdBQVc7c0JBQXBCLE1BQU07Z0JBSWEsS0FBSztzQkFBeEIsS0FBSztnQkFlTixhQUFhO3NCQURaLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVTlDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUF5QjlDLE1BQU0sT0FBTyxnQkFBZ0I7SUFEN0I7UUFJRSxlQUFVLEdBQUcsSUFBSSxDQUFDO0tBQ25COzhHQUpZLGdCQUFnQjtrR0FBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTs4QkFJbEMsVUFBVTtzQkFGVCxXQUFXO3VCQUFDLGFBQWE7O3NCQUN6QixXQUFXO3VCQUFDLHlCQUF5Qjs7QUFLeEMsTUFBTSxPQUFPLGdCQUFnQjtJQUQ3QjtRQUU4QixlQUFVLEdBQUcsSUFBSSxDQUFDO0tBQy9DOzhHQUZZLGdCQUFnQjtrR0FBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTs4QkFFTixVQUFVO3NCQUFyQyxXQUFXO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnMtc2xpZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NsaWRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJzU2xpZGVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHtcbiAgICB0aGlzLnZhbHVlJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSkpO1xuXG4gICAgdGhpcy50aHVtYk1hcmdpbkxlZnQkID0gdGhpcy52YWx1ZSQucGlwZShtYXAoKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSB2YWx1ZSAqIGVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCAtIDEyO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KSk7XG5cbiAgICB0aGlzLmN1cnNvckNsYXNzJCA9IHRoaXMuaXNQb2ludGVyRG93biQucGlwZShtYXAoKGlzUG9pbnRlckRvd24pID0+IHtcbiAgICAgIHJldHVybiBpc1BvaW50ZXJEb3duID8gJ2N1cnNvci1ncmFiYmluZycgOiAnY3Vyc29yLWdyYWInO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZC1ibG9jaycpIGRCbG9jayA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3MucG9zaXRpb24tcmVsYXRpdmUnKSBwb3NpdGlvblJlbGF0aXZlID0gdHJ1ZTtcbiAgdGh1bWJNYXJnaW5MZWZ0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBAVmlld0NoaWxkKCd0cmFjaycpIHRyYWNrITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3RodW1iJykgdGh1bWIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvLyNyZWdpb24gVmFsdWVcbiAgdmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDAuNSk7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlJC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnZhbHVlJC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBwcml2YXRlIGlzUG9pbnRlckRvd24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGN1cnNvckNsYXNzJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIG9uUG9pbnRlckRvd24oZXY6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuaXNQb2ludGVyRG93biQubmV4dCh0cnVlKSk7XG4gICAgdGhpcy51cGRhdGVDb2xvcihldik7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICBvblBvaW50ZXJNb3ZlKGV2OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkge1xuICAgIGlmICh0aGlzLmlzUG9pbnRlckRvd24kLnZhbHVlKSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbG9yKGV2KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZXVwJywgWyckZXZlbnQnXSlcbiAgb25Qb2ludGVyVXAoZXY6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgdGhpcy5pc1BvaW50ZXJEb3duJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sb3IoZXY6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XG4gICAgbGV0IGNvOiB7IHg6IG51bWJlciB9O1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRyYWNrLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKCd0b3VjaGVzJyBpbiBldikge1xuICAgICAgY28gPSB7XG4gICAgICAgIHg6IGV2LnRvdWNoZXNbMF0uY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvID0ge1xuICAgICAgICB4OiBldi5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcGVyY2VudCA9IGNvLnggLyB0aGlzLnRyYWNrLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgY29uc3QgbGltaXRlZCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHBlcmNlbnQpKTtcbiAgICB0aGlzLnZhbHVlJC5uZXh0KGxpbWl0ZWQpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tic1RodW1iXScgfSlcbmV4cG9ydCBjbGFzcyBCc1RodW1iRGlyZWN0aXZlIHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHVtYicpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucG9zaXRpb24tYWJzb2x1dGUnKVxuICB0aHVtYkNsYXNzID0gdHJ1ZTtcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2JzVHJhY2tdJyB9KVxuZXhwb3J0IGNsYXNzIEJzVHJhY2tEaXJlY3RpdmUge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRyYWNrJykgdHJhY2tDbGFzcyA9IHRydWU7XG59IiwiPGRpdiBjbGFzcz1cIndyYXBwZXIgZC1ibG9jayBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgIDxkaXYgI3RyYWNrIGNsYXNzPVwidHJhY2syXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvblBvaW50ZXJEb3duKCRldmVudClcIlxuICAgICAgICAodG91Y2hzdGFydCk9XCJvblBvaW50ZXJEb3duKCRldmVudClcIlxuICAgICAgICAodG91Y2htb3ZlKT1cIm9uUG9pbnRlck1vdmUoJGV2ZW50KVwiXG4gICAgICAgICh0b3VjaGVuZCk9XCJvblBvaW50ZXJVcCgkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltic1RyYWNrXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICN0aHVtYlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uUG9pbnRlckRvd24oJGV2ZW50KVwiXG4gICAgICAgICh0b3VjaHN0YXJ0KT1cIm9uUG9pbnRlckRvd24oJGV2ZW50KVwiXG4gICAgICAgICh0b3VjaG1vdmUpPVwib25Qb2ludGVyTW92ZSgkZXZlbnQpXCJcbiAgICAgICAgKHRvdWNoZW5kKT1cIm9uUG9pbnRlclVwKCRldmVudClcIlxuICAgICAgICBbY2xhc3NdPVwiY3Vyc29yQ2xhc3MkIHwgYXN5bmNcIlxuICAgICAgICBbc3R5bGUubWFyZ2luLWxlZnQucHhdPVwidGh1bWJNYXJnaW5MZWZ0JCB8IGFzeW5jXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltic1RodW1iXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|