@libs-ui/components-color-picker 0.2.25 → 0.2.27

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.
@@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, effect, inject, input, output, sign
2
2
  import { LibsUiComponentsInputsInputComponent } from "@libs-ui/components-inputs-input";
3
3
  import { LibsUiNotificationService } from "@libs-ui/services-notification";
4
4
  import { cssColorToRgba, defaultHelper, hslToRgb, limit, optionsDefault, parseColor, rgbToHex, rgbToHsl, rgbToHsv } from "./utils/picker";
5
+ import { set } from "@libs-ui/utils";
5
6
  import * as i0 from "@angular/core";
6
7
  export class LibsUiComponentsColorPickerComponent {
7
8
  /* PROPERTY */
@@ -22,18 +23,21 @@ export class LibsUiComponentsColorPickerComponent {
22
23
  /* OUTPUT */
23
24
  outColorChange = output();
24
25
  /* VIEW CHILD */
25
- hueEl = viewChild.required('hueEl');
26
- huePointerEl = viewChild.required('huePointerEl');
27
- slEl = viewChild.required('slEl');
28
- slPointerEl = viewChild.required('slPointerEl');
29
- alphaEl = viewChild.required('alphaEl');
30
- alphaPointerEl = viewChild.required('alphaPointerEl');
31
- previewEl = viewChild.required('previewEl');
26
+ hueEl = viewChild('hueEl');
27
+ huePointerEl = viewChild('huePointerEl');
28
+ slEl = viewChild('slEl');
29
+ slPointerEl = viewChild('slPointerEl');
30
+ alphaEl = viewChild('alphaEl');
31
+ alphaPointerEl = viewChild('alphaPointerEl');
32
+ previewEl = viewChild('previewEl');
32
33
  constructor() {
33
34
  effect(() => {
34
- const ctx = this.alphaEl().nativeElement.getContext('2d');
35
+ const ctx = this.alphaEl()?.nativeElement.getContext('2d');
36
+ if (!ctx) {
37
+ return;
38
+ }
35
39
  ctx.clearRect(0, 0, this.options().alphaBarSize[0], this.options().alphaBarSize[1]);
36
- const gradient = ctx.createLinearGradient(0, 0, this.alphaEl().nativeElement.width - 1, 0);
40
+ const gradient = ctx.createLinearGradient(0, 0, this.alphaEl()?.nativeElement.width - 1, 0);
37
41
  gradient.addColorStop(0, `hsla(${this.h()},${this.s()}%,${this.l()}%, 0)`);
38
42
  gradient.addColorStop(1, `hsla(${this.h()},${this.s()}%,${this.l()}%, 1)`);
39
43
  ctx.fillStyle = gradient;
@@ -56,7 +60,7 @@ export class LibsUiComponentsColorPickerComponent {
56
60
  this.handlerColorChange(this.options().format, this.options().color);
57
61
  }
58
62
  setupHueCanvas() {
59
- const canvas = this.hueEl().nativeElement;
63
+ const canvas = this.hueEl()?.nativeElement;
60
64
  canvas.width = this.options().hueBarSize[0];
61
65
  canvas.height = this.options().hueBarSize[1];
62
66
  const ctx = canvas.getContext('2d');
@@ -70,7 +74,7 @@ export class LibsUiComponentsColorPickerComponent {
70
74
  const onMouseMove = (event) => {
71
75
  const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().hueBarSize[0]);
72
76
  const hue = Math.round(x * 360 / this.options().hueBarSize[0]);
73
- this.huePointerEl().nativeElement.style.left = `${x - 7}px`;
77
+ set(this.huePointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
74
78
  this.h.set(hue);
75
79
  this.handlerColorChange('h', hue);
76
80
  };
@@ -85,15 +89,15 @@ export class LibsUiComponentsColorPickerComponent {
85
89
  });
86
90
  }
87
91
  setupSlCanvas() {
88
- const canvas = this.slEl().nativeElement;
92
+ const canvas = this.slEl()?.nativeElement;
89
93
  canvas.width = this.options().slBarSize[0];
90
94
  canvas.height = this.options().slBarSize[1];
91
95
  const onMouseMove = (event) => {
92
96
  const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().slBarSize[0] - 1);
93
97
  const y = limit(event.clientY - canvas.getBoundingClientRect().top, 0, this.options().slBarSize[1] - 1);
94
98
  const c = this.slBarHelper().grabColor(x, y);
95
- this.slPointerEl().nativeElement.style.left = `${x - 7}px`;
96
- this.slPointerEl().nativeElement.style.top = `${y - 7}px`;
99
+ set(this.slPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
100
+ set(this.slPointerEl()?.nativeElement.style, 'top', `${y - 7}px`);
97
101
  this.handlerColorChange('rgb', c);
98
102
  };
99
103
  const onMouseUp = () => {
@@ -107,7 +111,7 @@ export class LibsUiComponentsColorPickerComponent {
107
111
  });
108
112
  }
109
113
  setupSlBarHelper() {
110
- const canvas = this.slEl().nativeElement;
114
+ const canvas = this.slEl()?.nativeElement;
111
115
  const ctx = canvas.getContext('2d');
112
116
  const width = +canvas.width;
113
117
  const height = +canvas.height;
@@ -136,7 +140,7 @@ export class LibsUiComponentsColorPickerComponent {
136
140
  });
137
141
  }
138
142
  setupAlphaCanvas() {
139
- const canvas = this.alphaEl().nativeElement;
143
+ const canvas = this.alphaEl()?.nativeElement;
140
144
  canvas.width = this.options().alphaBarSize[0];
141
145
  canvas.height = this.options().alphaBarSize[1];
142
146
  const ctx = canvas.getContext('2d');
@@ -148,7 +152,7 @@ export class LibsUiComponentsColorPickerComponent {
148
152
  const onMouseMove = (event) => {
149
153
  const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().alphaBarSize[0]);
150
154
  const alpha = +(x / this.options().alphaBarSize[0]).toFixed(2);
151
- this.alphaPointerEl().nativeElement.style.left = `${x - 7}px`;
155
+ set(this.alphaPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
152
156
  this.handlerColorChange('alpha', alpha);
153
157
  };
154
158
  const onMouseUp = () => {
@@ -168,14 +172,14 @@ export class LibsUiComponentsColorPickerComponent {
168
172
  }
169
173
  updatePointerH(h) {
170
174
  const x = this.options().hueBarSize[0] * h / 360;
171
- this.huePointerEl().nativeElement.style.left = `${x - 7}px`;
175
+ set(this.huePointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
172
176
  }
173
177
  updatePointerSl(h, s, l) {
174
178
  const [r, g, b] = hslToRgb(h, s, l);
175
179
  const [x, y] = this.slBarHelper().findColor(r, g, b);
176
180
  if (x >= 0) {
177
- this.slPointerEl().nativeElement.style.left = `${x - 7}px`;
178
- this.slPointerEl().nativeElement.style.top = `${y - 7}px`;
181
+ set(this.slPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
182
+ set(this.slPointerEl()?.nativeElement.style, 'top', `${y - 7}px`);
179
183
  }
180
184
  }
181
185
  updatePointerA(a) {
@@ -183,7 +187,7 @@ export class LibsUiComponentsColorPickerComponent {
183
187
  return;
184
188
  }
185
189
  const x = this.options().alphaBarSize[0] * a;
186
- this.alphaPointerEl().nativeElement.style.left = `${x - 7}px`;
190
+ set(this.alphaPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
187
191
  }
188
192
  updateHex(r, g, b, a) {
189
193
  if (this.options().showAlpha) {
@@ -298,7 +302,7 @@ export class LibsUiComponentsColorPickerComponent {
298
302
  break;
299
303
  }
300
304
  this.updateValuesAndPointer(config);
301
- this.previewEl().nativeElement.style.backgroundColor = this.a() === 1 ? `rgb(${this.r()},${this.g()},${this.b()})` : `rgba(${this.r()},${this.g()},${this.b()},${this.a()})`;
305
+ set(this.previewEl()?.nativeElement.style, 'backgroundColor', this.a() === 1 ? `rgb(${this.r()},${this.g()},${this.b()})` : `rgba(${this.r()},${this.g()},${this.b()},${this.a()})`);
302
306
  if (!silent) {
303
307
  this.outColorChange.emit(this.hex());
304
308
  }
@@ -318,4 +322,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
318
322
  LibsUiComponentsInputsInputComponent
319
323
  ], template: "<div class=\"relative\"\n [style.width.px]=\"options().slBarSize[0]\">\n <div class=\"cursor-pointer\">\n <canvas #slEl\n class=\"rounded-tl-[4px] rounded-tr-[4px] libs-ui-color-picker-background-transparent\"></canvas>\n <div #slPointerEl\n class=\"libs-ui-color-picker-dot\"></div>\n </div>\n <div class=\"relative\">\n <canvas #hueEl\n class=\"libs-ui-color-picker-background-transparent\"\n [class.rounded-bl-[4px]]=\"!options().showAlpha\"\n [class.rounded-br-[4px]]=\"!options().showAlpha\"></canvas>\n <div #huePointerEl\n class=\"libs-ui-color-picker-dot\"></div>\n </div>\n @if (options().showAlpha) {\n <div class=\"relative\">\n <canvas #alphaEl\n class=\"rounded-bl-[4px] rounded-br-[4px] libs-ui-color-picker-background-transparent\">\n </canvas>\n <div #alphaPointerEl\n class=\"libs-ui-color-picker-dot\"></div>\n </div>\n }\n <div class=\"flex items-end\">\n <div class=\"text-center mr-[16px]\">\n <div class=\"libs-ui-color-picker-background-transparent rounded-[4px]\">\n <div #previewEl\n class=\"w-[32px] h-[32px] rounded-[4px] cursor-pointer\"\n (click)=\"handlerCopyColor($event)\"></div>\n </div>\n </div>\n @if (options().showHex) {\n <div class=\"text-center mr-[12px]\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">HEX</span>\n <div class=\"w-[88px]\">\n <libs_ui-components-inputs-input [(value)]=\"hex\"\n [classInclude]=\"'text-center !p-0'\"\n (outChange)=\"handlerValueChange($event, 'hex')\" />\n </div>\n </div>\n }\n <div>\n @if (options().showHsl) {\n <div class=\"flex\">\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">H</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"h\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"360\"\n [classInclude]=\"'text-center !p-0 !rounded-tr-none !rounded-br-none ' + (focus() === 's' ? '!border-r-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'h')\"\n (outChange)=\"handlerValueChange($event, 'h')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">S</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"s\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"100\"\n [classInclude]=\"'text-center !p-0 !rounded-none ' + (focus() === 's' ? '' : '!border-x-transparent')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 's')\"\n (outChange)=\"handlerValueChange($event, 's')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">L</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"l\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"100\"\n [classInclude]=\"'text-center !p-0 !rounded-tl-none !rounded-bl-none ' + (focus() === 's' ? '!border-l-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'l')\"\n (outChange)=\"handlerValueChange($event, 'l')\" />\n </div>\n </div>\n </div>\n }\n @if (options().showRgb) {\n <div class=\"flex\">\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">R</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"r\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"255\"\n [classInclude]=\"'text-center !p-0 !rounded-tr-none !rounded-br-none ' + (focus() === 'g' ? '!border-r-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'r')\"\n (outChange)=\"handlerValueChange($event, 'r')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">G</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"g\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"255\"\n [classInclude]=\"'text-center !p-0 !rounded-none ' + (focus() === 'g' ? '' : '!border-x-transparent')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'g')\"\n (outChange)=\"handlerValueChange($event, 'g')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">B</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"b\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"255\"\n [classInclude]=\"'text-center !p-0 !rounded-tl-none !rounded-bl-none ' + (focus() === 'g' ? '!border-l-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'b')\"\n (outChange)=\"handlerValueChange($event, 'b')\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [".libs-ui-color-picker-background-transparent{background-image:conic-gradient(rgba(0,0,0,.06) 0 25%,transparent 0 50%,rgba(0,0,0,.06) 0 75%,transparent 0);background-size:11px 11px}.libs-ui-color-picker-dot{position:absolute;width:14px;height:14px;top:3px;left:0;background:transparent;border:1px solid #ffffff;pointer-events:none;border-radius:50px;z-index:1;box-shadow:0 1px 2px #000000bf}\n"] }]
320
324
  }], ctorParameters: () => [] });
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9jb2xvci1waWNrZXIvc3JjL2NvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvY29sb3ItcGlja2VyL3NyYy9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEosT0FBTyxFQUFzQixvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQWExSSxNQUFNLE9BQU8sb0NBQW9DO0lBRS9DLGNBQWM7SUFDSixPQUFPLEdBQUcsTUFBTSxDQUFpQixjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELEtBQUssR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLEdBQUcsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQyxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxHQUFHLE1BQU0sQ0FBUyxD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QUNOLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMxRSxNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMxRSxNQUFNO1lBQ1IsS0FBSyxHQUFHO2dCQUNOLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMxRSxNQUFNO1lBQ1IsS0FBSyxLQUFLO2dCQUNSLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFFLEtBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUUsS0FBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBRSxLQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNsQyxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFFLEtBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUUsS0FBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJ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QyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUM3SyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVTLG1CQUFtQixDQUFDLEtBQXlCLEVBQUUsR0FBVztRQUNsRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRVMsa0JBQWtCLENBQUMsS0FBc0IsRUFBRSxHQUFXO1FBQzlELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQzt3R0FuV1Usb0NBQW9DOzRGQUFwQyxvQ0FBb0Msa2hDQ2pCakQsZ29MQStIQSxrY0RqSEksb0NBQW9DOzs0RkFHM0Isb0NBQW9DO2tCQVhoRCxTQUFTOytCQUVFLGlDQUFpQyxjQUcvQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1Asb0NBQW9DO3FCQUNyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElGb2N1c0FuZEJsdXJFdmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c0lucHV0Q29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWlucHV0XCI7XG5pbXBvcnQgeyBMaWJzVWlOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBsaWJzLXVpL3NlcnZpY2VzLW5vdGlmaWNhdGlvblwiO1xuaW1wb3J0IHsgSUNhbnZhc0hlbHBlciwgSUNvbmZpZ1VwZGF0ZSwgSVBpY2tlckN1c3RvbU9wdGlvbnMsIElQaWNrZXJPcHRpb25zIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9waWNrZXIuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBjc3NDb2xvclRvUmdiYSwgZGVmYXVsdEhlbHBlciwgaHNsVG9SZ2IsIGxpbWl0LCBvcHRpb25zRGVmYXVsdCwgcGFyc2VDb2xvciwgcmdiVG9IZXgsIHJnYlRvSHNsLCByZ2JUb0hzdiB9IGZyb20gXCIuL3V0aWxzL3BpY2tlclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtY29sb3JfcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb2xvci1waWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNDb2xvclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgLyogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIG9wdGlvbnMgPSBzaWduYWw8SVBpY2tlck9wdGlvbnM+KG9wdGlvbnNEZWZhdWx0KCkpO1xuICBwcm90ZWN0ZWQgZm9jdXMgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgaGV4ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgcyA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgaCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgciA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgZyA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgYiA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgYSA9IHNpZ25hbDxudW1iZXI+KDEpO1xuXG4gIHByaXZhdGUgc2xCYXJIZWxwZXIgPSBzaWduYWw8SUNhbnZhc0hlbHBlcj4oZGVmYXVsdEhlbHBlcigpKTtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KExpYnNVaU5vdGlmaWNhdGlvblNlcnZpY2UpO1xuXG4gIC8qIElOUFVUICovXG4gIHJlYWRvbmx5IGN1c3RvbU9wdGlvbnMgPSBpbnB1dDxJUGlja2VyQ3VzdG9tT3B0aW9ucz4oKTtcblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0Q29sb3JDaGFuZ2UgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBodWVFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaHVlRWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBodWVQb2ludGVyRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2h1ZVBvaW50ZXJFbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNsRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ3NsRWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzbFBvaW50ZXJFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignc2xQb2ludGVyRWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbHBoYUVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdhbHBoYUVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxwaGFQb2ludGVyRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2FscGhhUG9pbnRlckVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJldmlld0VsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdwcmV2aWV3RWwnKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY3R4ID0gdGhpcy5hbHBoYUVsKCkubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMub3B0aW9ucygpLmFscGhhQmFyU2l6ZVswXSwgdGhpcy5vcHRpb25zKCkuYWxwaGFCYXJTaXplWzFdKTtcbiAgICAgIGNvbnN0IGdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIHRoaXMuYWxwaGFFbCgpLm5hdGl2ZUVsZW1lbnQud2lkdGggLSAxLCAwKTtcblxuICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsIGBoc2xhKCR7dGhpcy5oKCl9LCR7dGhpcy5zKCl9JSwke3RoaXMubCgpfSUsIDApYCk7XG4gICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMSwgYGhzbGEoJHt0aGlzLmgoKX0sJHt0aGlzLnMoKX0lLCR7dGhpcy5sKCl9JSwgMSlgKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBncmFkaWVudDtcbiAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLm9wdGlvbnMoKS5hbHBoYUJhclNpemVbMF0sIHRoaXMub3B0aW9ucygpLmFscGhhQmFyU2l6ZVsxXSk7XG4gICAgfSlcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXN0b21PcHRpb25zKCkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy51cGRhdGUob3B0aW9ucyA9PiAoeyAuLi5vcHRpb25zLCAuLi50aGlzLmN1c3RvbU9wdGlvbnMoKSB9KSlcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXR1cEh1ZUNhbnZhcygpO1xuICAgIHRoaXMuc2V0dXBTbENhbnZhcygpO1xuICAgIHRoaXMuc2V0dXBTbEJhckhlbHBlcigpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMoKS5zaG93QWxwaGEpIHtcbiAgICAgIHRoaXMuc2V0dXBBbHBoYUNhbnZhcygpO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZXJDb2xvckNoYW5nZSh0aGlzLm9wdGlvbnMoKS5mb3JtYXQsIHRoaXMub3B0aW9ucygpLmNvbG9yKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBIdWVDYW52YXMoKSB7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5odWVFbCgpLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjYW52YXMud2lkdGggPSB0aGlzLm9wdGlvbnMoKS5odWVCYXJTaXplWzBdO1xuICAgIGNhbnZhcy5oZWlnaHQgPSB0aGlzLm9wdGlvbnMoKS5odWVCYXJTaXplWzFdO1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnN0IGdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIHRoaXMub3B0aW9ucygpLmh1ZUJhclNpemVbMF0sIDApO1xuICAgIGNvbnN0IHN0ZXAgPSAxIC8gMzYwO1xuXG4gICAgZm9yIChsZXQgaWkgPSAwOyBpaSA8PSAxOyBpaSArPSBzdGVwKSB7XG4gICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoaWksIGBoc2woJHszNjAgKiBpaX0sIDEwMCUsIDUwJSlgKTtcbiAgICB9XG4gICAgY3R4LmZpbGxTdHlsZSA9IGdyYWRpZW50O1xuICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLm9wdGlvbnMoKS5odWVCYXJTaXplWzBdLCB0aGlzLm9wdGlvbnMoKS5odWVCYXJTaXplWzFdKTtcbiAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeCA9IGxpbWl0KGV2ZW50LmNsaWVudFggLSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCwgMCwgdGhpcy5vcHRpb25zKCkuaHVlQmFyU2l6ZVswXSk7XG4gICAgICBjb25zdCBodWUgPSBNYXRoLnJvdW5kKHggKiAzNjAgLyB0aGlzLm9wdGlvbnMoKS5odWVCYXJTaXplWzBdKTtcblxuICAgICAgdGhpcy5odWVQb2ludGVyRWwoKS5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHt4IC0gN31weGA7XG4gICAgICB0aGlzLmguc2V0KGh1ZSk7XG4gICAgICB0aGlzLmhhbmRsZXJDb2xvckNoYW5nZSgnaCcsIGh1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICB9O1xuXG4gICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgb25Nb3VzZU1vdmUoZXZlbnQpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwU2xDYW52YXMoKSB7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5zbEVsKCkubmF0aXZlRWxlbWVudDtcblxuICAgIGNhbnZhcy53aWR0aCA9IHRoaXMub3B0aW9ucygpLnNsQmFyU2l6ZVswXTtcbiAgICBjYW52YXMuaGVpZ2h0ID0gdGhpcy5vcHRpb25zKCkuc2xCYXJTaXplWzFdO1xuICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB4ID0gbGltaXQoZXZlbnQuY2xpZW50WCAtIGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LCAwLCB0aGlzLm9wdGlvbnMoKS5zbEJhclNpemVbMF0gLSAxKTtcbiAgICAgIGNvbnN0IHkgPSBsaW1pdChldmVudC5jbGllbnRZIC0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCwgMCwgdGhpcy5vcHRpb25zKCkuc2xCYXJTaXplWzFdIC0gMSk7XG4gICAgICBjb25zdCBjID0gdGhpcy5zbEJhckhlbHBlcigpLmdyYWJDb2xvcih4LCB5KTtcblxuICAgICAgdGhpcy5zbFBvaW50ZXJFbCgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3ggLSA3fXB4YDtcbiAgICAgIHRoaXMuc2xQb2ludGVyRWwoKS5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IGAke3kgLSA3fXB4YDtcbiAgICAgIHRoaXMuaGFuZGxlckNvbG9yQ2hhbmdlKCdyZ2InLCBjKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBvbk1vdXNlTW92ZShldmVudCk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBTbEJhckhlbHBlcigpIHtcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNsRWwoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnN0IHdpZHRoID0gK2NhbnZhcy53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSArY2FudmFzLmhlaWdodDtcbiAgICBjb25zdCB3aGl0ZUJsYWNrR3JhZGllbnQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMSwgMSwgMSwgaGVpZ2h0IC0gMSk7XG5cbiAgICB3aGl0ZUJsYWNrR3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICd3aGl0ZScpO1xuICAgIHdoaXRlQmxhY2tHcmFkaWVudC5hZGRDb2xvclN0b3AoMSwgJ2JsYWNrJyk7XG5cbiAgICB0aGlzLnNsQmFySGVscGVyLnNldCh7XG4gICAgICBzZXRIdWU6IChodWU6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBjb2xvckdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDEsIDAsIHdpZHRoIC0gMSwgMCk7XG4gICAgICAgIGNvbG9yR3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsIGBoc2xhKCR7aHVlfSwgMTAwJSwgNTAlLCAwKWApO1xuICAgICAgICBjb2xvckdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCBgaHNsYSgke2h1ZX0sIDEwMCUsIDUwJSwgMSlgKTtcblxuICAgICAgICBjdHguZmlsbFN0eWxlID0gd2hpdGVCbGFja0dyYWRpZW50O1xuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvckdyYWRpZW50O1xuICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgIH0sXG4gICAgICBncmFiQ29sb3I6ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gY3R4LmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhLFxuICAgICAgZmluZENvbG9yOiAocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBbLCBzLCB2XSA9IHJnYlRvSHN2KHIsIGcsIGIpO1xuICAgICAgICBjb25zdCB4ID0gcyAqIHdpZHRoO1xuICAgICAgICBjb25zdCB5ID0gaGVpZ2h0IC0gKHYgKiBoZWlnaHQpO1xuXG4gICAgICAgIHJldHVybiBbeCwgeV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQWxwaGFDYW52YXMoKSB7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5hbHBoYUVsKCkubmF0aXZlRWxlbWVudDtcblxuICAgIGNhbnZhcy53aWR0aCA9IHRoaXMub3B0aW9ucygpLmFscGhhQmFyU2l6ZVswXTtcbiAgICBjYW52YXMuaGVpZ2h0ID0gdGhpcy5vcHRpb25zKCkuYWxwaGFCYXJTaXplWzFdO1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnN0IGdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIGNhbnZhcy53aWR0aCAtIDEsIDApO1xuXG4gICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsIGBoc2xhKCR7dGhpcy5oKCl9LCR7dGhpcy5zKCl9JSwke3RoaXMubCgpfSUsIDApYCk7XG4gICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsIGBoc2xhKCR7dGhpcy5oKCl9LCR7dGhpcy5zKCl9JSwke3RoaXMubCgpfSUsIDEpYCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IGdyYWRpZW50O1xuICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLm9wdGlvbnMoKS5hbHBoYUJhclNpemVbMF0sIHRoaXMub3B0aW9ucygpLmFscGhhQmFyU2l6ZVsxXSk7XG4gICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHggPSBsaW1pdChldmVudC5jbGllbnRYIC0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsIDAsIHRoaXMub3B0aW9ucygpLmFscGhhQmFyU2l6ZVswXSk7XG4gICAgICBjb25zdCBhbHBoYSA9ICsoeCAvIHRoaXMub3B0aW9ucygpLmFscGhhQmFyU2l6ZVswXSkudG9GaXhlZCgyKTtcblxuICAgICAgdGhpcy5hbHBoYVBvaW50ZXJFbCgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3ggLSA3fXB4YDtcbiAgICAgIHRoaXMuaGFuZGxlckNvbG9yQ2hhbmdlKCdhbHBoYScsIGFscGhhKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBvbk1vdXNlTW92ZShldmVudCk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ29weUNvbG9yKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHdpbmRvdy5uYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmhleCgpKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0NvbXBUeXBlVGV4dFN1Y2Nlc3MoJ2kxOG5fY29weV9zdWNjZXNzZnVsbHknKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9pbnRlckgoaDogbnVtYmVyKSB7XG4gICAgY29uc3QgeCA9IHRoaXMub3B0aW9ucygpLmh1ZUJhclNpemVbMF0gKiBoIC8gMzYwO1xuXG4gICAgdGhpcy5odWVQb2ludGVyRWwoKS5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHt4IC0gN31weGA7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBvaW50ZXJTbChoOiBudW1iZXIsIHM6IG51bWJlciwgbDogbnVtYmVyKSB7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gaHNsVG9SZ2IoaCwgcywgbCk7XG4gICAgY29uc3QgW3gsIHldID0gdGhpcy5zbEJhckhlbHBlcigpLmZpbmRDb2xvcihyLCBnLCBiKSBhcyBBcnJheTxudW1iZXI+O1xuXG4gICAgaWYgKHggPj0gMCkge1xuICAgICAgdGhpcy5zbFBvaW50ZXJFbCgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3ggLSA3fXB4YDtcbiAgICAgIHRoaXMuc2xQb2ludGVyRWwoKS5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IGAke3kgLSA3fXB4YDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBvaW50ZXJBKGE6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5vcHRpb25zKCkuc2hvd0FscGhhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHggPSB0aGlzLm9wdGlvbnMoKS5hbHBoYUJhclNpemVbMF0gKiBhO1xuXG4gICAgdGhpcy5hbHBoYVBvaW50ZXJFbCgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3ggLSA3fXB4YDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSGV4KHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIsIGE6IG51bWJlcikge1xuICAgIGlmICh0aGlzLm9wdGlvbnMoKS5zaG93QWxwaGEpIHtcbiAgICAgIHRoaXMuaGV4LnNldChwYXJzZUNvbG9yKFtyLCBnLCBiLCBhXSwgJ2hleGNzczQnKSBhcyBzdHJpbmcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGV4LnNldChyZ2JUb0hleChyLCBnLCBiKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJnYigpIHtcbiAgICBjb25zdCByZ2IgPSBoc2xUb1JnYih0aGlzLmgoKSwgdGhpcy5zKCksIHRoaXMubCgpKTtcblxuICAgIHRoaXMuci5zZXQocmdiWzBdKTtcbiAgICB0aGlzLmcuc2V0KHJnYlsxXSk7XG4gICAgdGhpcy5iLnNldChyZ2JbMl0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVIc2woKSB7XG4gICAgY29uc3QgaHNsID0gcmdiVG9Ic2wodGhpcy5yKCksIHRoaXMuZygpLCB0aGlzLmIoKSk7XG5cbiAgICB0aGlzLmguc2V0KGhzbFswXSk7XG4gICAgdGhpcy5zLnNldChoc2xbMV0pO1xuICAgIHRoaXMubC5zZXQoaHNsWzJdKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVzQW5kUG9pbnRlcihjb25maWc6IElDb25maWdVcGRhdGUpIHtcbiAgICBpZiAoY29uZmlnLnJnYikge1xuICAgICAgdGhpcy51cGRhdGVSZ2IoKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5oc2wpIHtcbiAgICAgIHRoaXMudXBkYXRlSHNsKCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuaHVlKSB7XG4gICAgICB0aGlzLnNsQmFySGVscGVyKCkuc2V0SHVlKHRoaXMuaCgpKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5oUG9pbnQpIHtcbiAgICAgIHRoaXMudXBkYXRlUG9pbnRlckgodGhpcy5oKCkpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnNsUG9pbnQpIHtcbiAgICAgIHRoaXMudXBkYXRlUG9pbnRlclNsKHRoaXMuaCgpLCB0aGlzLnMoKSwgdGhpcy5sKCkpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmhleCkge1xuICAgICAgdGhpcy51cGRhdGVIZXgodGhpcy5yKCksIHRoaXMuZygpLCB0aGlzLmIoKSwgdGhpcy5hKCkpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmFQb2ludCkge1xuICAgICAgdGhpcy51cGRhdGVQb2ludGVyQSh0aGlzLmEoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyQ29sb3JDaGFuZ2Uoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBBcnJheTxudW1iZXI+LCBzaWxlbnQgPSBmYWxzZSkge1xuICAgIGxldCBjb25maWc6IElDb25maWdVcGRhdGUgPSB7fTtcblxuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICdoJzpcbiAgICAgICAgY29uZmlnID0geyBoUG9pbnQ6IHRydWUsIGhleDogdHJ1ZSwgcmdiOiB0cnVlLCBodWU6IHRydWUgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzJzpcbiAgICAgICAgY29uZmlnID0geyBzbFBvaW50OiB0cnVlLCBoZXg6IHRydWUsIHJnYjogdHJ1ZSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2wnOlxuICAgICAgICBjb25maWcgPSB7IHNsUG9pbnQ6IHRydWUsIGhleDogdHJ1ZSwgcmdiOiB0cnVlIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncic6XG4gICAgICAgIGNvbmZpZyA9IHsgaFBvaW50OiB0cnVlLCBzbFBvaW50OiB0cnVlLCBoZXg6IHRydWUsIGhzbDogdHJ1ZSwgaHVlOiB0cnVlIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZyc6XG4gICAgICAgIGNvbmZpZyA9IHsgaFBvaW50OiB0cnVlLCBzbFBvaW50OiB0cnVlLCBoZXg6IHRydWUsIGhzbDogdHJ1ZSwgaHVlOiB0cnVlIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYic6XG4gICAgICAgIGNvbmZpZyA9IHsgaFBvaW50OiB0cnVlLCBzbFBvaW50OiB0cnVlLCBoZXg6IHRydWUsIGhzbDogdHJ1ZSwgaHVlOiB0cnVlIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmdiJzpcbiAgICAgICAgdGhpcy5yLnNldCgodmFsdWUgYXMgQXJyYXk8bnVtYmVyPilbMF0pO1xuICAgICAgICB0aGlzLmcuc2V0KCh2YWx1ZSBhcyBBcnJheTxudW1iZXI+KVsxXSk7XG4gICAgICAgIHRoaXMuYi5zZXQoKHZhbHVlIGFzIEFycmF5PG51bWJlcj4pWzJdKTtcbiAgICAgICAgY29uZmlnID0geyBoZXg6IHRydWUsIGhzbDogdHJ1ZSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JnYmEnOlxuICAgICAgICB0aGlzLnIuc2V0KCh2YWx1ZSBhcyBBcnJheTxudW1iZXI+KVswXSk7XG4gICAgICAgIHRoaXMuZy5zZXQoKHZhbHVlIGFzIEFycmF5PG51bWJlcj4pWzFdKTtcbiAgICAgICAgdGhpcy5iLnNldCgodmFsdWUgYXMgQXJyYXk8bnVtYmVyPilbMl0pO1xuICAgICAgICB0aGlzLmEuc2V0KCh2YWx1ZSBhcyBBcnJheTxudW1iZXI+KVszXSk7XG4gICAgICAgIGNvbmZpZyA9IHsgaFBvaW50OiB0cnVlLCBzbFBvaW50OiB0cnVlLCBoZXg6IHRydWUsIGFQb2ludDogdHJ1ZSwgaHNsOiB0cnVlLCBodWU6IHRydWUgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoc2wnOlxuICAgICAgICB0aGlzLmguc2V0KCh2YWx1ZSBhcyBBcnJheTxudW1iZXI+KVswXSk7XG4gICAgICAgIHRoaXMucy5zZXQoKHZhbHVlIGFzIEFycmF5PG51bWJlcj4pWzFdKTtcbiAgICAgICAgdGhpcy5sLnNldCgodmFsdWUgYXMgQXJyYXk8bnVtYmVyPilbMl0pO1xuICAgICAgICBjb25maWcgPSB7IGhQb2ludDogdHJ1ZSwgc2xQb2ludDogdHJ1ZSwgaGV4OiB0cnVlLCBhUG9pbnQ6IHRydWUsIHJnYjogdHJ1ZSwgaHVlOiB0cnVlIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaHNsYSc6XG4gICAgICAgIHRoaXMuaC5zZXQoKHZhbHVlIGFzIEFycmF5PG51bWJlcj4pWzBdKTtcbiAgICAgICAgdGhpcy5zLnNldCgodmFsdWUgYXMgQXJyYXk8bnVtYmVyPilbMV0pO1xuICAgICAgICB0aGlzLmwuc2V0KCh2YWx1ZSBhcyBBcnJheTxudW1iZXI+KVsyXSk7XG4gICAgICAgIHRoaXMuYS5zZXQoKHZhbHVlIGFzIEFycmF5PG51bWJlcj4pWzNdKTtcbiAgICAgICAgY29uZmlnID0geyBoUG9pbnQ6IHRydWUsIHNsUG9pbnQ6IHRydWUsIGhleDogdHJ1ZSwgYVBvaW50OiB0cnVlLCByZ2I6IHRydWUsIGh1ZTogdHJ1ZSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hleCc6IHtcbiAgICAgICAgY29uc3QgcmdiYSA9IGNzc0NvbG9yVG9SZ2JhKHZhbHVlIGFzIHN0cmluZykgfHwgW3RoaXMucigpLCB0aGlzLmcoKSwgdGhpcy5iKCksIHRoaXMuYSgpXTtcblxuICAgICAgICB0aGlzLnIuc2V0KHJnYmFbMF0pO1xuICAgICAgICB0aGlzLmcuc2V0KHJnYmFbMV0pO1xuICAgICAgICB0aGlzLmIuc2V0KHJnYmFbMl0pO1xuICAgICAgICB0aGlzLmEuc2V0KHJnYmFbM10pO1xuICAgICAgICBjb25maWcgPSB7IGhQb2ludDogdHJ1ZSwgc2xQb2ludDogdHJ1ZSwgYVBvaW50OiB0cnVlLCBoc2w6IHRydWUsIGh1ZTogdHJ1ZSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbG9yJzoge1xuICAgICAgICBjb25zdCByZ2JhID0gKHBhcnNlQ29sb3IodmFsdWUgYXMgc3RyaW5nIHwgQXJyYXk8bnVtYmVyPiwgJ3JnYmEnKSB8fCBbMCwgMCwgMCwgMV0pIGFzIEFycmF5PG51bWJlcj47XG5cbiAgICAgICAgdGhpcy5yLnNldChyZ2JhWzBdKTtcbiAgICAgICAgdGhpcy5nLnNldChyZ2JhWzFdKTtcbiAgICAgICAgdGhpcy5iLnNldChyZ2JhWzJdKTtcbiAgICAgICAgdGhpcy5hLnNldChyZ2JhWzNdKTtcbiAgICAgICAgY29uZmlnID0geyBoUG9pbnQ6IHRydWUsIHNsUG9pbnQ6IHRydWUsIGhleDogdHJ1ZSwgYVBvaW50OiB0cnVlLCBoc2w6IHRydWUsIGh1ZTogdHJ1ZSB9O1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnYWxwaGEnOlxuICAgICAgICB0aGlzLmEuc2V0KHZhbHVlIGFzIG51bWJlcik7XG4gICAgICAgIHRoaXMudXBkYXRlSGV4KHRoaXMucigpLCB0aGlzLmcoKSwgdGhpcy5iKCksIHRoaXMuYSgpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVmFsdWVzQW5kUG9pbnRlcihjb25maWcpO1xuICAgIHRoaXMucHJldmlld0VsKCkubmF0aXZlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmEoKSA9PT0gMSA/IGByZ2IoJHt0aGlzLnIoKX0sJHt0aGlzLmcoKX0sJHt0aGlzLmIoKX0pYCA6IGByZ2JhKCR7dGhpcy5yKCl9LCR7dGhpcy5nKCl9LCR7dGhpcy5iKCl9LCR7dGhpcy5hKCl9KWA7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMub3V0Q29sb3JDaGFuZ2UuZW1pdCh0aGlzLmhleCgpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZvY3VzQW5kQmx1cihldmVudDogSUZvY3VzQW5kQmx1ckV2ZW50LCBrZXk6IHN0cmluZykge1xuICAgIHRoaXMuZm9jdXMuc2V0KGV2ZW50Lm5hbWUgPT09ICdibHVyJyA/IHVuZGVmaW5lZCA6IGtleSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclZhbHVlQ2hhbmdlKGV2ZW50OiBzdHJpbmcgfCBudW1iZXIsIGtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5oYW5kbGVyQ29sb3JDaGFuZ2Uoa2V5LCBldmVudCk7XG4gIH1cblxufSIsIjxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gIFtzdHlsZS53aWR0aC5weF09XCJvcHRpb25zKCkuc2xCYXJTaXplWzBdXCI+XG4gIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxuICAgIDxjYW52YXMgI3NsRWxcbiAgICAgIGNsYXNzPVwicm91bmRlZC10bC1bNHB4XSByb3VuZGVkLXRyLVs0cHhdIGxpYnMtdWktY29sb3ItcGlja2VyLWJhY2tncm91bmQtdHJhbnNwYXJlbnRcIj48L2NhbnZhcz5cbiAgICA8ZGl2ICNzbFBvaW50ZXJFbFxuICAgICAgY2xhc3M9XCJsaWJzLXVpLWNvbG9yLXBpY2tlci1kb3RcIj48L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgIDxjYW52YXMgI2h1ZUVsXG4gICAgICBjbGFzcz1cImxpYnMtdWktY29sb3ItcGlja2VyLWJhY2tncm91bmQtdHJhbnNwYXJlbnRcIlxuICAgICAgW2NsYXNzLnJvdW5kZWQtYmwtWzRweF1dPVwiIW9wdGlvbnMoKS5zaG93QWxwaGFcIlxuICAgICAgW2NsYXNzLnJvdW5kZWQtYnItWzRweF1dPVwiIW9wdGlvbnMoKS5zaG93QWxwaGFcIj48L2NhbnZhcz5cbiAgICA8ZGl2ICNodWVQb2ludGVyRWxcbiAgICAgIGNsYXNzPVwibGlicy11aS1jb2xvci1waWNrZXItZG90XCI+PC9kaXY+XG4gIDwvZGl2PlxuICBAaWYgKG9wdGlvbnMoKS5zaG93QWxwaGEpIHtcbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgIDxjYW52YXMgI2FscGhhRWxcbiAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWJsLVs0cHhdIHJvdW5kZWQtYnItWzRweF0gbGlicy11aS1jb2xvci1waWNrZXItYmFja2dyb3VuZC10cmFuc3BhcmVudFwiPlxuICAgICAgPC9jYW52YXM+XG4gICAgICA8ZGl2ICNhbHBoYVBvaW50ZXJFbFxuICAgICAgICBjbGFzcz1cImxpYnMtdWktY29sb3ItcGlja2VyLWRvdFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWVuZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtci1bMTZweF1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbG9yLXBpY2tlci1iYWNrZ3JvdW5kLXRyYW5zcGFyZW50IHJvdW5kZWQtWzRweF1cIj5cbiAgICAgICAgPGRpdiAjcHJldmlld0VsXG4gICAgICAgICAgY2xhc3M9XCJ3LVszMnB4XSBoLVszMnB4XSByb3VuZGVkLVs0cHhdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNvcHlDb2xvcigkZXZlbnQpXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBAaWYgKG9wdGlvbnMoKS5zaG93SGV4KSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXItWzEycHhdXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWg3ciB0ZXh0LVsjNmE3MzgzXVwiPkhFWDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctWzg4cHhdXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXQgWyh2YWx1ZSldPVwiaGV4XCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3RleHQtY2VudGVyICFwLTAnXCJcbiAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlclZhbHVlQ2hhbmdlKCRldmVudCwgJ2hleCcpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdj5cbiAgICAgIEBpZiAob3B0aW9ucygpLnNob3dIc2wpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWg3ciB0ZXh0LVsjNmE3MzgzXVwiPkg8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bNTZweF1cIj5cbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXQgWyh2YWx1ZSldPVwiaFwiXG4gICAgICAgICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiMFwiXG4gICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjM2MFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIndGV4dC1jZW50ZXIgIXAtMCAhcm91bmRlZC10ci1ub25lICFyb3VuZGVkLWJyLW5vbmUgJyArIChmb2N1cygpID09PSAncycgPyAnIWJvcmRlci1yLXRyYW5zcGFyZW50JyA6ICcnKVwiXG4gICAgICAgICAgICAgICAgKG91dEZvY3VzQW5kQmx1ckV2ZW50KT1cImhhbmRsZXJGb2N1c0FuZEJsdXIoJGV2ZW50LCAnaCcpXCJcbiAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJWYWx1ZUNoYW5nZSgkZXZlbnQsICdoJylcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oN3IgdGV4dC1bIzZhNzM4M11cIj5TPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctWzU2cHhdXCI+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0IFsodmFsdWUpXT1cInNcIlxuICAgICAgICAgICAgICAgIFtkYXRhVHlwZV09XCInaW50J1wiXG4gICAgICAgICAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCIxMDBcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3RleHQtY2VudGVyICFwLTAgIXJvdW5kZWQtbm9uZSAnICsgKGZvY3VzKCkgPT09ICdzJyA/ICcnIDogJyFib3JkZXIteC10cmFuc3BhcmVudCcpXCJcbiAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1cigkZXZlbnQsICdzJylcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlclZhbHVlQ2hhbmdlKCRldmVudCwgJ3MnKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWg3ciB0ZXh0LVsjNmE3MzgzXVwiPkw8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bNTZweF1cIj5cbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXQgWyh2YWx1ZSldPVwibFwiXG4gICAgICAgICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiMFwiXG4gICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIndGV4dC1jZW50ZXIgIXAtMCAhcm91bmRlZC10bC1ub25lICFyb3VuZGVkLWJsLW5vbmUgJyArIChmb2N1cygpID09PSAncycgPyAnIWJvcmRlci1sLXRyYW5zcGFyZW50JyA6ICcnKVwiXG4gICAgICAgICAgICAgICAgKG91dEZvY3VzQW5kQmx1ckV2ZW50KT1cImhhbmRsZXJGb2N1c0FuZEJsdXIoJGV2ZW50LCAnbCcpXCJcbiAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJWYWx1ZUNoYW5nZSgkZXZlbnQsICdsJylcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChvcHRpb25zKCkuc2hvd1JnYikge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDdyIHRleHQtWyM2YTczODNdXCI+Ujwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVs1NnB4XVwiPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dCBbKHZhbHVlKV09XCJyXCJcbiAgICAgICAgICAgICAgICBbZGF0YVR5cGVdPVwiJ2ludCdcIlxuICAgICAgICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIwXCJcbiAgICAgICAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwiMjU1XCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIid0ZXh0LWNlbnRlciAhcC0wICFyb3VuZGVkLXRyLW5vbmUgIXJvdW5kZWQtYnItbm9uZSAnICsgKGZvY3VzKCkgPT09ICdnJyA/ICchYm9yZGVyLXItdHJhbnNwYXJlbnQnIDogJycpXCJcbiAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1cigkZXZlbnQsICdyJylcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlclZhbHVlQ2hhbmdlKCRldmVudCwgJ3InKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWg3ciB0ZXh0LVsjNmE3MzgzXVwiPkc8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bNTZweF1cIj5cbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXQgWyh2YWx1ZSldPVwiZ1wiXG4gICAgICAgICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiMFwiXG4gICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjI1NVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIndGV4dC1jZW50ZXIgIXAtMCAhcm91bmRlZC1ub25lICcgKyAoZm9jdXMoKSA9PT0gJ2cnID8gJycgOiAnIWJvcmRlci14LXRyYW5zcGFyZW50JylcIlxuICAgICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyKCRldmVudCwgJ2cnKVwiXG4gICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyVmFsdWVDaGFuZ2UoJGV2ZW50LCAnZycpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDdyIHRleHQtWyM2YTczODNdXCI+Qjwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVs1NnB4XVwiPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dCBbKHZhbHVlKV09XCJiXCJcbiAgICAgICAgICAgICAgICBbZGF0YVR5cGVdPVwiJ2ludCdcIlxuICAgICAgICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIwXCJcbiAgICAgICAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwiMjU1XCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIid0ZXh0LWNlbnRlciAhcC0wICFyb3VuZGVkLXRsLW5vbmUgIXJvdW5kZWQtYmwtbm9uZSAnICsgKGZvY3VzKCkgPT09ICdnJyA/ICchYm9yZGVyLWwtdHJhbnNwYXJlbnQnIDogJycpXCJcbiAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1cigkZXZlbnQsICdiJylcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlclZhbHVlQ2hhbmdlKCRldmVudCwgJ2InKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9jb2xvci1waWNrZXIvc3JjL2NvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvY29sb3ItcGlja2VyL3NyYy9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEosT0FBTyxFQUFzQixvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFJLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFhckMsTUFBTSxPQUFPLG9DQUFvQztJQUUvQyxjQUFjO0lBQ0osT0FBTyxHQUFHLE1BQU0sQ0FBaUIsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNuRCxLQUFLLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUM5QyxHQUFHLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUMsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDLEdBQUcsTUFBTSxDQUFT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Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUZvY3VzQW5kQmx1ckV2ZW50LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzSW5wdXRDb21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtaW5wdXRcIjtcbmltcG9ydCB7IExpYnNVaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tIFwiQGxpYnMtdWkvc2VydmljZXMtbm90aWZpY2F0aW9uXCI7XG5pbXBvcnQgeyBJQ2FudmFzSGVscGVyLCBJQ29uZmlnVXBkYXRlLCBJUGlja2VyQ3VzdG9tT3B0aW9ucywgSVBpY2tlck9wdGlvbnMgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3BpY2tlci5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IGNzc0NvbG9yVG9SZ2JhLCBkZWZhdWx0SGVscGVyLCBoc2xUb1JnYiwgbGltaXQsIG9wdGlvbnNEZWZhdWx0LCBwYXJzZUNvbG9yLCByZ2JUb0hleCwgcmdiVG9Ic2wsIHJnYlRvSHN2IH0gZnJvbSBcIi4vdXRpbHMvcGlja2VyXCI7XG5pbXBvcnQgeyBzZXQgfSBmcm9tIFwiQGxpYnMtdWkvdXRpbHNcIjtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWNvbG9yX3BpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY29sb3ItcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzSW5wdXRDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzQ29sb3JQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXG4gIC8qIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCBvcHRpb25zID0gc2lnbmFsPElQaWNrZXJPcHRpb25zPihvcHRpb25zRGVmYXVsdCgpKTtcbiAgcHJvdGVjdGVkIGZvY3VzID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGhleCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIHMgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIGggPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIGwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIHIgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIGcgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIGIgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIGEgPSBzaWduYWw8bnVtYmVyPigxKTtcblxuICBwcml2YXRlIHNsQmFySGVscGVyID0gc2lnbmFsPElDYW52YXNIZWxwZXI+KGRlZmF1bHRIZWxwZXIoKSk7XG4gIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZSA9IGluamVjdChMaWJzVWlOb3RpZmljYXRpb25TZXJ2aWNlKTtcblxuICAvKiBJTlBVVCAqL1xuICByZWFkb25seSBjdXN0b21PcHRpb25zID0gaW5wdXQ8SVBpY2tlckN1c3RvbU9wdGlvbnM+KCk7XG5cbiAgLyogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dENvbG9yQ2hhbmdlID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaHVlRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2h1ZUVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHVlUG9pbnRlckVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdodWVQb2ludGVyRWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzbEVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdzbEVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2xQb2ludGVyRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3NsUG9pbnRlckVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxwaGFFbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignYWxwaGFFbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFscGhhUG9pbnRlckVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdhbHBoYVBvaW50ZXJFbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IHByZXZpZXdFbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigncHJldmlld0VsJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuYWxwaGFFbCgpPy5uYXRpdmVFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAgIGlmICghY3R4KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5vcHRpb25zKCkuYWxwaGFCYXJTaXplWzBdLCB0aGlzLm9wdGlvbnMoKS5hbHBoYUJhclNpemVbMV0pO1xuICAgICAgY29uc3QgZ3JhZGllbnQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgdGhpcy5hbHBoYUVsKCk/Lm5hdGl2ZUVsZW1lbnQud2lkdGggLSAxLCAwKTtcblxuICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsIGBoc2xhKCR7dGhpcy5oKCl9LCR7dGhpcy5zKCl9JSwke3RoaXMubCgpfSUsIDApYCk7XG4gICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMSwgYGhzbGEoJHt0aGlzLmgoKX0sJHt0aGlzLnMoKX0lLCR7dGhpcy5sKCl9JSwgMSlgKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBncmFkaWVudDtcbiAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLm9wdGlvbnMoKS5hbHBoYUJhclNpemVbMF0sIHRoaXMub3B0aW9ucygpLmFscGhhQmFyU2l6ZVsxXSk7XG4gICAgfSlcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXN0b21PcHRpb25zKCkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy51cGRhdGUob3B0aW9ucyA9PiAoeyAuLi5vcHRpb25zLCAuLi50aGlzLmN1c3RvbU9wdGlvbnMoKSB9KSlcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXR1cEh1ZUNhbnZhcygpO1xuICAgIHRoaXMuc2V0dXBTbENhbnZhcygpO1xuICAgIHRoaXMuc2V0dXBTbEJhckhlbHBlcigpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMoKS5zaG93QWxwaGEpIHtcbiAgICAgIHRoaXMuc2V0dXBBbHBoYUNhbnZhcygpO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZXJDb2xvckNoYW5nZSh0aGlzLm9wdGlvbnMoKS5mb3JtYXQsIHRoaXMub3B0aW9ucygpLmNvbG9yKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBIdWVDYW52YXMoKSB7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5odWVFbCgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgY2FudmFzLndpZHRoID0gdGhpcy5vcHRpb25zKCkuaHVlQmFyU2l6ZVswXTtcbiAgICBjYW52YXMuaGVpZ2h0ID0gdGhpcy5vcHRpb25zKCkuaHVlQmFyU2l6ZVsxXTtcbiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBjb25zdCBncmFkaWVudCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLCAwLCB0aGlzLm9wdGlvbnMoKS5odWVCYXJTaXplWzBdLCAwKTtcbiAgICBjb25zdCBzdGVwID0gMSAvIDM2MDtcblxuICAgIGZvciAobGV0IGlpID0gMDsgaWkgPD0gMTsgaWkgKz0gc3RlcCkge1xuICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKGlpLCBgaHNsKCR7MzYwICogaWl9LCAxMDAlLCA1MCUpYCk7XG4gICAgfVxuICAgIGN0eC5maWxsU3R5bGUgPSBncmFkaWVudDtcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5vcHRpb25zKCkuaHVlQmFyU2l6ZVswXSwgdGhpcy5vcHRpb25zKCkuaHVlQmFyU2l6ZVsxXSk7XG4gICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHggPSBsaW1pdChldmVudC5jbGllbnRYIC0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsIDAsIHRoaXMub3B0aW9ucygpLmh1ZUJhclNpemVbMF0pO1xuICAgICAgY29uc3QgaHVlID0gTWF0aC5yb3VuZCh4ICogMzYwIC8gdGhpcy5vcHRpb25zKCkuaHVlQmFyU2l6ZVswXSk7XG5cbiAgICAgIHNldCh0aGlzLmh1ZVBvaW50ZXJFbCgpPy5uYXRpdmVFbGVtZW50LnN0eWxlLCAnbGVmdCcsIGAke3ggLSA3fXB4YCk7XG4gICAgICB0aGlzLmguc2V0KGh1ZSk7XG4gICAgICB0aGlzLmhhbmRsZXJDb2xvckNoYW5nZSgnaCcsIGh1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICB9O1xuXG4gICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgb25Nb3VzZU1vdmUoZXZlbnQpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwU2xDYW52YXMoKSB7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5zbEVsKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjYW52YXMud2lkdGggPSB0aGlzLm9wdGlvbnMoKS5zbEJhclNpemVbMF07XG4gICAgY2FudmFzLmhlaWdodCA9IHRoaXMub3B0aW9ucygpLnNsQmFyU2l6ZVsxXTtcbiAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeCA9IGxpbWl0KGV2ZW50LmNsaWVudFggLSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCwgMCwgdGhpcy5vcHRpb25zKCkuc2xCYXJTaXplWzBdIC0gMSk7XG4gICAgICBjb25zdCB5ID0gbGltaXQoZXZlbnQuY2xpZW50WSAtIGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsIDAsIHRoaXMub3B0aW9ucygpLnNsQmFyU2l6ZVsxXSAtIDEpO1xuICAgICAgY29uc3QgYyA9IHRoaXMuc2xCYXJIZWxwZXIoKS5ncmFiQ29sb3IoeCwgeSk7XG5cbiAgICAgIHNldCh0aGlzLnNsUG9pbnRlckVsKCk/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUsICdsZWZ0JywgYCR7eCAtIDd9cHhgKTtcbiAgICAgIHNldCh0aGlzLnNsUG9pbnRlckVsKCk/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUsICd0b3AnLCBgJHt5IC0gN31weGApO1xuICAgICAgdGhpcy5oYW5kbGVyQ29sb3JDaGFuZ2UoJ3JnYicsIGMpO1xuICAgIH07XG4gICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgfTtcblxuICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIG9uTW91c2VNb3ZlKGV2ZW50KTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFNsQmFySGVscGVyKCkge1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuc2xFbCgpPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnN0IHdpZHRoID0gK2NhbnZhcy53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSArY2FudmFzLmhlaWdodDtcbiAgICBjb25zdCB3aGl0ZUJsYWNrR3JhZGllbnQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMSwgMSwgMSwgaGVpZ2h0IC0gMSk7XG5cbiAgICB3aGl0ZUJsYWNrR3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICd3aGl0ZScpO1xuICAgIHdoaXRlQmxhY2tHcmFkaWVudC5hZGRDb2xvclN0b3AoMSwgJ2JsYWNrJyk7XG5cbiAgICB0aGlzLnNsQmFySGVscGVyLnNldCh7XG4gICAgICBzZXRIdWU6IChodWU6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBjb2xvckdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDEsIDAsIHdpZHRoIC0gMSwgMCk7XG4gICAgICAgIGNvbG9yR3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsIGBoc2xhKCR7aHVlfSwgMTAwJSwgNTAlLCAwKWApO1xuICAgICAgICBjb2xvckdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCBgaHNsYSgke2h1ZX0sIDEwMCUsIDUwJSwgMSlgKTtcblxuICAgICAgICBjdHguZmlsbFN0eWxlID0gd2hpdGVCbGFja0dyYWRpZW50O1xuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvckdyYWRpZW50O1xuICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1vdmVyJztcbiAgICAgIH0sXG4gICAgICBncmFiQ29sb3I6ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gY3R4LmdldEltYWdlRGF0YSh4LCB5LCAxLCAxKS5kYXRhLFxuICAgICAgZmluZENvbG9yOiAocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBbLCBzLCB2XSA9IHJnYlRvSHN2KHIsIGcsIGIpO1xuICAgICAgICBjb25zdCB4ID0gcyAqIHdpZHRoO1xuICAgICAgICBjb25zdCB5ID0gaGVpZ2h0IC0gKHYgKiBoZWlnaHQpO1xuXG4gICAgICAgIHJldHVybiBbeCwgeV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQWxwaGFDYW52YXMoKSB7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5hbHBoYUVsKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjYW52YXMud2lkdGggPSB0aGlzLm9wdGlvbnMoKS5hbHBoYUJhclNpemVbMF07XG4gICAgY2FudmFzLmhlaWdodCA9IHRoaXMub3B0aW9ucygpLmFscGhhQmFyU2l6ZVsxXTtcbiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBjb25zdCBncmFkaWVudCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLCAwLCBjYW52YXMud2lkdGggLSAxLCAwKTtcblxuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLCBgaHNsYSgke3RoaXMuaCgpfSwke3RoaXMucygpfSUsJHt0aGlzLmwoKX0lLCAwKWApO1xuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCBgaHNsYSgke3RoaXMuaCgpfSwke3RoaXMucygpfSUsJHt0aGlzLmwoKX0lLCAxKWApO1xuICAgIGN0eC5maWxsU3R5bGUgPSBncmFkaWVudDtcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5vcHRpb25zKCkuYWxwaGFCYXJTaXplWzBdLCB0aGlzLm9wdGlvbnMoKS5hbHBoYUJhclNpemVbMV0pO1xuICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB4ID0gbGltaXQoZXZlbnQuY2xpZW50WCAtIGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LCAwLCB0aGlzLm9wdGlvbnMoKS5hbHBoYUJhclNpemVbMF0pO1xuICAgICAgY29uc3QgYWxwaGEgPSArKHggLyB0aGlzLm9wdGlvbnMoKS5hbHBoYUJhclNpemVbMF0pLnRvRml4ZWQoMik7XG5cbiAgICAgIHNldCh0aGlzLmFscGhhUG9pbnRlckVsKCk/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUsICdsZWZ0JywgYCR7eCAtIDd9cHhgKTtcbiAgICAgIHRoaXMuaGFuZGxlckNvbG9yQ2hhbmdlKCdhbHBoYScsIGFscGhhKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBvbk1vdXNlTW92ZShldmVudCk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ29weUNvbG9yKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHdpbmRvdy5uYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmhleCgpKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0NvbXBUeXBlVGV4dFN1Y2Nlc3MoJ2kxOG5fY29weV9zdWNjZXNzZnVsbHknKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9pbnRlckgoaDogbnVtYmVyKSB7XG4gICAgY29uc3QgeCA9IHRoaXMub3B0aW9ucygpLmh1ZUJhclNpemVbMF0gKiBoIC8gMzYwO1xuXG4gICAgc2V0KHRoaXMuaHVlUG9pbnRlckVsKCk/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUsICdsZWZ0JywgYCR7eCAtIDd9cHhgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9pbnRlclNsKGg6IG51bWJlciwgczogbnVtYmVyLCBsOiBudW1iZXIpIHtcbiAgICBjb25zdCBbciwgZywgYl0gPSBoc2xUb1JnYihoLCBzLCBsKTtcbiAgICBjb25zdCBbeCwgeV0gPSB0aGlzLnNsQmFySGVscGVyKCkuZmluZENvbG9yKHIsIGcsIGIpIGFzIEFycmF5PG51bWJlcj47XG5cbiAgICBpZiAoeCA+PSAwKSB7XG4gICAgICBzZXQodGhpcy5zbFBvaW50ZXJFbCgpPy5uYXRpdmVFbGVtZW50LnN0eWxlLCAnbGVmdCcsIGAke3ggLSA3fXB4YCk7XG4gICAgICBzZXQodGhpcy5zbFBvaW50ZXJFbCgpPy5uYXRpdmVFbGVtZW50LnN0eWxlLCAndG9wJywgYCR7eSAtIDd9cHhgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBvaW50ZXJBKGE6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5vcHRpb25zKCkuc2hvd0FscGhhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHggPSB0aGlzLm9wdGlvbnMoKS5hbHBoYUJhclNpemVbMF0gKiBhO1xuXG4gICAgc2V0KHRoaXMuYWxwaGFQb2ludGVyRWwoKT8ubmF0aXZlRWxlbWVudC5zdHlsZSwgJ2xlZnQnLCBgJHt4IC0gN31weGApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVIZXgocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlciwgYTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucygpLnNob3dBbHBoYSkge1xuICAgICAgdGhpcy5oZXguc2V0KHBhcnNlQ29sb3IoW3IsIGcsIGIsIGFdLCAnaGV4Y3NzNCcpIGFzIHN0cmluZyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oZXguc2V0KHJnYlRvSGV4KHIsIGcsIGIpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUmdiKCkge1xuICAgIGNvbnN0IHJnYiA9IGhzbFRvUmdiKHRoaXMuaCgpLCB0aGlzLnMoKSwgdGhpcy5sKCkpO1xuXG4gICAgdGhpcy5yLnNldChyZ2JbMF0pO1xuICAgIHRoaXMuZy5zZXQocmdiWzFdKTtcbiAgICB0aGlzLmIuc2V0KHJnYlsyXSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUhzbCgpIHtcbiAgICBjb25zdCBoc2wgPSByZ2JUb0hzbCh0aGlzLnIoKSwgdGhpcy5nKCksIHRoaXMuYigpKTtcblxuICAgIHRoaXMuaC5zZXQoaHNsWzBdKTtcbiAgICB0aGlzLnMuc2V0KGhzbFsxXSk7XG4gICAgdGhpcy5sLnNldChoc2xbMl0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZXNBbmRQb2ludGVyKGNvbmZpZzogSUNvbmZpZ1VwZGF0ZSkge1xuICAgIGlmIChjb25maWcucmdiKSB7XG4gICAgICB0aGlzLnVwZGF0ZVJnYigpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmhzbCkge1xuICAgICAgdGhpcy51cGRhdGVIc2woKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5odWUpIHtcbiAgICAgIHRoaXMuc2xCYXJIZWxwZXIoKS5zZXRIdWUodGhpcy5oKCkpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmhQb2ludCkge1xuICAgICAgdGhpcy51cGRhdGVQb2ludGVySCh0aGlzLmgoKSk7XG4gICAgfVxuICAgIGlmIChjb25maWcuc2xQb2ludCkge1xuICAgICAgdGhpcy51cGRhdGVQb2ludGVyU2wodGhpcy5oKCksIHRoaXMucygpLCB0aGlzLmwoKSk7XG4gICAgfVxuICAgIGlmIChjb25maWcuaGV4KSB7XG4gICAgICB0aGlzLnVwZGF0ZUhleCh0aGlzLnIoKSwgdGhpcy5nKCksIHRoaXMuYigpLCB0aGlzLmEoKSk7XG4gICAgfVxuICAgIGlmIChjb25maWcuYVBvaW50KSB7XG4gICAgICB0aGlzLnVwZGF0ZVBvaW50ZXJBKHRoaXMuYSgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZXJDb2xvckNoYW5nZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IEFycmF5PG51bWJlcj4sIHNpbGVudCA9IGZhbHNlKSB7XG4gICAgbGV0IGNvbmZpZzogSUNvbmZpZ1VwZGF0ZSA9IHt9O1xuXG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgJ2gnOlxuICAgICAgICBjb25maWcgPSB7IGhQb2ludDogdHJ1ZSwgaGV4OiB0cnVlLCByZ2I6IHRydWUsIGh1ZTogdHJ1ZSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3MnOlxuICAgICAgICBjb25maWcgPSB7IHNsUG9pbnQ6IHRydWUsIGhleDogdHJ1ZSwgcmdiOiB0cnVlIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbCc6XG4gICAgICAgIGNvbmZpZyA9IHsgc2xQb2ludDogdHJ1ZSwgaGV4OiB0cnVlLCByZ2I6IHRydWUgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyJzpcbiAgICAgICAgY29uZmlnID0geyBoUG9pbnQ6IHRydWUsIHNsUG9pbnQ6IHRydWUsIGhleDogdHJ1ZSwgaHNsOiB0cnVlLCBodWU6IHRydWUgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdnJzpcbiAgICAgICAgY29uZmlnID0geyBoUG9pbnQ6IHRydWUsIHNsUG9pbnQ6IHRydWUsIGhleDogdHJ1ZSwgaHNsOiB0cnVlLCBodWU6IHRydWUgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdiJzpcbiAgICAgICAgY29uZmlnID0geyBoUG9pbnQ6IHRydWUsIHNsUG9pbnQ6IHRydWUsIGhleDogdHJ1ZSwgaHNsOiB0cnVlLCBodWU6IHRydWUgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZ2InOlxuICAgICAgICB0aGlzLnIuc2V0KCh2YWx1ZSBhcyBBcnJheTxudW1iZXI+KVswXSk7XG4gICAgICAgIHRoaXMuZy5zZXQoKHZhbHVlIGFzIEFycmF5PG51bWJlcj4pWzFdKTtcbiAgICAgICAgdGhpcy5iLnNldCgodmFsdWUgYXMgQXJyYXk8bnVtYmVyPilbMl0pO1xuICAgICAgICBjb25maWcgPSB7IGhleDogdHJ1ZSwgaHNsOiB0cnVlIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmdiYSc6XG4gICAgICAgIHRoaXMuci5zZXQoKHZhbHVlIGFzIEFycmF5PG51bWJlcj4pWzBdKTtcbiAgICAgICAgdGhpcy5nLnNldCgodmFsdWUgYXMgQXJyYXk8bnVtYmVyPilbMV0pO1xuICAgICAgICB0aGlzLmIuc2V0KCh2YWx1ZSBhcyBBcnJheTxudW1iZXI+KVsyXSk7XG4gICAgICAgIHRoaXMuYS5zZXQoKHZhbHVlIGFzIEFycmF5PG51bWJlcj4pWzNdKTtcbiAgICAgICAgY29uZmlnID0geyBoUG9pbnQ6IHRydWUsIHNsUG9pbnQ6IHRydWUsIGhleDogdHJ1ZSwgYVBvaW50OiB0cnVlLCBoc2w6IHRydWUsIGh1ZTogdHJ1ZSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hzbCc6XG4gICAgICAgIHRoaXMuaC5zZXQoKHZhbHVlIGFzIEFycmF5PG51bWJlcj4pWzBdKTtcbiAgICAgICAgdGhpcy5zLnNldCgodmFsdWUgYXMgQXJyYXk8bnVtYmVyPilbMV0pO1xuICAgICAgICB0aGlzLmwuc2V0KCh2YWx1ZSBhcyBBcnJheTxudW1iZXI+KVsyXSk7XG4gICAgICAgIGNvbmZpZyA9IHsgaFBvaW50OiB0cnVlLCBzbFBvaW50OiB0cnVlLCBoZXg6IHRydWUsIGFQb2ludDogdHJ1ZSwgcmdiOiB0cnVlLCBodWU6IHRydWUgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoc2xhJzpcbiAgICAgICAgdGhpcy5oLnNldCgodmFsdWUgYXMgQXJyYXk8bnVtYmVyPilbMF0pO1xuICAgICAgICB0aGlzLnMuc2V0KCh2YWx1ZSBhcyBBcnJheTxudW1iZXI+KVsxXSk7XG4gICAgICAgIHRoaXMubC5zZXQoKHZhbHVlIGFzIEFycmF5PG51bWJlcj4pWzJdKTtcbiAgICAgICAgdGhpcy5hLnNldCgodmFsdWUgYXMgQXJyYXk8bnVtYmVyPilbM10pO1xuICAgICAgICBjb25maWcgPSB7IGhQb2ludDogdHJ1ZSwgc2xQb2ludDogdHJ1ZSwgaGV4OiB0cnVlLCBhUG9pbnQ6IHRydWUsIHJnYjogdHJ1ZSwgaHVlOiB0cnVlIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGV4Jzoge1xuICAgICAgICBjb25zdCByZ2JhID0gY3NzQ29sb3JUb1JnYmEodmFsdWUgYXMgc3RyaW5nKSB8fCBbdGhpcy5yKCksIHRoaXMuZygpLCB0aGlzLmIoKSwgdGhpcy5hKCldO1xuXG4gICAgICAgIHRoaXMuci5zZXQocmdiYVswXSk7XG4gICAgICAgIHRoaXMuZy5zZXQocmdiYVsxXSk7XG4gICAgICAgIHRoaXMuYi5zZXQocmdiYVsyXSk7XG4gICAgICAgIHRoaXMuYS5zZXQocmdiYVszXSk7XG4gICAgICAgIGNvbmZpZyA9IHsgaFBvaW50OiB0cnVlLCBzbFBvaW50OiB0cnVlLCBhUG9pbnQ6IHRydWUsIGhzbDogdHJ1ZSwgaHVlOiB0cnVlIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sb3InOiB7XG4gICAgICAgIGNvbnN0IHJnYmEgPSAocGFyc2VDb2xvcih2YWx1ZSBhcyBzdHJpbmcgfCBBcnJheTxudW1iZXI+LCAncmdiYScpIHx8IFswLCAwLCAwLCAxXSkgYXMgQXJyYXk8bnVtYmVyPjtcblxuICAgICAgICB0aGlzLnIuc2V0KHJnYmFbMF0pO1xuICAgICAgICB0aGlzLmcuc2V0KHJnYmFbMV0pO1xuICAgICAgICB0aGlzLmIuc2V0KHJnYmFbMl0pO1xuICAgICAgICB0aGlzLmEuc2V0KHJnYmFbM10pO1xuICAgICAgICBjb25maWcgPSB7IGhQb2ludDogdHJ1ZSwgc2xQb2ludDogdHJ1ZSwgaGV4OiB0cnVlLCBhUG9pbnQ6IHRydWUsIGhzbDogdHJ1ZSwgaHVlOiB0cnVlIH07XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdhbHBoYSc6XG4gICAgICAgIHRoaXMuYS5zZXQodmFsdWUgYXMgbnVtYmVyKTtcbiAgICAgICAgdGhpcy51cGRhdGVIZXgodGhpcy5yKCksIHRoaXMuZygpLCB0aGlzLmIoKSwgdGhpcy5hKCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy51cGRhdGVWYWx1ZXNBbmRQb2ludGVyKGNvbmZpZyk7XG4gICAgc2V0KHRoaXMucHJldmlld0VsKCk/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUsICdiYWNrZ3JvdW5kQ29sb3InLCB0aGlzLmEoKSA9PT0gMSA/IGByZ2IoJHt0aGlzLnIoKX0sJHt0aGlzLmcoKX0sJHt0aGlzLmIoKX0pYCA6IGByZ2JhKCR7dGhpcy5yKCl9LCR7dGhpcy5nKCl9LCR7dGhpcy5iKCl9LCR7dGhpcy5hKCl9KWApO1xuICAgIGlmICghc2lsZW50KSB7XG4gICAgICB0aGlzLm91dENvbG9yQ2hhbmdlLmVtaXQodGhpcy5oZXgoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGb2N1c0FuZEJsdXIoZXZlbnQ6IElGb2N1c0FuZEJsdXJFdmVudCwga2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmZvY3VzLnNldChldmVudC5uYW1lID09PSAnYmx1cicgPyB1bmRlZmluZWQgOiBrZXkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJWYWx1ZUNoYW5nZShldmVudDogc3RyaW5nIHwgbnVtYmVyLCBrZXk6IHN0cmluZykge1xuICAgIHRoaXMuaGFuZGxlckNvbG9yQ2hhbmdlKGtleSwgZXZlbnQpO1xuICB9XG5cbn0iLCI8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIlxuICBbc3R5bGUud2lkdGgucHhdPVwib3B0aW9ucygpLnNsQmFyU2l6ZVswXVwiPlxuICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cbiAgICA8Y2FudmFzICNzbEVsXG4gICAgICBjbGFzcz1cInJvdW5kZWQtdGwtWzRweF0gcm91bmRlZC10ci1bNHB4XSBsaWJzLXVpLWNvbG9yLXBpY2tlci1iYWNrZ3JvdW5kLXRyYW5zcGFyZW50XCI+PC9jYW52YXM+XG4gICAgPGRpdiAjc2xQb2ludGVyRWxcbiAgICAgIGNsYXNzPVwibGlicy11aS1jb2xvci1waWNrZXItZG90XCI+PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICA8Y2FudmFzICNodWVFbFxuICAgICAgY2xhc3M9XCJsaWJzLXVpLWNvbG9yLXBpY2tlci1iYWNrZ3JvdW5kLXRyYW5zcGFyZW50XCJcbiAgICAgIFtjbGFzcy5yb3VuZGVkLWJsLVs0cHhdXT1cIiFvcHRpb25zKCkuc2hvd0FscGhhXCJcbiAgICAgIFtjbGFzcy5yb3VuZGVkLWJyLVs0cHhdXT1cIiFvcHRpb25zKCkuc2hvd0FscGhhXCI+PC9jYW52YXM+XG4gICAgPGRpdiAjaHVlUG9pbnRlckVsXG4gICAgICBjbGFzcz1cImxpYnMtdWktY29sb3ItcGlja2VyLWRvdFwiPjwvZGl2PlxuICA8L2Rpdj5cbiAgQGlmIChvcHRpb25zKCkuc2hvd0FscGhhKSB7XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICA8Y2FudmFzICNhbHBoYUVsXG4gICAgICAgIGNsYXNzPVwicm91bmRlZC1ibC1bNHB4XSByb3VuZGVkLWJyLVs0cHhdIGxpYnMtdWktY29sb3ItcGlja2VyLWJhY2tncm91bmQtdHJhbnNwYXJlbnRcIj5cbiAgICAgIDwvY2FudmFzPlxuICAgICAgPGRpdiAjYWxwaGFQb2ludGVyRWxcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWNvbG9yLXBpY2tlci1kb3RcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1lbmRcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXItWzE2cHhdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1jb2xvci1waWNrZXItYmFja2dyb3VuZC10cmFuc3BhcmVudCByb3VuZGVkLVs0cHhdXCI+XG4gICAgICAgIDxkaXYgI3ByZXZpZXdFbFxuICAgICAgICAgIGNsYXNzPVwidy1bMzJweF0gaC1bMzJweF0gcm91bmRlZC1bNHB4XSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDb3B5Q29sb3IoJGV2ZW50KVwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmIChvcHRpb25zKCkuc2hvd0hleCkge1xuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG1yLVsxMnB4XVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oN3IgdGV4dC1bIzZhNzM4M11cIj5IRVg8L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LVs4OHB4XVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0IFsodmFsdWUpXT1cImhleFwiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIid0ZXh0LWNlbnRlciAhcC0wJ1wiXG4gICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJWYWx1ZUNoYW5nZSgkZXZlbnQsICdoZXgnKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXY+XG4gICAgICBAaWYgKG9wdGlvbnMoKS5zaG93SHNsKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oN3IgdGV4dC1bIzZhNzM4M11cIj5IPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctWzU2cHhdXCI+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0IFsodmFsdWUpXT1cImhcIlxuICAgICAgICAgICAgICAgIFtkYXRhVHlwZV09XCInaW50J1wiXG4gICAgICAgICAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCIzNjBcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3RleHQtY2VudGVyICFwLTAgIXJvdW5kZWQtdHItbm9uZSAhcm91bmRlZC1ici1ub25lICcgKyAoZm9jdXMoKSA9PT0gJ3MnID8gJyFib3JkZXItci10cmFuc3BhcmVudCcgOiAnJylcIlxuICAgICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyKCRldmVudCwgJ2gnKVwiXG4gICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyVmFsdWVDaGFuZ2UoJGV2ZW50LCAnaCcpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDdyIHRleHQtWyM2YTczODNdXCI+Uzwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVs1NnB4XVwiPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dCBbKHZhbHVlKV09XCJzXCJcbiAgICAgICAgICAgICAgICBbZGF0YVR5cGVdPVwiJ2ludCdcIlxuICAgICAgICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIwXCJcbiAgICAgICAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwiMTAwXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIid0ZXh0LWNlbnRlciAhcC0wICFyb3VuZGVkLW5vbmUgJyArIChmb2N1cygpID09PSAncycgPyAnJyA6ICchYm9yZGVyLXgtdHJhbnNwYXJlbnQnKVwiXG4gICAgICAgICAgICAgICAgKG91dEZvY3VzQW5kQmx1ckV2ZW50KT1cImhhbmRsZXJGb2N1c0FuZEJsdXIoJGV2ZW50LCAncycpXCJcbiAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJWYWx1ZUNoYW5nZSgkZXZlbnQsICdzJylcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oN3IgdGV4dC1bIzZhNzM4M11cIj5MPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctWzU2cHhdXCI+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0IFsodmFsdWUpXT1cImxcIlxuICAgICAgICAgICAgICAgIFtkYXRhVHlwZV09XCInaW50J1wiXG4gICAgICAgICAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCIxMDBcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3RleHQtY2VudGVyICFwLTAgIXJvdW5kZWQtdGwtbm9uZSAhcm91bmRlZC1ibC1ub25lICcgKyAoZm9jdXMoKSA9PT0gJ3MnID8gJyFib3JkZXItbC10cmFuc3BhcmVudCcgOiAnJylcIlxuICAgICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyKCRldmVudCwgJ2wnKVwiXG4gICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyVmFsdWVDaGFuZ2UoJGV2ZW50LCAnbCcpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAob3B0aW9ucygpLnNob3dSZ2IpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWg3ciB0ZXh0LVsjNmE3MzgzXVwiPlI8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bNTZweF1cIj5cbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXQgWyh2YWx1ZSldPVwiclwiXG4gICAgICAgICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiMFwiXG4gICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjI1NVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIndGV4dC1jZW50ZXIgIXAtMCAhcm91bmRlZC10ci1ub25lICFyb3VuZGVkLWJyLW5vbmUgJyArIChmb2N1cygpID09PSAnZycgPyAnIWJvcmRlci1yLXRyYW5zcGFyZW50JyA6ICcnKVwiXG4gICAgICAgICAgICAgICAgKG91dEZvY3VzQW5kQmx1ckV2ZW50KT1cImhhbmRsZXJGb2N1c0FuZEJsdXIoJGV2ZW50LCAncicpXCJcbiAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJWYWx1ZUNoYW5nZSgkZXZlbnQsICdyJylcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktZm9udC1oN3IgdGV4dC1bIzZhNzM4M11cIj5HPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctWzU2cHhdXCI+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0IFsodmFsdWUpXT1cImdcIlxuICAgICAgICAgICAgICAgIFtkYXRhVHlwZV09XCInaW50J1wiXG4gICAgICAgICAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCIyNTVcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3RleHQtY2VudGVyICFwLTAgIXJvdW5kZWQtbm9uZSAnICsgKGZvY3VzKCkgPT09ICdnJyA/ICcnIDogJyFib3JkZXIteC10cmFuc3BhcmVudCcpXCJcbiAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1cigkZXZlbnQsICdnJylcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlclZhbHVlQ2hhbmdlKCRldmVudCwgJ2cnKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWg3ciB0ZXh0LVsjNmE3MzgzXVwiPkI8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bNTZweF1cIj5cbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXQgWyh2YWx1ZSldPVwiYlwiXG4gICAgICAgICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiMFwiXG4gICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjI1NVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIndGV4dC1jZW50ZXIgIXAtMCAhcm91bmRlZC10bC1ub25lICFyb3VuZGVkLWJsLW5vbmUgJyArIChmb2N1cygpID09PSAnZycgPyAnIWJvcmRlci1sLXRyYW5zcGFyZW50JyA6ICcnKVwiXG4gICAgICAgICAgICAgICAgKG91dEZvY3VzQW5kQmx1ckV2ZW50KT1cImhhbmRsZXJGb2N1c0FuZEJsdXIoJGV2ZW50LCAnYicpXCJcbiAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJWYWx1ZUNoYW5nZSgkZXZlbnQsICdiJylcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -254,18 +254,21 @@ class LibsUiComponentsColorPickerComponent {
254
254
  /* OUTPUT */
255
255
  outColorChange = output();
256
256
  /* VIEW CHILD */
257
- hueEl = viewChild.required('hueEl');
258
- huePointerEl = viewChild.required('huePointerEl');
259
- slEl = viewChild.required('slEl');
260
- slPointerEl = viewChild.required('slPointerEl');
261
- alphaEl = viewChild.required('alphaEl');
262
- alphaPointerEl = viewChild.required('alphaPointerEl');
263
- previewEl = viewChild.required('previewEl');
257
+ hueEl = viewChild('hueEl');
258
+ huePointerEl = viewChild('huePointerEl');
259
+ slEl = viewChild('slEl');
260
+ slPointerEl = viewChild('slPointerEl');
261
+ alphaEl = viewChild('alphaEl');
262
+ alphaPointerEl = viewChild('alphaPointerEl');
263
+ previewEl = viewChild('previewEl');
264
264
  constructor() {
265
265
  effect(() => {
266
- const ctx = this.alphaEl().nativeElement.getContext('2d');
266
+ const ctx = this.alphaEl()?.nativeElement.getContext('2d');
267
+ if (!ctx) {
268
+ return;
269
+ }
267
270
  ctx.clearRect(0, 0, this.options().alphaBarSize[0], this.options().alphaBarSize[1]);
268
- const gradient = ctx.createLinearGradient(0, 0, this.alphaEl().nativeElement.width - 1, 0);
271
+ const gradient = ctx.createLinearGradient(0, 0, this.alphaEl()?.nativeElement.width - 1, 0);
269
272
  gradient.addColorStop(0, `hsla(${this.h()},${this.s()}%,${this.l()}%, 0)`);
270
273
  gradient.addColorStop(1, `hsla(${this.h()},${this.s()}%,${this.l()}%, 1)`);
271
274
  ctx.fillStyle = gradient;
@@ -288,7 +291,7 @@ class LibsUiComponentsColorPickerComponent {
288
291
  this.handlerColorChange(this.options().format, this.options().color);
289
292
  }
290
293
  setupHueCanvas() {
291
- const canvas = this.hueEl().nativeElement;
294
+ const canvas = this.hueEl()?.nativeElement;
292
295
  canvas.width = this.options().hueBarSize[0];
293
296
  canvas.height = this.options().hueBarSize[1];
294
297
  const ctx = canvas.getContext('2d');
@@ -302,7 +305,7 @@ class LibsUiComponentsColorPickerComponent {
302
305
  const onMouseMove = (event) => {
303
306
  const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().hueBarSize[0]);
304
307
  const hue = Math.round(x * 360 / this.options().hueBarSize[0]);
305
- this.huePointerEl().nativeElement.style.left = `${x - 7}px`;
308
+ set(this.huePointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
306
309
  this.h.set(hue);
307
310
  this.handlerColorChange('h', hue);
308
311
  };
@@ -317,15 +320,15 @@ class LibsUiComponentsColorPickerComponent {
317
320
  });
318
321
  }
319
322
  setupSlCanvas() {
320
- const canvas = this.slEl().nativeElement;
323
+ const canvas = this.slEl()?.nativeElement;
321
324
  canvas.width = this.options().slBarSize[0];
322
325
  canvas.height = this.options().slBarSize[1];
323
326
  const onMouseMove = (event) => {
324
327
  const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().slBarSize[0] - 1);
325
328
  const y = limit(event.clientY - canvas.getBoundingClientRect().top, 0, this.options().slBarSize[1] - 1);
326
329
  const c = this.slBarHelper().grabColor(x, y);
327
- this.slPointerEl().nativeElement.style.left = `${x - 7}px`;
328
- this.slPointerEl().nativeElement.style.top = `${y - 7}px`;
330
+ set(this.slPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
331
+ set(this.slPointerEl()?.nativeElement.style, 'top', `${y - 7}px`);
329
332
  this.handlerColorChange('rgb', c);
330
333
  };
331
334
  const onMouseUp = () => {
@@ -339,7 +342,7 @@ class LibsUiComponentsColorPickerComponent {
339
342
  });
340
343
  }
341
344
  setupSlBarHelper() {
342
- const canvas = this.slEl().nativeElement;
345
+ const canvas = this.slEl()?.nativeElement;
343
346
  const ctx = canvas.getContext('2d');
344
347
  const width = +canvas.width;
345
348
  const height = +canvas.height;
@@ -368,7 +371,7 @@ class LibsUiComponentsColorPickerComponent {
368
371
  });
369
372
  }
370
373
  setupAlphaCanvas() {
371
- const canvas = this.alphaEl().nativeElement;
374
+ const canvas = this.alphaEl()?.nativeElement;
372
375
  canvas.width = this.options().alphaBarSize[0];
373
376
  canvas.height = this.options().alphaBarSize[1];
374
377
  const ctx = canvas.getContext('2d');
@@ -380,7 +383,7 @@ class LibsUiComponentsColorPickerComponent {
380
383
  const onMouseMove = (event) => {
381
384
  const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().alphaBarSize[0]);
382
385
  const alpha = +(x / this.options().alphaBarSize[0]).toFixed(2);
383
- this.alphaPointerEl().nativeElement.style.left = `${x - 7}px`;
386
+ set(this.alphaPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
384
387
  this.handlerColorChange('alpha', alpha);
385
388
  };
386
389
  const onMouseUp = () => {
@@ -400,14 +403,14 @@ class LibsUiComponentsColorPickerComponent {
400
403
  }
401
404
  updatePointerH(h) {
402
405
  const x = this.options().hueBarSize[0] * h / 360;
403
- this.huePointerEl().nativeElement.style.left = `${x - 7}px`;
406
+ set(this.huePointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
404
407
  }
405
408
  updatePointerSl(h, s, l) {
406
409
  const [r, g, b] = hslToRgb(h, s, l);
407
410
  const [x, y] = this.slBarHelper().findColor(r, g, b);
408
411
  if (x >= 0) {
409
- this.slPointerEl().nativeElement.style.left = `${x - 7}px`;
410
- this.slPointerEl().nativeElement.style.top = `${y - 7}px`;
412
+ set(this.slPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
413
+ set(this.slPointerEl()?.nativeElement.style, 'top', `${y - 7}px`);
411
414
  }
412
415
  }
413
416
  updatePointerA(a) {
@@ -415,7 +418,7 @@ class LibsUiComponentsColorPickerComponent {
415
418
  return;
416
419
  }
417
420
  const x = this.options().alphaBarSize[0] * a;
418
- this.alphaPointerEl().nativeElement.style.left = `${x - 7}px`;
421
+ set(this.alphaPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);
419
422
  }
420
423
  updateHex(r, g, b, a) {
421
424
  if (this.options().showAlpha) {
@@ -530,7 +533,7 @@ class LibsUiComponentsColorPickerComponent {
530
533
  break;
531
534
  }
532
535
  this.updateValuesAndPointer(config);
533
- this.previewEl().nativeElement.style.backgroundColor = this.a() === 1 ? `rgb(${this.r()},${this.g()},${this.b()})` : `rgba(${this.r()},${this.g()},${this.b()},${this.a()})`;
536
+ set(this.previewEl()?.nativeElement.style, 'backgroundColor', this.a() === 1 ? `rgb(${this.r()},${this.g()},${this.b()})` : `rgba(${this.r()},${this.g()},${this.b()},${this.a()})`);
534
537
  if (!silent) {
535
538
  this.outColorChange.emit(this.hex());
536
539
  }
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-color-picker.mjs","sources":["../../../../../libs-ui/components/color-picker/src/utils/picker.ts","../../../../../libs-ui/components/color-picker/src/color-picker.component.ts","../../../../../libs-ui/components/color-picker/src/color-picker.component.html","../../../../../libs-ui/components/color-picker/src/libs-ui-components-color-picker.ts"],"sourcesContent":["import { get, isNil, set } from \"@libs-ui/utils\";\nimport { IPickerOptions } from \"../interfaces\";\n\nexport const ColorNames = { 'aliceblue': '#F0F8FF', 'antiquewhite': '#FAEBD7', 'aqua': '#00FFFF', 'aquamarine': '#7FFFD4', 'azure': '#F0FFFF', 'beige': '#F5F5DC', 'bisque': '#FFE4C4', 'black': '#000000', 'blanchedalmond': '#FFEBCD', 'blue': '#0000FF', 'blueviolet': '#8A2BE2', 'brown': '#A52A2A', 'burlywood': '#DEB887', 'cadetblue': '#5F9EA0', 'chartreuse': '#7FFF00', 'chocolate': '#D2691E', 'coral': '#FF7F50', 'cornflowerblue': '#6495ED', 'cornsilk': '#FFF8DC', 'crimson': '#DC143C', 'cyan': '#00FFFF', 'darkblue': '#00008B', 'darkcyan': '#008B8B', 'darkgoldenrod': '#B8860B', 'darkgray': '#A9A9A9', 'darkgrey': '#A9A9A9', 'darkgreen': '#006400', 'darkkhaki': '#BDB76B', 'darkmagenta': '#8B008B', 'darkolivegreen': '#556B2F', 'darkorange': '#FF8C00', 'darkorchid': '#9932CC', 'darkred': '#8B0000', 'darksalmon': '#E9967A', 'darkseagreen': '#8FBC8F', 'darkslateblue': '#483D8B', 'darkslategray': '#2F4F4F', 'darkslategrey': '#2F4F4F', 'darkturquoise': '#00CED1', 'darkviolet': '#9400D3', 'deeppink': '#FF1493', 'deepskyblue': '#00BFFF', 'dimgray': '#696969', 'dimgrey': '#696969', 'dodgerblue': '#1E90FF', 'firebrick': '#B22222', 'floralwhite': '#FFFAF0', 'forestgreen': '#228B22', 'fuchsia': '#FF00FF', 'gainsboro': '#DCDCDC', 'ghostwhite': '#F8F8FF', 'gold': '#FFD700', 'goldenrod': '#DAA520', 'gray': '#808080', 'grey': '#808080', 'green': '#008000', 'greenyellow': '#ADFF2F', 'honeydew': '#F0FFF0', 'hotpink': '#FF69B4', 'indianred ': '#CD5C5C', 'indigo ': '#4B0082', 'ivory': '#FFFFF0', 'khaki': '#F0E68C', 'lavender': '#E6E6FA', 'lavenderblush': '#FFF0F5', 'lawngreen': '#7CFC00', 'lemonchiffon': '#FFFACD', 'lightblue': '#ADD8E6', 'lightcoral': '#F08080', 'lightcyan': '#E0FFFF', 'lightgoldenrodyellow': '#FAFAD2', 'lightgray': '#D3D3D3', 'lightgrey': '#D3D3D3', 'lightgreen': '#90EE90', 'lightpink': '#FFB6C1', 'lightsalmon': '#FFA07A', 'lightseagreen': '#20B2AA', 'lightskyblue': '#87CEFA', 'lightslategray': '#778899', 'lightslategrey': '#778899', 'lightsteelblue': '#B0C4DE', 'lightyellow': '#FFFFE0', 'lime': '#00FF00', 'limegreen': '#32CD32', 'linen': '#FAF0E6', 'magenta': '#FF00FF', 'maroon': '#800000', 'mediumaquamarine': '#66CDAA', 'mediumblue': '#0000CD', 'mediumorchid': '#BA55D3', 'mediumpurple': '#9370DB', 'mediumseagreen': '#3CB371', 'mediumslateblue': '#7B68EE', 'mediumspringgreen': '#00FA9A', 'mediumturquoise': '#48D1CC', 'mediumvioletred': '#C71585', 'midnightblue': '#191970', 'mintcream': '#F5FFFA', 'mistyrose': '#FFE4E1', 'moccasin': '#FFE4B5', 'navajowhite': '#FFDEAD', 'navy': '#000080', 'oldlace': '#FDF5E6', 'olive': '#808000', 'olivedrab': '#6B8E23', 'orange': '#FFA500', 'orangered': '#FF4500', 'orchid': '#DA70D6', 'palegoldenrod': '#EEE8AA', 'palegreen': '#98FB98', 'paleturquoise': '#AFEEEE', 'palevioletred': '#DB7093', 'papayawhip': '#FFEFD5', 'peachpuff': '#FFDAB9', 'peru': '#CD853F', 'pink': '#FFC0CB', 'plum': '#DDA0DD', 'powderblue': '#B0E0E6', 'purple': '#800080', 'rebeccapurple': '#663399', 'red': '#FF0000', 'rosybrown': '#BC8F8F', 'royalblue': '#4169E1', 'saddlebrown': '#8B4513', 'salmon': '#FA8072', 'sandybrown': '#F4A460', 'seagreen': '#2E8B57', 'seashell': '#FFF5EE', 'sienna': '#A0522D', 'silver': '#C0C0C0', 'skyblue': '#87CEEB', 'slateblue': '#6A5ACD', 'slategray': '#708090', 'slategrey': '#708090', 'snow': '#FFFAFA', 'springgreen': '#00FF7F', 'steelblue': '#4682B4', 'tan': '#D2B48C', 'teal': '#008080', 'thistle': '#D8BFD8', 'tomato': '#FF6347', 'turquoise': '#40E0D0', 'violet': '#EE82EE', 'wheat': '#F5DEB3', 'white': '#FFFFFF', 'whitesmoke': '#F5F5F5', 'yellow': '#FFFF00', 'yellowgreen': '#9ACD32' };\nexport const optionsDefault = (): IPickerOptions => {\n return {\n showHsl: false,\n showRgb: true,\n showHex: true,\n showAlpha: false,\n color: '#ff0000',\n format: 'color',\n slBarSize: [316, 200],\n hueBarSize: [316, 20],\n alphaBarSize: [316, 20]\n };\n}\n\nexport const limit = (value: number | string, min: number, max: number) => {\n value = +value;\n return isNaN(value) ? min : (value < min ? min : (value > max ? max : value));\n}\n\nexport const hslToRgb = (h: number, s: number, l: number) => {\n let r, g, b;\n [h, s, l] = [limit(h, 0, 360) / 360, limit(s, 0, 100) / 100, limit(l, 0, 100) / 100];\n\n if (s == 0) {\n r = g = b = l; // achromatic\n\n return [r * 255, g * 255, b * 255].map(Math.round);\n }\n const hueToRgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = (2 * l) - q;\n\n r = hueToRgb(p, q, h + (1 / 3));\n g = hueToRgb(p, q, h);\n b = hueToRgb(p, q, h - (1 / 3));\n\n return [r * 255, g * 255, b * 255].map(Math.round);\n}\n\nexport const cssColorToRgba = (color: string) => {\n if (color) {\n const colorByName = get(ColorNames, color.toLowerCase());\n const [, , , r, g, b, a, , rr, gg, bb, aa] = /^\\s*#?((([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])?)|(([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})?))\\s*$/i.exec(colorByName || color) || [];\n if (!isNil(r)) {\n return [\n parseInt(r + r, 16),\n parseInt(g + g, 16),\n parseInt(b + b, 16),\n a ? +((parseInt(a + a, 16)) / 255).toFixed(2) : 1\n ];\n }\n if (!isNil(rr)) {\n return [\n parseInt(rr, 16),\n parseInt(gg, 16),\n parseInt(bb, 16),\n aa ? +((parseInt(aa, 16)) / 255).toFixed(2) : 1\n ];\n }\n }\n\n return undefined;\n}\n\nexport const parseColorToRgba = (color: string | Array<number>) => {\n if (Array.isArray(color)) {\n return [\n limit(color[0], 0, 255),\n limit(color[1], 0, 255),\n limit(color[2], 0, 255),\n limit(color[3] ?? 1, 0, 1)\n ];\n }\n const parsed = cssColorToRgba(color) || cssRgbaToRgba(color);\n\n if (parsed && parsed.length === 3) {\n parsed.push(1);\n }\n\n return parsed;\n}\n\nexport const cssRgbaToRgba = (rgba: string) => {\n if (rgba) {\n const [m, r, g, b, , a] = /^rgba?\\((\\d+)\\s*[\\s,]\\s*(\\d+)\\s*[\\s,]\\s*(\\d+)(\\s*[\\s,]\\s*(\\d*(.\\d+)?))?\\)/i.exec(rgba) || [];\n\n return m ? [limit(r, 0, 255), limit(g, 0, 255), limit(b, 0, 255), limit(a ?? 1, 0, 1)] : undefined;\n }\n\n return undefined;\n}\n\nexport const cssHslaToHsla = (hsla: string) => {\n if (hsla) {\n const [m, h, s, l, , a] = /^hsla?\\((\\d+)\\s*[\\s,]\\s*(\\d+)\\s*[\\s,]\\s*(\\d+)(\\s*[\\s,]\\s*(\\d*(.\\d+)?))?\\)/i.exec(hsla) || [];\n\n return m ? [limit(h, 0, 255), limit(s, 0, 255), limit(l, 0, 255), limit(a ?? 1, 0, 1)] : undefined;\n }\n\n return undefined;\n}\n\nexport const parseColorToHsla = (color: string | Array<number>) => {\n if (Array.isArray(color)) {\n return [\n limit(color[0], 0, 360),\n limit(color[1], 0, 100),\n limit(color[2], 0, 100),\n limit(color[3] ?? 1, 0, 1)\n ];\n }\n const parsed = cssHslaToHsla(color);\n\n if (parsed && parsed.length === 3) {\n parsed.push(1);\n }\n\n return parsed;\n}\n\nexport const rgbToHsl = (r: number, g: number, b: number) => {\n [r, g, b] = [limit(r, 0, 255) / 255, limit(g, 0, 255) / 255, limit(b, 0, 255) / 255];\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h, s = (max + min) / 2;\n const l = (max + min) / 2;\n\n if (max == min) {\n h = s = 0; // achromatic\n\n return [h * 360, s * 100, l * 100].map(Math.round);\n }\n const d = max - min;\n\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = ((g - b) / d) + (g < b ? 6 : 0);\n break;\n case g:\n h = ((b - r) / d) + 2;\n break;\n case b:\n h = ((r - g) / d) + 4;\n break;\n }\n h = (h || 0) / 6;\n\n return [h * 360, s * 100, l * 100].map(Math.round);\n}\n\nexport const rgbToHex = (r: number, g: number, b: number) => {\n [r, g, b] = [limit(r, 0, 255), limit(g, 0, 255), limit(b, 0, 255)];\n\n return \"#\" + (\"000000\" + ((r << 16) | (g << 8) | b).toString(16)).slice(-6);\n}\n\nexport const rgbToInt = (r: number, g: number, b: number) => {\n return (r << 16) | (g << 8) | b;\n}\n\nexport const rgbToHsv = (r: number, g: number, b: number) => {\n [r, g, b] = [limit(r, 0, 255) / 255, limit(g, 0, 255) / 255, limit(b, 0, 255) / 255];\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h, s = max;\n const v = max;\n const d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if (max == min) {\n h = 0;\n\n return [h, s, v];\n }\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h = (h || 0) / 6;\n\n return [h, s, v];\n}\n\nexport const formatColor = (data: Array<number>, format: string) => {\n switch (format) {\n case 'rgb':\n default:\n return data.slice(0, 3);\n case 'rgbcss':\n return `rgb(${data[0]}, ${data[1]}, ${data[2]})`;\n case 'rgbcss4':\n return `rgb(${data[0]}, ${data[1]}, ${data[2]}, ${data[3]})`;\n case 'rgba':\n return data;\n case 'rgbacss':\n return `rgba(${data[0]}, ${data[1]}, ${data[2]}, ${data[3]})`;\n case 'hsl':\n return rgbToHsl(data[0], data[1], data[2]);\n case 'hslcss':\n data = rgbToHsl(data[0], data[1], data[2]);\n\n return `hsl(${data[0]}, ${data[1]}, ${data[2]})`;\n case 'hslcss4': {\n const hh = rgbToHsl(data[0], data[1], data[2]);\n\n return `hsl(${hh[0]}, ${hh[1]}, ${hh[2]}, ${data[3]})`;\n }\n case 'hsla':\n return [...rgbToHsl(data[0], data[1], data[2]), data[3]];\n case 'hslacss': {\n const ha = rgbToHsl(data[0], data[1], data[2]);\n\n return `hsla(${ha[0]}, ${ha[1]}, ${ha[2]}, ${data[3]})`;\n }\n case 'hex':\n return rgbToHex(data[0], data[1], data[2]);\n case 'hexcss4':\n return rgbToHex(data[0], data[1], data[2]) + ('00' + parseInt((data[3] * 255).toString()).toString(16)).slice(-2);\n case 'int':\n return rgbToInt(data[0], data[1], data[2]);\n }\n}\n\nexport const parseColor = (color: string | Array<number>, format: string | object) => {\n if (!isNil(color)) {\n let data: Array<number> | undefined = [];\n\n data = parseColorToRgba(color) || (parseColorToHsla(color) && [...hslToRgb(data[0], data[1], data[2]), data[3]]);\n if (data) {\n if (typeof format === 'object') {\n return ['rgb', 'rgbcss', 'rgbcss4', 'rgba', 'rgbacss', 'hsl', 'hslcss', 'hslcss4', 'hsla', 'hslacss', 'hex', 'hexcss4', 'int'].reduce((m, f) => {\n set(m, f, formatColor(data, f));\n\n return m;\n }, format);\n }\n\n return formatColor(data, format as string);\n }\n }\n\n return undefined;\n}\n\nexport const defaultHelper = () => {\n return {\n setHue: () => { return },\n grabColor: () => [],\n findColor: () => []\n };\n}","import { AfterViewInit, ChangeDetectionStrategy, Component, effect, ElementRef, inject, input, OnInit, output, signal, viewChild } from \"@angular/core\";\nimport { IFocusAndBlurEvent, LibsUiComponentsInputsInputComponent } from \"@libs-ui/components-inputs-input\";\nimport { LibsUiNotificationService } from \"@libs-ui/services-notification\";\nimport { ICanvasHelper, IConfigUpdate, IPickerCustomOptions, IPickerOptions } from \"./interfaces/picker.interface\";\nimport { cssColorToRgba, defaultHelper, hslToRgb, limit, optionsDefault, parseColor, rgbToHex, rgbToHsl, rgbToHsv } from \"./utils/picker\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-color_picker',\n templateUrl: './color-picker.component.html',\n styleUrl: './color-picker.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n LibsUiComponentsInputsInputComponent\n ]\n})\nexport class LibsUiComponentsColorPickerComponent implements OnInit, AfterViewInit {\n\n /* PROPERTY */\n protected options = signal<IPickerOptions>(optionsDefault());\n protected focus = signal<string | undefined>(undefined);\n protected hex = signal<string>('');\n protected s = signal<number>(0);\n protected h = signal<number>(0);\n protected l = signal<number>(0);\n protected r = signal<number>(0);\n protected g = signal<number>(0);\n protected b = signal<number>(0);\n protected a = signal<number>(1);\n\n private slBarHelper = signal<ICanvasHelper>(defaultHelper());\n private notificationService = inject(LibsUiNotificationService);\n\n /* INPUT */\n readonly customOptions = input<IPickerCustomOptions>();\n\n /* OUTPUT */\n readonly outColorChange = output<string>();\n\n /* VIEW CHILD */\n private readonly hueEl = viewChild.required<ElementRef>('hueEl');\n private readonly huePointerEl = viewChild.required<ElementRef>('huePointerEl');\n private readonly slEl = viewChild.required<ElementRef>('slEl');\n private readonly slPointerEl = viewChild.required<ElementRef>('slPointerEl');\n private readonly alphaEl = viewChild.required<ElementRef>('alphaEl');\n private readonly alphaPointerEl = viewChild.required<ElementRef>('alphaPointerEl');\n private readonly previewEl = viewChild.required<ElementRef>('previewEl');\n\n constructor() {\n effect(() => {\n const ctx = this.alphaEl().nativeElement.getContext('2d');\n\n ctx.clearRect(0, 0, this.options().alphaBarSize[0], this.options().alphaBarSize[1]);\n const gradient = ctx.createLinearGradient(0, 0, this.alphaEl().nativeElement.width - 1, 0);\n\n gradient.addColorStop(0, `hsla(${this.h()},${this.s()}%,${this.l()}%, 0)`);\n gradient.addColorStop(1, `hsla(${this.h()},${this.s()}%,${this.l()}%, 1)`);\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, this.options().alphaBarSize[0], this.options().alphaBarSize[1]);\n })\n }\n\n /* FUNCTIONS */\n ngOnInit(): void {\n if (this.customOptions()) {\n this.options.update(options => ({ ...options, ...this.customOptions() }))\n }\n }\n\n ngAfterViewInit(): void {\n this.setupHueCanvas();\n this.setupSlCanvas();\n this.setupSlBarHelper();\n if (this.options().showAlpha) {\n this.setupAlphaCanvas();\n }\n this.handlerColorChange(this.options().format, this.options().color);\n }\n\n private setupHueCanvas() {\n const canvas = this.hueEl().nativeElement;\n\n canvas.width = this.options().hueBarSize[0];\n canvas.height = this.options().hueBarSize[1];\n const ctx = canvas.getContext('2d');\n const gradient = ctx.createLinearGradient(0, 0, this.options().hueBarSize[0], 0);\n const step = 1 / 360;\n\n for (let ii = 0; ii <= 1; ii += step) {\n gradient.addColorStop(ii, `hsl(${360 * ii}, 100%, 50%)`);\n }\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, this.options().hueBarSize[0], this.options().hueBarSize[1]);\n const onMouseMove = (event: MouseEvent) => {\n const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().hueBarSize[0]);\n const hue = Math.round(x * 360 / this.options().hueBarSize[0]);\n\n this.huePointerEl().nativeElement.style.left = `${x - 7}px`;\n this.h.set(hue);\n this.handlerColorChange('h', hue);\n };\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n\n canvas.addEventListener('mousedown', (event: MouseEvent) => {\n onMouseMove(event);\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n });\n }\n\n private setupSlCanvas() {\n const canvas = this.slEl().nativeElement;\n\n canvas.width = this.options().slBarSize[0];\n canvas.height = this.options().slBarSize[1];\n const onMouseMove = (event: MouseEvent) => {\n const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().slBarSize[0] - 1);\n const y = limit(event.clientY - canvas.getBoundingClientRect().top, 0, this.options().slBarSize[1] - 1);\n const c = this.slBarHelper().grabColor(x, y);\n\n this.slPointerEl().nativeElement.style.left = `${x - 7}px`;\n this.slPointerEl().nativeElement.style.top = `${y - 7}px`;\n this.handlerColorChange('rgb', c);\n };\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n\n canvas.addEventListener('mousedown', (event: MouseEvent) => {\n onMouseMove(event);\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n });\n }\n\n private setupSlBarHelper() {\n const canvas = this.slEl().nativeElement;\n const ctx = canvas.getContext('2d');\n const width = +canvas.width;\n const height = +canvas.height;\n const whiteBlackGradient = ctx.createLinearGradient(1, 1, 1, height - 1);\n\n whiteBlackGradient.addColorStop(0, 'white');\n whiteBlackGradient.addColorStop(1, 'black');\n\n this.slBarHelper.set({\n setHue: (hue: number) => {\n const colorGradient = ctx.createLinearGradient(1, 0, width - 1, 0);\n colorGradient.addColorStop(0, `hsla(${hue}, 100%, 50%, 0)`);\n colorGradient.addColorStop(1, `hsla(${hue}, 100%, 50%, 1)`);\n\n ctx.fillStyle = whiteBlackGradient;\n ctx.fillRect(0, 0, width, height);\n ctx.fillStyle = colorGradient;\n ctx.globalCompositeOperation = 'multiply';\n ctx.fillRect(0, 0, width, height);\n ctx.globalCompositeOperation = 'source-over';\n },\n grabColor: (x: number, y: number) => ctx.getImageData(x, y, 1, 1).data,\n findColor: (r: number, g: number, b: number) => {\n const [, s, v] = rgbToHsv(r, g, b);\n const x = s * width;\n const y = height - (v * height);\n\n return [x, y];\n }\n });\n }\n\n private setupAlphaCanvas() {\n const canvas = this.alphaEl().nativeElement;\n\n canvas.width = this.options().alphaBarSize[0];\n canvas.height = this.options().alphaBarSize[1];\n const ctx = canvas.getContext('2d');\n const gradient = ctx.createLinearGradient(0, 0, canvas.width - 1, 0);\n\n gradient.addColorStop(0, `hsla(${this.h()},${this.s()}%,${this.l()}%, 0)`);\n gradient.addColorStop(1, `hsla(${this.h()},${this.s()}%,${this.l()}%, 1)`);\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, this.options().alphaBarSize[0], this.options().alphaBarSize[1]);\n const onMouseMove = (event: MouseEvent) => {\n const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().alphaBarSize[0]);\n const alpha = +(x / this.options().alphaBarSize[0]).toFixed(2);\n\n this.alphaPointerEl().nativeElement.style.left = `${x - 7}px`;\n this.handlerColorChange('alpha', alpha);\n };\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n\n canvas.addEventListener('mousedown', (event: MouseEvent) => {\n onMouseMove(event);\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n });\n }\n\n protected handlerCopyColor(event: Event) {\n event.stopPropagation();\n window.navigator.clipboard.writeText(this.hex());\n this.notificationService.showCompTypeTextSuccess('i18n_copy_successfully');\n }\n\n private updatePointerH(h: number) {\n const x = this.options().hueBarSize[0] * h / 360;\n\n this.huePointerEl().nativeElement.style.left = `${x - 7}px`;\n }\n\n private updatePointerSl(h: number, s: number, l: number) {\n const [r, g, b] = hslToRgb(h, s, l);\n const [x, y] = this.slBarHelper().findColor(r, g, b) as Array<number>;\n\n if (x >= 0) {\n this.slPointerEl().nativeElement.style.left = `${x - 7}px`;\n this.slPointerEl().nativeElement.style.top = `${y - 7}px`;\n }\n }\n\n private updatePointerA(a: number) {\n if (!this.options().showAlpha) {\n return;\n }\n const x = this.options().alphaBarSize[0] * a;\n\n this.alphaPointerEl().nativeElement.style.left = `${x - 7}px`;\n }\n\n private updateHex(r: number, g: number, b: number, a: number) {\n if (this.options().showAlpha) {\n this.hex.set(parseColor([r, g, b, a], 'hexcss4') as string);\n\n return;\n }\n this.hex.set(rgbToHex(r, g, b));\n }\n\n private updateRgb() {\n const rgb = hslToRgb(this.h(), this.s(), this.l());\n\n this.r.set(rgb[0]);\n this.g.set(rgb[1]);\n this.b.set(rgb[2]);\n }\n\n private updateHsl() {\n const hsl = rgbToHsl(this.r(), this.g(), this.b());\n\n this.h.set(hsl[0]);\n this.s.set(hsl[1]);\n this.l.set(hsl[2]);\n }\n\n private updateValuesAndPointer(config: IConfigUpdate) {\n if (config.rgb) {\n this.updateRgb();\n }\n if (config.hsl) {\n this.updateHsl();\n }\n if (config.hue) {\n this.slBarHelper().setHue(this.h());\n }\n if (config.hPoint) {\n this.updatePointerH(this.h());\n }\n if (config.slPoint) {\n this.updatePointerSl(this.h(), this.s(), this.l());\n }\n if (config.hex) {\n this.updateHex(this.r(), this.g(), this.b(), this.a());\n }\n if (config.aPoint) {\n this.updatePointerA(this.a());\n }\n }\n\n private handlerColorChange(key: string, value: string | number | Array<number>, silent = false) {\n let config: IConfigUpdate = {};\n\n switch (key) {\n case 'h':\n config = { hPoint: true, hex: true, rgb: true, hue: true };\n break;\n case 's':\n config = { slPoint: true, hex: true, rgb: true };\n break;\n case 'l':\n config = { slPoint: true, hex: true, rgb: true };\n break;\n case 'r':\n config = { hPoint: true, slPoint: true, hex: true, hsl: true, hue: true };\n break;\n case 'g':\n config = { hPoint: true, slPoint: true, hex: true, hsl: true, hue: true };\n break;\n case 'b':\n config = { hPoint: true, slPoint: true, hex: true, hsl: true, hue: true };\n break;\n case 'rgb':\n this.r.set((value as Array<number>)[0]);\n this.g.set((value as Array<number>)[1]);\n this.b.set((value as Array<number>)[2]);\n config = { hex: true, hsl: true };\n break;\n case 'rgba':\n this.r.set((value as Array<number>)[0]);\n this.g.set((value as Array<number>)[1]);\n this.b.set((value as Array<number>)[2]);\n this.a.set((value as Array<number>)[3]);\n config = { hPoint: true, slPoint: true, hex: true, aPoint: true, hsl: true, hue: true };\n break;\n case 'hsl':\n this.h.set((value as Array<number>)[0]);\n this.s.set((value as Array<number>)[1]);\n this.l.set((value as Array<number>)[2]);\n config = { hPoint: true, slPoint: true, hex: true, aPoint: true, rgb: true, hue: true };\n break;\n case 'hsla':\n this.h.set((value as Array<number>)[0]);\n this.s.set((value as Array<number>)[1]);\n this.l.set((value as Array<number>)[2]);\n this.a.set((value as Array<number>)[3]);\n config = { hPoint: true, slPoint: true, hex: true, aPoint: true, rgb: true, hue: true };\n break;\n case 'hex': {\n const rgba = cssColorToRgba(value as string) || [this.r(), this.g(), this.b(), this.a()];\n\n this.r.set(rgba[0]);\n this.g.set(rgba[1]);\n this.b.set(rgba[2]);\n this.a.set(rgba[3]);\n config = { hPoint: true, slPoint: true, aPoint: true, hsl: true, hue: true };\n break;\n }\n case 'color': {\n const rgba = (parseColor(value as string | Array<number>, 'rgba') || [0, 0, 0, 1]) as Array<number>;\n\n this.r.set(rgba[0]);\n this.g.set(rgba[1]);\n this.b.set(rgba[2]);\n this.a.set(rgba[3]);\n config = { hPoint: true, slPoint: true, hex: true, aPoint: true, hsl: true, hue: true };\n\n break;\n }\n case 'alpha':\n this.a.set(value as number);\n this.updateHex(this.r(), this.g(), this.b(), this.a());\n break;\n }\n this.updateValuesAndPointer(config);\n this.previewEl().nativeElement.style.backgroundColor = this.a() === 1 ? `rgb(${this.r()},${this.g()},${this.b()})` : `rgba(${this.r()},${this.g()},${this.b()},${this.a()})`;\n if (!silent) {\n this.outColorChange.emit(this.hex());\n }\n }\n\n protected handlerFocusAndBlur(event: IFocusAndBlurEvent, key: string) {\n this.focus.set(event.name === 'blur' ? undefined : key);\n }\n\n protected handlerValueChange(event: string | number, key: string) {\n this.handlerColorChange(key, event);\n }\n\n}","<div class=\"relative\"\n [style.width.px]=\"options().slBarSize[0]\">\n <div class=\"cursor-pointer\">\n <canvas #slEl\n class=\"rounded-tl-[4px] rounded-tr-[4px] libs-ui-color-picker-background-transparent\"></canvas>\n <div #slPointerEl\n class=\"libs-ui-color-picker-dot\"></div>\n </div>\n <div class=\"relative\">\n <canvas #hueEl\n class=\"libs-ui-color-picker-background-transparent\"\n [class.rounded-bl-[4px]]=\"!options().showAlpha\"\n [class.rounded-br-[4px]]=\"!options().showAlpha\"></canvas>\n <div #huePointerEl\n class=\"libs-ui-color-picker-dot\"></div>\n </div>\n @if (options().showAlpha) {\n <div class=\"relative\">\n <canvas #alphaEl\n class=\"rounded-bl-[4px] rounded-br-[4px] libs-ui-color-picker-background-transparent\">\n </canvas>\n <div #alphaPointerEl\n class=\"libs-ui-color-picker-dot\"></div>\n </div>\n }\n <div class=\"flex items-end\">\n <div class=\"text-center mr-[16px]\">\n <div class=\"libs-ui-color-picker-background-transparent rounded-[4px]\">\n <div #previewEl\n class=\"w-[32px] h-[32px] rounded-[4px] cursor-pointer\"\n (click)=\"handlerCopyColor($event)\"></div>\n </div>\n </div>\n @if (options().showHex) {\n <div class=\"text-center mr-[12px]\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">HEX</span>\n <div class=\"w-[88px]\">\n <libs_ui-components-inputs-input [(value)]=\"hex\"\n [classInclude]=\"'text-center !p-0'\"\n (outChange)=\"handlerValueChange($event, 'hex')\" />\n </div>\n </div>\n }\n <div>\n @if (options().showHsl) {\n <div class=\"flex\">\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">H</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"h\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"360\"\n [classInclude]=\"'text-center !p-0 !rounded-tr-none !rounded-br-none ' + (focus() === 's' ? '!border-r-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'h')\"\n (outChange)=\"handlerValueChange($event, 'h')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">S</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"s\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"100\"\n [classInclude]=\"'text-center !p-0 !rounded-none ' + (focus() === 's' ? '' : '!border-x-transparent')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 's')\"\n (outChange)=\"handlerValueChange($event, 's')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">L</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"l\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"100\"\n [classInclude]=\"'text-center !p-0 !rounded-tl-none !rounded-bl-none ' + (focus() === 's' ? '!border-l-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'l')\"\n (outChange)=\"handlerValueChange($event, 'l')\" />\n </div>\n </div>\n </div>\n }\n @if (options().showRgb) {\n <div class=\"flex\">\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">R</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"r\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"255\"\n [classInclude]=\"'text-center !p-0 !rounded-tr-none !rounded-br-none ' + (focus() === 'g' ? '!border-r-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'r')\"\n (outChange)=\"handlerValueChange($event, 'r')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">G</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"g\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"255\"\n [classInclude]=\"'text-center !p-0 !rounded-none ' + (focus() === 'g' ? '' : '!border-x-transparent')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'g')\"\n (outChange)=\"handlerValueChange($event, 'g')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">B</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"b\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"255\"\n [classInclude]=\"'text-center !p-0 !rounded-tl-none !rounded-bl-none ' + (focus() === 'g' ? '!border-l-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'b')\"\n (outChange)=\"handlerValueChange($event, 'b')\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-color-picker.mjs","sources":["../../../../../libs-ui/components/color-picker/src/utils/picker.ts","../../../../../libs-ui/components/color-picker/src/color-picker.component.ts","../../../../../libs-ui/components/color-picker/src/color-picker.component.html","../../../../../libs-ui/components/color-picker/src/libs-ui-components-color-picker.ts"],"sourcesContent":["import { get, isNil, set } from \"@libs-ui/utils\";\nimport { IPickerOptions } from \"../interfaces\";\n\nexport const ColorNames = { 'aliceblue': '#F0F8FF', 'antiquewhite': '#FAEBD7', 'aqua': '#00FFFF', 'aquamarine': '#7FFFD4', 'azure': '#F0FFFF', 'beige': '#F5F5DC', 'bisque': '#FFE4C4', 'black': '#000000', 'blanchedalmond': '#FFEBCD', 'blue': '#0000FF', 'blueviolet': '#8A2BE2', 'brown': '#A52A2A', 'burlywood': '#DEB887', 'cadetblue': '#5F9EA0', 'chartreuse': '#7FFF00', 'chocolate': '#D2691E', 'coral': '#FF7F50', 'cornflowerblue': '#6495ED', 'cornsilk': '#FFF8DC', 'crimson': '#DC143C', 'cyan': '#00FFFF', 'darkblue': '#00008B', 'darkcyan': '#008B8B', 'darkgoldenrod': '#B8860B', 'darkgray': '#A9A9A9', 'darkgrey': '#A9A9A9', 'darkgreen': '#006400', 'darkkhaki': '#BDB76B', 'darkmagenta': '#8B008B', 'darkolivegreen': '#556B2F', 'darkorange': '#FF8C00', 'darkorchid': '#9932CC', 'darkred': '#8B0000', 'darksalmon': '#E9967A', 'darkseagreen': '#8FBC8F', 'darkslateblue': '#483D8B', 'darkslategray': '#2F4F4F', 'darkslategrey': '#2F4F4F', 'darkturquoise': '#00CED1', 'darkviolet': '#9400D3', 'deeppink': '#FF1493', 'deepskyblue': '#00BFFF', 'dimgray': '#696969', 'dimgrey': '#696969', 'dodgerblue': '#1E90FF', 'firebrick': '#B22222', 'floralwhite': '#FFFAF0', 'forestgreen': '#228B22', 'fuchsia': '#FF00FF', 'gainsboro': '#DCDCDC', 'ghostwhite': '#F8F8FF', 'gold': '#FFD700', 'goldenrod': '#DAA520', 'gray': '#808080', 'grey': '#808080', 'green': '#008000', 'greenyellow': '#ADFF2F', 'honeydew': '#F0FFF0', 'hotpink': '#FF69B4', 'indianred ': '#CD5C5C', 'indigo ': '#4B0082', 'ivory': '#FFFFF0', 'khaki': '#F0E68C', 'lavender': '#E6E6FA', 'lavenderblush': '#FFF0F5', 'lawngreen': '#7CFC00', 'lemonchiffon': '#FFFACD', 'lightblue': '#ADD8E6', 'lightcoral': '#F08080', 'lightcyan': '#E0FFFF', 'lightgoldenrodyellow': '#FAFAD2', 'lightgray': '#D3D3D3', 'lightgrey': '#D3D3D3', 'lightgreen': '#90EE90', 'lightpink': '#FFB6C1', 'lightsalmon': '#FFA07A', 'lightseagreen': '#20B2AA', 'lightskyblue': '#87CEFA', 'lightslategray': '#778899', 'lightslategrey': '#778899', 'lightsteelblue': '#B0C4DE', 'lightyellow': '#FFFFE0', 'lime': '#00FF00', 'limegreen': '#32CD32', 'linen': '#FAF0E6', 'magenta': '#FF00FF', 'maroon': '#800000', 'mediumaquamarine': '#66CDAA', 'mediumblue': '#0000CD', 'mediumorchid': '#BA55D3', 'mediumpurple': '#9370DB', 'mediumseagreen': '#3CB371', 'mediumslateblue': '#7B68EE', 'mediumspringgreen': '#00FA9A', 'mediumturquoise': '#48D1CC', 'mediumvioletred': '#C71585', 'midnightblue': '#191970', 'mintcream': '#F5FFFA', 'mistyrose': '#FFE4E1', 'moccasin': '#FFE4B5', 'navajowhite': '#FFDEAD', 'navy': '#000080', 'oldlace': '#FDF5E6', 'olive': '#808000', 'olivedrab': '#6B8E23', 'orange': '#FFA500', 'orangered': '#FF4500', 'orchid': '#DA70D6', 'palegoldenrod': '#EEE8AA', 'palegreen': '#98FB98', 'paleturquoise': '#AFEEEE', 'palevioletred': '#DB7093', 'papayawhip': '#FFEFD5', 'peachpuff': '#FFDAB9', 'peru': '#CD853F', 'pink': '#FFC0CB', 'plum': '#DDA0DD', 'powderblue': '#B0E0E6', 'purple': '#800080', 'rebeccapurple': '#663399', 'red': '#FF0000', 'rosybrown': '#BC8F8F', 'royalblue': '#4169E1', 'saddlebrown': '#8B4513', 'salmon': '#FA8072', 'sandybrown': '#F4A460', 'seagreen': '#2E8B57', 'seashell': '#FFF5EE', 'sienna': '#A0522D', 'silver': '#C0C0C0', 'skyblue': '#87CEEB', 'slateblue': '#6A5ACD', 'slategray': '#708090', 'slategrey': '#708090', 'snow': '#FFFAFA', 'springgreen': '#00FF7F', 'steelblue': '#4682B4', 'tan': '#D2B48C', 'teal': '#008080', 'thistle': '#D8BFD8', 'tomato': '#FF6347', 'turquoise': '#40E0D0', 'violet': '#EE82EE', 'wheat': '#F5DEB3', 'white': '#FFFFFF', 'whitesmoke': '#F5F5F5', 'yellow': '#FFFF00', 'yellowgreen': '#9ACD32' };\nexport const optionsDefault = (): IPickerOptions => {\n return {\n showHsl: false,\n showRgb: true,\n showHex: true,\n showAlpha: false,\n color: '#ff0000',\n format: 'color',\n slBarSize: [316, 200],\n hueBarSize: [316, 20],\n alphaBarSize: [316, 20]\n };\n}\n\nexport const limit = (value: number | string, min: number, max: number) => {\n value = +value;\n return isNaN(value) ? min : (value < min ? min : (value > max ? max : value));\n}\n\nexport const hslToRgb = (h: number, s: number, l: number) => {\n let r, g, b;\n [h, s, l] = [limit(h, 0, 360) / 360, limit(s, 0, 100) / 100, limit(l, 0, 100) / 100];\n\n if (s == 0) {\n r = g = b = l; // achromatic\n\n return [r * 255, g * 255, b * 255].map(Math.round);\n }\n const hueToRgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = (2 * l) - q;\n\n r = hueToRgb(p, q, h + (1 / 3));\n g = hueToRgb(p, q, h);\n b = hueToRgb(p, q, h - (1 / 3));\n\n return [r * 255, g * 255, b * 255].map(Math.round);\n}\n\nexport const cssColorToRgba = (color: string) => {\n if (color) {\n const colorByName = get(ColorNames, color.toLowerCase());\n const [, , , r, g, b, a, , rr, gg, bb, aa] = /^\\s*#?((([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])?)|(([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})?))\\s*$/i.exec(colorByName || color) || [];\n if (!isNil(r)) {\n return [\n parseInt(r + r, 16),\n parseInt(g + g, 16),\n parseInt(b + b, 16),\n a ? +((parseInt(a + a, 16)) / 255).toFixed(2) : 1\n ];\n }\n if (!isNil(rr)) {\n return [\n parseInt(rr, 16),\n parseInt(gg, 16),\n parseInt(bb, 16),\n aa ? +((parseInt(aa, 16)) / 255).toFixed(2) : 1\n ];\n }\n }\n\n return undefined;\n}\n\nexport const parseColorToRgba = (color: string | Array<number>) => {\n if (Array.isArray(color)) {\n return [\n limit(color[0], 0, 255),\n limit(color[1], 0, 255),\n limit(color[2], 0, 255),\n limit(color[3] ?? 1, 0, 1)\n ];\n }\n const parsed = cssColorToRgba(color) || cssRgbaToRgba(color);\n\n if (parsed && parsed.length === 3) {\n parsed.push(1);\n }\n\n return parsed;\n}\n\nexport const cssRgbaToRgba = (rgba: string) => {\n if (rgba) {\n const [m, r, g, b, , a] = /^rgba?\\((\\d+)\\s*[\\s,]\\s*(\\d+)\\s*[\\s,]\\s*(\\d+)(\\s*[\\s,]\\s*(\\d*(.\\d+)?))?\\)/i.exec(rgba) || [];\n\n return m ? [limit(r, 0, 255), limit(g, 0, 255), limit(b, 0, 255), limit(a ?? 1, 0, 1)] : undefined;\n }\n\n return undefined;\n}\n\nexport const cssHslaToHsla = (hsla: string) => {\n if (hsla) {\n const [m, h, s, l, , a] = /^hsla?\\((\\d+)\\s*[\\s,]\\s*(\\d+)\\s*[\\s,]\\s*(\\d+)(\\s*[\\s,]\\s*(\\d*(.\\d+)?))?\\)/i.exec(hsla) || [];\n\n return m ? [limit(h, 0, 255), limit(s, 0, 255), limit(l, 0, 255), limit(a ?? 1, 0, 1)] : undefined;\n }\n\n return undefined;\n}\n\nexport const parseColorToHsla = (color: string | Array<number>) => {\n if (Array.isArray(color)) {\n return [\n limit(color[0], 0, 360),\n limit(color[1], 0, 100),\n limit(color[2], 0, 100),\n limit(color[3] ?? 1, 0, 1)\n ];\n }\n const parsed = cssHslaToHsla(color);\n\n if (parsed && parsed.length === 3) {\n parsed.push(1);\n }\n\n return parsed;\n}\n\nexport const rgbToHsl = (r: number, g: number, b: number) => {\n [r, g, b] = [limit(r, 0, 255) / 255, limit(g, 0, 255) / 255, limit(b, 0, 255) / 255];\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h, s = (max + min) / 2;\n const l = (max + min) / 2;\n\n if (max == min) {\n h = s = 0; // achromatic\n\n return [h * 360, s * 100, l * 100].map(Math.round);\n }\n const d = max - min;\n\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = ((g - b) / d) + (g < b ? 6 : 0);\n break;\n case g:\n h = ((b - r) / d) + 2;\n break;\n case b:\n h = ((r - g) / d) + 4;\n break;\n }\n h = (h || 0) / 6;\n\n return [h * 360, s * 100, l * 100].map(Math.round);\n}\n\nexport const rgbToHex = (r: number, g: number, b: number) => {\n [r, g, b] = [limit(r, 0, 255), limit(g, 0, 255), limit(b, 0, 255)];\n\n return \"#\" + (\"000000\" + ((r << 16) | (g << 8) | b).toString(16)).slice(-6);\n}\n\nexport const rgbToInt = (r: number, g: number, b: number) => {\n return (r << 16) | (g << 8) | b;\n}\n\nexport const rgbToHsv = (r: number, g: number, b: number) => {\n [r, g, b] = [limit(r, 0, 255) / 255, limit(g, 0, 255) / 255, limit(b, 0, 255) / 255];\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h, s = max;\n const v = max;\n const d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if (max == min) {\n h = 0;\n\n return [h, s, v];\n }\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h = (h || 0) / 6;\n\n return [h, s, v];\n}\n\nexport const formatColor = (data: Array<number>, format: string) => {\n switch (format) {\n case 'rgb':\n default:\n return data.slice(0, 3);\n case 'rgbcss':\n return `rgb(${data[0]}, ${data[1]}, ${data[2]})`;\n case 'rgbcss4':\n return `rgb(${data[0]}, ${data[1]}, ${data[2]}, ${data[3]})`;\n case 'rgba':\n return data;\n case 'rgbacss':\n return `rgba(${data[0]}, ${data[1]}, ${data[2]}, ${data[3]})`;\n case 'hsl':\n return rgbToHsl(data[0], data[1], data[2]);\n case 'hslcss':\n data = rgbToHsl(data[0], data[1], data[2]);\n\n return `hsl(${data[0]}, ${data[1]}, ${data[2]})`;\n case 'hslcss4': {\n const hh = rgbToHsl(data[0], data[1], data[2]);\n\n return `hsl(${hh[0]}, ${hh[1]}, ${hh[2]}, ${data[3]})`;\n }\n case 'hsla':\n return [...rgbToHsl(data[0], data[1], data[2]), data[3]];\n case 'hslacss': {\n const ha = rgbToHsl(data[0], data[1], data[2]);\n\n return `hsla(${ha[0]}, ${ha[1]}, ${ha[2]}, ${data[3]})`;\n }\n case 'hex':\n return rgbToHex(data[0], data[1], data[2]);\n case 'hexcss4':\n return rgbToHex(data[0], data[1], data[2]) + ('00' + parseInt((data[3] * 255).toString()).toString(16)).slice(-2);\n case 'int':\n return rgbToInt(data[0], data[1], data[2]);\n }\n}\n\nexport const parseColor = (color: string | Array<number>, format: string | object) => {\n if (!isNil(color)) {\n let data: Array<number> | undefined = [];\n\n data = parseColorToRgba(color) || (parseColorToHsla(color) && [...hslToRgb(data[0], data[1], data[2]), data[3]]);\n if (data) {\n if (typeof format === 'object') {\n return ['rgb', 'rgbcss', 'rgbcss4', 'rgba', 'rgbacss', 'hsl', 'hslcss', 'hslcss4', 'hsla', 'hslacss', 'hex', 'hexcss4', 'int'].reduce((m, f) => {\n set(m, f, formatColor(data, f));\n\n return m;\n }, format);\n }\n\n return formatColor(data, format as string);\n }\n }\n\n return undefined;\n}\n\nexport const defaultHelper = () => {\n return {\n setHue: () => { return },\n grabColor: () => [],\n findColor: () => []\n };\n}","import { AfterViewInit, ChangeDetectionStrategy, Component, effect, ElementRef, inject, input, OnInit, output, signal, viewChild } from \"@angular/core\";\nimport { IFocusAndBlurEvent, LibsUiComponentsInputsInputComponent } from \"@libs-ui/components-inputs-input\";\nimport { LibsUiNotificationService } from \"@libs-ui/services-notification\";\nimport { ICanvasHelper, IConfigUpdate, IPickerCustomOptions, IPickerOptions } from \"./interfaces/picker.interface\";\nimport { cssColorToRgba, defaultHelper, hslToRgb, limit, optionsDefault, parseColor, rgbToHex, rgbToHsl, rgbToHsv } from \"./utils/picker\";\nimport { set } from \"@libs-ui/utils\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-color_picker',\n templateUrl: './color-picker.component.html',\n styleUrl: './color-picker.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n LibsUiComponentsInputsInputComponent\n ]\n})\nexport class LibsUiComponentsColorPickerComponent implements OnInit, AfterViewInit {\n\n /* PROPERTY */\n protected options = signal<IPickerOptions>(optionsDefault());\n protected focus = signal<string | undefined>(undefined);\n protected hex = signal<string>('');\n protected s = signal<number>(0);\n protected h = signal<number>(0);\n protected l = signal<number>(0);\n protected r = signal<number>(0);\n protected g = signal<number>(0);\n protected b = signal<number>(0);\n protected a = signal<number>(1);\n\n private slBarHelper = signal<ICanvasHelper>(defaultHelper());\n private notificationService = inject(LibsUiNotificationService);\n\n /* INPUT */\n readonly customOptions = input<IPickerCustomOptions>();\n\n /* OUTPUT */\n readonly outColorChange = output<string>();\n\n /* VIEW CHILD */\n private readonly hueEl = viewChild<ElementRef>('hueEl');\n private readonly huePointerEl = viewChild<ElementRef>('huePointerEl');\n private readonly slEl = viewChild<ElementRef>('slEl');\n private readonly slPointerEl = viewChild<ElementRef>('slPointerEl');\n private readonly alphaEl = viewChild<ElementRef>('alphaEl');\n private readonly alphaPointerEl = viewChild<ElementRef>('alphaPointerEl');\n private readonly previewEl = viewChild<ElementRef>('previewEl');\n\n constructor() {\n effect(() => {\n const ctx = this.alphaEl()?.nativeElement.getContext('2d');\n\n if (!ctx) {\n return;\n }\n ctx.clearRect(0, 0, this.options().alphaBarSize[0], this.options().alphaBarSize[1]);\n const gradient = ctx.createLinearGradient(0, 0, this.alphaEl()?.nativeElement.width - 1, 0);\n\n gradient.addColorStop(0, `hsla(${this.h()},${this.s()}%,${this.l()}%, 0)`);\n gradient.addColorStop(1, `hsla(${this.h()},${this.s()}%,${this.l()}%, 1)`);\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, this.options().alphaBarSize[0], this.options().alphaBarSize[1]);\n })\n }\n\n /* FUNCTIONS */\n ngOnInit(): void {\n if (this.customOptions()) {\n this.options.update(options => ({ ...options, ...this.customOptions() }))\n }\n }\n\n ngAfterViewInit(): void {\n this.setupHueCanvas();\n this.setupSlCanvas();\n this.setupSlBarHelper();\n if (this.options().showAlpha) {\n this.setupAlphaCanvas();\n }\n this.handlerColorChange(this.options().format, this.options().color);\n }\n\n private setupHueCanvas() {\n const canvas = this.hueEl()?.nativeElement;\n\n canvas.width = this.options().hueBarSize[0];\n canvas.height = this.options().hueBarSize[1];\n const ctx = canvas.getContext('2d');\n const gradient = ctx.createLinearGradient(0, 0, this.options().hueBarSize[0], 0);\n const step = 1 / 360;\n\n for (let ii = 0; ii <= 1; ii += step) {\n gradient.addColorStop(ii, `hsl(${360 * ii}, 100%, 50%)`);\n }\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, this.options().hueBarSize[0], this.options().hueBarSize[1]);\n const onMouseMove = (event: MouseEvent) => {\n const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().hueBarSize[0]);\n const hue = Math.round(x * 360 / this.options().hueBarSize[0]);\n\n set(this.huePointerEl()?.nativeElement.style, 'left', `${x - 7}px`);\n this.h.set(hue);\n this.handlerColorChange('h', hue);\n };\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n\n canvas.addEventListener('mousedown', (event: MouseEvent) => {\n onMouseMove(event);\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n });\n }\n\n private setupSlCanvas() {\n const canvas = this.slEl()?.nativeElement;\n\n canvas.width = this.options().slBarSize[0];\n canvas.height = this.options().slBarSize[1];\n const onMouseMove = (event: MouseEvent) => {\n const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().slBarSize[0] - 1);\n const y = limit(event.clientY - canvas.getBoundingClientRect().top, 0, this.options().slBarSize[1] - 1);\n const c = this.slBarHelper().grabColor(x, y);\n\n set(this.slPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);\n set(this.slPointerEl()?.nativeElement.style, 'top', `${y - 7}px`);\n this.handlerColorChange('rgb', c);\n };\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n\n canvas.addEventListener('mousedown', (event: MouseEvent) => {\n onMouseMove(event);\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n });\n }\n\n private setupSlBarHelper() {\n const canvas = this.slEl()?.nativeElement;\n const ctx = canvas.getContext('2d');\n const width = +canvas.width;\n const height = +canvas.height;\n const whiteBlackGradient = ctx.createLinearGradient(1, 1, 1, height - 1);\n\n whiteBlackGradient.addColorStop(0, 'white');\n whiteBlackGradient.addColorStop(1, 'black');\n\n this.slBarHelper.set({\n setHue: (hue: number) => {\n const colorGradient = ctx.createLinearGradient(1, 0, width - 1, 0);\n colorGradient.addColorStop(0, `hsla(${hue}, 100%, 50%, 0)`);\n colorGradient.addColorStop(1, `hsla(${hue}, 100%, 50%, 1)`);\n\n ctx.fillStyle = whiteBlackGradient;\n ctx.fillRect(0, 0, width, height);\n ctx.fillStyle = colorGradient;\n ctx.globalCompositeOperation = 'multiply';\n ctx.fillRect(0, 0, width, height);\n ctx.globalCompositeOperation = 'source-over';\n },\n grabColor: (x: number, y: number) => ctx.getImageData(x, y, 1, 1).data,\n findColor: (r: number, g: number, b: number) => {\n const [, s, v] = rgbToHsv(r, g, b);\n const x = s * width;\n const y = height - (v * height);\n\n return [x, y];\n }\n });\n }\n\n private setupAlphaCanvas() {\n const canvas = this.alphaEl()?.nativeElement;\n\n canvas.width = this.options().alphaBarSize[0];\n canvas.height = this.options().alphaBarSize[1];\n const ctx = canvas.getContext('2d');\n const gradient = ctx.createLinearGradient(0, 0, canvas.width - 1, 0);\n\n gradient.addColorStop(0, `hsla(${this.h()},${this.s()}%,${this.l()}%, 0)`);\n gradient.addColorStop(1, `hsla(${this.h()},${this.s()}%,${this.l()}%, 1)`);\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, this.options().alphaBarSize[0], this.options().alphaBarSize[1]);\n const onMouseMove = (event: MouseEvent) => {\n const x = limit(event.clientX - canvas.getBoundingClientRect().left, 0, this.options().alphaBarSize[0]);\n const alpha = +(x / this.options().alphaBarSize[0]).toFixed(2);\n\n set(this.alphaPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);\n this.handlerColorChange('alpha', alpha);\n };\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n\n canvas.addEventListener('mousedown', (event: MouseEvent) => {\n onMouseMove(event);\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n });\n }\n\n protected handlerCopyColor(event: Event) {\n event.stopPropagation();\n window.navigator.clipboard.writeText(this.hex());\n this.notificationService.showCompTypeTextSuccess('i18n_copy_successfully');\n }\n\n private updatePointerH(h: number) {\n const x = this.options().hueBarSize[0] * h / 360;\n\n set(this.huePointerEl()?.nativeElement.style, 'left', `${x - 7}px`);\n }\n\n private updatePointerSl(h: number, s: number, l: number) {\n const [r, g, b] = hslToRgb(h, s, l);\n const [x, y] = this.slBarHelper().findColor(r, g, b) as Array<number>;\n\n if (x >= 0) {\n set(this.slPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);\n set(this.slPointerEl()?.nativeElement.style, 'top', `${y - 7}px`);\n }\n }\n\n private updatePointerA(a: number) {\n if (!this.options().showAlpha) {\n return;\n }\n const x = this.options().alphaBarSize[0] * a;\n\n set(this.alphaPointerEl()?.nativeElement.style, 'left', `${x - 7}px`);\n }\n\n private updateHex(r: number, g: number, b: number, a: number) {\n if (this.options().showAlpha) {\n this.hex.set(parseColor([r, g, b, a], 'hexcss4') as string);\n\n return;\n }\n this.hex.set(rgbToHex(r, g, b));\n }\n\n private updateRgb() {\n const rgb = hslToRgb(this.h(), this.s(), this.l());\n\n this.r.set(rgb[0]);\n this.g.set(rgb[1]);\n this.b.set(rgb[2]);\n }\n\n private updateHsl() {\n const hsl = rgbToHsl(this.r(), this.g(), this.b());\n\n this.h.set(hsl[0]);\n this.s.set(hsl[1]);\n this.l.set(hsl[2]);\n }\n\n private updateValuesAndPointer(config: IConfigUpdate) {\n if (config.rgb) {\n this.updateRgb();\n }\n if (config.hsl) {\n this.updateHsl();\n }\n if (config.hue) {\n this.slBarHelper().setHue(this.h());\n }\n if (config.hPoint) {\n this.updatePointerH(this.h());\n }\n if (config.slPoint) {\n this.updatePointerSl(this.h(), this.s(), this.l());\n }\n if (config.hex) {\n this.updateHex(this.r(), this.g(), this.b(), this.a());\n }\n if (config.aPoint) {\n this.updatePointerA(this.a());\n }\n }\n\n private handlerColorChange(key: string, value: string | number | Array<number>, silent = false) {\n let config: IConfigUpdate = {};\n\n switch (key) {\n case 'h':\n config = { hPoint: true, hex: true, rgb: true, hue: true };\n break;\n case 's':\n config = { slPoint: true, hex: true, rgb: true };\n break;\n case 'l':\n config = { slPoint: true, hex: true, rgb: true };\n break;\n case 'r':\n config = { hPoint: true, slPoint: true, hex: true, hsl: true, hue: true };\n break;\n case 'g':\n config = { hPoint: true, slPoint: true, hex: true, hsl: true, hue: true };\n break;\n case 'b':\n config = { hPoint: true, slPoint: true, hex: true, hsl: true, hue: true };\n break;\n case 'rgb':\n this.r.set((value as Array<number>)[0]);\n this.g.set((value as Array<number>)[1]);\n this.b.set((value as Array<number>)[2]);\n config = { hex: true, hsl: true };\n break;\n case 'rgba':\n this.r.set((value as Array<number>)[0]);\n this.g.set((value as Array<number>)[1]);\n this.b.set((value as Array<number>)[2]);\n this.a.set((value as Array<number>)[3]);\n config = { hPoint: true, slPoint: true, hex: true, aPoint: true, hsl: true, hue: true };\n break;\n case 'hsl':\n this.h.set((value as Array<number>)[0]);\n this.s.set((value as Array<number>)[1]);\n this.l.set((value as Array<number>)[2]);\n config = { hPoint: true, slPoint: true, hex: true, aPoint: true, rgb: true, hue: true };\n break;\n case 'hsla':\n this.h.set((value as Array<number>)[0]);\n this.s.set((value as Array<number>)[1]);\n this.l.set((value as Array<number>)[2]);\n this.a.set((value as Array<number>)[3]);\n config = { hPoint: true, slPoint: true, hex: true, aPoint: true, rgb: true, hue: true };\n break;\n case 'hex': {\n const rgba = cssColorToRgba(value as string) || [this.r(), this.g(), this.b(), this.a()];\n\n this.r.set(rgba[0]);\n this.g.set(rgba[1]);\n this.b.set(rgba[2]);\n this.a.set(rgba[3]);\n config = { hPoint: true, slPoint: true, aPoint: true, hsl: true, hue: true };\n break;\n }\n case 'color': {\n const rgba = (parseColor(value as string | Array<number>, 'rgba') || [0, 0, 0, 1]) as Array<number>;\n\n this.r.set(rgba[0]);\n this.g.set(rgba[1]);\n this.b.set(rgba[2]);\n this.a.set(rgba[3]);\n config = { hPoint: true, slPoint: true, hex: true, aPoint: true, hsl: true, hue: true };\n\n break;\n }\n case 'alpha':\n this.a.set(value as number);\n this.updateHex(this.r(), this.g(), this.b(), this.a());\n break;\n }\n this.updateValuesAndPointer(config);\n set(this.previewEl()?.nativeElement.style, 'backgroundColor', this.a() === 1 ? `rgb(${this.r()},${this.g()},${this.b()})` : `rgba(${this.r()},${this.g()},${this.b()},${this.a()})`);\n if (!silent) {\n this.outColorChange.emit(this.hex());\n }\n }\n\n protected handlerFocusAndBlur(event: IFocusAndBlurEvent, key: string) {\n this.focus.set(event.name === 'blur' ? undefined : key);\n }\n\n protected handlerValueChange(event: string | number, key: string) {\n this.handlerColorChange(key, event);\n }\n\n}","<div class=\"relative\"\n [style.width.px]=\"options().slBarSize[0]\">\n <div class=\"cursor-pointer\">\n <canvas #slEl\n class=\"rounded-tl-[4px] rounded-tr-[4px] libs-ui-color-picker-background-transparent\"></canvas>\n <div #slPointerEl\n class=\"libs-ui-color-picker-dot\"></div>\n </div>\n <div class=\"relative\">\n <canvas #hueEl\n class=\"libs-ui-color-picker-background-transparent\"\n [class.rounded-bl-[4px]]=\"!options().showAlpha\"\n [class.rounded-br-[4px]]=\"!options().showAlpha\"></canvas>\n <div #huePointerEl\n class=\"libs-ui-color-picker-dot\"></div>\n </div>\n @if (options().showAlpha) {\n <div class=\"relative\">\n <canvas #alphaEl\n class=\"rounded-bl-[4px] rounded-br-[4px] libs-ui-color-picker-background-transparent\">\n </canvas>\n <div #alphaPointerEl\n class=\"libs-ui-color-picker-dot\"></div>\n </div>\n }\n <div class=\"flex items-end\">\n <div class=\"text-center mr-[16px]\">\n <div class=\"libs-ui-color-picker-background-transparent rounded-[4px]\">\n <div #previewEl\n class=\"w-[32px] h-[32px] rounded-[4px] cursor-pointer\"\n (click)=\"handlerCopyColor($event)\"></div>\n </div>\n </div>\n @if (options().showHex) {\n <div class=\"text-center mr-[12px]\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">HEX</span>\n <div class=\"w-[88px]\">\n <libs_ui-components-inputs-input [(value)]=\"hex\"\n [classInclude]=\"'text-center !p-0'\"\n (outChange)=\"handlerValueChange($event, 'hex')\" />\n </div>\n </div>\n }\n <div>\n @if (options().showHsl) {\n <div class=\"flex\">\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">H</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"h\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"360\"\n [classInclude]=\"'text-center !p-0 !rounded-tr-none !rounded-br-none ' + (focus() === 's' ? '!border-r-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'h')\"\n (outChange)=\"handlerValueChange($event, 'h')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">S</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"s\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"100\"\n [classInclude]=\"'text-center !p-0 !rounded-none ' + (focus() === 's' ? '' : '!border-x-transparent')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 's')\"\n (outChange)=\"handlerValueChange($event, 's')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">L</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"l\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"100\"\n [classInclude]=\"'text-center !p-0 !rounded-tl-none !rounded-bl-none ' + (focus() === 's' ? '!border-l-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'l')\"\n (outChange)=\"handlerValueChange($event, 'l')\" />\n </div>\n </div>\n </div>\n }\n @if (options().showRgb) {\n <div class=\"flex\">\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">R</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"r\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"255\"\n [classInclude]=\"'text-center !p-0 !rounded-tr-none !rounded-br-none ' + (focus() === 'g' ? '!border-r-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'r')\"\n (outChange)=\"handlerValueChange($event, 'r')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">G</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"g\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"255\"\n [classInclude]=\"'text-center !p-0 !rounded-none ' + (focus() === 'g' ? '' : '!border-x-transparent')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'g')\"\n (outChange)=\"handlerValueChange($event, 'g')\" />\n </div>\n </div>\n <div class=\"text-center\">\n <span class=\"libs-ui-font-h7r text-[#6a7383]\">B</span>\n <div class=\"w-[56px]\">\n <libs_ui-components-inputs-input [(value)]=\"b\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"0\"\n [maxValueNumber]=\"255\"\n [classInclude]=\"'text-center !p-0 !rounded-tl-none !rounded-bl-none ' + (focus() === 'g' ? '!border-l-transparent' : '')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlur($event, 'b')\"\n (outChange)=\"handlerValueChange($event, 'b')\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libs-ui/components-color-picker",
3
- "version": "0.2.25",
3
+ "version": "0.2.27",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.0",
6
6
  "@angular/core": "^18.2.0"