@sapphire-ion/framework 1.0.11 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/classes/environment.mjs +4 -2
- package/esm2022/lib/components/default/default-view/default-view.component.mjs +17 -11
- package/esm2022/lib/components/inputs/input-cep/input-cep.component.mjs +39 -0
- package/esm2022/lib/components/inputs/input-cep/input-cep.configuration.mjs +6 -0
- package/esm2022/lib/components/inputs/input-color/input-color.component.mjs +474 -0
- package/esm2022/lib/components/inputs/input-configuration.mjs +1 -1
- package/esm2022/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.mjs +8 -3
- package/esm2022/lib/components/inputs/input-icon/fluenticons.mjs +3734 -0
- package/esm2022/lib/components/inputs/input-icon/input-icon.component.mjs +54 -0
- package/esm2022/lib/components/inputs/input-icon/ionicons.mjs +1360 -0
- package/esm2022/lib/components/inputs/input-select/input-select.component.mjs +3 -3
- package/esm2022/lib/components/inputs/input-telefone/input-telefone.component.mjs +63 -0
- package/esm2022/lib/components/inputs/input-telefone/input-telefone.configuration.mjs +12 -0
- package/esm2022/lib/components/inputs/input-type.mjs +12 -6
- package/esm2022/lib/components/inputs/input-validators.mjs +32 -1
- package/esm2022/lib/components/inputs/inputs.module.mjs +18 -2
- package/esm2022/lib/index.mjs +9 -2
- package/fesm2022/sapphire-ion-framework.mjs +5768 -16
- package/fesm2022/sapphire-ion-framework.mjs.map +1 -1
- package/lib/classes/environment.d.ts +2 -1
- package/lib/components/default/default-view/default-view.component.d.ts +2 -0
- package/lib/components/inputs/input-cep/input-cep.component.d.ts +16 -0
- package/lib/components/inputs/input-cep/input-cep.configuration.d.ts +5 -0
- package/lib/components/inputs/input-color/input-color.component.d.ts +77 -0
- package/lib/components/inputs/input-configuration.d.ts +2 -1
- package/lib/components/inputs/input-cpf-cnpj/input-cpf-cnpj.component.d.ts +1 -0
- package/lib/components/inputs/input-icon/fluenticons.d.ts +1 -0
- package/lib/components/inputs/input-icon/input-icon.component.d.ts +20 -0
- package/lib/components/inputs/input-icon/ionicons.d.ts +1 -0
- package/lib/components/inputs/input-telefone/input-telefone.component.d.ts +18 -0
- package/lib/components/inputs/input-telefone/input-telefone.configuration.d.ts +9 -0
- package/lib/components/inputs/input-type.d.ts +12 -6
- package/lib/components/inputs/input-validators.d.ts +6 -0
- package/lib/components/inputs/inputs.module.d.ts +24 -20
- package/lib/index.d.ts +5 -0
- package/package.json +2 -1
- package/themes/compiled-styles.scss +9 -12
- package/themes/components/inputs/input-color/input-color.component.scss +41 -0
- package/themes/components/inputs/input-icon/input-icon.component.scss +0 -0
- package/themes/components/inputs/input-telefone/input-telefone.component.scss +0 -0
- package/themes/components/_inputs_new/inputs.scss +0 -15
- package/themes/components/inputs_old/input-color/input-color.component.scss +0 -48
- package/themes/components/inputs_old/inputs.scss +0 -67
- /package/themes/components/{_inputs_new/input-string/input-string.component.scss → inputs/input-cep/input-cep.component.scss} +0 -0
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
import { Component, ElementRef, ViewChild } from '@angular/core';
|
|
2
|
+
import { CustomInput } from '../custom-input';
|
|
3
|
+
import { Clipboard } from '@capacitor/clipboard';
|
|
4
|
+
import { GenericService } from '../../../services/generics.service';
|
|
5
|
+
import { SIonPopoverComponent } from '../../popover/sion-popover/sion-popover.component';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../../../services/generics.service";
|
|
8
|
+
import * as i2 from "@ionic/angular";
|
|
9
|
+
import * as i3 from "@angular/common";
|
|
10
|
+
import * as i4 from "@angular/forms";
|
|
11
|
+
import * as i5 from "@maskito/angular";
|
|
12
|
+
import * as i6 from "../../popover/sion-popover/sion-popover.component";
|
|
13
|
+
export class InputColorComponent extends CustomInput {
|
|
14
|
+
focus(event) {
|
|
15
|
+
if (this.input && event.target == this.inputContainer.nativeElement) {
|
|
16
|
+
this.input.nativeElement.focus();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
constructor(genericService) {
|
|
20
|
+
super();
|
|
21
|
+
this.genericService = genericService;
|
|
22
|
+
this.rgbColor = { r: 255, g: 0, b: 0 };
|
|
23
|
+
this.hslColor = { h: 0, s: 100, l: 50 };
|
|
24
|
+
this.alpha = 100;
|
|
25
|
+
this.rendering = false;
|
|
26
|
+
//#region [ Gradient ]
|
|
27
|
+
this.indicatorX = 100;
|
|
28
|
+
this.indicatorY = 0;
|
|
29
|
+
this.isGradientDragging = false;
|
|
30
|
+
this.gradientWidth = 0;
|
|
31
|
+
this.gradientHeight = 0;
|
|
32
|
+
this.isHueDragging = false;
|
|
33
|
+
this.hueSliderWidth = 0;
|
|
34
|
+
this.hueSliderHeight = 0;
|
|
35
|
+
this.isAlphaDragging = false;
|
|
36
|
+
this.alphaSliderWidth = 0;
|
|
37
|
+
this.alphaSliderHeight = 0;
|
|
38
|
+
this.HEXMask = { mask: HEXMask };
|
|
39
|
+
this.value.set("");
|
|
40
|
+
}
|
|
41
|
+
writeValue(obj) {
|
|
42
|
+
this.value.set(obj);
|
|
43
|
+
this.runValidation();
|
|
44
|
+
}
|
|
45
|
+
SetValue(value) {
|
|
46
|
+
this.value.set(value);
|
|
47
|
+
this.runValidation();
|
|
48
|
+
this.propagateChange(value);
|
|
49
|
+
}
|
|
50
|
+
async Present(event) {
|
|
51
|
+
this.rendering = true;
|
|
52
|
+
await this.popover.present(event);
|
|
53
|
+
this.InitializeGradient();
|
|
54
|
+
this.InitializeHueSlider();
|
|
55
|
+
this.InitializeAlphaSlider();
|
|
56
|
+
this.DrawColorGradient();
|
|
57
|
+
this.DrawHueSlider();
|
|
58
|
+
this.DrawAlphaSlider();
|
|
59
|
+
this.rendering = false;
|
|
60
|
+
}
|
|
61
|
+
InitializeGradient() {
|
|
62
|
+
const gradient = this.gradient.nativeElement;
|
|
63
|
+
this.gradientWidth = gradient.width;
|
|
64
|
+
this.gradientHeight = gradient.height;
|
|
65
|
+
this.gradientCtx = gradient.getContext('2d');
|
|
66
|
+
gradient.addEventListener('mousedown', this.StartGradientDrag.bind(this));
|
|
67
|
+
gradient.addEventListener('mousemove', this.GradientDrag.bind(this));
|
|
68
|
+
gradient.addEventListener('mouseup', this.EndGradientDrag.bind(this));
|
|
69
|
+
gradient.addEventListener('mouseleave', this.EndGradientDrag.bind(this));
|
|
70
|
+
// Touch events
|
|
71
|
+
gradient.addEventListener('touchstart', this.HandleGradientTouch.bind(this));
|
|
72
|
+
gradient.addEventListener('touchmove', this.HandleGradientTouch.bind(this));
|
|
73
|
+
gradient.addEventListener('touchend', this.EndGradientDrag.bind(this));
|
|
74
|
+
}
|
|
75
|
+
StartGradientDrag(e) {
|
|
76
|
+
this.isGradientDragging = true;
|
|
77
|
+
this.HandleColorSelection(e.offsetX, e.offsetY);
|
|
78
|
+
}
|
|
79
|
+
GradientDrag(e) {
|
|
80
|
+
if (this.isGradientDragging) {
|
|
81
|
+
this.HandleColorSelection(e.offsetX, e.offsetY);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
EndGradientDrag() {
|
|
85
|
+
this.isGradientDragging = false;
|
|
86
|
+
}
|
|
87
|
+
HandleGradientTouch(e) {
|
|
88
|
+
e.preventDefault();
|
|
89
|
+
if (e.type === "touchstart") {
|
|
90
|
+
this.isGradientDragging = true;
|
|
91
|
+
}
|
|
92
|
+
if (this.isGradientDragging) {
|
|
93
|
+
const rect = this.gradient.nativeElement.getBoundingClientRect();
|
|
94
|
+
const touch = e.touches[0];
|
|
95
|
+
const x = touch.clientX - rect.left;
|
|
96
|
+
const y = touch.clientY - rect.top;
|
|
97
|
+
this.HandleColorSelection(x, y);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
HandleColorSelection(x, y) {
|
|
101
|
+
// Constrain coordinates to canvas bounds
|
|
102
|
+
x = Math.max(0, Math.min(x, this.gradientWidth));
|
|
103
|
+
y = Math.max(0, Math.min(y, this.gradientHeight));
|
|
104
|
+
// Store the raw position percentage for the indicator
|
|
105
|
+
this.indicatorX = (x / this.gradientWidth) * 100;
|
|
106
|
+
this.indicatorY = (y / this.gradientHeight) * 100;
|
|
107
|
+
// Calculate saturation and lightness based on position
|
|
108
|
+
this.hslColor.s = Math.round(this.indicatorX);
|
|
109
|
+
// Adjust lightness calculation:
|
|
110
|
+
// - Top of canvas (y=0) should be white (lightness=100) on the left and pure color (lightness=50) on the right
|
|
111
|
+
// - Bottom of canvas (y=height) should be black (lightness=0)
|
|
112
|
+
if (this.hslColor.s === 0) {
|
|
113
|
+
// Left edge is always white to black, regardless of y position
|
|
114
|
+
this.hslColor.l = Math.round(100 - this.indicatorY);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// For other saturation values, top is 50-100% lightness (based on saturation), bottom is 0%
|
|
118
|
+
const maxLightness = 100 - this.hslColor.s / 2;
|
|
119
|
+
this.hslColor.l = Math.round(maxLightness - (this.indicatorY / 100) * maxLightness);
|
|
120
|
+
}
|
|
121
|
+
// Update selected color
|
|
122
|
+
this.UpdateSelectedColor(this.hslColor.s, this.hslColor.l, true);
|
|
123
|
+
// Redraw alpha slider with new color
|
|
124
|
+
this.DrawAlphaSlider();
|
|
125
|
+
}
|
|
126
|
+
//#endregion [ Gradient ]
|
|
127
|
+
UpdateSelectedColor(saturation = null, lightness = null, emitChanges = false) {
|
|
128
|
+
// Update HSL values
|
|
129
|
+
if (saturation != null) {
|
|
130
|
+
this.hslColor.s = saturation;
|
|
131
|
+
}
|
|
132
|
+
if (lightness != null) {
|
|
133
|
+
this.hslColor.l = lightness;
|
|
134
|
+
}
|
|
135
|
+
// Convert HSL to RGB
|
|
136
|
+
const rgb = HSLToRGB(this.hslColor);
|
|
137
|
+
this.rgbColor = rgb;
|
|
138
|
+
// Convert RGB to HEX
|
|
139
|
+
const hex = RGBToHex(rgb, this.alpha / 100);
|
|
140
|
+
if (emitChanges) {
|
|
141
|
+
this.SetValue(hex);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
this.value.set(hex);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
InitializeHueSlider() {
|
|
148
|
+
const hueSlider = this.hueSlider.nativeElement;
|
|
149
|
+
this.hueSliderWidth = hueSlider.width;
|
|
150
|
+
this.hueSliderHeight = hueSlider.height;
|
|
151
|
+
this.hueCtx = hueSlider.getContext("2d");
|
|
152
|
+
hueSlider.addEventListener("mousedown", this.StartHueDrag.bind(this));
|
|
153
|
+
hueSlider.addEventListener("mousemove", this.HueDrag.bind(this));
|
|
154
|
+
hueSlider.addEventListener("mouseup", this.EndHueDrag.bind(this));
|
|
155
|
+
hueSlider.addEventListener("mouseleave", this.EndHueDrag.bind(this));
|
|
156
|
+
// Touch events
|
|
157
|
+
hueSlider.addEventListener("touchstart", this.HandleHueTouch.bind(this));
|
|
158
|
+
hueSlider.addEventListener("touchmove", this.HandleHueTouch.bind(this));
|
|
159
|
+
hueSlider.addEventListener("touchend", this.EndHueDrag.bind(this));
|
|
160
|
+
}
|
|
161
|
+
StartHueDrag(e) {
|
|
162
|
+
this.isHueDragging = true;
|
|
163
|
+
this.HandleHueSelection(e.offsetX);
|
|
164
|
+
}
|
|
165
|
+
HueDrag(e) {
|
|
166
|
+
if (this.isHueDragging) {
|
|
167
|
+
this.HandleHueSelection(e.offsetX);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
EndHueDrag() {
|
|
171
|
+
this.isHueDragging = false;
|
|
172
|
+
}
|
|
173
|
+
HandleHueTouch(e) {
|
|
174
|
+
e.preventDefault();
|
|
175
|
+
if (e.type === "touchstart") {
|
|
176
|
+
this.isHueDragging = true;
|
|
177
|
+
}
|
|
178
|
+
if (this.isHueDragging) {
|
|
179
|
+
const rect = this.hueSlider.nativeElement.getBoundingClientRect();
|
|
180
|
+
const touch = e.touches[0];
|
|
181
|
+
const x = touch.clientX - rect.left;
|
|
182
|
+
this.HandleHueSelection(x);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
HandleHueSelection(x) {
|
|
186
|
+
// Constrain x to canvas bounds
|
|
187
|
+
x = Math.max(0, Math.min(x, this.hueSliderWidth));
|
|
188
|
+
// Calculate hue based on x position (0-360)
|
|
189
|
+
this.hslColor.h = Math.round((x / this.hueSliderWidth) * 360);
|
|
190
|
+
// Redraw color gradient with new hue
|
|
191
|
+
this.DrawColorGradient();
|
|
192
|
+
// Redraw alpha slider with new color
|
|
193
|
+
this.DrawAlphaSlider();
|
|
194
|
+
// Update selected color
|
|
195
|
+
this.UpdateSelectedColor(this.hslColor.s, this.hslColor.l, true);
|
|
196
|
+
}
|
|
197
|
+
InitializeAlphaSlider() {
|
|
198
|
+
const alphaSlider = this.alphaSlider.nativeElement;
|
|
199
|
+
this.alphaSliderHeight = alphaSlider.height;
|
|
200
|
+
this.alphaSliderWidth = alphaSlider.width;
|
|
201
|
+
this.alphaCtx = alphaSlider.getContext("2d");
|
|
202
|
+
alphaSlider.addEventListener("mousedown", this.StartAlphaDrag.bind(this));
|
|
203
|
+
alphaSlider.addEventListener("mousemove", this.AlphaDrag.bind(this));
|
|
204
|
+
alphaSlider.addEventListener("mouseup", this.EndAlphaDrag.bind(this));
|
|
205
|
+
alphaSlider.addEventListener("mouseleave", this.EndAlphaDrag.bind(this));
|
|
206
|
+
// Touch events
|
|
207
|
+
alphaSlider.addEventListener("touchstart", this.HandleAlphaTouch.bind(this));
|
|
208
|
+
alphaSlider.addEventListener("touchmove", this.HandleAlphaTouch.bind(this));
|
|
209
|
+
alphaSlider.addEventListener("touchend", this.EndAlphaDrag.bind(this));
|
|
210
|
+
}
|
|
211
|
+
StartAlphaDrag(e) {
|
|
212
|
+
this.isAlphaDragging = true;
|
|
213
|
+
this.HandleAlphaSelection(e.offsetX);
|
|
214
|
+
}
|
|
215
|
+
AlphaDrag(e) {
|
|
216
|
+
if (this.isAlphaDragging) {
|
|
217
|
+
this.HandleAlphaSelection(e.offsetX);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
EndAlphaDrag() {
|
|
221
|
+
this.isAlphaDragging = false;
|
|
222
|
+
}
|
|
223
|
+
HandleAlphaTouch(e) {
|
|
224
|
+
e.preventDefault();
|
|
225
|
+
if (e.type === "touchstart") {
|
|
226
|
+
this.isAlphaDragging = true;
|
|
227
|
+
}
|
|
228
|
+
if (this.isAlphaDragging) {
|
|
229
|
+
const rect = this.alphaSlider.nativeElement.getBoundingClientRect();
|
|
230
|
+
const touch = e.touches[0];
|
|
231
|
+
const x = touch.clientX - rect.left;
|
|
232
|
+
this.HandleAlphaSelection(x);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
HandleAlphaSelection(x) {
|
|
236
|
+
// Constrain x to canvas bounds
|
|
237
|
+
x = Math.max(0, Math.min(x, this.alphaSliderWidth));
|
|
238
|
+
// Calculate alpha based on x position (0-100)
|
|
239
|
+
this.alpha = Math.round((x / this.alphaSliderWidth) * 100);
|
|
240
|
+
// Update selected color
|
|
241
|
+
this.UpdateSelectedColor(this.hslColor.s, this.hslColor.l, true);
|
|
242
|
+
}
|
|
243
|
+
//#endregion [ Alpha Slider ]
|
|
244
|
+
SetColorFromHex(hexColor, updateCanvas = true, emitChanges = false) {
|
|
245
|
+
// Remove # if present
|
|
246
|
+
hexColor = hexColor.replace(/^#/, "");
|
|
247
|
+
let r, g, b, a = 1;
|
|
248
|
+
// Parse hex values based on string length
|
|
249
|
+
if (hexColor.length === 3) {
|
|
250
|
+
// Short hex (#RGB)
|
|
251
|
+
r = Number.parseInt(hexColor.charAt(0) + hexColor.charAt(0), 16);
|
|
252
|
+
g = Number.parseInt(hexColor.charAt(1) + hexColor.charAt(1), 16);
|
|
253
|
+
b = Number.parseInt(hexColor.charAt(2) + hexColor.charAt(2), 16);
|
|
254
|
+
}
|
|
255
|
+
else if (hexColor.length === 6) {
|
|
256
|
+
// Standard hex (#RRGGBB)
|
|
257
|
+
r = Number.parseInt(hexColor.substring(0, 2), 16);
|
|
258
|
+
g = Number.parseInt(hexColor.substring(2, 4), 16);
|
|
259
|
+
b = Number.parseInt(hexColor.substring(4, 6), 16);
|
|
260
|
+
}
|
|
261
|
+
else if (hexColor.length === 8) {
|
|
262
|
+
// Hex with alpha (#RRGGBBAA)
|
|
263
|
+
r = Number.parseInt(hexColor.substring(0, 2), 16);
|
|
264
|
+
g = Number.parseInt(hexColor.substring(2, 4), 16);
|
|
265
|
+
b = Number.parseInt(hexColor.substring(4, 6), 16);
|
|
266
|
+
a = Number.parseInt(hexColor.substring(6, 8), 16) / 255;
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
// Invalid hex, use default
|
|
270
|
+
console.error("Invalid hex color format");
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
// Update RGB color
|
|
274
|
+
this.rgbColor = { r, g, b };
|
|
275
|
+
// Convert RGB to HSL
|
|
276
|
+
this.hslColor = RGBToHSL(this.rgbColor);
|
|
277
|
+
// Update alpha
|
|
278
|
+
this.alpha = Math.round(a * 100);
|
|
279
|
+
// Update selected color
|
|
280
|
+
const hex = RGBToHex(this.rgbColor, a);
|
|
281
|
+
if (emitChanges) {
|
|
282
|
+
this.SetValue(hex);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
this.value.set(hex);
|
|
286
|
+
}
|
|
287
|
+
if (updateCanvas) {
|
|
288
|
+
// Calculate indicator position
|
|
289
|
+
this.UpdateIndicatorPositions();
|
|
290
|
+
// Redraw components
|
|
291
|
+
this.DrawColorGradient();
|
|
292
|
+
this.DrawAlphaSlider();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
DrawColorGradient() {
|
|
296
|
+
const ctx = this.gradientCtx;
|
|
297
|
+
// Clear canvas
|
|
298
|
+
ctx.clearRect(0, 0, this.gradientWidth, this.gradientHeight);
|
|
299
|
+
// Draw the pure hue color at the top-right corner
|
|
300
|
+
ctx.fillStyle = `hsl(${this.hslColor.h}, 100%, 50%)`;
|
|
301
|
+
ctx.fillRect(0, 0, this.gradientWidth, this.gradientHeight);
|
|
302
|
+
// White gradient (horizontal - saturation)
|
|
303
|
+
const whiteGradient = ctx.createLinearGradient(0, 0, this.gradientWidth, 0);
|
|
304
|
+
whiteGradient.addColorStop(0, "white");
|
|
305
|
+
whiteGradient.addColorStop(1, "rgba(255, 255, 255, 0)");
|
|
306
|
+
ctx.fillStyle = whiteGradient;
|
|
307
|
+
ctx.fillRect(0, 0, this.gradientWidth, this.gradientHeight);
|
|
308
|
+
// Black gradient (vertical - brightness)
|
|
309
|
+
const blackGradient = ctx.createLinearGradient(0, 0, 0, this.gradientHeight);
|
|
310
|
+
blackGradient.addColorStop(0, "rgba(0, 0, 0, 0)");
|
|
311
|
+
blackGradient.addColorStop(1, "black");
|
|
312
|
+
ctx.fillStyle = blackGradient;
|
|
313
|
+
ctx.fillRect(0, 0, this.gradientWidth, this.gradientHeight);
|
|
314
|
+
}
|
|
315
|
+
DrawHueSlider() {
|
|
316
|
+
const ctx = this.hueCtx;
|
|
317
|
+
// Create hue gradient
|
|
318
|
+
const gradient = ctx.createLinearGradient(0, 0, this.hueSliderWidth, 0);
|
|
319
|
+
for (let i = 0; i <= 360; i += 60) {
|
|
320
|
+
gradient.addColorStop(i / 360, `hsl(${i}, 100%, 50%)`);
|
|
321
|
+
}
|
|
322
|
+
ctx.fillStyle = gradient;
|
|
323
|
+
ctx.fillRect(0, 0, this.hueSliderWidth, this.hueSliderHeight);
|
|
324
|
+
}
|
|
325
|
+
DrawAlphaSlider() {
|
|
326
|
+
const ctx = this.alphaCtx;
|
|
327
|
+
const width = this.alphaSliderWidth;
|
|
328
|
+
const height = this.alphaSliderHeight;
|
|
329
|
+
// Clear canvas
|
|
330
|
+
ctx.clearRect(0, 0, width, height);
|
|
331
|
+
// Create checkerboard pattern for transparency
|
|
332
|
+
const squareSize = 8;
|
|
333
|
+
for (let i = 0; i < width; i += squareSize) {
|
|
334
|
+
for (let j = 0; j < height; j += squareSize) {
|
|
335
|
+
const isEven = (i / squareSize + j / squareSize) % 2 === 0;
|
|
336
|
+
ctx.fillStyle = isEven ? "#ffffff" : "#cccccc";
|
|
337
|
+
ctx.fillRect(i, j, squareSize, squareSize);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
// Create alpha gradient
|
|
341
|
+
const gradient = ctx.createLinearGradient(0, 0, width, 0);
|
|
342
|
+
const rgb = HSLToRGB(this.hslColor);
|
|
343
|
+
gradient.addColorStop(0, `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, 0)`);
|
|
344
|
+
gradient.addColorStop(1, `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, 1)`);
|
|
345
|
+
ctx.fillStyle = gradient;
|
|
346
|
+
ctx.fillRect(0, 0, width, height);
|
|
347
|
+
}
|
|
348
|
+
async CopyToClipboard() {
|
|
349
|
+
await Clipboard.write({
|
|
350
|
+
string: this.value()
|
|
351
|
+
});
|
|
352
|
+
await this.genericService.PresentToastSuccess(`${this.value()} copiada para a área de transferência!`);
|
|
353
|
+
}
|
|
354
|
+
UpdateIndicatorPositions() {
|
|
355
|
+
// Set X position directly from saturation (0-100)
|
|
356
|
+
this.indicatorX = this.hslColor.s;
|
|
357
|
+
// Calculate Y position using the inverse of the HandleColorSelection logic
|
|
358
|
+
if (this.hslColor.s === 0) {
|
|
359
|
+
// Left edge: simple white to black mapping
|
|
360
|
+
this.indicatorY = 100 - this.hslColor.l;
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
// For other saturation values, we need to reverse the maxLightness calculation
|
|
364
|
+
const maxLightness = 100 - this.hslColor.s / 2;
|
|
365
|
+
this.indicatorY = ((maxLightness - this.hslColor.l) / maxLightness) * 100;
|
|
366
|
+
}
|
|
367
|
+
// Ensure the position stays within bounds
|
|
368
|
+
this.indicatorY = Math.max(0, Math.min(100, this.indicatorY));
|
|
369
|
+
}
|
|
370
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InputColorComponent, deps: [{ token: i1.GenericService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
371
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InputColorComponent, selector: "input-color", viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "inputContainer", first: true, predicate: ["inputContainer"], descendants: true }, { propertyName: "popover", first: true, predicate: SIonPopoverComponent, descendants: true }, { propertyName: "gradient", first: true, predicate: ["gradient"], descendants: true }, { propertyName: "hueSlider", first: true, predicate: ["hueSlider"], descendants: true }, { propertyName: "alphaSlider", first: true, predicate: ["alphaSlider"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"focus($event); Present($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"disabled() || loading()\"\r\n [class.loading]=\"loading()\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n <input #input\r\n [maskito]=\"HEXMask\"\r\n [ngModel]=\"value()\"\r\n (ngModelChange)=\"SetColorFromHex($event, true, true)\" \r\n [disabled]=\"disabled() || loading()\"\r\n />\r\n <div class=\" absolute bottom-2 right-8 size-5 rounded-sm overflow-hidden\" [style]=\"{ 'background': value() }\"> </div>\r\n\r\n <ion-button tabindex=\"-1\" class=\"absolute right-1 bottom-1\" (click)=\"CopyToClipboard(); $event.stopPropagation();\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"clipboard\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n\r\n <!-- [maxlength]=\"configuration().maxlength\" -->\r\n <!-- [type]=\"configuration().type\" -->\r\n <div class=\"loading-container\" [class.loading]=\"loading()\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>\r\n\r\n<sion-popover\r\n #popover \r\n width=\"fit-content\" \r\n [anchor]=\"inputContainer\" \r\n>\r\n <div class=\"size-full p-2 flex gap-1\"> \r\n <div class=\"flex flex-col w-44 shrink-0 gap-1\">\r\n <div id=\"gradientWrapper\" class=\"w-44 h-32 relative\">\r\n <canvas #gradient width=\"176\" height=\"128\" class=\"size-full rounded-sm translucid-border\"></canvas>\r\n <div class=\"color-indicator quick-transition\" [style.left.%]=\"indicatorX\" [style.top.%]=\"indicatorY\"></div>\r\n </div>\r\n\r\n <div id=\"hueWrapper\" class=\"w-full relative\">\r\n <canvas #hueSlider class=\"w-full rounded h-[22px]\" width=\"176\" height=\"22\"></canvas>\r\n <div class=\"indicator quick-transition\" [style.left.%]=\"hslColor.h / 3.6\"></div>\r\n </div>\r\n\r\n <div id=\"alphaWrapper\" class=\"w-full relative\">\r\n <canvas #alphaSlider class=\"w-full rounded h-[22px]\" width=\"176\" height=\"22\"></canvas>\r\n <div class=\"indicator quick-transition\" [style.left.%]=\"alpha\"></div>\r\n </div>\r\n\r\n <div class=\"w-full flex shrink-0\">\r\n <div class=\"w-full grid grid-cols-5 gap-1\">\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#000000FF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#3880FFFF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#2DD36FFF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#FFC409FF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#EB445AFF' }\"></ng-container>\r\n \r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#FFFFFFFF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#59168bFF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#C6005CFF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#FB2C36FF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#314158FF' }\"></ng-container>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n</sion-popover>\r\n\r\n<ng-template #templateColor let-color>\r\n <div class=\"size-8 rounded translucid-border cursor-pointer\" (click)=\"SetColorFromHex(color, true, true)\" [style.background]=\"color\"></div>\r\n</ng-template>", styles: ["input:focus{outline:solid 1px color-mix(in srgb,var(--ion-color-primary) 30%,transparent)}input{height:1.25rem;border-radius:.25rem;outline:1px solid transparent;transition-property:outline;transition-duration:.2s}.color-indicator{position:absolute;width:12px;height:12px;border-radius:50%;border:2px solid white;box-shadow:0 0 2px #00000080;transform:translate(-50%,-50%);pointer-events:none}.indicator{position:absolute;top:50%;width:6px;height:24px;background-color:#fff;border-radius:3px;box-shadow:0 0 2px #00000080;transform:translate(-50%,-50%);pointer-events:none}.quick-transition{transition:all 75ms}ion-popover{--width: fit-content;--height: fit-content}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 1px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:transform;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"], dependencies: [{ kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "component", type: i6.SIonPopoverComponent, selector: "sion-popover", inputs: ["fill", "arrow", "flip", "placement", "height", "width", "anchor"], outputs: ["onWillPresent", "onDidPresent", "onWillDismiss", "onDidDismiss", "isVisibleChange"] }] }); }
|
|
372
|
+
}
|
|
373
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InputColorComponent, decorators: [{
|
|
374
|
+
type: Component,
|
|
375
|
+
args: [{ selector: 'input-color', template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"focus($event); Present($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"disabled() || loading()\"\r\n [class.loading]=\"loading()\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n <input #input\r\n [maskito]=\"HEXMask\"\r\n [ngModel]=\"value()\"\r\n (ngModelChange)=\"SetColorFromHex($event, true, true)\" \r\n [disabled]=\"disabled() || loading()\"\r\n />\r\n <div class=\" absolute bottom-2 right-8 size-5 rounded-sm overflow-hidden\" [style]=\"{ 'background': value() }\"> </div>\r\n\r\n <ion-button tabindex=\"-1\" class=\"absolute right-1 bottom-1\" (click)=\"CopyToClipboard(); $event.stopPropagation();\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"clipboard\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n\r\n <!-- [maxlength]=\"configuration().maxlength\" -->\r\n <!-- [type]=\"configuration().type\" -->\r\n <div class=\"loading-container\" [class.loading]=\"loading()\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>\r\n\r\n<sion-popover\r\n #popover \r\n width=\"fit-content\" \r\n [anchor]=\"inputContainer\" \r\n>\r\n <div class=\"size-full p-2 flex gap-1\"> \r\n <div class=\"flex flex-col w-44 shrink-0 gap-1\">\r\n <div id=\"gradientWrapper\" class=\"w-44 h-32 relative\">\r\n <canvas #gradient width=\"176\" height=\"128\" class=\"size-full rounded-sm translucid-border\"></canvas>\r\n <div class=\"color-indicator quick-transition\" [style.left.%]=\"indicatorX\" [style.top.%]=\"indicatorY\"></div>\r\n </div>\r\n\r\n <div id=\"hueWrapper\" class=\"w-full relative\">\r\n <canvas #hueSlider class=\"w-full rounded h-[22px]\" width=\"176\" height=\"22\"></canvas>\r\n <div class=\"indicator quick-transition\" [style.left.%]=\"hslColor.h / 3.6\"></div>\r\n </div>\r\n\r\n <div id=\"alphaWrapper\" class=\"w-full relative\">\r\n <canvas #alphaSlider class=\"w-full rounded h-[22px]\" width=\"176\" height=\"22\"></canvas>\r\n <div class=\"indicator quick-transition\" [style.left.%]=\"alpha\"></div>\r\n </div>\r\n\r\n <div class=\"w-full flex shrink-0\">\r\n <div class=\"w-full grid grid-cols-5 gap-1\">\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#000000FF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#3880FFFF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#2DD36FFF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#FFC409FF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#EB445AFF' }\"></ng-container>\r\n \r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#FFFFFFFF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#59168bFF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#C6005CFF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#FB2C36FF' }\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"templateColor; context: { $implicit: '#314158FF' }\"></ng-container>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n</sion-popover>\r\n\r\n<ng-template #templateColor let-color>\r\n <div class=\"size-8 rounded translucid-border cursor-pointer\" (click)=\"SetColorFromHex(color, true, true)\" [style.background]=\"color\"></div>\r\n</ng-template>", styles: ["input:focus{outline:solid 1px color-mix(in srgb,var(--ion-color-primary) 30%,transparent)}input{height:1.25rem;border-radius:.25rem;outline:1px solid transparent;transition-property:outline;transition-duration:.2s}.color-indicator{position:absolute;width:12px;height:12px;border-radius:50%;border:2px solid white;box-shadow:0 0 2px #00000080;transform:translate(-50%,-50%);pointer-events:none}.indicator{position:absolute;top:50%;width:6px;height:24px;background-color:#fff;border-radius:3px;box-shadow:0 0 2px #00000080;transform:translate(-50%,-50%);pointer-events:none}.quick-transition{transition:all 75ms}ion-popover{--width: fit-content;--height: fit-content}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 1px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:transform;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"] }]
|
|
376
|
+
}], ctorParameters: () => [{ type: i1.GenericService }], propDecorators: { input: [{
|
|
377
|
+
type: ViewChild,
|
|
378
|
+
args: ['input']
|
|
379
|
+
}], inputContainer: [{
|
|
380
|
+
type: ViewChild,
|
|
381
|
+
args: ['inputContainer']
|
|
382
|
+
}], popover: [{
|
|
383
|
+
type: ViewChild,
|
|
384
|
+
args: [SIonPopoverComponent]
|
|
385
|
+
}], gradient: [{
|
|
386
|
+
type: ViewChild,
|
|
387
|
+
args: ['gradient']
|
|
388
|
+
}], hueSlider: [{
|
|
389
|
+
type: ViewChild,
|
|
390
|
+
args: ["hueSlider"]
|
|
391
|
+
}], alphaSlider: [{
|
|
392
|
+
type: ViewChild,
|
|
393
|
+
args: ["alphaSlider"]
|
|
394
|
+
}] } });
|
|
395
|
+
function HSLToRGB(hsl) {
|
|
396
|
+
var h = hsl.h / 360;
|
|
397
|
+
var s = hsl.s / 100;
|
|
398
|
+
var l = hsl.l / 100;
|
|
399
|
+
let r, g, b;
|
|
400
|
+
if (s === 0) {
|
|
401
|
+
r = g = b = l; // achromatic
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
|
405
|
+
const p = 2 * l - q;
|
|
406
|
+
r = HUEtoRGB(p, q, h + 1 / 3);
|
|
407
|
+
g = HUEtoRGB(p, q, h);
|
|
408
|
+
b = HUEtoRGB(p, q, h - 1 / 3);
|
|
409
|
+
}
|
|
410
|
+
return {
|
|
411
|
+
r: Math.round(r * 255),
|
|
412
|
+
g: Math.round(g * 255),
|
|
413
|
+
b: Math.round(b * 255),
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
function HUEtoRGB(p, q, t) {
|
|
417
|
+
if (t < 0)
|
|
418
|
+
t += 1;
|
|
419
|
+
if (t > 1)
|
|
420
|
+
t -= 1;
|
|
421
|
+
if (t < 1 / 6)
|
|
422
|
+
return p + (q - p) * 6 * t;
|
|
423
|
+
if (t < 1 / 2)
|
|
424
|
+
return q;
|
|
425
|
+
if (t < 2 / 3)
|
|
426
|
+
return p + (q - p) * (2 / 3 - t) * 6;
|
|
427
|
+
return p;
|
|
428
|
+
}
|
|
429
|
+
function RGBToHSL(rgb) {
|
|
430
|
+
var r = rgb.r / 255;
|
|
431
|
+
var g = rgb.g / 255;
|
|
432
|
+
var b = rgb.b / 255;
|
|
433
|
+
const max = Math.max(r, g, b);
|
|
434
|
+
const min = Math.min(r, g, b);
|
|
435
|
+
let h = 0, s = 0;
|
|
436
|
+
const l = (max + min) / 2;
|
|
437
|
+
if (max !== min) {
|
|
438
|
+
const d = max - min;
|
|
439
|
+
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
440
|
+
switch (max) {
|
|
441
|
+
case r:
|
|
442
|
+
h = ((g - b) / d + (g < b ? 6 : 0)) / 6;
|
|
443
|
+
break;
|
|
444
|
+
case g:
|
|
445
|
+
h = ((b - r) / d + 2) / 6;
|
|
446
|
+
break;
|
|
447
|
+
case b:
|
|
448
|
+
h = ((r - g) / d + 4) / 6;
|
|
449
|
+
break;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
return {
|
|
453
|
+
h: Math.round(h * 360),
|
|
454
|
+
s: Math.round(s * 100),
|
|
455
|
+
l: Math.round(l * 100),
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
function RGBToHex(rgb, alpha = 1) {
|
|
459
|
+
let { r, g, b } = rgb;
|
|
460
|
+
const alphaHex = Math.round(alpha * 255)
|
|
461
|
+
.toString(16)
|
|
462
|
+
.padStart(2, "0");
|
|
463
|
+
return ("#" +
|
|
464
|
+
[r, g, b]
|
|
465
|
+
.map((x) => {
|
|
466
|
+
const hex = x.toString(16);
|
|
467
|
+
return hex.length === 1 ? "0" + hex : hex;
|
|
468
|
+
})
|
|
469
|
+
.join("") +
|
|
470
|
+
(alpha < 1 ? alphaHex : "")).toUpperCase();
|
|
471
|
+
}
|
|
472
|
+
const HEXDigitRegex = /[0-9a-f]+/i;
|
|
473
|
+
const HEXMask = ['#', HEXDigitRegex, HEXDigitRegex, HEXDigitRegex, HEXDigitRegex, HEXDigitRegex, HEXDigitRegex, HEXDigitRegex];
|
|
474
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY29sb3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2lucHV0cy9pbnB1dC1jb2xvci9pbnB1dC1jb2xvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LWNvbG9yL2lucHV0LWNvbG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7Ozs7Ozs7QUFZekYsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQW1CO0lBTWpELEtBQUssQ0FBQyxLQUFpQjtRQUM5QixJQUFHLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFBQyxDQUFDO0lBQzNHLENBQUM7SUFFRCxZQUNVLGNBQThCO1FBQ3BDLEtBQUssRUFBRSxDQUFDO1FBREYsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBTXhDLGFBQVEsR0FBUyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDeEMsYUFBUSxHQUFTLEVBQUUsQ0FBQyxFQUFF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QUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDaEUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBQ2hFLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNsRSxDQUFDO2FBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLHlCQUF5QjtZQUN6QixDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUNqRCxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUNqRCxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNuRCxDQUFDO2FBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLDZCQUE2QjtZQUM3QixDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUNqRCxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxD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QUM7QUFDM0MsTUFBTSxPQUFPLEdBQTBCLENBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dCB9IGZyb20gJy4uL2N1c3RvbS1pbnB1dCc7XHJcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0BjYXBhY2l0b3IvY2xpcGJvYXJkJztcclxuaW1wb3J0IHsgR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9nZW5lcmljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU0lvblBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wb3BvdmVyL3Npb24tcG9wb3Zlci9zaW9uLXBvcG92ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWFza2l0bywgTWFza2l0b01hc2tFeHByZXNzaW9uLCBNYXNraXRvT3B0aW9ucyB9IGZyb20gJ0BtYXNraXRvL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXNraXRvTnVtYmVyT3B0aW9uc0dlbmVyYXRvciB9IGZyb20gJ0BtYXNraXRvL2tpdCc7XHJcblxyXG50eXBlIFJHQiA9IHsgcjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlciB9O1xyXG50eXBlIEhTTCA9IHsgaDogbnVtYmVyLCBsOiBudW1iZXIsIHM6IG51bWJlciB9O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpbnB1dC1jb2xvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWNvbG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1jb2xvci5jb21wb25lbnQuc2NzcycsICcuLi9pbnB1dHMuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRDb2xvckNvbXBvbmVudCBleHRlbmRzIEN1c3RvbUlucHV0PHN0cmluZz4ge1xyXG4gIFxyXG4gIC8vIGNvbmZpZ3VyYXRpb246IElucHV0U2lnbmFsPElucHV0U3RyaW5nQ29uZmlndXJhdGlvbj4gPSBpbnB1dDxJbnB1dFN0cmluZ0NvbmZpZ3VyYXRpb24+KG5ldyBJbnB1dFN0cmluZ0NvbmZpZ3VyYXRpb24oKSk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRDb250YWluZXInKSBpbnB1dENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgb3ZlcnJpZGUgZm9jdXMoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuaW5wdXQgJiYgZXZlbnQudGFyZ2V0ID09IHRoaXMuaW5wdXRDb250YWluZXIubmF0aXZlRWxlbWVudCkgeyB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTsgfSAgICAgIFxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGdlbmVyaWNTZXJ2aWNlOiBHZW5lcmljU2VydmljZVxyXG4gICkgeyBzdXBlcigpOyB0aGlzLnZhbHVlLnNldChcIlwiKTsgfVxyXG5cclxuXHJcbiAgQFZpZXdDaGlsZChTSW9uUG9wb3ZlckNvbXBvbmVudCkgcG9wb3ZlcjogU0lvblBvcG92ZXJDb21wb25lbnQ7XHJcblxyXG4gIHJnYkNvbG9yIDogUkdCID0geyByOiAyNTUsIGc6IDAsIGI6IDAgfTtcclxuICBoc2xDb2xvciA6IEhTTCA9IHsgaDogMCwgczogMTAwLCBsOiA1MCB9O1xyXG4gIGFscGhhICAgIDogbnVtYmVyID0gMTAwXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IHN0cmluZyk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudmFsdWUuc2V0KG9iaik7XHJcbiAgICB0aGlzLnJ1blZhbGlkYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIFNldFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlKTtcclxuICAgIHRoaXMucnVuVmFsaWRhdGlvbigpO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYXN5bmMgUHJlc2VudChldmVudDogTW91c2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5yZW5kZXJpbmcgPSB0cnVlO1xyXG4gICAgYXdhaXQgdGhpcy5wb3BvdmVyLnByZXNlbnQoZXZlbnQpO1xyXG4gICAgdGhpcy5Jbml0aWFsaXplR3JhZGllbnQoKVxyXG4gICAgdGhpcy5Jbml0aWFsaXplSHVlU2xpZGVyKClcclxuICAgIHRoaXMuSW5pdGlhbGl6ZUFscGhhU2xpZGVyKClcclxuICAgIHRoaXMuRHJhd0NvbG9yR3JhZGllbnQoKVxyXG4gICAgdGhpcy5EcmF3SHVlU2xpZGVyKClcclxuICAgIHRoaXMuRHJhd0FscGhhU2xpZGVyKClcclxuICAgIHRoaXMucmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gWyBHcmFkaWVudCBdXHJcbiAgaW5kaWNhdG9yWDogbnVtYmVyID0gMTAwXHJcbiAgaW5kaWNhdG9yWTogbnVtYmVyID0gMFxyXG5cclxuICBAVmlld0NoaWxkKCdncmFkaWVudCcgICAgICkgZ3JhZGllbnQ6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIHByaXZhdGUgaXNHcmFkaWVudERyYWdnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBncmFkaWVudEN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xyXG4gIHByaXZhdGUgZ3JhZGllbnRXaWR0aDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIGdyYWRpZW50SGVpZ2h0OiBudW1iZXIgPSAwO1xyXG4gIEluaXRpYWxpemVHcmFkaWVudCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGdyYWRpZW50ICAgICAgPSB0aGlzLmdyYWRpZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLmdyYWRpZW50V2lkdGggID0gZ3JhZGllbnQud2lkdGg7IFxyXG4gICAgdGhpcy5ncmFkaWVudEhlaWdodCA9IGdyYWRpZW50LmhlaWdodDsgXHJcbiAgICB0aGlzLmdyYWRpZW50Q3R4ICAgID0gZ3JhZGllbnQuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICBncmFkaWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nICwgdGhpcy5TdGFydEdyYWRpZW50RHJhZy5iaW5kKHRoaXMpKTtcclxuICAgIGdyYWRpZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScgLCB0aGlzLkdyYWRpZW50RHJhZy5iaW5kKHRoaXMpKTtcclxuICAgIGdyYWRpZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnICAgLCB0aGlzLkVuZEdyYWRpZW50RHJhZy5iaW5kKHRoaXMpKTtcclxuICAgIGdyYWRpZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLkVuZEdyYWRpZW50RHJhZy5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAvLyBUb3VjaCBldmVudHNcclxuICAgIGdyYWRpZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLkhhbmRsZUdyYWRpZW50VG91Y2guYmluZCh0aGlzKSk7XHJcbiAgICBncmFkaWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnICwgdGhpcy5IYW5kbGVHcmFkaWVudFRvdWNoLmJpbmQodGhpcykpO1xyXG4gICAgZ3JhZGllbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnICAsIHRoaXMuRW5kR3JhZGllbnREcmFnLmJpbmQodGhpcykpO1xyXG4gIH1cclxuICBTdGFydEdyYWRpZW50RHJhZyhlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzR3JhZGllbnREcmFnZ2luZyA9IHRydWVcclxuICAgIHRoaXMuSGFuZGxlQ29sb3JTZWxlY3Rpb24oZS5vZmZzZXRYLCBlLm9mZnNldFkpXHJcbiAgfVxyXG4gIEdyYWRpZW50RHJhZyhlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0dyYWRpZW50RHJhZ2dpbmcpIHtcclxuICAgICAgdGhpcy5IYW5kbGVDb2xvclNlbGVjdGlvbihlLm9mZnNldFgsIGUub2Zmc2V0WSlcclxuICAgIH1cclxuICB9XHJcbiAgRW5kR3JhZGllbnREcmFnKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0dyYWRpZW50RHJhZ2dpbmcgPSBmYWxzZVxyXG4gIH1cclxuICBIYW5kbGVHcmFkaWVudFRvdWNoKGU6IFRvdWNoRXZlbnQpOiB2b2lkIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIpIHtcclxuICAgICAgdGhpcy5pc0dyYWRpZW50RHJhZ2dpbmcgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNHcmFkaWVudERyYWdnaW5nKSB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdyYWRpZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcclxuICAgICAgY29uc3QgdG91Y2ggPSBlLnRvdWNoZXNbMF1cclxuICAgICAgY29uc3QgeCA9IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnRcclxuICAgICAgY29uc3QgeSA9IHRvdWNoLmNsaWVudFkgLSByZWN0LnRvcFxyXG4gICAgICB0aGlzLkhhbmRsZUNvbG9yU2VsZWN0aW9uKHgsIHkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBIYW5kbGVDb2xvclNlbGVjdGlvbih4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gQ29uc3RyYWluIGNvb3JkaW5hdGVzIHRvIGNhbnZhcyBib3VuZHNcclxuICAgIHggPSBNYXRoLm1heCgwLCBNYXRoLm1pbih4LCB0aGlzLmdyYWRpZW50V2lkdGgpKVxyXG4gICAgeSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHksIHRoaXMuZ3JhZGllbnRIZWlnaHQpKVxyXG5cclxuICAgIC8vIFN0b3JlIHRoZSByYXcgcG9zaXRpb24gcGVyY2VudGFnZSBmb3IgdGhlIGluZGljYXRvclxyXG4gICAgdGhpcy5pbmRpY2F0b3JYID0gKHggLyB0aGlzLmdyYWRpZW50V2lkdGgpICogMTAwXHJcbiAgICB0aGlzLmluZGljYXRvclkgPSAoeSAvIHRoaXMuZ3JhZGllbnRIZWlnaHQpICogMTAwXHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIHNhdHVyYXRpb24gYW5kIGxpZ2h0bmVzcyBiYXNlZCBvbiBwb3NpdGlvblxyXG4gICAgdGhpcy5oc2xDb2xvci5zID0gTWF0aC5yb3VuZCh0aGlzLmluZGljYXRvclgpXHJcbiAgICAvLyBBZGp1c3QgbGlnaHRuZXNzIGNhbGN1bGF0aW9uOlxyXG4gICAgLy8gLSBUb3Agb2YgY2FudmFzICh5PTApIHNob3VsZCBiZSB3aGl0ZSAobGlnaHRuZXNzPTEwMCkgb24gdGhlIGxlZnQgYW5kIHB1cmUgY29sb3IgKGxpZ2h0bmVzcz01MCkgb24gdGhlIHJpZ2h0XHJcbiAgICAvLyAtIEJvdHRvbSBvZiBjYW52YXMgKHk9aGVpZ2h0KSBzaG91bGQgYmUgYmxhY2sgKGxpZ2h0bmVzcz0wKVxyXG4gICAgaWYgKHRoaXMuaHNsQ29sb3IucyA9PT0gMCkge1xyXG4gICAgICAvLyBMZWZ0IGVkZ2UgaXMgYWx3YXlzIHdoaXRlIHRvIGJsYWNrLCByZWdhcmRsZXNzIG9mIHkgcG9zaXRpb25cclxuICAgICAgdGhpcy5oc2xDb2xvci5sID0gTWF0aC5yb3VuZCgxMDAgLSB0aGlzLmluZGljYXRvclkpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGb3Igb3RoZXIgc2F0dXJhdGlvbiB2YWx1ZXMsIHRvcCBpcyA1MC0xMDAlIGxpZ2h0bmVzcyAoYmFzZWQgb24gc2F0dXJhdGlvbiksIGJvdHRvbSBpcyAwJVxyXG4gICAgICBjb25zdCBtYXhMaWdodG5lc3MgPSAxMDAgLSB0aGlzLmhzbENvbG9yLnMgLyAyXHJcbiAgICAgIHRoaXMuaHNsQ29sb3IubCA9IE1hdGgucm91bmQobWF4TGlnaHRuZXNzIC0gKHRoaXMuaW5kaWNhdG9yWSAvIDEwMCkgKiBtYXhMaWdodG5lc3MpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIHNlbGVjdGVkIGNvbG9yXHJcbiAgICB0aGlzLlVwZGF0ZVNlbGVjdGVkQ29sb3IodGhpcy5oc2xDb2xvci5zLCB0aGlzLmhzbENvbG9yLmwsIHRydWUpXHJcblxyXG4gICAgLy8gUmVkcmF3IGFscGhhIHNsaWRlciB3aXRoIG5ldyBjb2xvclxyXG4gICAgdGhpcy5EcmF3QWxwaGFTbGlkZXIoKVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gWyBHcmFkaWVudCBdXHJcbiAgXHJcbiAgVXBkYXRlU2VsZWN0ZWRDb2xvcihzYXR1cmF0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbCwgbGlnaHRuZXNzOiBudW1iZXIgfCBudWxsID0gbnVsbCwgZW1pdENoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgLy8gVXBkYXRlIEhTTCB2YWx1ZXNcclxuICAgIGlmKHNhdHVyYXRpb24gIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuaHNsQ29sb3IucyA9IHNhdHVyYXRpb25cclxuICAgIH1cclxuICAgIGlmKGxpZ2h0bmVzcyAhPSBudWxsKXtcclxuICAgICAgdGhpcy5oc2xDb2xvci5sID0gbGlnaHRuZXNzXHJcbiAgICB9XHJcbiAgICAvLyBDb252ZXJ0IEhTTCB0byBSR0JcclxuICAgIGNvbnN0IHJnYiA9IEhTTFRvUkdCKHRoaXMuaHNsQ29sb3IpO1xyXG5cclxuICAgIHRoaXMucmdiQ29sb3IgPSByZ2JcclxuXHJcbiAgICAvLyBDb252ZXJ0IFJHQiB0byBIRVhcclxuICAgIGNvbnN0IGhleCA9IFJHQlRvSGV4KHJnYiwgdGhpcy5hbHBoYSAvIDEwMCk7XHJcbiAgICBpZihlbWl0Q2hhbmdlcyl7IFxyXG4gICAgICB0aGlzLlNldFZhbHVlKGhleCk7XHJcbiAgICB9IGVsc2UgeyBcclxuICAgICAgdGhpcy52YWx1ZS5zZXQoaGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBbIEh1ZSBTbGlkZXIgXVxyXG4gIEBWaWV3Q2hpbGQoXCJodWVTbGlkZXJcIiAgKSBodWVTbGlkZXI6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+XHJcbiAgcHJpdmF0ZSBpc0h1ZURyYWdnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBodWVDdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcclxuICBwcml2YXRlIGh1ZVNsaWRlcldpZHRoOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgaHVlU2xpZGVySGVpZ2h0OiBudW1iZXIgPSAwO1xyXG4gIEluaXRpYWxpemVIdWVTbGlkZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBodWVTbGlkZXIgICAgICA9IHRoaXMuaHVlU2xpZGVyLm5hdGl2ZUVsZW1lbnRcclxuICAgIHRoaXMuaHVlU2xpZGVyV2lkdGggID0gaHVlU2xpZGVyLndpZHRoO1xyXG4gICAgdGhpcy5odWVTbGlkZXJIZWlnaHQgPSBodWVTbGlkZXIuaGVpZ2h0O1xyXG4gICAgdGhpcy5odWVDdHggPSBodWVTbGlkZXIuZ2V0Q29udGV4dChcIjJkXCIpXHJcblxyXG4gICAgaHVlU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiAsIHRoaXMuU3RhcnRIdWVEcmFnLmJpbmQodGhpcykpXHJcbiAgICBodWVTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiICwgdGhpcy5IdWVEcmFnLmJpbmQodGhpcykpXHJcbiAgICBodWVTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiAgICwgdGhpcy5FbmRIdWVEcmFnLmJpbmQodGhpcykpXHJcbiAgICBodWVTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgdGhpcy5FbmRIdWVEcmFnLmJpbmQodGhpcykpXHJcblxyXG4gICAgLy8gVG91Y2ggZXZlbnRzXHJcbiAgICBodWVTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIiwgdGhpcy5IYW5kbGVIdWVUb3VjaC5iaW5kKHRoaXMpKVxyXG4gICAgaHVlU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiAsIHRoaXMuSGFuZGxlSHVlVG91Y2guYmluZCh0aGlzKSlcclxuICAgIGh1ZVNsaWRlci5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiAgLCB0aGlzLkVuZEh1ZURyYWcuYmluZCh0aGlzKSlcclxuICB9XHJcblxyXG4gIFN0YXJ0SHVlRHJhZyhlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzSHVlRHJhZ2dpbmcgPSB0cnVlXHJcbiAgICB0aGlzLkhhbmRsZUh1ZVNlbGVjdGlvbihlLm9mZnNldFgpXHJcbiAgfVxyXG5cclxuICBIdWVEcmFnKGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzSHVlRHJhZ2dpbmcpIHtcclxuICAgICAgdGhpcy5IYW5kbGVIdWVTZWxlY3Rpb24oZS5vZmZzZXRYKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgRW5kSHVlRHJhZygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNIdWVEcmFnZ2luZyA9IGZhbHNlXHJcbiAgfVxyXG4gIEhhbmRsZUh1ZVRvdWNoKGU6IFRvdWNoRXZlbnQpOiB2b2lkIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgaWYgKGUudHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIpIHtcclxuICAgICAgdGhpcy5pc0h1ZURyYWdnaW5nID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzSHVlRHJhZ2dpbmcpIHtcclxuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuaHVlU2xpZGVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcclxuICAgICAgY29uc3QgdG91Y2ggPSBlLnRvdWNoZXNbMF1cclxuICAgICAgY29uc3QgeCA9IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnRcclxuICAgICAgdGhpcy5IYW5kbGVIdWVTZWxlY3Rpb24oeClcclxuICAgIH1cclxuICB9XHJcbiAgSGFuZGxlSHVlU2VsZWN0aW9uKHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gQ29uc3RyYWluIHggdG8gY2FudmFzIGJvdW5kc1xyXG4gICAgeCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHgsIHRoaXMuaHVlU2xpZGVyV2lkdGgpKVxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBodWUgYmFzZWQgb24geCBwb3NpdGlvbiAoMC0zNjApXHJcbiAgICB0aGlzLmhzbENvbG9yLmggPSBNYXRoLnJvdW5kKCh4IC8gdGhpcy5odWVTbGlkZXJXaWR0aCkgKiAzNjApXHJcblxyXG4gICAgLy8gUmVkcmF3IGNvbG9yIGdyYWRpZW50IHdpdGggbmV3IGh1ZVxyXG4gICAgdGhpcy5EcmF3Q29sb3JHcmFkaWVudCgpXHJcblxyXG4gICAgLy8gUmVkcmF3IGFscGhhIHNsaWRlciB3aXRoIG5ldyBjb2xvclxyXG4gICAgdGhpcy5EcmF3QWxwaGFTbGlkZXIoKVxyXG5cclxuICAgIC8vIFVwZGF0ZSBzZWxlY3RlZCBjb2xvclxyXG4gICAgdGhpcy5VcGRhdGVTZWxlY3RlZENvbG9yKHRoaXMuaHNsQ29sb3IucywgdGhpcy5oc2xDb2xvci5sLCB0cnVlKVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gWyBIdWUgU2xpZGVyIF1cclxuXHJcbiAgLy8jcmVnaW9uIFsgQWxwaGEgU2xpZGVyIF1cclxuICBAVmlld0NoaWxkKFwiYWxwaGFTbGlkZXJcIikgYWxwaGFTbGlkZXI6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+XHJcbiAgcHJpdmF0ZSBpc0FscGhhRHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGFscGhhQ3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XHJcbiAgcHJpdmF0ZSBhbHBoYVNsaWRlcldpZHRoOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgYWxwaGFTbGlkZXJIZWlnaHQ6IG51bWJlciA9IDA7XHJcbiAgSW5pdGlhbGl6ZUFscGhhU2xpZGVyKCk6IHZvaWQge1xyXG4gICAgY29uc3QgYWxwaGFTbGlkZXIgICAgICA9IHRoaXMuYWxwaGFTbGlkZXIubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMuYWxwaGFTbGlkZXJIZWlnaHQgPSBhbHBoYVNsaWRlci5oZWlnaHQ7XHJcbiAgICB0aGlzLmFscGhhU2xpZGVyV2lkdGggID0gYWxwaGFTbGlkZXIud2lkdGg7XHJcblxyXG4gICAgdGhpcy5hbHBoYUN0eCA9IGFscGhhU2xpZGVyLmdldENvbnRleHQoXCIyZFwiKVxyXG5cclxuICAgIGFscGhhU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiAsIHRoaXMuU3RhcnRBbHBoYURyYWcuYmluZCh0aGlzKSlcclxuICAgIGFscGhhU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiAsIHRoaXMuQWxwaGFEcmFnLmJpbmQodGhpcykpXHJcbiAgICBhbHBoYVNsaWRlci5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiICAgLCB0aGlzLkVuZEFscGhhRHJhZy5iaW5kKHRoaXMpKVxyXG4gICAgYWxwaGFTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgdGhpcy5FbmRBbHBoYURyYWcuYmluZCh0aGlzKSlcclxuXHJcbiAgICAvLyBUb3VjaCBldmVudHNcclxuICAgIGFscGhhU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIHRoaXMuSGFuZGxlQWxwaGFUb3VjaC5iaW5kKHRoaXMpKVxyXG4gICAgYWxwaGFTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiICwgdGhpcy5IYW5kbGVBbHBoYVRvdWNoLmJpbmQodGhpcykpXHJcbiAgICBhbHBoYVNsaWRlci5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiAgLCB0aGlzLkVuZEFscGhhRHJhZy5iaW5kKHRoaXMpKVxyXG4gIH1cclxuICBTdGFydEFscGhhRHJhZyhlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzQWxwaGFEcmFnZ2luZyA9IHRydWVcclxuICAgIHRoaXMuSGFuZGxlQWxwaGFTZWxlY3Rpb24oZS5vZmZzZXRYKVxyXG4gIH1cclxuXHJcbiAgQWxwaGFEcmFnKGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzQWxwaGFEcmFnZ2luZykge1xyXG4gICAgICB0aGlzLkhhbmRsZUFscGhhU2VsZWN0aW9uKGUub2Zmc2V0WClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEVuZEFscGhhRHJhZygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNBbHBoYURyYWdnaW5nID0gZmFsc2VcclxuICB9XHJcblxyXG4gIEhhbmRsZUFscGhhVG91Y2goZTogVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICBpZiAoZS50eXBlID09PSBcInRvdWNoc3RhcnRcIikge1xyXG4gICAgICB0aGlzLmlzQWxwaGFEcmFnZ2luZyA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0FscGhhRHJhZ2dpbmcpIHtcclxuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuYWxwaGFTbGlkZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxyXG4gICAgICBjb25zdCB0b3VjaCA9IGUudG91Y2hlc1swXVxyXG4gICAgICBjb25zdCB4ID0gdG91Y2guY2xpZW50WCAtIHJlY3QubGVmdFxyXG4gICAgICB0aGlzLkhhbmRsZUFscGhhU2VsZWN0aW9uKHgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBIYW5kbGVBbHBoYVNlbGVjdGlvbih4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIC8vIENvbnN0cmFpbiB4IHRvIGNhbnZhcyBib3VuZHNcclxuICAgIHggPSBNYXRoLm1heCgwLCBNYXRoLm1pbih4LCB0aGlzLmFscGhhU2xpZGVyV2lkdGgpKVxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBhbHBoYSBiYXNlZCBvbiB4IHBvc2l0aW9uICgwLTEwMClcclxuICAgIHRoaXMuYWxwaGEgPSBNYXRoLnJvdW5kKCh4IC8gdGhpcy5hbHBoYVNsaWRlcldpZHRoKSAqIDEwMClcclxuXHJcbiAgICAvLyBVcGRhdGUgc2VsZWN0ZWQgY29sb3JcclxuICAgIHRoaXMuVXBkYXRlU2VsZWN0ZWRDb2xvcih0aGlzLmhzbENvbG9yLnMsIHRoaXMuaHNsQ29sb3IubCwgdHJ1ZSlcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIFsgQWxwaGEgU2xpZGVyIF1cclxuXHJcbiAgU2V0Q29sb3JGcm9tSGV4KGhleENvbG9yOiBzdHJpbmcsIHVwZGF0ZUNhbnZhczogYm9vbGVhbiA9IHRydWUsIGVtaXRDaGFuZ2VzOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIC8vIFJlbW92ZSAjIGlmIHByZXNlbnRcclxuICAgIGhleENvbG9yID0gaGV4Q29sb3IucmVwbGFjZSgvXiMvLCBcIlwiKVxyXG5cclxuICAgIGxldCByOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhID0gMVxyXG5cclxuICAgIC8vIFBhcnNlIGhleCB2YWx1ZXMgYmFzZWQgb24gc3RyaW5nIGxlbmd0aFxyXG4gICAgaWYgKGhleENvbG9yLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICAvLyBTaG9ydCBoZXggKCNSR0IpXHJcbiAgICAgIHIgPSBOdW1iZXIucGFyc2VJbnQoaGV4Q29sb3IuY2hhckF0KDApICsgaGV4Q29sb3IuY2hhckF0KDApLCAxNilcclxuICAgICAgZyA9IE51bWJlci5wYXJzZUludChoZXhDb2xvci5jaGFyQXQoMSkgKyBoZXhDb2xvci5jaGFyQXQoMSksIDE2KVxyXG4gICAgICBiID0gTnVtYmVyLnBhcnNlSW50KGhleENvbG9yLmNoYXJBdCgyKSArIGhleENvbG9yLmNoYXJBdCgyKSwgMTYpXHJcbiAgICB9IGVsc2UgXHJcbiAgICBpZiAoaGV4Q29sb3IubGVuZ3RoID09PSA2KSB7XHJcbiAgICAgIC8vIFN0YW5kYXJkIGhleCAoI1JSR0dCQilcclxuICAgICAgciA9IE51bWJlci5wYXJzZUludChoZXhDb2xvci5zdWJzdHJpbmcoMCwgMiksIDE2KVxyXG4gICAgICBnID0gTnVtYmVyLnBhcnNlSW50KGhleENvbG9yLnN1YnN0cmluZygyLCA0KSwgMTYpXHJcbiAgICAgIGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4Q29sb3Iuc3Vic3RyaW5nKDQsIDYpLCAxNilcclxuICAgIH0gZWxzZSBcclxuICAgIGlmIChoZXhDb2xvci5sZW5ndGggPT09IDgpIHtcclxuICAgICAgLy8gSGV4IHdpdGggYWxwaGEgKCNSUkdHQkJBQSlcclxuICAgICAgciA9IE51bWJlci5wYXJzZUludChoZXhDb2xvci5zdWJzdHJpbmcoMCwgMiksIDE2KVxyXG4gICAgICBnID0gTnVtYmVyLnBhcnNlSW50KGhleENvbG9yLnN1YnN0cmluZygyLCA0KSwgMTYpXHJcbiAgICAgIGIgPSBOdW1iZXIucGFyc2VJbnQoaGV4Q29sb3Iuc3Vic3RyaW5nKDQsIDYpLCAxNilcclxuICAgICAgYSA9IE51bWJlci5wYXJzZUludChoZXhDb2xvci5zdWJzdHJpbmcoNiwgOCksIDE2KSAvIDI1NVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gSW52YWxpZCBoZXgsIHVzZSBkZWZhdWx0XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGhleCBjb2xvciBmb3JtYXRcIilcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBSR0IgY29sb3JcclxuICAgIHRoaXMucmdiQ29sb3IgPSB7IHIsIGcsIGIgfVxyXG5cclxuICAgIC8vIENvbnZlcnQgUkdCIHRvIEhTTFxyXG4gICAgdGhpcy5oc2xDb2xvciA9IFJHQlRvSFNMKHRoaXMucmdiQ29sb3IpXHJcblxyXG4gICAgLy8gVXBkYXRlIGFscGhhXHJcbiAgICB0aGlzLmFscGhhID0gTWF0aC5yb3VuZChhICogMTAwKVxyXG5cclxuICAgIC8vIFVwZGF0ZSBzZWxlY3RlZCBjb2xvclxyXG4gICAgY29uc3QgaGV4ID0gUkdCVG9IZXgodGhpcy5yZ2JDb2xvciwgYSlcclxuICAgIGlmKGVtaXRDaGFuZ2VzKXsgXHJcbiAgICAgIHRoaXMuU2V0VmFsdWUoaGV4KTtcclxuICAgIH0gZWxzZSB7IFxyXG4gICAgICB0aGlzLnZhbHVlLnNldChoZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHVwZGF0ZUNhbnZhcyl7XHJcbiAgICAgIC8vIENhbGN1bGF0ZSBpbmRpY2F0b3IgcG9zaXRpb25cclxuICAgICAgdGhpcy5VcGRhdGVJbmRpY2F0b3JQb3NpdGlvbnMoKVxyXG4gIFxyXG4gICAgICAvLyBSZWRyYXcgY29tcG9uZW50c1xyXG4gICAgICB0aGlzLkRyYXdDb2xvckdyYWRpZW50KClcclxuICAgICAgdGhpcy5EcmF3QWxwaGFTbGlkZXIoKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBEcmF3Q29sb3JHcmFkaWVudCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN0eCA9IHRoaXMuZ3JhZGllbnRDdHg7XHJcblxyXG4gICAgLy8gQ2xlYXIgY2FudmFzXHJcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuZ3JhZGllbnRXaWR0aCwgdGhpcy5ncmFkaWVudEhlaWdodClcclxuXHJcbiAgICAvLyBEcmF3IHRoZSBwdXJlIGh1ZSBjb2xvciBhdCB0aGUgdG9wLXJpZ2h0IGNvcm5lclxyXG4gICAgY3R4LmZpbGxTdHlsZSA9IGBoc2woJHt0aGlzLmhzbENvbG9yLmh9LCAxMDAlLCA1MCUpYFxyXG4gICAgY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuZ3JhZGllbnRXaWR0aCwgdGhpcy5ncmFkaWVudEhlaWdodClcclxuXHJcbiAgICAvLyBXaGl0ZSBncmFkaWVudCAoaG9yaXpvbnRhbCAtIHNhdHVyYXRpb24pXHJcbiAgICBjb25zdCB3aGl0ZUdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIHRoaXMuZ3JhZGllbnRXaWR0aCwgMClcclxuICAgIHdoaXRlR3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsIFwid2hpdGVcIilcclxuICAgIHdoaXRlR3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsIFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwKVwiKVxyXG4gICAgY3R4LmZpbGxTdHlsZSA9IHdoaXRlR3JhZGllbnRcclxuICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmdyYWRpZW50V2lkdGgsIHRoaXMuZ3JhZGllbnRIZWlnaHQpXHJcblxyXG4gICAgLy8gQmxhY2sgZ3JhZGllbnQgKHZlcnRpY2FsIC0gYnJpZ2h0bmVzcylcclxuICAgIGNvbnN0IGJsYWNrR3JhZGllbnQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgMCwgdGhpcy5ncmFkaWVudEhlaWdodClcclxuICAgIGJsYWNrR3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsIFwicmdiYSgwLCAwLCAwLCAwKVwiKVxyXG4gICAgYmxhY2tHcmFkaWVudC5hZGRDb2xvclN0b3AoMSwgXCJibGFja1wiKVxyXG4gICAgY3R4LmZpbGxTdHlsZSA9IGJsYWNrR3JhZGllbnRcclxuICAgIGN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmdyYWRpZW50V2lkdGgsIHRoaXMuZ3JhZGllbnRIZWlnaHQpXHJcbiAgfVxyXG5cclxuICBEcmF3SHVlU2xpZGVyKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY3R4ID0gdGhpcy5odWVDdHhcclxuXHJcbiAgICAvLyBDcmVhdGUgaHVlIGdyYWRpZW50XHJcbiAgICBjb25zdCBncmFkaWVudCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLCAwLCB0aGlzLmh1ZVNsaWRlcldpZHRoLCAwKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzYwOyBpICs9IDYwKSB7XHJcbiAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcChpIC8gMzYwLCBgaHNsKCR7aX0sIDEwMCUsIDUwJSlgKVxyXG4gICAgfVxyXG5cclxuICAgIGN0eC5maWxsU3R5bGUgPSBncmFkaWVudFxyXG4gICAgY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuaHVlU2xpZGVyV2lkdGgsIHRoaXMuaHVlU2xpZGVySGVpZ2h0KVxyXG4gIH1cclxuXHJcbiAgRHJhd0FscGhhU2xpZGVyKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY3R4ID0gdGhpcy5hbHBoYUN0eFxyXG4gICAgY29uc3Qgd2lkdGggID0gdGhpcy5hbHBoYVNsaWRlcldpZHRoXHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmFscGhhU2xpZGVySGVpZ2h0XHJcblxyXG4gICAgLy8gQ2xlYXIgY2FudmFzXHJcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpXHJcblxyXG4gICAgLy8gQ3JlYXRlIGNoZWNrZXJib2FyZCBwYXR0ZXJuIGZvciB0cmFuc3BhcmVuY3lcclxuICAgIGNvbnN0IHNxdWFyZVNpemUgPSA4XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpICs9IHNxdWFyZVNpemUpIHtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBoZWlnaHQ7IGogKz0gc3F1YXJlU2l6ZSkge1xyXG4gICAgICAgIGNvbnN0IGlzRXZlbiA9IChpIC8gc3F1YXJlU2l6ZSArIGogLyBzcXVhcmVTaXplKSAlIDIgPT09IDBcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gaXNFdmVuID8gXCIjZmZmZmZmXCIgOiBcIiNjY2NjY2NcIlxyXG4gICAgICAgIGN0eC5maWxsUmVjdChpLCBqLCBzcXVhcmVTaXplLCBzcXVhcmVTaXplKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICAvLyBDcmVhdGUgYWxwaGEgZ3JhZGllbnRcclxuICAgIGNvbnN0IGdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIHdpZHRoLCAwKVxyXG4gICAgY29uc3QgcmdiID0gSFNMVG9SR0IodGhpcy5oc2xDb2xvcik7XHJcblxyXG4gICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsIGByZ2JhKCR7cmdiLnJ9LCAke3JnYi5nfSwgJHtyZ2IuYn0sIDApYClcclxuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCBgcmdiYSgke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9LCAxKWApXHJcblxyXG4gICAgY3R4LmZpbGxTdHlsZSA9IGdyYWRpZW50XHJcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodClcclxuICB9XHJcblxyXG4gIGFzeW5jIENvcHlUb0NsaXBib2FyZCgpIHtcclxuICAgIGF3YWl0IENsaXBib2FyZC53cml0ZSh7XHJcbiAgICAgIHN0cmluZzogdGhpcy52YWx1ZSgpXHJcbiAgICB9KTtcclxuICAgIGF3YWl0IHRoaXMuZ2VuZXJpY1NlcnZpY2UuUHJlc2VudFRvYXN0U3VjY2VzcyhgJHt0aGlzLnZhbHVlKCl9IGNvcGlhZGEgcGFyYSBhIMOhcmVhIGRlIHRyYW5zZmVyw6puY2lhIWApO1xyXG4gIH1cclxuXHJcbiAgVXBkYXRlSW5kaWNhdG9yUG9zaXRpb25zKCk6IHZvaWQge1xyXG4gICAgLy8gU2V0IFggcG9zaXRpb24gZGlyZWN0bHkgZnJvbSBzYXR1cmF0aW9uICgwLTEwMClcclxuICAgIHRoaXMuaW5kaWNhdG9yWCA9IHRoaXMuaHNsQ29sb3IucztcclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgWSBwb3NpdGlvbiB1c2luZyB0aGUgaW52ZXJzZSBvZiB0aGUgSGFuZGxlQ29sb3JTZWxlY3Rpb24gbG9naWNcclxuICAgIGlmICh0aGlzLmhzbENvbG9yLnMgPT09IDApIHtcclxuICAgICAgLy8gTGVmdCBlZGdlOiBzaW1wbGUgd2hpdGUgdG8gYmxhY2sgbWFwcGluZ1xyXG4gICAgICB0aGlzLmluZGljYXRvclkgPSAxMDAgLSB0aGlzLmhzbENvbG9yLmw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGb3Igb3RoZXIgc2F0dXJhdGlvbiB2YWx1ZXMsIHdlIG5lZWQgdG8gcmV2ZXJzZSB0aGUgbWF4TGlnaHRuZXNzIGNhbGN1bGF0aW9uXHJcbiAgICAgIGNvbnN0IG1heExpZ2h0bmVzcyA9IDEwMCAtIHRoaXMuaHNsQ29sb3IucyAvIDI7XHJcbiAgICAgIHRoaXMuaW5kaWNhdG9yWSA9ICgobWF4TGlnaHRuZXNzIC0gdGhpcy5oc2xDb2xvci5sKSAvIG1heExpZ2h0bmVzcykgKiAxMDA7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEVuc3VyZSB0aGUgcG9zaXRpb24gc3RheXMgd2l0aGluIGJvdW5kc1xyXG4gICAgdGhpcy5pbmRpY2F0b3JZID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCB0aGlzLmluZGljYXRvclkpKTtcclxuICB9XHJcblxyXG4gIEhFWE1hc2s6IE1hc2tpdG9PcHRpb25zID0geyBtYXNrOiBIRVhNYXNrIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEhTTFRvUkdCKGhzbDogSFNMKTogUkdCIHtcclxuICB2YXIgaCA9IGhzbC5oIC8gMzYwO1xyXG4gIHZhciBzID0gaHNsLnMgLyAxMDA7XHJcbiAgdmFyIGwgPSBoc2wubCAvIDEwMDtcclxuXHJcbiAgbGV0IHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXJcclxuXHJcbiAgaWYgKHMgPT09IDApIHtcclxuICAgIHIgPSBnID0gYiA9IGwgLy8gYWNocm9tYXRpY1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBxID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogc1xyXG4gICAgY29uc3QgcCA9IDIgKiBsIC0gcVxyXG5cclxuICAgIHIgPSBIVUV0b1JHQihwLCBxLCBoICsgMSAvIDMpXHJcbiAgICBnID0gSFVFdG9SR0IocCwgcSwgaClcclxuICAgIGIgPSBIVUV0b1JHQihwLCBxLCBoIC0gMSAvIDMpXHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgcjogTWF0aC5yb3VuZChyICogMjU1KSxcclxuICAgIGc6IE1hdGgucm91bmQoZyAqIDI1NSksXHJcbiAgICBiOiBNYXRoLnJvdW5kKGIgKiAyNTUpLFxyXG4gIH1cclxufVxyXG5mdW5jdGlvbiBIVUV0b1JHQihwOiBudW1iZXIsIHE6IG51bWJlciwgdDogbnVtYmVyKTogbnVtYmVyIHtcclxuICBpZiAodCA8IDApIHQgKz0gMVxyXG4gIGlmICh0ID4gMSkgdCAtPSAxXHJcbiAgaWYgKHQgPCAxIC8gNikgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHRcclxuICBpZiAodCA8IDEgLyAyKSByZXR1cm4gcVxyXG4gIGlmICh0IDwgMiAvIDMpIHJldHVybiBwICsgKHEgLSBwKSAqICgyIC8gMyAtIHQpICogNlxyXG4gIHJldHVybiBwXHJcbn1cclxuXHJcbmZ1bmN0aW9uIFJHQlRvSFNMKHJnYjogUkdCKTogSFNMIHtcclxuICB2YXIgciA9IHJnYi5yIC8gMjU1XHJcbiAgdmFyIGcgPSByZ2IuZyAvIDI1NVxyXG4gIHZhciBiID0gcmdiLmIgLyAyNTVcclxuXHJcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYilcclxuICBjb25zdCBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKVxyXG4gIGxldCBoID0gMCxcclxuICAgIHMgPSAwXHJcbiAgY29uc3QgbCA9IChtYXggKyBtaW4pIC8gMlxyXG5cclxuICBpZiAobWF4ICE9PSBtaW4pIHtcclxuICAgIGNvbnN0IGQgPSBtYXggLSBtaW5cclxuICAgIHMgPSBsID4gMC41ID8gZCAvICgyIC0gbWF4IC0gbWluKSA6IGQgLyAobWF4ICsgbWluKVxyXG5cclxuICAgIHN3aXRjaCAobWF4KSB7XHJcbiAgICAgIGNhc2UgcjpcclxuICAgICAgICBoID0gKChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApKSAvIDZcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIGc6XHJcbiAgICAgICAgaCA9ICgoYiAtIHIpIC8gZCArIDIpIC8gNlxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgYjpcclxuICAgICAgICBoID0gKChyIC0gZykgLyBkICsgNCkgLyA2XHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBoOiBNYXRoLnJvdW5kKGggKiAzNjApLFxyXG4gICAgczogTWF0aC5yb3VuZChzICogMTAwKSxcclxuICAgIGw6IE1hdGgucm91bmQobCAqIDEwMCksXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBSR0JUb0hleChyZ2I6IFJHQiwgYWxwaGEgPSAxKTogc3RyaW5nIHtcclxuICBsZXQgeyByLCBnLCBiIH0gPSByZ2JcclxuXHJcbiAgY29uc3QgYWxwaGFIZXggPSBNYXRoLnJvdW5kKGFscGhhICogMjU1KVxyXG4gICAgLnRvU3RyaW5nKDE2KVxyXG4gICAgLnBhZFN0YXJ0KDIsIFwiMFwiKVxyXG4gIHJldHVybiAoXHJcbiAgICBcIiNcIiArXHJcbiAgICBbciwgZywgYl1cclxuICAgICAgLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhleCA9IHgudG9TdHJpbmcoMTYpXHJcbiAgICAgICAgcmV0dXJuIGhleC5sZW5ndGggPT09IDEgPyBcIjBcIiArIGhleCA6IGhleFxyXG4gICAgICB9KVxyXG4gICAgICAuam9pbihcIlwiKSArXHJcbiAgICAoYWxwaGEgPCAxID8gYWxwaGFIZXggOiBcIlwiKVxyXG4gICkudG9VcHBlckNhc2UoKTtcclxufVxyXG5cclxuY29uc3QgSEVYRGlnaXRSZWdleDogUmVnRXhwID0gL1swLTlhLWZdKy9pO1xyXG5jb25zdCBIRVhNYXNrOiBNYXNraXRvTWFza0V4cHJlc3Npb24gPSBbICcjJywgSEVYRGlnaXRSZWdleCwgSEVYRGlnaXRSZWdleCwgSEVYRGlnaXRSZWdleCwgSEVYRGlnaXRSZWdleCwgSEVYRGlnaXRSZWdleCwgSEVYRGlnaXRSZWdleCwgSEVYRGlnaXRSZWdleCBdOyIsIjxkaXYgXHJcbiAgI2lucHV0Q29udGFpbmVyXHJcbiAgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIiBcclxuICAoY2xpY2spPVwiZm9jdXMoJGV2ZW50KTsgUHJlc2VudCgkZXZlbnQpXCJcclxuICBbY2xhc3MucmVxdWlyZWRdPVwicmVxdWlyZWQoKVwiIFxyXG4gIFtjbGFzcy5zdWJtaXR0ZWRdPVwic3VibWl0dGVkKClcIiBcclxuICBbY2xhc3MuaW52YWxpZF09XCJpbnZhbGlkXCIgXHJcbiAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkKCkgfHwgbG9hZGluZygpXCJcclxuICBbY2xhc3MubG9hZGluZ109XCJsb2FkaW5nKClcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImlucHV0LWxhYmVsXCI+IFxyXG4gICAgPHNwYW4gY2xhc3M9XCJ0cnVuY2F0ZVwiPlxyXG4gICAgICB7e2xhYmVsKCl9fSBcclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8aW5wdXQgI2lucHV0XHJcbiAgICBbbWFza2l0b109XCJIRVhNYXNrXCJcclxuICAgIFtuZ01vZGVsXT1cInZhbHVlKClcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwiU2V0Q29sb3JGcm9tSGV4KCRldmVudCwgdHJ1ZSwgdHJ1ZSlcIiBcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpIHx8IGxvYWRpbmcoKVwiXHJcbiAgLz5cclxuICA8ZGl2IGNsYXNzPVwiIGFic29sdXRlIGJvdHRvbS0yIHJpZ2h0LTggc2l6ZS01IHJvdW5kZWQtc20gb3ZlcmZsb3ctaGlkZGVuXCIgW3N0eWxlXT1cInsgJ2JhY2tncm91bmQnOiB2YWx1ZSgpIH1cIj4gPC9kaXY+XHJcblxyXG4gIDxpb24tYnV0dG9uIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cImFic29sdXRlIHJpZ2h0LTEgYm90dG9tLTFcIiAoY2xpY2spPVwiQ29weVRvQ2xpcGJvYXJkKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiBjb2xvcj1cIm1lZGl1bVwiIHNpemU9XCJzbWFsbFwiIGZpbGw9XCJjbGVhclwiIHN0eWxlPVwiLS1ib3JkZXItcmFkaXVzOiAuNXJlbVwiPlxyXG4gICAgPGlvbi1pY29uIG5hbWU9XCJjbGlwYm9hcmRcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cclxuICA8L2lvbi1idXR0b24+XHJcblxyXG4gICAgPCEtLSBbbWF4bGVuZ3RoXT1cImNvbmZpZ3VyYXRpb24oKS5tYXhsZW5ndGhcIiAtLT5cclxuICAgIDwhLS0gW3R5cGVdPVwiY29uZmlndXJhdGlvbigpLnR5cGVcIiAgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCIgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZygpXCI+XHJcbiAgICA8aW9uLXNwaW5uZXI+PC9pb24tc3Bpbm5lcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48c2lvbi1wb3BvdmVyXHJcbiAgI3BvcG92ZXIgXHJcbiAgd2lkdGg9XCJmaXQtY29udGVudFwiIFxyXG4gIFthbmNob3JdPVwiaW5wdXRDb250YWluZXJcIiBcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgcC0yIGZsZXggZ2FwLTFcIj4gIFxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy00NCBzaHJpbmstMCBnYXAtMVwiPlxyXG4gICAgICA8ZGl2IGlkPVwiZ3JhZGllbnRXcmFwcGVyXCIgY2xhc3M9XCJ3LTQ0IGgtMzIgcmVsYXRpdmVcIj5cclxuICAgICAgICA8Y2FudmFzICNncmFkaWVudCB3aWR0aD1cIjE3NlwiIGhlaWdodD1cIjEyOFwiIGNsYXNzPVwic2l6ZS1mdWxsIHJvdW5kZWQtc20gdHJhbnNsdWNpZC1ib3JkZXJcIj48L2NhbnZhcz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItaW5kaWNhdG9yIHF1aWNrLXRyYW5zaXRpb25cIiBbc3R5bGUubGVmdC4lXT1cImluZGljYXRvclhcIiBbc3R5bGUudG9wLiVdPVwiaW5kaWNhdG9yWVwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgaWQ9XCJodWVXcmFwcGVyXCIgY2xhc3M9XCJ3LWZ1bGwgcmVsYXRpdmVcIj5cclxuICAgICAgICA8Y2FudmFzICNodWVTbGlkZXIgICBjbGFzcz1cInctZnVsbCByb3VuZGVkIGgtWzIycHhdXCIgd2lkdGg9XCIxNzZcIiBoZWlnaHQ9XCIyMlwiPjwvY2FudmFzPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgcXVpY2stdHJhbnNpdGlvblwiIFtzdHlsZS5sZWZ0LiVdPVwiaHNsQ29sb3IuaCAvIDMuNlwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgaWQ9XCJhbHBoYVdyYXBwZXJcIiBjbGFzcz1cInctZnVsbCByZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxjYW52YXMgI2FscGhhU2xpZGVyIGNsYXNzPVwidy1mdWxsIHJvdW5kZWQgaC1bMjJweF1cIiB3aWR0aD1cIjE3NlwiIGhlaWdodD1cIjIyXCI+PC9jYW52YXM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZGljYXRvciBxdWljay10cmFuc2l0aW9uXCIgW3N0eWxlLmxlZnQuJV09XCJhbHBoYVwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBzaHJpbmstMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZ3JpZCBncmlkLWNvbHMtNSBnYXAtMVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlQ29sb3I7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiAnIzAwMDAwMEZGJyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVDb2xvcjsgY29udGV4dDogeyAkaW1wbGljaXQ6ICcjMzg4MEZGRkYnIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUNvbG9yOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogJyMyREQzNkZGRicgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlQ29sb3I7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiAnI0ZGQzQwOUZGJyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVDb2xvcjsgY29udGV4dDogeyAkaW1wbGljaXQ6ICcjRUI0NDVBRkYnIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlQ29sb3I7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiAnI0ZGRkZGRkZGJyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVDb2xvcjsgY29udGV4dDogeyAkaW1wbGljaXQ6ICcjNTkxNjhiRkYnIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUNvbG9yOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogJyNDNjAwNUNGRicgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlQ29sb3I7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiAnI0ZCMkMzNkZGJyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVDb2xvcjsgY29udGV4dDogeyAkaW1wbGljaXQ6ICcjMzE0MTU4RkYnIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+ICBcclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3Npb24tcG9wb3Zlcj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVDb2xvciBsZXQtY29sb3I+XHJcbiAgPGRpdiBjbGFzcz1cInNpemUtOCByb3VuZGVkIHRyYW5zbHVjaWQtYm9yZGVyIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIlNldENvbG9yRnJvbUhleChjb2xvciwgdHJ1ZSwgdHJ1ZSlcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJjb2xvclwiPjwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXRDdXJyZW5jeUNvbmZpZ3VyYXRpb24sIElucHV0RGVjaW1hbENvbmZpZ3VyYXRpb24sIElucHV0TnVtYmVyQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuL2lucHV0LWRlY2ltYWwvaW5wdXQtZGVjaW1hbC5jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IElucHV0Q3BmQ25wakNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi9pbnB1dC1jcGYtY25wai9pbnB1dC1jcGYtY25wai5jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCIuL2lucHV0LXNlbGVjdC9pbnB1dC5zZWxlY3QuY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBJbnB1dFN0cmluZ0NvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi9pbnB1dC1zdHJpbmcvaW5wdXQtc3RyaW5nLmNvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHsgSW5wdXRCb29sQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuL2lucHV0LWJvb2wvaW5wdXQtYm9vbC5jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IElucHV0RGF0ZUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi9pbnB1dC1kYXRlL2lucHV0LWRhdGUuY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBJbnB1dEZpbGVDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vaW5wdXQtZmlsZS9pbnB1dC1maWxlLmNvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHsgSW5wdXRUZWxlZm9uZUNlbHVsYXJDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vaW5wdXQtdGVsZWZvbmUvaW5wdXQtdGVsZWZvbmUuY29uZmlndXJhdGlvblwiO1xyXG5cclxuZXhwb3J0IHR5cGUgSW5wdXRDb25maWd1cmF0aW9uID0gXHJcbiAgSW5wdXRCb29sQ29uZmlndXJhdGlvbiAgICAgfFxyXG4gIElucHV0Q3BmQ25wakNvbmZpZ3VyYXRpb24gIHxcclxuICBJbnB1dERhdGVDb25maWd1cmF0aW9uICAgICB8XHJcbiAgSW5wdXREZWNpbWFsQ29uZmlndXJhdGlvbiAgfFxyXG4gIElucHV0Q3VycmVuY3lDb25maWd1cmF0aW9uIHxcclxuICBJbnB1dE51bWJlckNvbmZpZ3VyYXRpb24gICB8XHJcbiAgSW5wdXRGaWxlQ29uZmlndXJhdGlvbiAgICAgfFxyXG4gIElucHV0U2VsZWN0Q29uZmlndXJhdGlvbiAgIHxcclxuICBJbnB1dFN0cmluZ0NvbmZpZ3VyYXRpb24gICB8IFxyXG4gIElucHV0VGVsZWZvbmVDZWx1bGFyQ29uZmlndXJhdGlvbiB8IFxyXG4gIGFueTtcclxuIl19
|