@mintplayer/ng-bootstrap 16.6.0 → 16.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/color-picker/color-picker.module.d.ts +15 -0
  2. package/color-picker/components/alpha-strip/alpha-strip.component.d.ts +23 -0
  3. package/color-picker/components/color-picker/color-picker.component.d.ts +24 -0
  4. package/color-picker/components/color-wheel/color-wheel.component.d.ts +53 -0
  5. package/color-picker/components/index.d.ts +5 -0
  6. package/color-picker/components/luminosity-strip/luminosity-strip.component.d.ts +20 -0
  7. package/color-picker/components/slider/slider.component.d.ts +35 -0
  8. package/color-picker/directives/color-picker-value-accessor/color-picker-value-accessor.directive.d.ts +28 -0
  9. package/color-picker/directives/index.d.ts +1 -0
  10. package/color-picker/index.d.ts +5 -0
  11. package/color-picker/interfaces/hs.d.ts +4 -0
  12. package/color-picker/interfaces/hsl-color.d.ts +5 -0
  13. package/color-picker/interfaces/index.d.ts +3 -0
  14. package/color-picker/interfaces/rgb-color.d.ts +5 -0
  15. package/color-picker/types/html-color.d.ts +1 -0
  16. package/color-picker/types/index.d.ts +1 -0
  17. package/container/index.d.ts +1 -0
  18. package/container/src/container/container.component.d.ts +5 -0
  19. package/container/src/container.module.d.ts +8 -0
  20. package/container/src/index.d.ts +2 -0
  21. package/esm2022/color-picker/color-picker.module.mjs +65 -0
  22. package/esm2022/color-picker/components/alpha-strip/alpha-strip.component.mjs +80 -0
  23. package/esm2022/color-picker/components/color-picker/color-picker.component.mjs +60 -0
  24. package/esm2022/color-picker/components/color-wheel/color-wheel.component.mjs +321 -0
  25. package/esm2022/color-picker/components/index.mjs +6 -0
  26. package/esm2022/color-picker/components/luminosity-strip/luminosity-strip.component.mjs +72 -0
  27. package/esm2022/color-picker/components/slider/slider.component.mjs +125 -0
  28. package/esm2022/color-picker/directives/color-picker-value-accessor/color-picker-value-accessor.directive.mjs +130 -0
  29. package/esm2022/color-picker/directives/index.mjs +2 -0
  30. package/esm2022/color-picker/index.mjs +6 -0
  31. package/esm2022/color-picker/interfaces/hs.mjs +2 -0
  32. package/esm2022/color-picker/interfaces/hsl-color.mjs +2 -0
  33. package/esm2022/color-picker/interfaces/index.mjs +4 -0
  34. package/esm2022/color-picker/interfaces/rgb-color.mjs +2 -0
  35. package/esm2022/color-picker/mintplayer-ng-bootstrap-color-picker.mjs +5 -0
  36. package/esm2022/color-picker/types/html-color.mjs +2 -0
  37. package/esm2022/color-picker/types/index.mjs +2 -0
  38. package/esm2022/container/index.mjs +2 -0
  39. package/esm2022/container/mintplayer-ng-bootstrap-container.mjs +5 -0
  40. package/esm2022/container/src/container/container.component.mjs +11 -0
  41. package/esm2022/container/src/container.module.mjs +18 -0
  42. package/esm2022/container/src/index.mjs +3 -0
  43. package/esm2022/grid/src/component/grid.component.mjs +5 -4
  44. package/esm2022/grid/src/grid.module.mjs +5 -4
  45. package/esm2022/navbar/src/navbar/navbar.component.mjs +6 -5
  46. package/esm2022/navbar/src/navbar.module.mjs +6 -2
  47. package/esm2022/sticky-footer/index.mjs +2 -0
  48. package/esm2022/sticky-footer/mintplayer-ng-bootstrap-sticky-footer.mjs +5 -0
  49. package/esm2022/sticky-footer/src/index.mjs +4 -0
  50. package/esm2022/sticky-footer/src/sticky-footer/sticky-footer.component.mjs +29 -0
  51. package/esm2022/sticky-footer/src/sticky-footer-parent/sticky-footer-parent.directive.mjs +16 -0
  52. package/esm2022/sticky-footer/src/sticky-footer.module.mjs +19 -0
  53. package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +819 -0
  54. package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -0
  55. package/fesm2022/mintplayer-ng-bootstrap-container.mjs +33 -0
  56. package/fesm2022/mintplayer-ng-bootstrap-container.mjs.map +1 -0
  57. package/fesm2022/mintplayer-ng-bootstrap-grid.mjs +8 -6
  58. package/fesm2022/mintplayer-ng-bootstrap-grid.mjs.map +1 -1
  59. package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +12 -7
  60. package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
  61. package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs +63 -0
  62. package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs.map +1 -0
  63. package/grid/src/grid.module.d.ts +2 -1
  64. package/navbar/src/navbar.module.d.ts +6 -5
  65. package/package.json +19 -1
  66. package/sticky-footer/index.d.ts +1 -0
  67. package/sticky-footer/src/index.d.ts +3 -0
  68. package/sticky-footer/src/sticky-footer/sticky-footer.component.d.ts +14 -0
  69. package/sticky-footer/src/sticky-footer-parent/sticky-footer-parent.directive.d.ts +6 -0
  70. package/sticky-footer/src/sticky-footer.module.d.ts +9 -0
@@ -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==