@muxima-ui/color-picker 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -0
- package/esm2020/index.mjs +2 -0
- package/esm2020/lib/color-picker/color-picker.component.mjs +294 -0
- package/esm2020/muxima-ui-color-picker.mjs +5 -0
- package/fesm2015/muxima-ui-color-picker.mjs +301 -0
- package/fesm2015/muxima-ui-color-picker.mjs.map +1 -0
- package/fesm2020/muxima-ui-color-picker.mjs +301 -0
- package/fesm2020/muxima-ui-color-picker.mjs.map +1 -0
- package/index.d.ts +1 -0
- package/lib/color-picker/color-picker.component.d.ts +88 -0
- package/package.json +57 -0
package/README.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Color Picker Component
|
|
2
|
+
|
|
3
|
+
Seletor de cores avançado com suporte a múltiplos formatos, paletas predefinidas e criador de gradientes.
|
|
4
|
+
|
|
5
|
+
## 🎨 Recursos
|
|
6
|
+
|
|
7
|
+
- ✅ Sliders HSL interativos (Matiz, Saturação, Luminosidade)
|
|
8
|
+
- ✅ Formatos: HEX, RGB, HSL
|
|
9
|
+
- ✅ 3 paletas predefinidas (Material, Pastéis, Neutros)
|
|
10
|
+
- ✅ Criador de gradientes com ângulo ajustável
|
|
11
|
+
- ✅ Suporte a opacidade (alpha)
|
|
12
|
+
- ✅ Modo inline ou dropdown
|
|
13
|
+
- ✅ 3 tamanhos: small, medium, large
|
|
14
|
+
- ✅ Integração com Angular Forms (ngModel / FormControl)
|
|
15
|
+
|
|
16
|
+
## 📦 Instalação
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { ColorPickerComponent } from '@muxima-ui/color-picker';
|
|
20
|
+
|
|
21
|
+
@Component({
|
|
22
|
+
imports: [ColorPickerComponent]
|
|
23
|
+
})
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 🚀 Uso Básico
|
|
27
|
+
|
|
28
|
+
```html
|
|
29
|
+
<!-- Dropdown -->
|
|
30
|
+
<muxima-color-picker
|
|
31
|
+
[(ngModel)]="selectedColor"
|
|
32
|
+
(colorChange)="onColorChange($event)"
|
|
33
|
+
></muxima-color-picker>
|
|
34
|
+
|
|
35
|
+
<!-- Inline -->
|
|
36
|
+
<muxima-color-picker
|
|
37
|
+
[inline]="true"
|
|
38
|
+
[format]="'hex'"
|
|
39
|
+
[(ngModel)]="color"
|
|
40
|
+
></muxima-color-picker>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 📝 Propriedades
|
|
44
|
+
|
|
45
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
46
|
+
|------------|------|---------|-----------|
|
|
47
|
+
| `format` | `'hex' \| 'rgb' \| 'hsl'` | `'hex'` | Formato de exibição da cor |
|
|
48
|
+
| `showPalettes` | `boolean` | `true` | Mostrar paletas de cores |
|
|
49
|
+
| `showGradient` | `boolean` | `false` | Mostrar criador de gradientes |
|
|
50
|
+
| `showAlpha` | `boolean` | `false` | Mostrar controle de opacidade |
|
|
51
|
+
| `inline` | `boolean` | `false` | Exibir sempre aberto |
|
|
52
|
+
| `disabled` | `boolean` | `false` | Desabilitar o componente |
|
|
53
|
+
| `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Tamanho do botão trigger |
|
|
54
|
+
| `customPalettes` | `ColorPalette[]` | `[]` | Paletas personalizadas |
|
|
55
|
+
|
|
56
|
+
## 🎯 Eventos
|
|
57
|
+
|
|
58
|
+
| Evento | Tipo | Descrição |
|
|
59
|
+
|--------|------|-----------|
|
|
60
|
+
| `colorChange` | `ColorFormat` | Emitido quando a cor muda |
|
|
61
|
+
| `formatChange` | `'hex' \| 'rgb' \| 'hsl'` | Emitido quando o formato muda |
|
|
62
|
+
|
|
63
|
+
## 💡 Exemplos Avançados
|
|
64
|
+
|
|
65
|
+
### Com Gradientes
|
|
66
|
+
|
|
67
|
+
```html
|
|
68
|
+
<muxima-color-picker
|
|
69
|
+
[showGradient]="true"
|
|
70
|
+
[inline]="true"
|
|
71
|
+
></muxima-color-picker>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Com Opacidade
|
|
75
|
+
|
|
76
|
+
```html
|
|
77
|
+
<muxima-color-picker
|
|
78
|
+
[showAlpha]="true"
|
|
79
|
+
[(ngModel)]="colorWithAlpha"
|
|
80
|
+
></muxima-color-picker>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Paletas Personalizadas
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
customPalettes: ColorPalette[] = [
|
|
87
|
+
{
|
|
88
|
+
name: 'Meu Tema',
|
|
89
|
+
colors: ['#667eea', '#764ba2', '#f093fb', '#4facfe']
|
|
90
|
+
}
|
|
91
|
+
];
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
```html
|
|
95
|
+
<muxima-color-picker
|
|
96
|
+
[customPalettes]="customPalettes"
|
|
97
|
+
></muxima-color-picker>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## 🎨 Interface ColorFormat
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
interface ColorFormat {
|
|
104
|
+
hex: string; // '#667eea'
|
|
105
|
+
rgb: { // { r: 102, g: 126, b: 234 }
|
|
106
|
+
r: number;
|
|
107
|
+
g: number;
|
|
108
|
+
b: number;
|
|
109
|
+
};
|
|
110
|
+
hsl: { // { h: 240, s: 76, l: 72 }
|
|
111
|
+
h: number;
|
|
112
|
+
s: number;
|
|
113
|
+
l: number;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 🎨 Tema Muxima UI
|
|
119
|
+
|
|
120
|
+
Usa o gradiente característico: `linear-gradient(135deg, #667eea 0%, #764ba2 100%)`
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './lib/color-picker/color-picker.component';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9mb3JtL2NvbG9yLXBpY2tlci9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQ0FBMkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50JztcclxuIl19
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@angular/forms";
|
|
7
|
+
export class ColorPickerComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.format = 'hex';
|
|
10
|
+
this.showPalettes = true;
|
|
11
|
+
this.showGradient = false;
|
|
12
|
+
this.customPalettes = [];
|
|
13
|
+
this.disabled = false;
|
|
14
|
+
this.size = 'medium';
|
|
15
|
+
this.showAlpha = false;
|
|
16
|
+
this.inline = false;
|
|
17
|
+
this.colorChange = new EventEmitter();
|
|
18
|
+
this.formatChange = new EventEmitter();
|
|
19
|
+
this.currentColor = '#667eea';
|
|
20
|
+
this.isOpen = false;
|
|
21
|
+
this.hue = 240;
|
|
22
|
+
this.saturation = 76;
|
|
23
|
+
this.lightness = 72;
|
|
24
|
+
this.alpha = 1;
|
|
25
|
+
this.defaultPalettes = [
|
|
26
|
+
{
|
|
27
|
+
name: 'Material',
|
|
28
|
+
colors: ['#f44336', '#e91e63', '#9c27b0', '#673ab7', '#3f51b5', '#2196f3', '#03a9f4', '#00bcd4']
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'Pastéis',
|
|
32
|
+
colors: ['#ffc1cc', '#ffabab', '#ffd4a3', '#fff9a3', '#c1ffc1', '#a3d4ff', '#c1a3ff', '#ffa3ff']
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'Neutros',
|
|
36
|
+
colors: ['#ffffff', '#f5f5f5', '#e0e0e0', '#bdbdbd', '#9e9e9e', '#757575', '#424242', '#212121']
|
|
37
|
+
}
|
|
38
|
+
];
|
|
39
|
+
this.gradientStart = '#667eea';
|
|
40
|
+
this.gradientEnd = '#764ba2';
|
|
41
|
+
this.gradientAngle = 135;
|
|
42
|
+
this.onChange = () => { };
|
|
43
|
+
this.onTouched = () => { };
|
|
44
|
+
}
|
|
45
|
+
ngOnInit() {
|
|
46
|
+
if (this.inline) {
|
|
47
|
+
this.isOpen = true;
|
|
48
|
+
}
|
|
49
|
+
this.updateFromHex(this.currentColor);
|
|
50
|
+
}
|
|
51
|
+
writeValue(value) {
|
|
52
|
+
if (value) {
|
|
53
|
+
this.currentColor = value;
|
|
54
|
+
this.updateFromHex(value);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
registerOnChange(fn) {
|
|
58
|
+
this.onChange = fn;
|
|
59
|
+
}
|
|
60
|
+
registerOnTouched(fn) {
|
|
61
|
+
this.onTouched = fn;
|
|
62
|
+
}
|
|
63
|
+
setDisabledState(isDisabled) {
|
|
64
|
+
this.disabled = isDisabled;
|
|
65
|
+
}
|
|
66
|
+
togglePicker() {
|
|
67
|
+
if (!this.disabled && !this.inline) {
|
|
68
|
+
this.isOpen = !this.isOpen;
|
|
69
|
+
if (this.isOpen) {
|
|
70
|
+
this.onTouched();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
closePicker() {
|
|
75
|
+
if (!this.inline) {
|
|
76
|
+
this.isOpen = false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
onHueChange(event) {
|
|
80
|
+
this.hue = +event.target.value;
|
|
81
|
+
this.updateColorFromHSL();
|
|
82
|
+
}
|
|
83
|
+
onSaturationChange(event) {
|
|
84
|
+
this.saturation = +event.target.value;
|
|
85
|
+
this.updateColorFromHSL();
|
|
86
|
+
}
|
|
87
|
+
onLightnessChange(event) {
|
|
88
|
+
this.lightness = +event.target.value;
|
|
89
|
+
this.updateColorFromHSL();
|
|
90
|
+
}
|
|
91
|
+
onAlphaChange(event) {
|
|
92
|
+
this.alpha = +event.target.value;
|
|
93
|
+
this.updateColorFromHSL();
|
|
94
|
+
}
|
|
95
|
+
selectPaletteColor(color) {
|
|
96
|
+
this.currentColor = color;
|
|
97
|
+
this.updateFromHex(color);
|
|
98
|
+
this.emitColor();
|
|
99
|
+
}
|
|
100
|
+
onHexInput(event) {
|
|
101
|
+
const hex = event.target.value;
|
|
102
|
+
if (this.isValidHex(hex)) {
|
|
103
|
+
this.currentColor = hex;
|
|
104
|
+
this.updateFromHex(hex);
|
|
105
|
+
this.emitColor();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
updateColorFromHSL() {
|
|
109
|
+
const rgb = this.hslToRgb(this.hue, this.saturation, this.lightness);
|
|
110
|
+
this.currentColor = this.rgbToHex(rgb.r, rgb.g, rgb.b);
|
|
111
|
+
this.emitColor();
|
|
112
|
+
}
|
|
113
|
+
updateFromHex(hex) {
|
|
114
|
+
const rgb = this.hexToRgb(hex);
|
|
115
|
+
if (rgb) {
|
|
116
|
+
const hsl = this.rgbToHsl(rgb.r, rgb.g, rgb.b);
|
|
117
|
+
this.hue = hsl.h;
|
|
118
|
+
this.saturation = hsl.s;
|
|
119
|
+
this.lightness = hsl.l;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
emitColor() {
|
|
123
|
+
const rgb = this.hexToRgb(this.currentColor);
|
|
124
|
+
const colorFormat = {
|
|
125
|
+
hex: this.currentColor,
|
|
126
|
+
rgb: rgb || { r: 0, g: 0, b: 0 },
|
|
127
|
+
hsl: { h: this.hue, s: this.saturation, l: this.lightness }
|
|
128
|
+
};
|
|
129
|
+
this.onChange(this.currentColor);
|
|
130
|
+
this.colorChange.emit(colorFormat);
|
|
131
|
+
}
|
|
132
|
+
changeFormat(newFormat) {
|
|
133
|
+
this.format = newFormat;
|
|
134
|
+
this.formatChange.emit(newFormat);
|
|
135
|
+
}
|
|
136
|
+
getFormattedColor() {
|
|
137
|
+
switch (this.format) {
|
|
138
|
+
case 'hex':
|
|
139
|
+
return this.currentColor;
|
|
140
|
+
case 'rgb':
|
|
141
|
+
const rgb = this.hexToRgb(this.currentColor);
|
|
142
|
+
return rgb ? `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})` : '';
|
|
143
|
+
case 'hsl':
|
|
144
|
+
return `hsl(${this.hue}, ${this.saturation}%, ${this.lightness}%)`;
|
|
145
|
+
default:
|
|
146
|
+
return this.currentColor;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Gradient methods
|
|
150
|
+
onGradientStartChange(color) {
|
|
151
|
+
this.gradientStart = color;
|
|
152
|
+
}
|
|
153
|
+
onGradientEndChange(color) {
|
|
154
|
+
this.gradientEnd = color;
|
|
155
|
+
}
|
|
156
|
+
onGradientAngleChange(event) {
|
|
157
|
+
this.gradientAngle = +event.target.value;
|
|
158
|
+
}
|
|
159
|
+
getGradientStyle() {
|
|
160
|
+
return `linear-gradient(${this.gradientAngle}deg, ${this.gradientStart}, ${this.gradientEnd})`;
|
|
161
|
+
}
|
|
162
|
+
copyGradientCSS() {
|
|
163
|
+
const css = `background: ${this.getGradientStyle()};`;
|
|
164
|
+
navigator.clipboard.writeText(css);
|
|
165
|
+
}
|
|
166
|
+
// Color conversion utilities
|
|
167
|
+
hexToRgb(hex) {
|
|
168
|
+
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
169
|
+
return result ? {
|
|
170
|
+
r: parseInt(result[1], 16),
|
|
171
|
+
g: parseInt(result[2], 16),
|
|
172
|
+
b: parseInt(result[3], 16)
|
|
173
|
+
} : null;
|
|
174
|
+
}
|
|
175
|
+
rgbToHex(r, g, b) {
|
|
176
|
+
return '#' + [r, g, b].map(x => {
|
|
177
|
+
const hex = x.toString(16);
|
|
178
|
+
return hex.length === 1 ? '0' + hex : hex;
|
|
179
|
+
}).join('');
|
|
180
|
+
}
|
|
181
|
+
rgbToHsl(r, g, b) {
|
|
182
|
+
r /= 255;
|
|
183
|
+
g /= 255;
|
|
184
|
+
b /= 255;
|
|
185
|
+
const max = Math.max(r, g, b);
|
|
186
|
+
const min = Math.min(r, g, b);
|
|
187
|
+
let h = 0, s = 0;
|
|
188
|
+
const l = (max + min) / 2;
|
|
189
|
+
if (max !== min) {
|
|
190
|
+
const d = max - min;
|
|
191
|
+
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
192
|
+
switch (max) {
|
|
193
|
+
case r:
|
|
194
|
+
h = ((g - b) / d + (g < b ? 6 : 0)) / 6;
|
|
195
|
+
break;
|
|
196
|
+
case g:
|
|
197
|
+
h = ((b - r) / d + 2) / 6;
|
|
198
|
+
break;
|
|
199
|
+
case b:
|
|
200
|
+
h = ((r - g) / d + 4) / 6;
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
h: Math.round(h * 360),
|
|
206
|
+
s: Math.round(s * 100),
|
|
207
|
+
l: Math.round(l * 100)
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
hslToRgb(h, s, l) {
|
|
211
|
+
h /= 360;
|
|
212
|
+
s /= 100;
|
|
213
|
+
l /= 100;
|
|
214
|
+
let r, g, b;
|
|
215
|
+
if (s === 0) {
|
|
216
|
+
r = g = b = l;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
const hue2rgb = (p, q, t) => {
|
|
220
|
+
if (t < 0)
|
|
221
|
+
t += 1;
|
|
222
|
+
if (t > 1)
|
|
223
|
+
t -= 1;
|
|
224
|
+
if (t < 1 / 6)
|
|
225
|
+
return p + (q - p) * 6 * t;
|
|
226
|
+
if (t < 1 / 2)
|
|
227
|
+
return q;
|
|
228
|
+
if (t < 2 / 3)
|
|
229
|
+
return p + (q - p) * (2 / 3 - t) * 6;
|
|
230
|
+
return p;
|
|
231
|
+
};
|
|
232
|
+
const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
|
233
|
+
const p = 2 * l - q;
|
|
234
|
+
r = hue2rgb(p, q, h + 1 / 3);
|
|
235
|
+
g = hue2rgb(p, q, h);
|
|
236
|
+
b = hue2rgb(p, q, h - 1 / 3);
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
r: Math.round(r * 255),
|
|
240
|
+
g: Math.round(g * 255),
|
|
241
|
+
b: Math.round(b * 255)
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
isValidHex(hex) {
|
|
245
|
+
return /^#?([a-f\d]{6}|[a-f\d]{3})$/i.test(hex);
|
|
246
|
+
}
|
|
247
|
+
getPalettes() {
|
|
248
|
+
return this.customPalettes.length > 0 ? this.customPalettes : this.defaultPalettes;
|
|
249
|
+
}
|
|
250
|
+
asFormat(fmt) {
|
|
251
|
+
if (fmt === 'hex' || fmt === 'rgb' || fmt === 'hsl')
|
|
252
|
+
return fmt;
|
|
253
|
+
return 'hex';
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
ColorPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
257
|
+
ColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ColorPickerComponent, isStandalone: true, selector: "muxima-color-picker", inputs: { format: "format", showPalettes: "showPalettes", showGradient: "showGradient", customPalettes: "customPalettes", disabled: "disabled", size: "size", showAlpha: "showAlpha", inline: "inline" }, outputs: { colorChange: "colorChange", formatChange: "formatChange" }, providers: [
|
|
258
|
+
{
|
|
259
|
+
provide: NG_VALUE_ACCESSOR,
|
|
260
|
+
useExisting: forwardRef(() => ColorPickerComponent),
|
|
261
|
+
multi: true
|
|
262
|
+
}
|
|
263
|
+
], ngImport: i0, template: "<div class=\"color-picker-wrapper\" [attr.data-size]=\"size\" [class.disabled]=\"disabled\">\r\n <!-- Trigger Button -->\r\n <button \r\n *ngIf=\"!inline\"\r\n class=\"color-trigger\"\r\n [style.background]=\"currentColor\"\r\n [disabled]=\"disabled\"\r\n (click)=\"togglePicker()\"\r\n type=\"button\">\r\n <span class=\"color-value\">{{ getFormattedColor() }}</span>\r\n </button>\r\n\r\n <!-- Picker Dropdown/Inline -->\r\n <div class=\"color-picker-panel\" [class.open]=\"isOpen\" [class.inline]=\"inline\">\r\n <div class=\"picker-header\">\r\n <div class=\"format-tabs\">\r\n <button \r\n *ngFor=\"let fmt of ['hex', 'rgb', 'hsl']\"\r\n [class.active]=\"format === fmt\"\r\n (click)=\"changeFormat(asFormat(fmt))\"\r\n type=\"button\">\r\n {{ fmt.toUpperCase() }}\r\n </button>\r\n </div>\r\n <button *ngIf=\"!inline\" class=\"close-btn\" (click)=\"closePicker()\" type=\"button\">\u00D7</button>\r\n </div>\r\n\r\n <!-- Color Preview -->\r\n <div class=\"color-preview\">\r\n <div class=\"preview-box\" [style.background]=\"currentColor\"></div>\r\n <input \r\n type=\"text\" \r\n class=\"color-input\"\r\n [value]=\"getFormattedColor()\"\r\n (input)=\"onHexInput($event)\"\r\n [disabled]=\"disabled\"\r\n />\r\n </div>\r\n\r\n <!-- HSL Sliders -->\r\n <div class=\"color-sliders\">\r\n <div class=\"slider-group\">\r\n <label>Matiz</label>\r\n <input \r\n type=\"range\" \r\n min=\"0\" \r\n max=\"360\" \r\n [value]=\"hue\"\r\n (input)=\"onHueChange($event)\"\r\n [disabled]=\"disabled\"\r\n class=\"slider hue-slider\"\r\n />\r\n <span class=\"slider-value\">{{ hue }}\u00B0</span>\r\n </div>\r\n\r\n <div class=\"slider-group\">\r\n <label>Satura\u00E7\u00E3o</label>\r\n <input \r\n type=\"range\" \r\n min=\"0\" \r\n max=\"100\" \r\n [value]=\"saturation\"\r\n (input)=\"onSaturationChange($event)\"\r\n [disabled]=\"disabled\"\r\n class=\"slider saturation-slider\"\r\n [style.--base-color]=\"'hsl(' + hue + ', 100%, 50%)'\"\r\n />\r\n <span class=\"slider-value\">{{ saturation }}%</span>\r\n </div>\r\n\r\n <div class=\"slider-group\">\r\n <label>Luminosidade</label>\r\n <input \r\n type=\"range\" \r\n min=\"0\" \r\n max=\"100\" \r\n [value]=\"lightness\"\r\n (input)=\"onLightnessChange($event)\"\r\n [disabled]=\"disabled\"\r\n class=\"slider lightness-slider\"\r\n [style.--base-color]=\"'hsl(' + hue + ', ' + saturation + '%, 50%)'\"\r\n />\r\n <span class=\"slider-value\">{{ lightness }}%</span>\r\n </div>\r\n\r\n <div class=\"slider-group\" *ngIf=\"showAlpha\">\r\n <label>Opacidade</label>\r\n <input \r\n type=\"range\" \r\n min=\"0\" \r\n max=\"1\" \r\n step=\"0.01\"\r\n [value]=\"alpha\"\r\n (input)=\"onAlphaChange($event)\"\r\n [disabled]=\"disabled\"\r\n class=\"slider alpha-slider\"\r\n />\r\n <span class=\"slider-value\">{{ (alpha * 100).toFixed(0) }}%</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Color Palettes -->\r\n <div class=\"palettes-section\" *ngIf=\"showPalettes\">\r\n <div class=\"palette\" *ngFor=\"let palette of getPalettes()\">\r\n <h4>{{ palette.name }}</h4>\r\n <div class=\"palette-colors\">\r\n <button\r\n *ngFor=\"let color of palette.colors\"\r\n class=\"palette-color\"\r\n [style.background]=\"color\"\r\n [class.selected]=\"currentColor === color\"\r\n (click)=\"selectPaletteColor(color)\"\r\n [disabled]=\"disabled\"\r\n type=\"button\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Gradient Section -->\r\n <div class=\"gradient-section\" *ngIf=\"showGradient\">\r\n <h4>Criador de Gradiente</h4>\r\n \r\n <div class=\"gradient-preview\" [style.background]=\"getGradientStyle()\"></div>\r\n \r\n <div class=\"gradient-controls\">\r\n <div class=\"gradient-colors\">\r\n <div class=\"gradient-color-input\">\r\n <label>In\u00EDcio</label>\r\n <input \r\n type=\"color\" \r\n [(ngModel)]=\"gradientStart\"\r\n (change)=\"onGradientStartChange(gradientStart)\"\r\n [disabled]=\"disabled\"\r\n />\r\n <span>{{ gradientStart }}</span>\r\n </div>\r\n \r\n <div class=\"gradient-color-input\">\r\n <label>Fim</label>\r\n <input \r\n type=\"color\" \r\n [(ngModel)]=\"gradientEnd\"\r\n (change)=\"onGradientEndChange(gradientEnd)\"\r\n [disabled]=\"disabled\"\r\n />\r\n <span>{{ gradientEnd }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"slider-group\">\r\n <label>\u00C2ngulo</label>\r\n <input \r\n type=\"range\" \r\n min=\"0\" \r\n max=\"360\" \r\n [value]=\"gradientAngle\"\r\n (input)=\"onGradientAngleChange($event)\"\r\n [disabled]=\"disabled\"\r\n class=\"slider\"\r\n />\r\n <span class=\"slider-value\">{{ gradientAngle }}\u00B0</span>\r\n </div>\r\n\r\n <button class=\"copy-btn\" (click)=\"copyGradientCSS()\" [disabled]=\"disabled\" type=\"button\">\r\n \uD83D\uDCCB Copiar CSS\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".color-picker-wrapper{position:relative;display:inline-block}.color-picker-wrapper[data-size=small] .color-trigger{height:32px;font-size:.875rem}.color-picker-wrapper[data-size=large] .color-trigger{height:48px;font-size:1.125rem}.color-picker-wrapper.disabled{opacity:.5;cursor:not-allowed}.color-trigger{display:flex;align-items:center;gap:.5rem;height:40px;padding:.5rem 1rem;border:2px solid #e5e7eb;border-radius:8px;cursor:pointer;transition:all .3s ease;font-family:Courier New,monospace;font-weight:500;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.3)}.color-trigger:hover:not(:disabled){border-color:#667eea;box-shadow:0 4px 12px #667eea33}.color-trigger:disabled{cursor:not-allowed}.color-trigger .color-value{flex:1;text-align:center}.color-picker-panel{position:absolute;top:calc(100% + 8px);left:0;background:white;border-radius:16px;box-shadow:0 10px 40px #00000026;padding:1.5rem;width:320px;z-index:1000;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .3s ease}.color-picker-panel.open{opacity:1;visibility:visible;transform:translateY(0)}.color-picker-panel.inline{position:relative;top:0;left:0;opacity:1;visibility:visible;transform:none;box-shadow:0 2px 8px #0000001a}.picker-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.picker-header .format-tabs{display:flex;gap:.5rem}.picker-header .format-tabs button{padding:.5rem 1rem;border:1px solid #e5e7eb;border-radius:6px;background:white;cursor:pointer;transition:all .2s ease;font-weight:500;font-size:.875rem;color:#6b7280}.picker-header .format-tabs button:hover{background:#f9fafb;border-color:#667eea}.picker-header .format-tabs button.active{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;border-color:transparent}.picker-header .close-btn{width:32px;height:32px;border:none;border-radius:50%;background:#f3f4f6;cursor:pointer;font-size:1.5rem;line-height:1;color:#6b7280;transition:all .2s ease}.picker-header .close-btn:hover{background:#ef4444;color:#fff}.color-preview{display:flex;gap:1rem;margin-bottom:1.5rem}.color-preview .preview-box{width:60px;height:60px;border-radius:12px;border:3px solid #e5e7eb;box-shadow:0 2px 8px #0000001a}.color-preview .color-input{flex:1;padding:.75rem;border:2px solid #e5e7eb;border-radius:8px;font-family:Courier New,monospace;font-size:.875rem;font-weight:500;text-align:center;transition:border-color .2s ease}.color-preview .color-input:focus{outline:none;border-color:#667eea}.color-sliders{margin-bottom:1.5rem}.color-sliders .slider-group{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:.75rem;margin-bottom:1rem}.color-sliders .slider-group label{font-size:.875rem;font-weight:500;color:#374151;min-width:90px}.color-sliders .slider-group .slider-value{font-size:.875rem;font-weight:600;color:#667eea;font-family:Courier New,monospace;min-width:45px;text-align:right}.color-sliders .slider{-webkit-appearance:none;width:100%;height:8px;border-radius:4px;outline:none;cursor:pointer}.color-sliders .slider::-webkit-slider-thumb{appearance:none;width:18px;height:18px;border-radius:50%;background:white;border:3px solid #667eea;cursor:pointer;box-shadow:0 2px 6px #0003;-webkit-transition:all .2s ease;transition:all .2s ease}.color-sliders .slider::-webkit-slider-thumb:hover{transform:scale(1.2)}.color-sliders .slider::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:white;border:3px solid #667eea;cursor:pointer;box-shadow:0 2px 6px #0003}.color-sliders .slider.hue-slider{background:linear-gradient(to right,hsl(0,100%,50%),hsl(60,100%,50%),hsl(120,100%,50%),hsl(180,100%,50%),hsl(240,100%,50%),hsl(300,100%,50%),hsl(0,100%,50%))}.color-sliders .slider.saturation-slider{background:linear-gradient(to right,hsl(var(--hue, 240),0%,50%),var(--base-color, hsl(240, 100%, 50%)))}.color-sliders .slider.lightness-slider{background:linear-gradient(to right,hsl(var(--hue, 240),var(--sat, 100%),0%),var(--base-color, hsl(240, 100%, 50%)),hsl(var(--hue, 240),var(--sat, 100%),100%))}.color-sliders .slider.alpha-slider{background:linear-gradient(to right,transparent,currentColor),repeating-conic-gradient(#ccc 0% 25%,white 0% 50%) 0 0/10px 10px}.color-sliders .slider:disabled{opacity:.5;cursor:not-allowed}.palettes-section{margin-top:1.5rem;padding-top:1.5rem;border-top:2px solid #f3f4f6}.palettes-section .palette{margin-bottom:1.5rem}.palettes-section .palette:last-child{margin-bottom:0}.palettes-section .palette h4{font-size:.875rem;font-weight:600;color:#374151;margin-bottom:.75rem}.palettes-section .palette .palette-colors{display:grid;grid-template-columns:repeat(8,1fr);gap:.5rem}.palettes-section .palette .palette-colors .palette-color{width:100%;aspect-ratio:1;border:2px solid transparent;border-radius:6px;cursor:pointer;transition:all .2s ease}.palettes-section .palette .palette-colors .palette-color:hover{transform:scale(1.1);box-shadow:0 4px 12px #0003}.palettes-section .palette .palette-colors .palette-color.selected{border-color:#667eea;box-shadow:0 0 0 3px #667eea33}.palettes-section .palette .palette-colors .palette-color:disabled{opacity:.5;cursor:not-allowed}.gradient-section{margin-top:1.5rem;padding-top:1.5rem;border-top:2px solid #f3f4f6}.gradient-section h4{font-size:.875rem;font-weight:600;color:#374151;margin-bottom:1rem}.gradient-section .gradient-preview{height:100px;border-radius:12px;margin-bottom:1rem;box-shadow:0 4px 12px #0000001a}.gradient-section .gradient-controls .gradient-colors{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1rem}.gradient-section .gradient-controls .gradient-colors .gradient-color-input{display:flex;flex-direction:column;gap:.5rem}.gradient-section .gradient-controls .gradient-colors .gradient-color-input label{font-size:.875rem;font-weight:500;color:#374151}.gradient-section .gradient-controls .gradient-colors .gradient-color-input input[type=color]{width:100%;height:40px;border:2px solid #e5e7eb;border-radius:8px;cursor:pointer}.gradient-section .gradient-controls .gradient-colors .gradient-color-input input[type=color]::-webkit-color-swatch-wrapper{padding:0}.gradient-section .gradient-controls .gradient-colors .gradient-color-input input[type=color]::-webkit-color-swatch{border:none;border-radius:6px}.gradient-section .gradient-controls .gradient-colors .gradient-color-input span{font-size:.75rem;font-family:Courier New,monospace;color:#6b7280;text-align:center}.gradient-section .gradient-controls .copy-btn{width:100%;padding:.75rem;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;border:none;border-radius:8px;font-weight:600;cursor:pointer;transition:all .2s ease;margin-top:1rem}.gradient-section .gradient-controls .copy-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 20px #667eea66}.gradient-section .gradient-controls .copy-btn:active:not(:disabled){transform:translateY(0)}.gradient-section .gradient-controls .copy-btn:disabled{opacity:.5;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
264
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ColorPickerComponent, decorators: [{
|
|
265
|
+
type: Component,
|
|
266
|
+
args: [{ selector: 'muxima-color-picker', standalone: true, imports: [CommonModule, FormsModule], providers: [
|
|
267
|
+
{
|
|
268
|
+
provide: NG_VALUE_ACCESSOR,
|
|
269
|
+
useExisting: forwardRef(() => ColorPickerComponent),
|
|
270
|
+
multi: true
|
|
271
|
+
}
|
|
272
|
+
], template: "<div class=\"color-picker-wrapper\" [attr.data-size]=\"size\" [class.disabled]=\"disabled\">\r\n <!-- Trigger Button -->\r\n <button \r\n *ngIf=\"!inline\"\r\n class=\"color-trigger\"\r\n [style.background]=\"currentColor\"\r\n [disabled]=\"disabled\"\r\n (click)=\"togglePicker()\"\r\n type=\"button\">\r\n <span class=\"color-value\">{{ getFormattedColor() }}</span>\r\n </button>\r\n\r\n <!-- Picker Dropdown/Inline -->\r\n <div class=\"color-picker-panel\" [class.open]=\"isOpen\" [class.inline]=\"inline\">\r\n <div class=\"picker-header\">\r\n <div class=\"format-tabs\">\r\n <button \r\n *ngFor=\"let fmt of ['hex', 'rgb', 'hsl']\"\r\n [class.active]=\"format === fmt\"\r\n (click)=\"changeFormat(asFormat(fmt))\"\r\n type=\"button\">\r\n {{ fmt.toUpperCase() }}\r\n </button>\r\n </div>\r\n <button *ngIf=\"!inline\" class=\"close-btn\" (click)=\"closePicker()\" type=\"button\">\u00D7</button>\r\n </div>\r\n\r\n <!-- Color Preview -->\r\n <div class=\"color-preview\">\r\n <div class=\"preview-box\" [style.background]=\"currentColor\"></div>\r\n <input \r\n type=\"text\" \r\n class=\"color-input\"\r\n [value]=\"getFormattedColor()\"\r\n (input)=\"onHexInput($event)\"\r\n [disabled]=\"disabled\"\r\n />\r\n </div>\r\n\r\n <!-- HSL Sliders -->\r\n <div class=\"color-sliders\">\r\n <div class=\"slider-group\">\r\n <label>Matiz</label>\r\n <input \r\n type=\"range\" \r\n min=\"0\" \r\n max=\"360\" \r\n [value]=\"hue\"\r\n (input)=\"onHueChange($event)\"\r\n [disabled]=\"disabled\"\r\n class=\"slider hue-slider\"\r\n />\r\n <span class=\"slider-value\">{{ hue }}\u00B0</span>\r\n </div>\r\n\r\n <div class=\"slider-group\">\r\n <label>Satura\u00E7\u00E3o</label>\r\n <input \r\n type=\"range\" \r\n min=\"0\" \r\n max=\"100\" \r\n [value]=\"saturation\"\r\n (input)=\"onSaturationChange($event)\"\r\n [disabled]=\"disabled\"\r\n class=\"slider saturation-slider\"\r\n [style.--base-color]=\"'hsl(' + hue + ', 100%, 50%)'\"\r\n />\r\n <span class=\"slider-value\">{{ saturation }}%</span>\r\n </div>\r\n\r\n <div class=\"slider-group\">\r\n <label>Luminosidade</label>\r\n <input \r\n type=\"range\" \r\n min=\"0\" \r\n max=\"100\" \r\n [value]=\"lightness\"\r\n (input)=\"onLightnessChange($event)\"\r\n [disabled]=\"disabled\"\r\n class=\"slider lightness-slider\"\r\n [style.--base-color]=\"'hsl(' + hue + ', ' + saturation + '%, 50%)'\"\r\n />\r\n <span class=\"slider-value\">{{ lightness }}%</span>\r\n </div>\r\n\r\n <div class=\"slider-group\" *ngIf=\"showAlpha\">\r\n <label>Opacidade</label>\r\n <input \r\n type=\"range\" \r\n min=\"0\" \r\n max=\"1\" \r\n step=\"0.01\"\r\n [value]=\"alpha\"\r\n (input)=\"onAlphaChange($event)\"\r\n [disabled]=\"disabled\"\r\n class=\"slider alpha-slider\"\r\n />\r\n <span class=\"slider-value\">{{ (alpha * 100).toFixed(0) }}%</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Color Palettes -->\r\n <div class=\"palettes-section\" *ngIf=\"showPalettes\">\r\n <div class=\"palette\" *ngFor=\"let palette of getPalettes()\">\r\n <h4>{{ palette.name }}</h4>\r\n <div class=\"palette-colors\">\r\n <button\r\n *ngFor=\"let color of palette.colors\"\r\n class=\"palette-color\"\r\n [style.background]=\"color\"\r\n [class.selected]=\"currentColor === color\"\r\n (click)=\"selectPaletteColor(color)\"\r\n [disabled]=\"disabled\"\r\n type=\"button\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Gradient Section -->\r\n <div class=\"gradient-section\" *ngIf=\"showGradient\">\r\n <h4>Criador de Gradiente</h4>\r\n \r\n <div class=\"gradient-preview\" [style.background]=\"getGradientStyle()\"></div>\r\n \r\n <div class=\"gradient-controls\">\r\n <div class=\"gradient-colors\">\r\n <div class=\"gradient-color-input\">\r\n <label>In\u00EDcio</label>\r\n <input \r\n type=\"color\" \r\n [(ngModel)]=\"gradientStart\"\r\n (change)=\"onGradientStartChange(gradientStart)\"\r\n [disabled]=\"disabled\"\r\n />\r\n <span>{{ gradientStart }}</span>\r\n </div>\r\n \r\n <div class=\"gradient-color-input\">\r\n <label>Fim</label>\r\n <input \r\n type=\"color\" \r\n [(ngModel)]=\"gradientEnd\"\r\n (change)=\"onGradientEndChange(gradientEnd)\"\r\n [disabled]=\"disabled\"\r\n />\r\n <span>{{ gradientEnd }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"slider-group\">\r\n <label>\u00C2ngulo</label>\r\n <input \r\n type=\"range\" \r\n min=\"0\" \r\n max=\"360\" \r\n [value]=\"gradientAngle\"\r\n (input)=\"onGradientAngleChange($event)\"\r\n [disabled]=\"disabled\"\r\n class=\"slider\"\r\n />\r\n <span class=\"slider-value\">{{ gradientAngle }}\u00B0</span>\r\n </div>\r\n\r\n <button class=\"copy-btn\" (click)=\"copyGradientCSS()\" [disabled]=\"disabled\" type=\"button\">\r\n \uD83D\uDCCB Copiar CSS\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".color-picker-wrapper{position:relative;display:inline-block}.color-picker-wrapper[data-size=small] .color-trigger{height:32px;font-size:.875rem}.color-picker-wrapper[data-size=large] .color-trigger{height:48px;font-size:1.125rem}.color-picker-wrapper.disabled{opacity:.5;cursor:not-allowed}.color-trigger{display:flex;align-items:center;gap:.5rem;height:40px;padding:.5rem 1rem;border:2px solid #e5e7eb;border-radius:8px;cursor:pointer;transition:all .3s ease;font-family:Courier New,monospace;font-weight:500;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.3)}.color-trigger:hover:not(:disabled){border-color:#667eea;box-shadow:0 4px 12px #667eea33}.color-trigger:disabled{cursor:not-allowed}.color-trigger .color-value{flex:1;text-align:center}.color-picker-panel{position:absolute;top:calc(100% + 8px);left:0;background:white;border-radius:16px;box-shadow:0 10px 40px #00000026;padding:1.5rem;width:320px;z-index:1000;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all .3s ease}.color-picker-panel.open{opacity:1;visibility:visible;transform:translateY(0)}.color-picker-panel.inline{position:relative;top:0;left:0;opacity:1;visibility:visible;transform:none;box-shadow:0 2px 8px #0000001a}.picker-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.picker-header .format-tabs{display:flex;gap:.5rem}.picker-header .format-tabs button{padding:.5rem 1rem;border:1px solid #e5e7eb;border-radius:6px;background:white;cursor:pointer;transition:all .2s ease;font-weight:500;font-size:.875rem;color:#6b7280}.picker-header .format-tabs button:hover{background:#f9fafb;border-color:#667eea}.picker-header .format-tabs button.active{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;border-color:transparent}.picker-header .close-btn{width:32px;height:32px;border:none;border-radius:50%;background:#f3f4f6;cursor:pointer;font-size:1.5rem;line-height:1;color:#6b7280;transition:all .2s ease}.picker-header .close-btn:hover{background:#ef4444;color:#fff}.color-preview{display:flex;gap:1rem;margin-bottom:1.5rem}.color-preview .preview-box{width:60px;height:60px;border-radius:12px;border:3px solid #e5e7eb;box-shadow:0 2px 8px #0000001a}.color-preview .color-input{flex:1;padding:.75rem;border:2px solid #e5e7eb;border-radius:8px;font-family:Courier New,monospace;font-size:.875rem;font-weight:500;text-align:center;transition:border-color .2s ease}.color-preview .color-input:focus{outline:none;border-color:#667eea}.color-sliders{margin-bottom:1.5rem}.color-sliders .slider-group{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:.75rem;margin-bottom:1rem}.color-sliders .slider-group label{font-size:.875rem;font-weight:500;color:#374151;min-width:90px}.color-sliders .slider-group .slider-value{font-size:.875rem;font-weight:600;color:#667eea;font-family:Courier New,monospace;min-width:45px;text-align:right}.color-sliders .slider{-webkit-appearance:none;width:100%;height:8px;border-radius:4px;outline:none;cursor:pointer}.color-sliders .slider::-webkit-slider-thumb{appearance:none;width:18px;height:18px;border-radius:50%;background:white;border:3px solid #667eea;cursor:pointer;box-shadow:0 2px 6px #0003;-webkit-transition:all .2s ease;transition:all .2s ease}.color-sliders .slider::-webkit-slider-thumb:hover{transform:scale(1.2)}.color-sliders .slider::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:white;border:3px solid #667eea;cursor:pointer;box-shadow:0 2px 6px #0003}.color-sliders .slider.hue-slider{background:linear-gradient(to right,hsl(0,100%,50%),hsl(60,100%,50%),hsl(120,100%,50%),hsl(180,100%,50%),hsl(240,100%,50%),hsl(300,100%,50%),hsl(0,100%,50%))}.color-sliders .slider.saturation-slider{background:linear-gradient(to right,hsl(var(--hue, 240),0%,50%),var(--base-color, hsl(240, 100%, 50%)))}.color-sliders .slider.lightness-slider{background:linear-gradient(to right,hsl(var(--hue, 240),var(--sat, 100%),0%),var(--base-color, hsl(240, 100%, 50%)),hsl(var(--hue, 240),var(--sat, 100%),100%))}.color-sliders .slider.alpha-slider{background:linear-gradient(to right,transparent,currentColor),repeating-conic-gradient(#ccc 0% 25%,white 0% 50%) 0 0/10px 10px}.color-sliders .slider:disabled{opacity:.5;cursor:not-allowed}.palettes-section{margin-top:1.5rem;padding-top:1.5rem;border-top:2px solid #f3f4f6}.palettes-section .palette{margin-bottom:1.5rem}.palettes-section .palette:last-child{margin-bottom:0}.palettes-section .palette h4{font-size:.875rem;font-weight:600;color:#374151;margin-bottom:.75rem}.palettes-section .palette .palette-colors{display:grid;grid-template-columns:repeat(8,1fr);gap:.5rem}.palettes-section .palette .palette-colors .palette-color{width:100%;aspect-ratio:1;border:2px solid transparent;border-radius:6px;cursor:pointer;transition:all .2s ease}.palettes-section .palette .palette-colors .palette-color:hover{transform:scale(1.1);box-shadow:0 4px 12px #0003}.palettes-section .palette .palette-colors .palette-color.selected{border-color:#667eea;box-shadow:0 0 0 3px #667eea33}.palettes-section .palette .palette-colors .palette-color:disabled{opacity:.5;cursor:not-allowed}.gradient-section{margin-top:1.5rem;padding-top:1.5rem;border-top:2px solid #f3f4f6}.gradient-section h4{font-size:.875rem;font-weight:600;color:#374151;margin-bottom:1rem}.gradient-section .gradient-preview{height:100px;border-radius:12px;margin-bottom:1rem;box-shadow:0 4px 12px #0000001a}.gradient-section .gradient-controls .gradient-colors{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1rem}.gradient-section .gradient-controls .gradient-colors .gradient-color-input{display:flex;flex-direction:column;gap:.5rem}.gradient-section .gradient-controls .gradient-colors .gradient-color-input label{font-size:.875rem;font-weight:500;color:#374151}.gradient-section .gradient-controls .gradient-colors .gradient-color-input input[type=color]{width:100%;height:40px;border:2px solid #e5e7eb;border-radius:8px;cursor:pointer}.gradient-section .gradient-controls .gradient-colors .gradient-color-input input[type=color]::-webkit-color-swatch-wrapper{padding:0}.gradient-section .gradient-controls .gradient-colors .gradient-color-input input[type=color]::-webkit-color-swatch{border:none;border-radius:6px}.gradient-section .gradient-controls .gradient-colors .gradient-color-input span{font-size:.75rem;font-family:Courier New,monospace;color:#6b7280;text-align:center}.gradient-section .gradient-controls .copy-btn{width:100%;padding:.75rem;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);color:#fff;border:none;border-radius:8px;font-weight:600;cursor:pointer;transition:all .2s ease;margin-top:1rem}.gradient-section .gradient-controls .copy-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 20px #667eea66}.gradient-section .gradient-controls .copy-btn:active:not(:disabled){transform:translateY(0)}.gradient-section .gradient-controls .copy-btn:disabled{opacity:.5;cursor:not-allowed}\n"] }]
|
|
273
|
+
}], propDecorators: { format: [{
|
|
274
|
+
type: Input
|
|
275
|
+
}], showPalettes: [{
|
|
276
|
+
type: Input
|
|
277
|
+
}], showGradient: [{
|
|
278
|
+
type: Input
|
|
279
|
+
}], customPalettes: [{
|
|
280
|
+
type: Input
|
|
281
|
+
}], disabled: [{
|
|
282
|
+
type: Input
|
|
283
|
+
}], size: [{
|
|
284
|
+
type: Input
|
|
285
|
+
}], showAlpha: [{
|
|
286
|
+
type: Input
|
|
287
|
+
}], inline: [{
|
|
288
|
+
type: Input
|
|
289
|
+
}], colorChange: [{
|
|
290
|
+
type: Output
|
|
291
|
+
}], formatChange: [{
|
|
292
|
+
type: Output
|
|
293
|
+
}] } });
|
|
294
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2Zvcm0vY29sb3ItcGlja2VyL3NyYy9saWIvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9mb3JtL2NvbG9yLXBpY2tlci9zcmMvbGliL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUEyQnRGLE1BQU0sT0FBTyxvQkFBb0I7SUFkakM7UUFlVyxXQUFNLEdBQTBCLEtBQUssQ0FBQztRQUN0QyxpQkFBWSxHQUFZLElBQUksQ0FBQztRQUM3QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFDcEMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixTQUFJLEdBQWlDLFFBQVEsQ0FBQztRQUM5QyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFdkIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBQzlDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFFbkUsaUJBQVksR0FBVyxTQUFTLENBQUM7UUFDakMsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixRQUFHLEdBQVcsR0FBRyxDQUFDO1FBQ2xCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsY0FBUyxHQUFXLEVBQUUsQ0FB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QjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO1lBQ25ELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiwwQkMzQkgseXhMQTJLQSxnNE5EekpZLFlBQVksK1BBQUUsV0FBVzs0RkFXeEIsb0JBQW9CO2tCQWRoQyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLGFBR3pCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDOzRCQUNuRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFHUSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb2xvckZvcm1hdCB7XHJcbiAgaGV4OiBzdHJpbmc7XHJcbiAgcmdiOiB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfTtcclxuICBoc2w6IHsgaDogbnVtYmVyOyBzOiBudW1iZXI7IGw6IG51bWJlciB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yUGFsZXR0ZSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGNvbG9yczogc3RyaW5nW107XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXV4aW1hLWNvbG9yLXBpY2tlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29sb3ItcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb2xvclBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sb3JQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcclxuICBASW5wdXQoKSBmb3JtYXQ6ICdoZXgnIHwgJ3JnYicgfCAnaHNsJyA9ICdoZXgnO1xyXG4gIEBJbnB1dCgpIHNob3dQYWxldHRlczogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0dyYWRpZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY3VzdG9tUGFsZXR0ZXM6IENvbG9yUGFsZXR0ZVtdID0gW107XHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnID0gJ21lZGl1bSc7XHJcbiAgQElucHV0KCkgc2hvd0FscGhhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5saW5lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBjb2xvckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sb3JGb3JtYXQ+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1hdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8J2hleCcgfCAncmdiJyB8ICdoc2wnPigpO1xyXG5cclxuICBjdXJyZW50Q29sb3I6IHN0cmluZyA9ICcjNjY3ZWVhJztcclxuICBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBodWU6IG51bWJlciA9IDI0MDtcclxuICBzYXR1cmF0aW9uOiBudW1iZXIgPSA3NjtcclxuICBsaWdodG5lc3M6IG51bWJlciA9IDcyO1xyXG4gIGFscGhhOiBudW1iZXIgPSAxO1xyXG5cclxuICBkZWZhdWx0UGFsZXR0ZXM6IENvbG9yUGFsZXR0ZVtdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnTWF0ZXJpYWwnLFxyXG4gICAgICBjb2xvcnM6IFsnI2Y0NDMzNicsICcjZTkxZTYzJywgJyM5YzI3YjAnLCAnIzY3M2FiNycsICcjM2Y1MWI1JywgJyMyMTk2ZjMnLCAnIzAzYTlmNCcsICcjMDBiY2Q0J11cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdQYXN0w6lpcycsXHJcbiAgICAgIGNvbG9yczogWycjZmZjMWNjJywgJyNmZmFiYWInLCAnI2ZmZDRhMycsICcjZmZmOWEzJywgJyNjMWZmYzEnLCAnI2EzZDRmZicsICcjYzFhM2ZmJywgJyNmZmEzZmYnXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ05ldXRyb3MnLFxyXG4gICAgICBjb2xvcnM6IFsnI2ZmZmZmZicsICcjZjVmNWY1JywgJyNlMGUwZTAnLCAnI2JkYmRiZCcsICcjOWU5ZTllJywgJyM3NTc1NzUnLCAnIzQyNDI0MicsICcjMjEyMTIxJ11cclxuICAgIH1cclxuICBdO1xyXG5cclxuICBncmFkaWVudFN0YXJ0OiBzdHJpbmcgPSAnIzY2N2VlYSc7XHJcbiAgZ3JhZGllbnRFbmQ6IHN0cmluZyA9ICcjNzY0YmEyJztcclxuICBncmFkaWVudEFuZ2xlOiBudW1iZXIgPSAxMzU7XHJcblxyXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4ge307XHJcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5pbmxpbmUpIHtcclxuICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVGcm9tSGV4KHRoaXMuY3VycmVudENvbG9yKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudENvbG9yID0gdmFsdWU7XHJcbiAgICAgIHRoaXMudXBkYXRlRnJvbUhleCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGlja2VyKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmlubGluZSkge1xyXG4gICAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjtcclxuICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VQaWNrZXIoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaW5saW5lKSB7XHJcbiAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkh1ZUNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaHVlID0gKyhldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZUNvbG9yRnJvbUhTTCgpO1xyXG4gIH1cclxuXHJcbiAgb25TYXR1cmF0aW9uQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5zYXR1cmF0aW9uID0gKyhldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZUNvbG9yRnJvbUhTTCgpO1xyXG4gIH1cclxuXHJcbiAgb25MaWdodG5lc3NDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmxpZ2h0bmVzcyA9ICsoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVDb2xvckZyb21IU0woKTtcclxuICB9XHJcblxyXG4gIG9uQWxwaGFDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmFscGhhID0gKyhldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZUNvbG9yRnJvbUhTTCgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0UGFsZXR0ZUNvbG9yKGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudENvbG9yID0gY29sb3I7XHJcbiAgICB0aGlzLnVwZGF0ZUZyb21IZXgoY29sb3IpO1xyXG4gICAgdGhpcy5lbWl0Q29sb3IoKTtcclxuICB9XHJcblxyXG4gIG9uSGV4SW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBoZXggPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuaXNWYWxpZEhleChoZXgpKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudENvbG9yID0gaGV4O1xyXG4gICAgICB0aGlzLnVwZGF0ZUZyb21IZXgoaGV4KTtcclxuICAgICAgdGhpcy5lbWl0Q29sb3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUNvbG9yRnJvbUhTTCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJnYiA9IHRoaXMuaHNsVG9SZ2IodGhpcy5odWUsIHRoaXMuc2F0dXJhdGlvbiwgdGhpcy5saWdodG5lc3MpO1xyXG4gICAgdGhpcy5jdXJyZW50Q29sb3IgPSB0aGlzLnJnYlRvSGV4KHJnYi5yLCByZ2IuZywgcmdiLmIpO1xyXG4gICAgdGhpcy5lbWl0Q29sb3IoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZyb21IZXgoaGV4OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJnYiA9IHRoaXMuaGV4VG9SZ2IoaGV4KTtcclxuICAgIGlmIChyZ2IpIHtcclxuICAgICAgY29uc3QgaHNsID0gdGhpcy5yZ2JUb0hzbChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxuICAgICAgdGhpcy5odWUgPSBoc2wuaDtcclxuICAgICAgdGhpcy5zYXR1cmF0aW9uID0gaHNsLnM7XHJcbiAgICAgIHRoaXMubGlnaHRuZXNzID0gaHNsLmw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbWl0Q29sb3IoKTogdm9pZCB7XHJcbiAgICBjb25zdCByZ2IgPSB0aGlzLmhleFRvUmdiKHRoaXMuY3VycmVudENvbG9yKTtcclxuICAgIGNvbnN0IGNvbG9yRm9ybWF0OiBDb2xvckZvcm1hdCA9IHtcclxuICAgICAgaGV4OiB0aGlzLmN1cnJlbnRDb2xvcixcclxuICAgICAgcmdiOiByZ2IgfHwgeyByOiAwLCBnOiAwLCBiOiAwIH0sXHJcbiAgICAgIGhzbDogeyBoOiB0aGlzLmh1ZSwgczogdGhpcy5zYXR1cmF0aW9uLCBsOiB0aGlzLmxpZ2h0bmVzcyB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5jdXJyZW50Q29sb3IpO1xyXG4gICAgdGhpcy5jb2xvckNoYW5nZS5lbWl0KGNvbG9yRm9ybWF0KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUZvcm1hdChuZXdGb3JtYXQ6ICdoZXgnIHwgJ3JnYicgfCAnaHNsJyk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtYXQgPSBuZXdGb3JtYXQ7XHJcbiAgICB0aGlzLmZvcm1hdENoYW5nZS5lbWl0KG5ld0Zvcm1hdCk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtYXR0ZWRDb2xvcigpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLmZvcm1hdCkge1xyXG4gICAgICBjYXNlICdoZXgnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRDb2xvcjtcclxuICAgICAgY2FzZSAncmdiJzpcclxuICAgICAgICBjb25zdCByZ2IgPSB0aGlzLmhleFRvUmdiKHRoaXMuY3VycmVudENvbG9yKTtcclxuICAgICAgICByZXR1cm4gcmdiID8gYHJnYigke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9KWAgOiAnJztcclxuICAgICAgY2FzZSAnaHNsJzpcclxuICAgICAgICByZXR1cm4gYGhzbCgke3RoaXMuaHVlfSwgJHt0aGlzLnNhdHVyYXRpb259JSwgJHt0aGlzLmxpZ2h0bmVzc30lKWA7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gR3JhZGllbnQgbWV0aG9kc1xyXG4gIG9uR3JhZGllbnRTdGFydENoYW5nZShjb2xvcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyYWRpZW50U3RhcnQgPSBjb2xvcjtcclxuICB9XHJcblxyXG4gIG9uR3JhZGllbnRFbmRDaGFuZ2UoY29sb3I6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5ncmFkaWVudEVuZCA9IGNvbG9yO1xyXG4gIH1cclxuXHJcbiAgb25HcmFkaWVudEFuZ2xlQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncmFkaWVudEFuZ2xlID0gKyhldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXRHcmFkaWVudFN0eWxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCgke3RoaXMuZ3JhZGllbnRBbmdsZX1kZWcsICR7dGhpcy5ncmFkaWVudFN0YXJ0fSwgJHt0aGlzLmdyYWRpZW50RW5kfSlgO1xyXG4gIH1cclxuXHJcbiAgY29weUdyYWRpZW50Q1NTKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY3NzID0gYGJhY2tncm91bmQ6ICR7dGhpcy5nZXRHcmFkaWVudFN0eWxlKCl9O2A7XHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjc3MpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29sb3IgY29udmVyc2lvbiB1dGlsaXRpZXNcclxuICBoZXhUb1JnYihoZXg6IHN0cmluZyk6IHsgcjogbnVtYmVyOyBnOiBudW1iZXI7IGI6IG51bWJlciB9IHwgbnVsbCB7XHJcbiAgICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KTtcclxuICAgIHJldHVybiByZXN1bHQgPyB7XHJcbiAgICAgIHI6IHBhcnNlSW50KHJlc3VsdFsxXSwgMTYpLFxyXG4gICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgYjogcGFyc2VJbnQocmVzdWx0WzNdLCAxNilcclxuICAgIH0gOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcmdiVG9IZXgocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJyMnICsgW3IsIGcsIGJdLm1hcCh4ID0+IHtcclxuICAgICAgY29uc3QgaGV4ID0geC50b1N0cmluZygxNik7XHJcbiAgICAgIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gJzAnICsgaGV4IDogaGV4O1xyXG4gICAgfSkuam9pbignJyk7XHJcbiAgfVxyXG5cclxuICByZ2JUb0hzbChyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKTogeyBoOiBudW1iZXI7IHM6IG51bWJlcjsgbDogbnVtYmVyIH0ge1xyXG4gICAgciAvPSAyNTU7XHJcbiAgICBnIC89IDI1NTtcclxuICAgIGIgLz0gMjU1O1xyXG5cclxuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xyXG4gICAgY29uc3QgbWluID0gTWF0aC5taW4ociwgZywgYik7XHJcbiAgICBsZXQgaCA9IDAsIHMgPSAwO1xyXG4gICAgY29uc3QgbCA9IChtYXggKyBtaW4pIC8gMjtcclxuXHJcbiAgICBpZiAobWF4ICE9PSBtaW4pIHtcclxuICAgICAgY29uc3QgZCA9IG1heCAtIG1pbjtcclxuICAgICAgcyA9IGwgPiAwLjUgPyBkIC8gKDIgLSBtYXggLSBtaW4pIDogZCAvIChtYXggKyBtaW4pO1xyXG5cclxuICAgICAgc3dpdGNoIChtYXgpIHtcclxuICAgICAgICBjYXNlIHI6IGggPSAoKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCkpIC8gNjsgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBnOiBoID0gKChiIC0gcikgLyBkICsgMikgLyA2OyBicmVhaztcclxuICAgICAgICBjYXNlIGI6IGggPSAoKHIgLSBnKSAvIGQgKyA0KSAvIDY7IGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaDogTWF0aC5yb3VuZChoICogMzYwKSxcclxuICAgICAgczogTWF0aC5yb3VuZChzICogMTAwKSxcclxuICAgICAgbDogTWF0aC5yb3VuZChsICogMTAwKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGhzbFRvUmdiKGg6IG51bWJlciwgczogbnVtYmVyLCBsOiBudW1iZXIpOiB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfSB7XHJcbiAgICBoIC89IDM2MDtcclxuICAgIHMgLz0gMTAwO1xyXG4gICAgbCAvPSAxMDA7XHJcblxyXG4gICAgbGV0IHIsIGcsIGI7XHJcblxyXG4gICAgaWYgKHMgPT09IDApIHtcclxuICAgICAgciA9IGcgPSBiID0gbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGh1ZTJyZ2IgPSAocDogbnVtYmVyLCBxOiBudW1iZXIsIHQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGlmICh0IDwgMCkgdCArPSAxO1xyXG4gICAgICAgIGlmICh0ID4gMSkgdCAtPSAxO1xyXG4gICAgICAgIGlmICh0IDwgMS82KSByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcclxuICAgICAgICBpZiAodCA8IDEvMikgcmV0dXJuIHE7XHJcbiAgICAgICAgaWYgKHQgPCAyLzMpIHJldHVybiBwICsgKHEgLSBwKSAqICgyLzMgLSB0KSAqIDY7XHJcbiAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCBxID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcclxuICAgICAgY29uc3QgcCA9IDIgKiBsIC0gcTtcclxuXHJcbiAgICAgIHIgPSBodWUycmdiKHAsIHEsIGggKyAxLzMpO1xyXG4gICAgICBnID0gaHVlMnJnYihwLCBxLCBoKTtcclxuICAgICAgYiA9IGh1ZTJyZ2IocCwgcSwgaCAtIDEvMyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcjogTWF0aC5yb3VuZChyICogMjU1KSxcclxuICAgICAgZzogTWF0aC5yb3VuZChnICogMjU1KSxcclxuICAgICAgYjogTWF0aC5yb3VuZChiICogMjU1KVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWRIZXgoaGV4OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAvXiM/KFthLWZcXGRdezZ9fFthLWZcXGRdezN9KSQvaS50ZXN0KGhleCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0UGFsZXR0ZXMoKTogQ29sb3JQYWxldHRlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tUGFsZXR0ZXMubGVuZ3RoID4gMCA/IHRoaXMuY3VzdG9tUGFsZXR0ZXMgOiB0aGlzLmRlZmF1bHRQYWxldHRlcztcclxuICB9XHJcblxyXG4gIGFzRm9ybWF0KGZtdDogc3RyaW5nKTogJ2hleCcgfCAncmdiJyB8ICdoc2wnIHtcclxuICAgIGlmIChmbXQgPT09ICdoZXgnIHx8IGZtdCA9PT0gJ3JnYicgfHwgZm10ID09PSAnaHNsJykgcmV0dXJuIGZtdDtcclxuICAgIHJldHVybiAnaGV4JztcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlci13cmFwcGVyXCIgW2F0dHIuZGF0YS1zaXplXT1cInNpemVcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICA8IS0tIFRyaWdnZXIgQnV0dG9uIC0tPlxyXG4gIDxidXR0b24gXHJcbiAgICAqbmdJZj1cIiFpbmxpbmVcIlxyXG4gICAgY2xhc3M9XCJjb2xvci10cmlnZ2VyXCJcclxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZVBpY2tlcigpXCJcclxuICAgIHR5cGU9XCJidXR0b25cIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItdmFsdWVcIj57eyBnZXRGb3JtYXR0ZWRDb2xvcigpIH19PC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8IS0tIFBpY2tlciBEcm9wZG93bi9JbmxpbmUgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlci1wYW5lbFwiIFtjbGFzcy5vcGVuXT1cImlzT3BlblwiIFtjbGFzcy5pbmxpbmVdPVwiaW5saW5lXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGlja2VyLWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybWF0LXRhYnNcIj5cclxuICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGZtdCBvZiBbJ2hleCcsICdyZ2InLCAnaHNsJ11cIlxyXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJmb3JtYXQgPT09IGZtdFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlRm9ybWF0KGFzRm9ybWF0KGZtdCkpXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgIHt7IGZtdC50b1VwcGVyQ2FzZSgpIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiIWlubGluZVwiIGNsYXNzPVwiY2xvc2UtYnRuXCIgKGNsaWNrKT1cImNsb3NlUGlja2VyKClcIiB0eXBlPVwiYnV0dG9uXCI+w5c8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQ29sb3IgUHJldmlldyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xvci1wcmV2aWV3XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWJveFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImN1cnJlbnRDb2xvclwiPjwvZGl2PlxyXG4gICAgICA8aW5wdXQgXHJcbiAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICBjbGFzcz1cImNvbG9yLWlucHV0XCJcclxuICAgICAgICBbdmFsdWVdPVwiZ2V0Rm9ybWF0dGVkQ29sb3IoKVwiXHJcbiAgICAgICAgKGlucHV0KT1cIm9uSGV4SW5wdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gSFNMIFNsaWRlcnMgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sb3Itc2xpZGVyc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2xpZGVyLWdyb3VwXCI+XHJcbiAgICAgICAgPGxhYmVsPk1hdGl6PC9sYWJlbD5cclxuICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICB0eXBlPVwicmFuZ2VcIiBcclxuICAgICAgICAgIG1pbj1cIjBcIiBcclxuICAgICAgICAgIG1heD1cIjM2MFwiIFxyXG4gICAgICAgICAgW3ZhbHVlXT1cImh1ZVwiXHJcbiAgICAgICAgICAoaW5wdXQpPVwib25IdWVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbGlkZXIgaHVlLXNsaWRlclwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNsaWRlci12YWx1ZVwiPnt7IGh1ZSB9fcKwPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbGlkZXItZ3JvdXBcIj5cclxuICAgICAgICA8bGFiZWw+U2F0dXJhw6fDo288L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgIHR5cGU9XCJyYW5nZVwiIFxyXG4gICAgICAgICAgbWluPVwiMFwiIFxyXG4gICAgICAgICAgbWF4PVwiMTAwXCIgXHJcbiAgICAgICAgICBbdmFsdWVdPVwic2F0dXJhdGlvblwiXHJcbiAgICAgICAgICAoaW5wdXQpPVwib25TYXR1cmF0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgIGNsYXNzPVwic2xpZGVyIHNhdHVyYXRpb24tc2xpZGVyXCJcclxuICAgICAgICAgIFtzdHlsZS4tLWJhc2UtY29sb3JdPVwiJ2hzbCgnICsgaHVlICsgJywgMTAwJSwgNTAlKSdcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbGlkZXItdmFsdWVcIj57eyBzYXR1cmF0aW9uIH19JTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2xpZGVyLWdyb3VwXCI+XHJcbiAgICAgICAgPGxhYmVsPkx1bWlub3NpZGFkZTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgdHlwZT1cInJhbmdlXCIgXHJcbiAgICAgICAgICBtaW49XCIwXCIgXHJcbiAgICAgICAgICBtYXg9XCIxMDBcIiBcclxuICAgICAgICAgIFt2YWx1ZV09XCJsaWdodG5lc3NcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIm9uTGlnaHRuZXNzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgIGNsYXNzPVwic2xpZGVyIGxpZ2h0bmVzcy1zbGlkZXJcIlxyXG4gICAgICAgICAgW3N0eWxlLi0tYmFzZS1jb2xvcl09XCInaHNsKCcgKyBodWUgKyAnLCAnICsgc2F0dXJhdGlvbiArICclLCA1MCUpJ1wiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNsaWRlci12YWx1ZVwiPnt7IGxpZ2h0bmVzcyB9fSU8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInNsaWRlci1ncm91cFwiICpuZ0lmPVwic2hvd0FscGhhXCI+XHJcbiAgICAgICAgPGxhYmVsPk9wYWNpZGFkZTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgdHlwZT1cInJhbmdlXCIgXHJcbiAgICAgICAgICBtaW49XCIwXCIgXHJcbiAgICAgICAgICBtYXg9XCIxXCIgXHJcbiAgICAgICAgICBzdGVwPVwiMC4wMVwiXHJcbiAgICAgICAgICBbdmFsdWVdPVwiYWxwaGFcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIm9uQWxwaGFDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbGlkZXIgYWxwaGEtc2xpZGVyXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2xpZGVyLXZhbHVlXCI+e3sgKGFscGhhICogMTAwKS50b0ZpeGVkKDApIH19JTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIENvbG9yIFBhbGV0dGVzIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbGV0dGVzLXNlY3Rpb25cIiAqbmdJZj1cInNob3dQYWxldHRlc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFsZXR0ZVwiICpuZ0Zvcj1cImxldCBwYWxldHRlIG9mIGdldFBhbGV0dGVzKClcIj5cclxuICAgICAgICA8aDQ+e3sgcGFsZXR0ZS5uYW1lIH19PC9oND5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFsZXR0ZS1jb2xvcnNcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbG9yIG9mIHBhbGV0dGUuY29sb3JzXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJwYWxldHRlLWNvbG9yXCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiY29sb3JcIlxyXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiY3VycmVudENvbG9yID09PSBjb2xvclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQYWxldHRlQ29sb3IoY29sb3IpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBHcmFkaWVudCBTZWN0aW9uIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImdyYWRpZW50LXNlY3Rpb25cIiAqbmdJZj1cInNob3dHcmFkaWVudFwiPlxyXG4gICAgICA8aDQ+Q3JpYWRvciBkZSBHcmFkaWVudGU8L2g0PlxyXG4gICAgICBcclxuICAgICAgPGRpdiBjbGFzcz1cImdyYWRpZW50LXByZXZpZXdcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJnZXRHcmFkaWVudFN0eWxlKClcIj48L2Rpdj5cclxuICAgICAgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncmFkaWVudC1jb250cm9sc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmFkaWVudC1jb2xvcnNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmFkaWVudC1jb2xvci1pbnB1dFwiPlxyXG4gICAgICAgICAgICA8bGFiZWw+SW7DrWNpbzwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIiBcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdyYWRpZW50U3RhcnRcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25HcmFkaWVudFN0YXJ0Q2hhbmdlKGdyYWRpZW50U3RhcnQpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBncmFkaWVudFN0YXJ0IH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmFkaWVudC1jb2xvci1pbnB1dFwiPlxyXG4gICAgICAgICAgICA8bGFiZWw+RmltPC9sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJjb2xvclwiIFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ3JhZGllbnRFbmRcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25HcmFkaWVudEVuZENoYW5nZShncmFkaWVudEVuZClcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGdyYWRpZW50RW5kIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbGlkZXItZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbD7Dgm5ndWxvPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgdHlwZT1cInJhbmdlXCIgXHJcbiAgICAgICAgICAgIG1pbj1cIjBcIiBcclxuICAgICAgICAgICAgbWF4PVwiMzYwXCIgXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJncmFkaWVudEFuZ2xlXCJcclxuICAgICAgICAgICAgKGlucHV0KT1cIm9uR3JhZGllbnRBbmdsZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXJcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2xpZGVyLXZhbHVlXCI+e3sgZ3JhZGllbnRBbmdsZSB9fcKwPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29weS1idG5cIiAoY2xpY2spPVwiY29weUdyYWRpZW50Q1NTKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICDwn5OLIENvcGlhciBDU1NcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV4aW1hLXVpLWNvbG9yLXBpY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Zvcm0vY29sb3ItcGlja2VyL3NyYy9tdXhpbWEtdWktY29sb3ItcGlja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|