@festo-ui/angular 8.2.0-dev.617 → 8.2.0-dev.622
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/css/bundle.css +1 -1
- package/css/popover.css +1 -1
- package/fesm2022/festo-ui-angular.mjs +516 -262
- package/fesm2022/festo-ui-angular.mjs.map +1 -1
- package/lib/components/components.module.d.ts +3 -1
- package/lib/components/overlay/overlay-content/overlay-content.component.d.ts +5 -0
- package/lib/components/overlay/overlay-outlet.directive.d.ts +64 -0
- package/lib/components/popovers/popover.defaults.d.ts +0 -18
- package/lib/components/popovers/popover.models.d.ts +2 -1
- package/lib/components/popovers/tooltip/tooltip.directive.d.ts +7 -0
- package/lib/forms/value-accessor-base.d.ts +1 -1
- package/package.json +9 -11
- package/public-api.d.ts +2 -0
- package/scss/base/icons-svg.scss +1 -1
- package/scss/base/image-gallery.scss +2 -2
- package/scss/base/popover.scss +2 -2
- package/scss/base/styles.scss +4 -4
- package/esm2022/festo-ui-angular.mjs +0 -5
- package/esm2022/lib/components/accordion/accordion-header/accordion-header.component.mjs +0 -11
- package/esm2022/lib/components/accordion/accordion-item/accordion-item-body/accordion-item-body.component.mjs +0 -15
- package/esm2022/lib/components/accordion/accordion-item/accordion-item-header/accordion-item-header.component.mjs +0 -28
- package/esm2022/lib/components/accordion/accordion-item/accordion-item.component.mjs +0 -148
- package/esm2022/lib/components/accordion/accordion.component.mjs +0 -59
- package/esm2022/lib/components/accordion/index.mjs +0 -6
- package/esm2022/lib/components/bottom-sheet/bottom-sheet.component.mjs +0 -97
- package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +0 -26
- package/esm2022/lib/components/buttons/button/button.component.mjs +0 -48
- package/esm2022/lib/components/buttons/link-button/link-button.component.mjs +0 -34
- package/esm2022/lib/components/chips/chip/chip.component.mjs +0 -38
- package/esm2022/lib/components/chips/chip-container/chip-container.component.mjs +0 -17
- package/esm2022/lib/components/components.module.mjs +0 -212
- package/esm2022/lib/components/loading-indicator/loading-indicator.component.mjs +0 -17
- package/esm2022/lib/components/mobile-flyout/mobile-flyout-item/mobile-flyout-item.component.mjs +0 -39
- package/esm2022/lib/components/mobile-flyout/mobile-flyout-page/mobile-flyout-page.component.mjs +0 -65
- package/esm2022/lib/components/mobile-flyout/mobile-flyout.component.mjs +0 -69
- package/esm2022/lib/components/pagination/pagination.component.mjs +0 -57
- package/esm2022/lib/components/popovers/legend/legend.component.mjs +0 -42
- package/esm2022/lib/components/popovers/legend/legend.directive.mjs +0 -31
- package/esm2022/lib/components/popovers/popover/popover.component.mjs +0 -31
- package/esm2022/lib/components/popovers/popover-content/popover-content.component.mjs +0 -80
- package/esm2022/lib/components/popovers/popover-content/popover-content.directive.mjs +0 -39
- package/esm2022/lib/components/popovers/popover-menu/popover-menu.component.mjs +0 -67
- package/esm2022/lib/components/popovers/popover-ref.mjs +0 -25
- package/esm2022/lib/components/popovers/popover.defaults.mjs +0 -59
- package/esm2022/lib/components/popovers/popover.models.mjs +0 -7
- package/esm2022/lib/components/popovers/popover.service.mjs +0 -140
- package/esm2022/lib/components/popovers/tooltip/tooltip.directive.mjs +0 -101
- package/esm2022/lib/components/progress/progress.component.mjs +0 -22
- package/esm2022/lib/components/scroll/index.mjs +0 -2
- package/esm2022/lib/components/scroll/scrollable.directive.mjs +0 -75
- package/esm2022/lib/components/search-input/search-input.component.mjs +0 -182
- package/esm2022/lib/components/sidebar-overlay/sidebar-overlay.component.mjs +0 -59
- package/esm2022/lib/components/snackbar/snackbar-container.component.mjs +0 -21
- package/esm2022/lib/components/snackbar/snackbar-container.directive.mjs +0 -80
- package/esm2022/lib/components/snackbar/snackbar.component.mjs +0 -81
- package/esm2022/lib/components/snackbar/snackbar.models.mjs +0 -2
- package/esm2022/lib/components/snackbar/snackbar.module.mjs +0 -24
- package/esm2022/lib/components/snackbar/snackbar.service.mjs +0 -23
- package/esm2022/lib/components/stepper-horizontal/step-horizontal/step-horizontal.component.mjs +0 -19
- package/esm2022/lib/components/stepper-horizontal/stepper-horizontal.component.mjs +0 -52
- package/esm2022/lib/components/stepper-vertical/step-vertical/step-vertical.component.mjs +0 -57
- package/esm2022/lib/components/stepper-vertical/stepper-vertical.component.mjs +0 -54
- package/esm2022/lib/components/table-header-cell/table-header-cell.directive.mjs +0 -60
- package/esm2022/lib/components/tabs/tab-pane/tab-pane.component.mjs +0 -34
- package/esm2022/lib/components/tabs/tabs.component.mjs +0 -459
- package/esm2022/lib/directives/click-outside.directive.mjs +0 -29
- package/esm2022/lib/festo-angular.module.mjs +0 -21
- package/esm2022/lib/forms/checkbox/checkbox.component.mjs +0 -154
- package/esm2022/lib/forms/color-indicator/color-indicator.component.mjs +0 -88
- package/esm2022/lib/forms/color-picker/color-helper.mjs +0 -129
- package/esm2022/lib/forms/color-picker/color-picker.component.mjs +0 -292
- package/esm2022/lib/forms/date-picker/date-picker.component.mjs +0 -205
- package/esm2022/lib/forms/date-range-picker/date-range-picker.component.mjs +0 -231
- package/esm2022/lib/forms/flatpickr/flatpickr.component.mjs +0 -55
- package/esm2022/lib/forms/forms.module.mjs +0 -132
- package/esm2022/lib/forms/radio/radio.component.mjs +0 -349
- package/esm2022/lib/forms/segment/segment-control/segment-control.component.mjs +0 -65
- package/esm2022/lib/forms/segment/segment.component.mjs +0 -139
- package/esm2022/lib/forms/select/chip-text.pipe.mjs +0 -39
- package/esm2022/lib/forms/select/select-option/select-option.component.mjs +0 -23
- package/esm2022/lib/forms/select/select.component.mjs +0 -273
- package/esm2022/lib/forms/slider/slider.component.mjs +0 -117
- package/esm2022/lib/forms/switch/switch.component.mjs +0 -121
- package/esm2022/lib/forms/text-area/text-area.component.mjs +0 -187
- package/esm2022/lib/forms/text-editor/text-editor.component.mjs +0 -307
- package/esm2022/lib/forms/text-input/text-input.component.mjs +0 -208
- package/esm2022/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.mjs +0 -107
- package/esm2022/lib/forms/time-picker/time-picker.component.mjs +0 -204
- package/esm2022/lib/forms/unique-selection-dispatcher.mjs +0 -41
- package/esm2022/lib/forms/value-accessor-base.mjs +0 -41
- package/esm2022/lib/modals/alert/alert.component.mjs +0 -55
- package/esm2022/lib/modals/confirm/confirm.component.mjs +0 -56
- package/esm2022/lib/modals/custom-modal/custom-modal.component.mjs +0 -88
- package/esm2022/lib/modals/image-gallery/image-gallery.component.mjs +0 -80
- package/esm2022/lib/modals/index.mjs +0 -2
- package/esm2022/lib/modals/modal.service.mjs +0 -118
- package/esm2022/lib/modals/modals.module.mjs +0 -27
- package/esm2022/lib/modals/prompt/prompt.component.mjs +0 -114
- package/esm2022/lib/pipes/safe-html.pipe.mjs +0 -21
- package/esm2022/public-api.mjs +0 -66
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
2
|
-
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
3
|
-
import { Component, forwardRef, Input, ViewEncapsulation, Output, EventEmitter } from '@angular/core';
|
|
4
|
-
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
5
|
-
import { ColorHelper } from './color-helper';
|
|
6
|
-
import { CommonModule } from '@angular/common';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/common";
|
|
9
|
-
import * as i2 from "@angular/cdk/drag-drop";
|
|
10
|
-
import * as i3 from "@angular/forms";
|
|
11
|
-
export const PREDEFINED_COLORS = [
|
|
12
|
-
'#0091dc',
|
|
13
|
-
'#333333',
|
|
14
|
-
'#ffffff',
|
|
15
|
-
'#f0f2f3',
|
|
16
|
-
'#e2e5e8',
|
|
17
|
-
'#d3d8dd',
|
|
18
|
-
'#b6bec6',
|
|
19
|
-
'#80ca3d',
|
|
20
|
-
'#ffd600',
|
|
21
|
-
'#ff9600',
|
|
22
|
-
'#d50000'
|
|
23
|
-
];
|
|
24
|
-
/**
|
|
25
|
-
* A custom form element to pick a color.
|
|
26
|
-
*/
|
|
27
|
-
export class FngColorPickerComponent {
|
|
28
|
-
constructor() {
|
|
29
|
-
this.baseSize = 184;
|
|
30
|
-
this.inputType = 'RGB';
|
|
31
|
-
this.isSelectOpen = false;
|
|
32
|
-
this.useAlpha = false;
|
|
33
|
-
this.alphaChange = new EventEmitter();
|
|
34
|
-
/**
|
|
35
|
-
* an array with color strings representing the palette.
|
|
36
|
-
* Example: ['#234567, '#AA00FF']
|
|
37
|
-
* Pass null to hide palette.
|
|
38
|
-
*/
|
|
39
|
-
this.palette = [];
|
|
40
|
-
/**
|
|
41
|
-
* hide the hue and gradient picker and shot the palette only.
|
|
42
|
-
*/
|
|
43
|
-
this.paletteOnly = false;
|
|
44
|
-
this.innerColor = null;
|
|
45
|
-
this.innerDisabled = true;
|
|
46
|
-
this.innerAlpha = 1;
|
|
47
|
-
// input controls
|
|
48
|
-
this.hexInputColor = '#ff0000';
|
|
49
|
-
this.redInput = 255;
|
|
50
|
-
this.greenInput = 0;
|
|
51
|
-
this.blueInput = 0;
|
|
52
|
-
this.alphaInput = 100;
|
|
53
|
-
// HSV value
|
|
54
|
-
this.hue = 0;
|
|
55
|
-
this.saturation = 0;
|
|
56
|
-
this.value = 0;
|
|
57
|
-
// poitions of the knobs in px
|
|
58
|
-
this.hueKnobOffset = 0;
|
|
59
|
-
this.alphaKnobOffset = 0;
|
|
60
|
-
this.saturationKnobOffset = 0;
|
|
61
|
-
this.valueKnobOffset = 0;
|
|
62
|
-
// callbacks for ControlValueAccessor
|
|
63
|
-
this.onTouched = () => null;
|
|
64
|
-
this.onChange = () => null;
|
|
65
|
-
}
|
|
66
|
-
get alpha() {
|
|
67
|
-
return this.innerAlpha;
|
|
68
|
-
}
|
|
69
|
-
set alpha(value) {
|
|
70
|
-
if (value <= 100 && value >= 0 && this.innerAlpha !== Math.round(value)) {
|
|
71
|
-
this.innerAlpha = Math.round(value);
|
|
72
|
-
this.alphaInput = this.innerAlpha;
|
|
73
|
-
this.updateKnobs();
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* The current color
|
|
78
|
-
*/
|
|
79
|
-
get color() {
|
|
80
|
-
return this.innerColor;
|
|
81
|
-
}
|
|
82
|
-
set color(value) {
|
|
83
|
-
if (value && this.isHexColor(value)) {
|
|
84
|
-
this.innerColor = value.toUpperCase();
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
this.innerColor = null;
|
|
88
|
-
}
|
|
89
|
-
this.updateColorRgb(true);
|
|
90
|
-
}
|
|
91
|
-
get disabled() {
|
|
92
|
-
return this.innerDisabled;
|
|
93
|
-
}
|
|
94
|
-
set disabled(value) {
|
|
95
|
-
this.innerDisabled = coerceBooleanProperty(value);
|
|
96
|
-
}
|
|
97
|
-
ngOnChanges(changes) {
|
|
98
|
-
const paletteChanged = changes['palette'];
|
|
99
|
-
if (paletteChanged['currentValue'].length > 0 && paletteChanged['currentValue'].indexOf('FESTO_COLORS') !== -1) {
|
|
100
|
-
this.palette = PREDEFINED_COLORS;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
// ControlValueAccessor
|
|
104
|
-
writeValue(color) {
|
|
105
|
-
if (this.isHexColor(color)) {
|
|
106
|
-
this.innerColor = color.toUpperCase();
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.innerColor = null;
|
|
110
|
-
}
|
|
111
|
-
this.updateColorRgb(false);
|
|
112
|
-
}
|
|
113
|
-
registerOnChange(fn) {
|
|
114
|
-
this.onChange = fn;
|
|
115
|
-
}
|
|
116
|
-
registerOnTouched(fn) {
|
|
117
|
-
this.onTouched = fn;
|
|
118
|
-
}
|
|
119
|
-
setDisabledState(isDisabled) {
|
|
120
|
-
this.innerDisabled = isDisabled;
|
|
121
|
-
}
|
|
122
|
-
// update method for changes of the rgb value
|
|
123
|
-
updateColorRgb(emitChange) {
|
|
124
|
-
const currentColor = this.innerColor || '#FFFFFF';
|
|
125
|
-
this.updateInputs(currentColor);
|
|
126
|
-
const rgb = ColorHelper.hexToRgb(currentColor);
|
|
127
|
-
const hsv = ColorHelper.rgbToHsv(rgb);
|
|
128
|
-
this.hue = hsv.h;
|
|
129
|
-
this.saturation = hsv.s;
|
|
130
|
-
this.value = hsv.v;
|
|
131
|
-
this.updateKnobs();
|
|
132
|
-
if (emitChange) {
|
|
133
|
-
if (this.onChange != null) {
|
|
134
|
-
this.onChange(this.innerColor);
|
|
135
|
-
}
|
|
136
|
-
if (this.onTouched != null) {
|
|
137
|
-
this.onTouched();
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
// update method for changes of the hsv value
|
|
142
|
-
updateColorHsv() {
|
|
143
|
-
const rgb = ColorHelper.hsvToRgb({ h: this.hue, s: this.saturation, v: this.value });
|
|
144
|
-
this.innerColor = ColorHelper.rgbToHex(rgb);
|
|
145
|
-
this.updateInputs(this.innerColor);
|
|
146
|
-
if (this.onChange != null) {
|
|
147
|
-
this.onChange(this.innerColor);
|
|
148
|
-
}
|
|
149
|
-
if (this.onTouched != null) {
|
|
150
|
-
this.onTouched();
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
// event handler for inputs
|
|
154
|
-
onHexBlur() {
|
|
155
|
-
if (this.hexInputColor && this.isHexColor(this.hexInputColor)) {
|
|
156
|
-
this.color = this.hexInputColor.toUpperCase();
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
this.hexInputColor = this.color;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
onHexInput() {
|
|
163
|
-
if (this.hexInputColor && this.isHexColor(this.hexInputColor)) {
|
|
164
|
-
this.color = this.hexInputColor.toUpperCase();
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
onRgbBlur() {
|
|
168
|
-
if (this.hexInputColor && this.isHexColor(this.hexInputColor)) {
|
|
169
|
-
this.color = this.hexInputColor.toUpperCase();
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
this.hexInputColor = this.color;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
onRgbInput(value, channel) {
|
|
176
|
-
if (value > 255 || value < 0) {
|
|
177
|
-
this.updateInputs(this.innerColor);
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
const rgb = ColorHelper.hexToRgb(this.innerColor);
|
|
181
|
-
rgb[channel] = value;
|
|
182
|
-
this.innerColor = ColorHelper.rgbToHex(rgb);
|
|
183
|
-
this.updateColorRgb(true);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
onAlphaInput(value) {
|
|
187
|
-
if (value > 100 || value < 0) {
|
|
188
|
-
this.alphaInput = this.innerAlpha;
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
this.alpha = value;
|
|
192
|
-
this.alphaChange.emit(this.alpha);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
onGradientClick(event) {
|
|
196
|
-
this.saturation = event.offsetX / this.baseSize;
|
|
197
|
-
this.value = (this.baseSize - event.offsetY) / this.baseSize;
|
|
198
|
-
this.updateColorHsv();
|
|
199
|
-
this.updateKnobs();
|
|
200
|
-
}
|
|
201
|
-
onGradientDrag(event) {
|
|
202
|
-
const position = event.source.getFreeDragPosition();
|
|
203
|
-
this.saturation = Math.floor(position.x) / this.baseSize;
|
|
204
|
-
this.value = (this.baseSize - position.y) / this.baseSize;
|
|
205
|
-
this.updateColorHsv();
|
|
206
|
-
}
|
|
207
|
-
onHueClick(event) {
|
|
208
|
-
this.hue = event.offsetY / this.baseSize;
|
|
209
|
-
this.updateColorHsv();
|
|
210
|
-
this.updateKnobs();
|
|
211
|
-
}
|
|
212
|
-
onAlphaClick(event) {
|
|
213
|
-
this.alpha = 100 - Math.round((event.offsetY / this.baseSize) * 100);
|
|
214
|
-
this.alphaChange.emit(this.alpha);
|
|
215
|
-
}
|
|
216
|
-
onHueDrag(event) {
|
|
217
|
-
const position = event.source.getFreeDragPosition();
|
|
218
|
-
this.hue = (position.y + this.baseSize + 14) / this.baseSize;
|
|
219
|
-
this.updateColorHsv();
|
|
220
|
-
}
|
|
221
|
-
onAlphaDrag(event) {
|
|
222
|
-
const position = event.source.getFreeDragPosition();
|
|
223
|
-
this.innerAlpha = 100 - Math.round((position.y / this.baseSize) * 100);
|
|
224
|
-
this.alphaInput = this.innerAlpha;
|
|
225
|
-
this.alphaChange.emit(this.innerAlpha);
|
|
226
|
-
}
|
|
227
|
-
onRemoveColor() {
|
|
228
|
-
if (this.useAlpha) {
|
|
229
|
-
this.alpha = 0;
|
|
230
|
-
this.alphaChange.emit(this.alpha);
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
this.color = null;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
isHexColor(value) {
|
|
237
|
-
return /^#[0-9A-F]{6}$/i.test(value);
|
|
238
|
-
}
|
|
239
|
-
getSaturationGradient() {
|
|
240
|
-
return 'linear-gradient(to right, white, hsl(' + this.hue * 360 + ', 100%, 50%) )';
|
|
241
|
-
}
|
|
242
|
-
updateInputs(hexColor) {
|
|
243
|
-
this.hexInputColor = hexColor;
|
|
244
|
-
const rgb = ColorHelper.hexToRgb(hexColor);
|
|
245
|
-
this.redInput = rgb.r;
|
|
246
|
-
this.greenInput = rgb.g;
|
|
247
|
-
this.blueInput = rgb.b;
|
|
248
|
-
}
|
|
249
|
-
updateKnobs() {
|
|
250
|
-
this.alphaKnobOffset = ((100 - this.alpha) / 100) * this.baseSize;
|
|
251
|
-
this.hueKnobOffset = this.hue * this.baseSize - (this.baseSize + 14);
|
|
252
|
-
this.saturationKnobOffset = this.saturation * this.baseSize;
|
|
253
|
-
this.valueKnobOffset = (1 - this.value) * this.baseSize;
|
|
254
|
-
}
|
|
255
|
-
onChangeType(type) {
|
|
256
|
-
this.inputType = type;
|
|
257
|
-
this.isSelectOpen = false;
|
|
258
|
-
}
|
|
259
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FngColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
260
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: FngColorPickerComponent, isStandalone: true, selector: "fng-color-picker", inputs: { useAlpha: "useAlpha", alpha: "alpha", color: "color", disabled: "disabled", palette: "palette", paletteOnly: "paletteOnly" }, outputs: { alphaChange: "alphaChange" }, providers: [
|
|
261
|
-
{
|
|
262
|
-
provide: NG_VALUE_ACCESSOR,
|
|
263
|
-
useExisting: forwardRef(() => FngColorPickerComponent),
|
|
264
|
-
multi: true
|
|
265
|
-
}
|
|
266
|
-
], usesOnChanges: true, ngImport: i0, template: "<div class=\"fwe-color-picker\" [class.fwe-alpha-active]=\"useAlpha\">\n <div class=\"fwe-d-flex\" *ngIf=\"!paletteOnly\">\n <div class=\"fwe-gradient-picker\">\n <div class=\"fwe-saturation-gradient\" [ngStyle]=\"{ 'background-image': getSaturationGradient() }\"></div>\n <div class=\"fwe-brightness-gradient\" (click)=\"onGradientClick($event)\"></div>\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-gradient-picker\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: saturationKnobOffset, y: valueKnobOffset }\"\n (cdkDragMoved)=\"onGradientDrag($event)\"\n [style.background]=\"color\"\n ></div>\n </div>\n\n <div class=\"fwe-hue-picker\">\n <div class=\"fwe-picker-background\" (click)=\"onHueClick($event)\"></div>\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-hue-picker\"\n cdkDragLockAxis=\"y\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: 3, y: hueKnobOffset }\"\n (cdkDragMoved)=\"onHueDrag($event)\"\n [style.background]=\"'hsl(' + hue * 360 + ', 100%, 50%)'\"\n ></div>\n </div>\n\n <div class=\"fwe-alpha-picker\" *ngIf=\"useAlpha\">\n <svg\n class=\"fwe-no-color-pattern\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n id=\"canvas1\"\n width=\"8\"\n height=\"184\"\n >\n <defs>\n <pattern id=\"bwsquare2px\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\">\n <rect x=\"0\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n <rect x=\"2\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e2e5e8\" />\n <rect x=\"0\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e2e5e8\" />\n <rect x=\"2\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n </pattern>\n </defs>\n <rect x=\"0\" y=\"0\" rx=\"4\" ry=\"4\" width=\"8\" height=\"184\" fill=\"url(#bwsquare2px)\" stroke-width=\"0\" />\n </svg>\n <div\n class=\"fwe-picker-background\"\n (click)=\"onAlphaClick($event)\"\n [ngStyle]=\"{ 'background-image': 'linear-gradient( ' + color + ' , transparent)' }\"\n ></div>\n\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-alpha-picker\"\n cdkDragLockAxis=\"y\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: 3, y: alphaKnobOffset }\"\n (cdkDragMoved)=\"onAlphaDrag($event)\"\n [style.background]=\"color\"\n ></div>\n </div>\n </div>\n\n <div class=\"fwe-mt-s\" *ngIf=\"!paletteOnly\">\n <div class=\"fwe-type-select\">\n <div class=\"fwe-type-indicator\" (click)=\"isSelectOpen = !isSelectOpen\">\n <span class=\"fwe-input-type\">{{ inputType }}</span>\n <i class=\"fwe-icon fwe-icon-arrows-collapse\"></i>\n </div>\n <div class=\"fwe-popover\" *ngIf=\"isSelectOpen\">\n <div class=\"fwe-type-item\" (click)=\"onChangeType('HEX')\" [class.fwe-selected]=\"inputType === 'HEX'\">\n <i class=\"fwe-icon fwe-icon-menu-check\"></i> HEX\n </div>\n <div class=\"fwe-type-item\" (click)=\"onChangeType('RGB')\" [class.fwe-selected]=\"inputType === 'RGB'\">\n <i class=\"fwe-icon fwe-icon-menu-check\"></i> RGB\n </div>\n </div>\n </div>\n\n <div class=\"fwe-d-flex\">\n <ng-container *ngIf=\"inputType === 'HEX'\">\n <label class=\"fwe-input-text fwe-hex-input\">\n <input type=\"text\" [(ngModel)]=\"hexInputColor\" (blur)=\"onHexBlur()\" (input)=\"onHexInput()\" />\n </label>\n </ng-container>\n <ng-container *ngIf=\"inputType === 'RGB'\">\n <label class=\"fwe-input-text fwe-red-input\">\n <input type=\"number\" [(ngModel)]=\"redInput\" (input)=\"onRgbInput(redInput, 'r')\" />\n </label>\n <label class=\"fwe-input-text fwe-green-input\">\n <input type=\"number\" [(ngModel)]=\"greenInput\" (input)=\"onRgbInput(greenInput, 'g')\" />\n </label>\n <label class=\"fwe-input-text fwe-blue-input\">\n <input type=\"number\" min=\"0\" max=\"255\" [(ngModel)]=\"blueInput\" (input)=\"onRgbInput(blueInput, 'b')\" />\n </label>\n </ng-container>\n\n <label class=\"fwe-input-text fwe-alpha-input fwe-ml-auto\" *ngIf=\"useAlpha\">\n <span>\n <input type=\"number\" min=\"0\" max=\"100\" [(ngModel)]=\"alphaInput\" (input)=\"onAlphaInput(alphaInput)\" />\n <span class=\"fwe-percent-char\">%</span>\n </span>\n </label>\n </div>\n </div>\n\n <div class=\"fwe-mt-xs fwe-color-grid\" *ngIf=\"palette && palette.length\">\n <div class=\"fwe-remove-color-button\" (click)=\"onRemoveColor()\">\n <svg\n class=\"fwe-no-color-pattern\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n id=\"canvas1\"\n width=\"18\"\n height=\"18\"\n >\n <defs>\n <pattern id=\"bwsquare2px\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\">\n <rect x=\"0\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n <rect x=\"2\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e2e5e8\" />\n <rect x=\"0\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e2e5e8\" />\n <rect x=\"2\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n </pattern>\n </defs>\n <rect x=\"0\" y=\"0\" rx=\"0\" ry=\"0\" width=\"18\" height=\"18\" fill=\"url(#bwsquare2px)\" stroke-width=\"0\" />\n </svg>\n <i class=\"fwe-icon fwe-icon-menu-check\" [class.fwe-color-text]=\"!color\"></i>\n </div>\n <ng-container *ngFor=\"let colorItem of palette\">\n <div\n class=\"fwe-color-item\"\n [class.fwe-white-item]=\"colorItem.toUpperCase() === '#FFFFFF'\"\n [style.background]=\"colorItem\"\n (click)=\"color = colorItem\"\n >\n <i class=\"fwe-icon fwe-icon-menu-check\" *ngIf=\"colorItem.toUpperCase() === color\"></i>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".fwe-triangle.fwe-triangle-right,.fwe-triangle.fwe-triangle-left,.fwe-triangle.fwe-triangle-bottom,.fwe-triangle.fwe-triangle-top{width:17px;height:17px;position:absolute;overflow:hidden}.fwe-triangle.fwe-triangle-right:after,.fwe-triangle.fwe-triangle-left:after,.fwe-triangle.fwe-triangle-bottom:after,.fwe-triangle.fwe-triangle-top:after{content:\"\";position:absolute;width:12px;height:12px;background:var(--fwe-white);transform:rotate(45deg);box-shadow:0 1px 4px #3333}.fwe-popover.fwe-popover-menu,.fwe-popover{background-color:var(--fwe-white);box-shadow:0 1px 4px #3333;border-radius:4px}.fwe-popover{padding:8px;font-size:var(--fwe-font-size-md);line-height:1rem}.fwe-popover-container{position:relative;display:inline-block}.fwe-triangle.fwe-triangle-top{left:50%;top:-17px;transform:translate(-8px)}.fwe-triangle.fwe-triangle-top:after{top:11px;left:3px}.fwe-triangle.fwe-triangle-bottom{left:50%;top:100%;transform:translate(-8px)}.fwe-triangle.fwe-triangle-bottom:after{top:-6px;left:3px}.fwe-triangle.fwe-triangle-left{left:-17px;top:50%;transform:translateY(-8px)}.fwe-triangle.fwe-triangle-left:after{top:2px;left:11px}.fwe-triangle.fwe-triangle-right{left:100%;top:50%;transform:translateY(-8px)}.fwe-triangle.fwe-triangle-right:after{top:2px;left:-6px}.fwe-popover.fwe-popover-menu{font-size:var(--fwe-font-size-base);line-height:1.5rem;padding:16px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item{border-bottom:none;min-height:36px;padding:0}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button{width:100%;margin-left:inherit;padding:0 8px 0 0;text-align:left;height:32px;max-height:32px;display:inline-flex;justify-content:unset}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button:hover{color:var(--fwe-black)}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button i{display:inline-flex;align-items:center;justify-content:center;flex-wrap:nowrap;height:24px;width:32px;margin-right:0}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button i:before{display:inline-flex}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button .fwe-svg-icon{margin-right:8px;margin-left:8px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button span{display:inline-flex;height:24px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button [class*=\" fwe-icon-\"]{margin-left:inherit}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item:hover{color:var(--fwe-black);background-color:#3333331a}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item:active{background-color:#3333}.fwe-popover .fwe-popover-legend{display:table;margin:16px;line-height:24px}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content{display:table-row}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content dt{display:table-cell;margin:0;padding-right:8px}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content dd{display:table-cell;margin:0}.fwe-color-picker{width:216px}.fwe-color-picker.fwe-alpha-active{width:245px}.fwe-color-picker .fwe-gradient-picker{position:relative;width:198px;height:198px;margin:-7px}.fwe-color-picker .fwe-gradient-picker .fwe-brightness-gradient{position:absolute;inset:7px;background-image:linear-gradient(transparent,#000)}.fwe-color-picker .fwe-gradient-picker .fwe-saturation-gradient{position:absolute;inset:7px}.fwe-color-picker .fwe-vertical-picker,.fwe-color-picker .fwe-alpha-picker,.fwe-color-picker .fwe-hue-picker{position:relative;height:198px;width:14px;margin:-7px -3px -7px 18px}.fwe-color-picker .fwe-vertical-picker .fwe-picker-background,.fwe-color-picker .fwe-alpha-picker .fwe-picker-background,.fwe-color-picker .fwe-hue-picker .fwe-picker-background{margin:7px 3px;height:184px;width:8px;border-radius:4px}.fwe-color-picker .fwe-vertical-picker .fwe-knob,.fwe-color-picker .fwe-alpha-picker .fwe-knob,.fwe-color-picker .fwe-hue-picker .fwe-knob{left:-3px}.fwe-color-picker .fwe-hue-picker .fwe-picker-background{background-image:linear-gradient(red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.fwe-color-picker .fwe-alpha-picker .fwe-no-color-pattern{margin:7px 3px;position:absolute}.fwe-color-picker .fwe-alpha-picker .fwe-picker-background{position:absolute}.fwe-color-picker .fwe-type-select{position:relative;display:flex}.fwe-color-picker .fwe-type-select .fwe-type-indicator{flex-shrink:1;cursor:pointer;display:flex}.fwe-color-picker .fwe-type-select .fwe-type-indicator .fwe-input-type{font-size:var(--fwe-font-size-small);line-height:calc(var(--fwe-font-size-small) + 5px);font-weight:var(--fwe-font-weight-bold)}.fwe-color-picker .fwe-type-select .fwe-type-indicator:hover{color:var(--fwe-hero)}.fwe-color-picker .fwe-type-select .fwe-icon-arrows-collapse{margin-left:16px;line-height:16px}.fwe-color-picker .fwe-type-select .fwe-popover{position:absolute;z-index:1;top:24px;left:0}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item{cursor:pointer;display:flex;padding:8px}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item:hover{color:var(--fwe-hero)}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item .fwe-icon-menu-check{opacity:0;margin-right:8px}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item.fwe-selected{cursor:default}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item.fwe-selected .fwe-icon-menu-check{opacity:1}.fwe-color-picker input::-webkit-outer-spin-button,.fwe-color-picker input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.fwe-color-picker input[type=number]{-moz-appearance:textfield}.fwe-color-picker input{padding-right:0!important;text-align:center}.fwe-color-picker .fwe-hex-input{width:75px;margin-right:16px}.fwe-color-picker .fwe-red-input,.fwe-color-picker .fwe-green-input{width:32px;margin-right:8px}.fwe-color-picker .fwe-blue-input{width:32px}.fwe-color-picker .fwe-alpha-input span input{width:48px;padding-right:16px!important}.fwe-color-picker .fwe-alpha-input .fwe-percent-char{margin-left:-16px}.fwe-color-picker .fwe-color-grid{display:flex;flex-wrap:wrap;margin-right:-8px;margin-bottom:-8px}.fwe-color-picker .fwe-color-grid .fwe-color-item{align-items:center;display:flex;justify-content:center;color:#fff;height:24px;width:24px;border-radius:4px;margin-right:8px;margin-bottom:8px}.fwe-color-picker .fwe-color-grid .fwe-color-item.fwe-white-item{border:1px solid var(--fwe-control-border);color:#000}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button{align-items:center;display:flex;justify-content:center;height:24px;width:24px;border-radius:4px;border:1px solid var(--fwe-control-border);color:var(--fwe-control);margin-right:8px;margin-bottom:8px}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button .fwe-no-color-pattern{margin:2px}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button i{color:transparent;position:absolute}.fwe-color-picker .fwe-knob{position:absolute;z-index:1;height:14px;width:14px;border-radius:50%;border:2px solid white;box-shadow:0 0 4px #00000026}\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: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
267
|
-
}
|
|
268
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FngColorPickerComponent, decorators: [{
|
|
269
|
-
type: Component,
|
|
270
|
-
args: [{ standalone: true, imports: [CommonModule, DragDropModule, FormsModule], selector: 'fng-color-picker', providers: [
|
|
271
|
-
{
|
|
272
|
-
provide: NG_VALUE_ACCESSOR,
|
|
273
|
-
useExisting: forwardRef(() => FngColorPickerComponent),
|
|
274
|
-
multi: true
|
|
275
|
-
}
|
|
276
|
-
], encapsulation: ViewEncapsulation.None, template: "<div class=\"fwe-color-picker\" [class.fwe-alpha-active]=\"useAlpha\">\n <div class=\"fwe-d-flex\" *ngIf=\"!paletteOnly\">\n <div class=\"fwe-gradient-picker\">\n <div class=\"fwe-saturation-gradient\" [ngStyle]=\"{ 'background-image': getSaturationGradient() }\"></div>\n <div class=\"fwe-brightness-gradient\" (click)=\"onGradientClick($event)\"></div>\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-gradient-picker\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: saturationKnobOffset, y: valueKnobOffset }\"\n (cdkDragMoved)=\"onGradientDrag($event)\"\n [style.background]=\"color\"\n ></div>\n </div>\n\n <div class=\"fwe-hue-picker\">\n <div class=\"fwe-picker-background\" (click)=\"onHueClick($event)\"></div>\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-hue-picker\"\n cdkDragLockAxis=\"y\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: 3, y: hueKnobOffset }\"\n (cdkDragMoved)=\"onHueDrag($event)\"\n [style.background]=\"'hsl(' + hue * 360 + ', 100%, 50%)'\"\n ></div>\n </div>\n\n <div class=\"fwe-alpha-picker\" *ngIf=\"useAlpha\">\n <svg\n class=\"fwe-no-color-pattern\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n id=\"canvas1\"\n width=\"8\"\n height=\"184\"\n >\n <defs>\n <pattern id=\"bwsquare2px\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\">\n <rect x=\"0\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n <rect x=\"2\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e2e5e8\" />\n <rect x=\"0\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e2e5e8\" />\n <rect x=\"2\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n </pattern>\n </defs>\n <rect x=\"0\" y=\"0\" rx=\"4\" ry=\"4\" width=\"8\" height=\"184\" fill=\"url(#bwsquare2px)\" stroke-width=\"0\" />\n </svg>\n <div\n class=\"fwe-picker-background\"\n (click)=\"onAlphaClick($event)\"\n [ngStyle]=\"{ 'background-image': 'linear-gradient( ' + color + ' , transparent)' }\"\n ></div>\n\n <div\n class=\"fwe-knob\"\n cdkDragBoundary=\".fwe-alpha-picker\"\n cdkDragLockAxis=\"y\"\n cdkDrag\n [cdkDragFreeDragPosition]=\"{ x: 3, y: alphaKnobOffset }\"\n (cdkDragMoved)=\"onAlphaDrag($event)\"\n [style.background]=\"color\"\n ></div>\n </div>\n </div>\n\n <div class=\"fwe-mt-s\" *ngIf=\"!paletteOnly\">\n <div class=\"fwe-type-select\">\n <div class=\"fwe-type-indicator\" (click)=\"isSelectOpen = !isSelectOpen\">\n <span class=\"fwe-input-type\">{{ inputType }}</span>\n <i class=\"fwe-icon fwe-icon-arrows-collapse\"></i>\n </div>\n <div class=\"fwe-popover\" *ngIf=\"isSelectOpen\">\n <div class=\"fwe-type-item\" (click)=\"onChangeType('HEX')\" [class.fwe-selected]=\"inputType === 'HEX'\">\n <i class=\"fwe-icon fwe-icon-menu-check\"></i> HEX\n </div>\n <div class=\"fwe-type-item\" (click)=\"onChangeType('RGB')\" [class.fwe-selected]=\"inputType === 'RGB'\">\n <i class=\"fwe-icon fwe-icon-menu-check\"></i> RGB\n </div>\n </div>\n </div>\n\n <div class=\"fwe-d-flex\">\n <ng-container *ngIf=\"inputType === 'HEX'\">\n <label class=\"fwe-input-text fwe-hex-input\">\n <input type=\"text\" [(ngModel)]=\"hexInputColor\" (blur)=\"onHexBlur()\" (input)=\"onHexInput()\" />\n </label>\n </ng-container>\n <ng-container *ngIf=\"inputType === 'RGB'\">\n <label class=\"fwe-input-text fwe-red-input\">\n <input type=\"number\" [(ngModel)]=\"redInput\" (input)=\"onRgbInput(redInput, 'r')\" />\n </label>\n <label class=\"fwe-input-text fwe-green-input\">\n <input type=\"number\" [(ngModel)]=\"greenInput\" (input)=\"onRgbInput(greenInput, 'g')\" />\n </label>\n <label class=\"fwe-input-text fwe-blue-input\">\n <input type=\"number\" min=\"0\" max=\"255\" [(ngModel)]=\"blueInput\" (input)=\"onRgbInput(blueInput, 'b')\" />\n </label>\n </ng-container>\n\n <label class=\"fwe-input-text fwe-alpha-input fwe-ml-auto\" *ngIf=\"useAlpha\">\n <span>\n <input type=\"number\" min=\"0\" max=\"100\" [(ngModel)]=\"alphaInput\" (input)=\"onAlphaInput(alphaInput)\" />\n <span class=\"fwe-percent-char\">%</span>\n </span>\n </label>\n </div>\n </div>\n\n <div class=\"fwe-mt-xs fwe-color-grid\" *ngIf=\"palette && palette.length\">\n <div class=\"fwe-remove-color-button\" (click)=\"onRemoveColor()\">\n <svg\n class=\"fwe-no-color-pattern\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n id=\"canvas1\"\n width=\"18\"\n height=\"18\"\n >\n <defs>\n <pattern id=\"bwsquare2px\" width=\"4\" height=\"4\" patternUnits=\"userSpaceOnUse\">\n <rect x=\"0\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n <rect x=\"2\" y=\"0\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e2e5e8\" />\n <rect x=\"0\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#e2e5e8\" />\n <rect x=\"2\" y=\"2\" width=\"2\" height=\"2\" stroke=\"none\" fill=\"#ffffff\" />\n </pattern>\n </defs>\n <rect x=\"0\" y=\"0\" rx=\"0\" ry=\"0\" width=\"18\" height=\"18\" fill=\"url(#bwsquare2px)\" stroke-width=\"0\" />\n </svg>\n <i class=\"fwe-icon fwe-icon-menu-check\" [class.fwe-color-text]=\"!color\"></i>\n </div>\n <ng-container *ngFor=\"let colorItem of palette\">\n <div\n class=\"fwe-color-item\"\n [class.fwe-white-item]=\"colorItem.toUpperCase() === '#FFFFFF'\"\n [style.background]=\"colorItem\"\n (click)=\"color = colorItem\"\n >\n <i class=\"fwe-icon fwe-icon-menu-check\" *ngIf=\"colorItem.toUpperCase() === color\"></i>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".fwe-triangle.fwe-triangle-right,.fwe-triangle.fwe-triangle-left,.fwe-triangle.fwe-triangle-bottom,.fwe-triangle.fwe-triangle-top{width:17px;height:17px;position:absolute;overflow:hidden}.fwe-triangle.fwe-triangle-right:after,.fwe-triangle.fwe-triangle-left:after,.fwe-triangle.fwe-triangle-bottom:after,.fwe-triangle.fwe-triangle-top:after{content:\"\";position:absolute;width:12px;height:12px;background:var(--fwe-white);transform:rotate(45deg);box-shadow:0 1px 4px #3333}.fwe-popover.fwe-popover-menu,.fwe-popover{background-color:var(--fwe-white);box-shadow:0 1px 4px #3333;border-radius:4px}.fwe-popover{padding:8px;font-size:var(--fwe-font-size-md);line-height:1rem}.fwe-popover-container{position:relative;display:inline-block}.fwe-triangle.fwe-triangle-top{left:50%;top:-17px;transform:translate(-8px)}.fwe-triangle.fwe-triangle-top:after{top:11px;left:3px}.fwe-triangle.fwe-triangle-bottom{left:50%;top:100%;transform:translate(-8px)}.fwe-triangle.fwe-triangle-bottom:after{top:-6px;left:3px}.fwe-triangle.fwe-triangle-left{left:-17px;top:50%;transform:translateY(-8px)}.fwe-triangle.fwe-triangle-left:after{top:2px;left:11px}.fwe-triangle.fwe-triangle-right{left:100%;top:50%;transform:translateY(-8px)}.fwe-triangle.fwe-triangle-right:after{top:2px;left:-6px}.fwe-popover.fwe-popover-menu{font-size:var(--fwe-font-size-base);line-height:1.5rem;padding:16px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item{border-bottom:none;min-height:36px;padding:0}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button{width:100%;margin-left:inherit;padding:0 8px 0 0;text-align:left;height:32px;max-height:32px;display:inline-flex;justify-content:unset}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button:hover{color:var(--fwe-black)}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button i{display:inline-flex;align-items:center;justify-content:center;flex-wrap:nowrap;height:24px;width:32px;margin-right:0}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button i:before{display:inline-flex}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button .fwe-svg-icon{margin-right:8px;margin-left:8px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button span{display:inline-flex;height:24px}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item button [class*=\" fwe-icon-\"]{margin-left:inherit}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item:hover{color:var(--fwe-black);background-color:#3333331a}.fwe-popover.fwe-popover-menu .fwe-list-group .fwe-list-group-item:active{background-color:#3333}.fwe-popover .fwe-popover-legend{display:table;margin:16px;line-height:24px}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content{display:table-row}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content dt{display:table-cell;margin:0;padding-right:8px}.fwe-popover .fwe-popover-legend .fwe-popover-legend-content dd{display:table-cell;margin:0}.fwe-color-picker{width:216px}.fwe-color-picker.fwe-alpha-active{width:245px}.fwe-color-picker .fwe-gradient-picker{position:relative;width:198px;height:198px;margin:-7px}.fwe-color-picker .fwe-gradient-picker .fwe-brightness-gradient{position:absolute;inset:7px;background-image:linear-gradient(transparent,#000)}.fwe-color-picker .fwe-gradient-picker .fwe-saturation-gradient{position:absolute;inset:7px}.fwe-color-picker .fwe-vertical-picker,.fwe-color-picker .fwe-alpha-picker,.fwe-color-picker .fwe-hue-picker{position:relative;height:198px;width:14px;margin:-7px -3px -7px 18px}.fwe-color-picker .fwe-vertical-picker .fwe-picker-background,.fwe-color-picker .fwe-alpha-picker .fwe-picker-background,.fwe-color-picker .fwe-hue-picker .fwe-picker-background{margin:7px 3px;height:184px;width:8px;border-radius:4px}.fwe-color-picker .fwe-vertical-picker .fwe-knob,.fwe-color-picker .fwe-alpha-picker .fwe-knob,.fwe-color-picker .fwe-hue-picker .fwe-knob{left:-3px}.fwe-color-picker .fwe-hue-picker .fwe-picker-background{background-image:linear-gradient(red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.fwe-color-picker .fwe-alpha-picker .fwe-no-color-pattern{margin:7px 3px;position:absolute}.fwe-color-picker .fwe-alpha-picker .fwe-picker-background{position:absolute}.fwe-color-picker .fwe-type-select{position:relative;display:flex}.fwe-color-picker .fwe-type-select .fwe-type-indicator{flex-shrink:1;cursor:pointer;display:flex}.fwe-color-picker .fwe-type-select .fwe-type-indicator .fwe-input-type{font-size:var(--fwe-font-size-small);line-height:calc(var(--fwe-font-size-small) + 5px);font-weight:var(--fwe-font-weight-bold)}.fwe-color-picker .fwe-type-select .fwe-type-indicator:hover{color:var(--fwe-hero)}.fwe-color-picker .fwe-type-select .fwe-icon-arrows-collapse{margin-left:16px;line-height:16px}.fwe-color-picker .fwe-type-select .fwe-popover{position:absolute;z-index:1;top:24px;left:0}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item{cursor:pointer;display:flex;padding:8px}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item:hover{color:var(--fwe-hero)}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item .fwe-icon-menu-check{opacity:0;margin-right:8px}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item.fwe-selected{cursor:default}.fwe-color-picker .fwe-type-select .fwe-popover .fwe-type-item.fwe-selected .fwe-icon-menu-check{opacity:1}.fwe-color-picker input::-webkit-outer-spin-button,.fwe-color-picker input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.fwe-color-picker input[type=number]{-moz-appearance:textfield}.fwe-color-picker input{padding-right:0!important;text-align:center}.fwe-color-picker .fwe-hex-input{width:75px;margin-right:16px}.fwe-color-picker .fwe-red-input,.fwe-color-picker .fwe-green-input{width:32px;margin-right:8px}.fwe-color-picker .fwe-blue-input{width:32px}.fwe-color-picker .fwe-alpha-input span input{width:48px;padding-right:16px!important}.fwe-color-picker .fwe-alpha-input .fwe-percent-char{margin-left:-16px}.fwe-color-picker .fwe-color-grid{display:flex;flex-wrap:wrap;margin-right:-8px;margin-bottom:-8px}.fwe-color-picker .fwe-color-grid .fwe-color-item{align-items:center;display:flex;justify-content:center;color:#fff;height:24px;width:24px;border-radius:4px;margin-right:8px;margin-bottom:8px}.fwe-color-picker .fwe-color-grid .fwe-color-item.fwe-white-item{border:1px solid var(--fwe-control-border);color:#000}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button{align-items:center;display:flex;justify-content:center;height:24px;width:24px;border-radius:4px;border:1px solid var(--fwe-control-border);color:var(--fwe-control);margin-right:8px;margin-bottom:8px}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button .fwe-no-color-pattern{margin:2px}.fwe-color-picker .fwe-color-grid .fwe-remove-color-button i{color:transparent;position:absolute}.fwe-color-picker .fwe-knob{position:absolute;z-index:1;height:14px;width:14px;border-radius:50%;border:2px solid white;box-shadow:0 0 4px #00000026}\n"] }]
|
|
277
|
-
}], propDecorators: { useAlpha: [{
|
|
278
|
-
type: Input
|
|
279
|
-
}], alpha: [{
|
|
280
|
-
type: Input
|
|
281
|
-
}], alphaChange: [{
|
|
282
|
-
type: Output
|
|
283
|
-
}], color: [{
|
|
284
|
-
type: Input
|
|
285
|
-
}], disabled: [{
|
|
286
|
-
type: Input
|
|
287
|
-
}], palette: [{
|
|
288
|
-
type: Input
|
|
289
|
-
}], paletteOnly: [{
|
|
290
|
-
type: Input
|
|
291
|
-
}] } });
|
|
292
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9mb3Jtcy9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9mb3Jtcy9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBZSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQTRCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEksT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQXVCLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFFL0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWE7SUFDekMsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7Q0FDVixDQUFDO0FBRUY7O0dBRUc7QUFnQkgsTUFBTSxPQUFPLHVCQUF1QjtJQWZwQztRQWdCRSxhQUFRLEdBQUcsR0FBRyxDQUFDO1FBRWYsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUVaLGFBQVEsR0FBRyxLQUFL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Q0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDOzhHQXZRVSx1QkFBdUI7a0dBQXZCLHVCQUF1QixnUEFUdkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUN0RCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsK0NDcENILHVxTUFnSkEsNDdORHRIWSxZQUFZLG9WQUFFLGNBQWMsZ2ZBQUUsV0FBVzs7MkZBYXhDLHVCQUF1QjtrQkFmbkMsU0FBUztpQ0FDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxZQUMxQyxrQkFBa0IsYUFHakI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGLGlCQUNjLGlCQUFpQixDQUFDLElBQUk7OEJBUzVCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0YsS0FBSztzQkFEUixLQUFLO2dCQVlJLFdBQVc7c0JBQXBCLE1BQU07Z0JBU0gsS0FBSztzQkFEUixLQUFLO2dCQVdGLFFBQVE7c0JBRFgsS0FBSztnQkFhRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDZGtEcmFnTW92ZSwgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29sb3JIZWxwZXIgfSBmcm9tICcuL2NvbG9yLWhlbHBlcic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgY29uc3QgUFJFREVGSU5FRF9DT0xPUlM6IHN0cmluZ1tdID0gW1xuICAnIzAwOTFkYycsXG4gICcjMzMzMzMzJyxcbiAgJyNmZmZmZmYnLFxuICAnI2YwZjJmMycsXG4gICcjZTJlNWU4JyxcbiAgJyNkM2Q4ZGQnLFxuICAnI2I2YmVjNicsXG4gICcjODBjYTNkJyxcbiAgJyNmZmQ2MDAnLFxuICAnI2ZmOTYwMCcsXG4gICcjZDUwMDAwJ1xuXTtcblxuLyoqXG4gKiBBIGN1c3RvbSBmb3JtIGVsZW1lbnQgdG8gcGljayBhIGNvbG9yLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHJhZ0Ryb3BNb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgc2VsZWN0b3I6ICdmbmctY29sb3ItcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZuZ0NvbG9yUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEZuZ0NvbG9yUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIGJhc2VTaXplID0gMTg0O1xuXG4gIGlucHV0VHlwZSA9ICdSR0InO1xuXG4gIGlzU2VsZWN0T3BlbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHVzZUFscGhhID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IGFscGhhKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJBbHBoYTtcbiAgfVxuICBzZXQgYWxwaGEodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSA8PSAxMDAgJiYgdmFsdWUgPj0gMCAmJiB0aGlzLmlubmVyQWxwaGEgIT09IE1hdGgucm91bmQodmFsdWUpKSB7XG4gICAgICB0aGlzLmlubmVyQWxwaGEgPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICAgIHRoaXMuYWxwaGFJbnB1dCA9IHRoaXMuaW5uZXJBbHBoYTtcbiAgICAgIHRoaXMudXBkYXRlS25vYnMoKTtcbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KCkgYWxwaGFDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgY29sb3JcbiAgICovXG4gIGdldCBjb2xvcigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lckNvbG9yO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBjb2xvcih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmICh2YWx1ZSAmJiB0aGlzLmlzSGV4Q29sb3IodmFsdWUpKSB7XG4gICAgICB0aGlzLmlubmVyQ29sb3IgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlubmVyQ29sb3IgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbG9yUmdiKHRydWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlubmVyRGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pbm5lckRpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbiBhcnJheSB3aXRoIGNvbG9yIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBwYWxldHRlLlxuICAgKiBFeGFtcGxlOiBbJyMyMzQ1NjcsICcjQUEwMEZGJ11cbiAgICogUGFzcyBudWxsIHRvIGhpZGUgcGFsZXR0ZS5cbiAgICovXG4gIEBJbnB1dCgpIHBhbGV0dGU6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIGhpZGUgdGhlIGh1ZSBhbmQgZ3JhZGllbnQgcGlja2VyIGFuZCBzaG90IHRoZSBwYWxldHRlIG9ubHkuXG4gICAqL1xuICBASW5wdXQoKSBwYWxldHRlT25seSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgaW5uZXJDb2xvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaW5uZXJEaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgaW5uZXJBbHBoYTogbnVtYmVyID0gMTtcblxuICAvLyBpbnB1dCBjb250cm9sc1xuICBoZXhJbnB1dENvbG9yOiBzdHJpbmcgfCBudWxsID0gJyNmZjAwMDAnO1xuICByZWRJbnB1dCA9IDI1NTtcbiAgZ3JlZW5JbnB1dCA9IDA7XG4gIGJsdWVJbnB1dCA9IDA7XG4gIGFscGhhSW5wdXQgPSAxMDA7XG5cbiAgLy8gSFNWIHZhbHVlXG4gIGh1ZTogbnVtYmVyID0gMDtcbiAgc2F0dXJhdGlvbjogbnVtYmVyID0gMDtcbiAgdmFsdWU6IG51bWJlciA9IDA7XG5cbiAgLy8gcG9pdGlvbnMgb2YgdGhlIGtub2JzIGluIHB4XG4gIGh1ZUtub2JPZmZzZXQgPSAwO1xuICBhbHBoYUtub2JPZmZzZXQgPSAwO1xuICBzYXR1cmF0aW9uS25vYk9mZnNldCA9IDA7XG4gIHZhbHVlS25vYk9mZnNldCA9IDA7XG5cbiAgLy8gY2FsbGJhY2tzIGZvciBDb250cm9sVmFsdWVBY2Nlc3NvclxuICBvblRvdWNoZWQ6ICgpID0+IGFueSA9ICgpID0+IG51bGw7XG4gIG9uQ2hhbmdlOiAoY29sb3I6IHN0cmluZyB8IG51bGwpID0+IGFueSA9ICgpID0+IG51bGw7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHBhbGV0dGVDaGFuZ2VkID0gY2hhbmdlc1sncGFsZXR0ZSddO1xuICAgIGlmIChwYWxldHRlQ2hhbmdlZFsnY3VycmVudFZhbHVlJ10ubGVuZ3RoID4gMCAmJiBwYWxldHRlQ2hhbmdlZFsnY3VycmVudFZhbHVlJ10uaW5kZXhPZignRkVTVE9fQ09MT1JTJykgIT09IC0xKSB7XG4gICAgICB0aGlzLnBhbGV0dGUgPSBQUkVERUZJTkVEX0NPTE9SUztcbiAgICB9XG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICB3cml0ZVZhbHVlKGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0hleENvbG9yKGNvbG9yKSkge1xuICAgICAgdGhpcy5pbm5lckNvbG9yID0gY29sb3IudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbm5lckNvbG9yID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb2xvclJnYihmYWxzZSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlubmVyRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLy8gdXBkYXRlIG1ldGhvZCBmb3IgY2hhbmdlcyBvZiB0aGUgcmdiIHZhbHVlXG4gIHVwZGF0ZUNvbG9yUmdiKGVtaXRDaGFuZ2U6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjdXJyZW50Q29sb3IgPSB0aGlzLmlubmVyQ29sb3IgfHwgJyNGRkZGRkYnO1xuICAgIHRoaXMudXBkYXRlSW5wdXRzKGN1cnJlbnRDb2xvcik7XG4gICAgY29uc3QgcmdiID0gQ29sb3JIZWxwZXIuaGV4VG9SZ2IoY3VycmVudENvbG9yKTtcbiAgICBjb25zdCBoc3YgPSBDb2xvckhlbHBlci5yZ2JUb0hzdihyZ2IpO1xuICAgIHRoaXMuaHVlID0gaHN2Lmg7XG4gICAgdGhpcy5zYXR1cmF0aW9uID0gaHN2LnM7XG4gICAgdGhpcy52YWx1ZSA9IGhzdi52O1xuICAgIHRoaXMudXBkYXRlS25vYnMoKTtcbiAgICBpZiAoZW1pdENoYW5nZSkge1xuICAgICAgaWYgKHRoaXMub25DaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuaW5uZXJDb2xvcik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vblRvdWNoZWQgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHVwZGF0ZSBtZXRob2QgZm9yIGNoYW5nZXMgb2YgdGhlIGhzdiB2YWx1ZVxuICB1cGRhdGVDb2xvckhzdigpIHtcbiAgICBjb25zdCByZ2IgPSBDb2xvckhlbHBlci5oc3ZUb1JnYih7IGg6IHRoaXMuaHVlLCBzOiB0aGlzLnNhdHVyYXRpb24sIHY6IHRoaXMudmFsdWUgfSk7XG4gICAgdGhpcy5pbm5lckNvbG9yID0gQ29sb3JIZWxwZXIucmdiVG9IZXgocmdiKTtcbiAgICB0aGlzLnVwZGF0ZUlucHV0cyh0aGlzLmlubmVyQ29sb3IpO1xuICAgIGlmICh0aGlzLm9uQ2hhbmdlICE9IG51bGwpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5pbm5lckNvbG9yKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25Ub3VjaGVkICE9IG51bGwpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXZlbnQgaGFuZGxlciBmb3IgaW5wdXRzXG4gIG9uSGV4Qmx1cigpIHtcbiAgICBpZiAodGhpcy5oZXhJbnB1dENvbG9yICYmIHRoaXMuaXNIZXhDb2xvcih0aGlzLmhleElucHV0Q29sb3IpKSB7XG4gICAgICB0aGlzLmNvbG9yID0gdGhpcy5oZXhJbnB1dENvbG9yLnRvVXBwZXJDYXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGV4SW5wdXRDb2xvciA9IHRoaXMuY29sb3I7XG4gICAgfVxuICB9XG5cbiAgb25IZXhJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5oZXhJbnB1dENvbG9yICYmIHRoaXMuaXNIZXhDb2xvcih0aGlzLmhleElucHV0Q29sb3IpKSB7XG4gICAgICB0aGlzLmNvbG9yID0gdGhpcy5oZXhJbnB1dENvbG9yLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgb25SZ2JCbHVyKCkge1xuICAgIGlmICh0aGlzLmhleElucHV0Q29sb3IgJiYgdGhpcy5pc0hleENvbG9yKHRoaXMuaGV4SW5wdXRDb2xvcikpIHtcbiAgICAgIHRoaXMuY29sb3IgPSB0aGlzLmhleElucHV0Q29sb3IudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZXhJbnB1dENvbG9yID0gdGhpcy5jb2xvcjtcbiAgICB9XG4gIH1cblxuICBvblJnYklucHV0KHZhbHVlOiBudW1iZXIsIGNoYW5uZWw6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA+IDI1NSB8fCB2YWx1ZSA8IDApIHtcbiAgICAgIHRoaXMudXBkYXRlSW5wdXRzKHRoaXMuaW5uZXJDb2xvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJnYiA9IENvbG9ySGVscGVyLmhleFRvUmdiKHRoaXMuaW5uZXJDb2xvcik7XG4gICAgICByZ2JbY2hhbm5lbCBhcyBrZXlvZiB0eXBlb2YgcmdiXSA9IHZhbHVlO1xuICAgICAgdGhpcy5pbm5lckNvbG9yID0gQ29sb3JIZWxwZXIucmdiVG9IZXgocmdiKTtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JSZ2IodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25BbHBoYUlucHV0KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPiAxMDAgfHwgdmFsdWUgPCAwKSB7XG4gICAgICB0aGlzLmFscGhhSW5wdXQgPSB0aGlzLmlubmVyQWxwaGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWxwaGEgPSB2YWx1ZTtcbiAgICAgIHRoaXMuYWxwaGFDaGFuZ2UuZW1pdCh0aGlzLmFscGhhKTtcbiAgICB9XG4gIH1cblxuICBvbkdyYWRpZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLnNhdHVyYXRpb24gPSBldmVudC5vZmZzZXRYIC8gdGhpcy5iYXNlU2l6ZTtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuYmFzZVNpemUgLSBldmVudC5vZmZzZXRZKSAvIHRoaXMuYmFzZVNpemU7XG4gICAgdGhpcy51cGRhdGVDb2xvckhzdigpO1xuICAgIHRoaXMudXBkYXRlS25vYnMoKTtcbiAgfVxuXG4gIG9uR3JhZGllbnREcmFnKGV2ZW50OiBDZGtEcmFnTW92ZSkge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gZXZlbnQuc291cmNlLmdldEZyZWVEcmFnUG9zaXRpb24oKTtcbiAgICB0aGlzLnNhdHVyYXRpb24gPSBNYXRoLmZsb29yKHBvc2l0aW9uLngpIC8gdGhpcy5iYXNlU2l6ZTtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuYmFzZVNpemUgLSBwb3NpdGlvbi55KSAvIHRoaXMuYmFzZVNpemU7XG4gICAgdGhpcy51cGRhdGVDb2xvckhzdigpO1xuICB9XG5cbiAgb25IdWVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuaHVlID0gZXZlbnQub2Zmc2V0WSAvIHRoaXMuYmFzZVNpemU7XG4gICAgdGhpcy51cGRhdGVDb2xvckhzdigpO1xuICAgIHRoaXMudXBkYXRlS25vYnMoKTtcbiAgfVxuXG4gIG9uQWxwaGFDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuYWxwaGEgPSAxMDAgLSBNYXRoLnJvdW5kKChldmVudC5vZmZzZXRZIC8gdGhpcy5iYXNlU2l6ZSkgKiAxMDApO1xuICAgIHRoaXMuYWxwaGFDaGFuZ2UuZW1pdCh0aGlzLmFscGhhKTtcbiAgfVxuXG4gIG9uSHVlRHJhZyhldmVudDogQ2RrRHJhZ01vdmUpIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IGV2ZW50LnNvdXJjZS5nZXRGcmVlRHJhZ1Bvc2l0aW9uKCk7XG4gICAgdGhpcy5odWUgPSAocG9zaXRpb24ueSArIHRoaXMuYmFzZVNpemUgKyAxNCkgLyB0aGlzLmJhc2VTaXplO1xuICAgIHRoaXMudXBkYXRlQ29sb3JIc3YoKTtcbiAgfVxuXG4gIG9uQWxwaGFEcmFnKGV2ZW50OiBDZGtEcmFnTW92ZSkge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gZXZlbnQuc291cmNlLmdldEZyZWVEcmFnUG9zaXRpb24oKTtcbiAgICB0aGlzLmlubmVyQWxwaGEgPSAxMDAgLSBNYXRoLnJvdW5kKChwb3NpdGlvbi55IC8gdGhpcy5iYXNlU2l6ZSkgKiAxMDApO1xuICAgIHRoaXMuYWxwaGFJbnB1dCA9IHRoaXMuaW5uZXJBbHBoYTtcbiAgICB0aGlzLmFscGhhQ2hhbmdlLmVtaXQodGhpcy5pbm5lckFscGhhKTtcbiAgfVxuXG4gIG9uUmVtb3ZlQ29sb3IoKSB7XG4gICAgaWYgKHRoaXMudXNlQWxwaGEpIHtcbiAgICAgIHRoaXMuYWxwaGEgPSAwO1xuICAgICAgdGhpcy5hbHBoYUNoYW5nZS5lbWl0KHRoaXMuYWxwaGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBpc0hleENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gL14jWzAtOUEtRl17Nn0kL2kudGVzdCh2YWx1ZSk7XG4gIH1cblxuICBnZXRTYXR1cmF0aW9uR3JhZGllbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwgd2hpdGUsICBoc2woJyArIHRoaXMuaHVlICogMzYwICsgJywgMTAwJSwgNTAlKSApJztcbiAgfVxuXG4gIHVwZGF0ZUlucHV0cyhoZXhDb2xvcjogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuaGV4SW5wdXRDb2xvciA9IGhleENvbG9yO1xuICAgIGNvbnN0IHJnYiA9IENvbG9ySGVscGVyLmhleFRvUmdiKGhleENvbG9yKTtcbiAgICB0aGlzLnJlZElucHV0ID0gcmdiLnI7XG4gICAgdGhpcy5ncmVlbklucHV0ID0gcmdiLmc7XG4gICAgdGhpcy5ibHVlSW5wdXQgPSByZ2IuYjtcbiAgfVxuXG4gIHVwZGF0ZUtub2JzKCkge1xuICAgIHRoaXMuYWxwaGFLbm9iT2Zmc2V0ID0gKCgxMDAgLSB0aGlzLmFscGhhKSAvIDEwMCkgKiB0aGlzLmJhc2VTaXplO1xuICAgIHRoaXMuaHVlS25vYk9mZnNldCA9IHRoaXMuaHVlICogdGhpcy5iYXNlU2l6ZSAtICh0aGlzLmJhc2VTaXplICsgMTQpO1xuICAgIHRoaXMuc2F0dXJhdGlvbktub2JPZmZzZXQgPSB0aGlzLnNhdHVyYXRpb24gKiB0aGlzLmJhc2VTaXplO1xuICAgIHRoaXMudmFsdWVLbm9iT2Zmc2V0ID0gKDEgLSB0aGlzLnZhbHVlKSAqIHRoaXMuYmFzZVNpemU7XG4gIH1cblxuICBvbkNoYW5nZVR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pbnB1dFR5cGUgPSB0eXBlO1xuICAgIHRoaXMuaXNTZWxlY3RPcGVuID0gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmd2UtY29sb3ItcGlja2VyXCIgW2NsYXNzLmZ3ZS1hbHBoYS1hY3RpdmVdPVwidXNlQWxwaGFcIj5cbiAgPGRpdiBjbGFzcz1cImZ3ZS1kLWZsZXhcIiAqbmdJZj1cIiFwYWxldHRlT25seVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmd2UtZ3JhZGllbnQtcGlja2VyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZndlLXNhdHVyYXRpb24tZ3JhZGllbnRcIiBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWltYWdlJzogZ2V0U2F0dXJhdGlvbkdyYWRpZW50KCkgfVwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZ3ZS1icmlnaHRuZXNzLWdyYWRpZW50XCIgKGNsaWNrKT1cIm9uR3JhZGllbnRDbGljaygkZXZlbnQpXCI+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZndlLWtub2JcIlxuICAgICAgICBjZGtEcmFnQm91bmRhcnk9XCIuZndlLWdyYWRpZW50LXBpY2tlclwiXG4gICAgICAgIGNka0RyYWdcbiAgICAgICAgW2Nka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uXT1cInsgeDogc2F0dXJhdGlvbktub2JPZmZzZXQsIHk6IHZhbHVlS25vYk9mZnNldCB9XCJcbiAgICAgICAgKGNka0RyYWdNb3ZlZCk9XCJvbkdyYWRpZW50RHJhZygkZXZlbnQpXCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiY29sb3JcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZ3ZS1odWUtcGlja2VyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZndlLXBpY2tlci1iYWNrZ3JvdW5kXCIgKGNsaWNrKT1cIm9uSHVlQ2xpY2soJGV2ZW50KVwiPjwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZ3ZS1rbm9iXCJcbiAgICAgICAgY2RrRHJhZ0JvdW5kYXJ5PVwiLmZ3ZS1odWUtcGlja2VyXCJcbiAgICAgICAgY2RrRHJhZ0xvY2tBeGlzPVwieVwiXG4gICAgICAgIGNka0RyYWdcbiAgICAgICAgW2Nka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uXT1cInsgeDogMywgeTogaHVlS25vYk9mZnNldCB9XCJcbiAgICAgICAgKGNka0RyYWdNb3ZlZCk9XCJvbkh1ZURyYWcoJGV2ZW50KVwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIidoc2woJyArIGh1ZSAqIDM2MCArICcsIDEwMCUsIDUwJSknXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmd2UtYWxwaGEtcGlja2VyXCIgKm5nSWY9XCJ1c2VBbHBoYVwiPlxuICAgICAgPHN2Z1xuICAgICAgICBjbGFzcz1cImZ3ZS1uby1jb2xvci1wYXR0ZXJuXCJcbiAgICAgICAgdmVyc2lvbj1cIjEuMVwiXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxuICAgICAgICBpZD1cImNhbnZhczFcIlxuICAgICAgICB3aWR0aD1cIjhcIlxuICAgICAgICBoZWlnaHQ9XCIxODRcIlxuICAgICAgPlxuICAgICAgICA8ZGVmcz5cbiAgICAgICAgICA8cGF0dGVybiBpZD1cImJ3c3F1YXJlMnB4XCIgd2lkdGg9XCI0XCIgaGVpZ2h0PVwiNFwiIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHN0cm9rZT1cIm5vbmVcIiBmaWxsPVwiI2ZmZmZmZlwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIwXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHN0cm9rZT1cIm5vbmVcIiBmaWxsPVwiI2UyZTVlOFwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMFwiIHk9XCIyXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHN0cm9rZT1cIm5vbmVcIiBmaWxsPVwiI2UyZTVlOFwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIyXCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHN0cm9rZT1cIm5vbmVcIiBmaWxsPVwiI2ZmZmZmZlwiIC8+XG4gICAgICAgICAgPC9wYXR0ZXJuPlxuICAgICAgICA8L2RlZnM+XG4gICAgICAgIDxyZWN0IHg9XCIwXCIgeT1cIjBcIiByeD1cIjRcIiByeT1cIjRcIiB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIxODRcIiBmaWxsPVwidXJsKCNid3NxdWFyZTJweClcIiBzdHJva2Utd2lkdGg9XCIwXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZ3ZS1waWNrZXItYmFja2dyb3VuZFwiXG4gICAgICAgIChjbGljayk9XCJvbkFscGhhQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgJ2JhY2tncm91bmQtaW1hZ2UnOiAnbGluZWFyLWdyYWRpZW50KCAnICsgY29sb3IgKyAnICwgdHJhbnNwYXJlbnQpJyB9XCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZ3ZS1rbm9iXCJcbiAgICAgICAgY2RrRHJhZ0JvdW5kYXJ5PVwiLmZ3ZS1hbHBoYS1waWNrZXJcIlxuICAgICAgICBjZGtEcmFnTG9ja0F4aXM9XCJ5XCJcbiAgICAgICAgY2RrRHJhZ1xuICAgICAgICBbY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb25dPVwieyB4OiAzLCB5OiBhbHBoYUtub2JPZmZzZXQgfVwiXG4gICAgICAgIChjZGtEcmFnTW92ZWQpPVwib25BbHBoYURyYWcoJGV2ZW50KVwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImNvbG9yXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZ3ZS1tdC1zXCIgKm5nSWY9XCIhcGFsZXR0ZU9ubHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZndlLXR5cGUtc2VsZWN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZndlLXR5cGUtaW5kaWNhdG9yXCIgKGNsaWNrKT1cImlzU2VsZWN0T3BlbiA9ICFpc1NlbGVjdE9wZW5cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmd2UtaW5wdXQtdHlwZVwiPnt7IGlucHV0VHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgPGkgY2xhc3M9XCJmd2UtaWNvbiBmd2UtaWNvbi1hcnJvd3MtY29sbGFwc2VcIj48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmd2UtcG9wb3ZlclwiICpuZ0lmPVwiaXNTZWxlY3RPcGVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmd2UtdHlwZS1pdGVtXCIgKGNsaWNrKT1cIm9uQ2hhbmdlVHlwZSgnSEVYJylcIiBbY2xhc3MuZndlLXNlbGVjdGVkXT1cImlucHV0VHlwZSA9PT0gJ0hFWCdcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZ3ZS1pY29uIGZ3ZS1pY29uLW1lbnUtY2hlY2tcIj48L2k+IEhFWFxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZ3ZS10eXBlLWl0ZW1cIiAoY2xpY2spPVwib25DaGFuZ2VUeXBlKCdSR0InKVwiIFtjbGFzcy5md2Utc2VsZWN0ZWRdPVwiaW5wdXRUeXBlID09PSAnUkdCJ1wiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZndlLWljb24gZndlLWljb24tbWVudS1jaGVja1wiPjwvaT4gUkdCXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZndlLWQtZmxleFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlucHV0VHlwZSA9PT0gJ0hFWCdcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZndlLWlucHV0LXRleHQgZndlLWhleC1pbnB1dFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiaGV4SW5wdXRDb2xvclwiIChibHVyKT1cIm9uSGV4Qmx1cigpXCIgKGlucHV0KT1cIm9uSGV4SW5wdXQoKVwiIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbnB1dFR5cGUgPT09ICdSR0InXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZ3ZS1pbnB1dC10ZXh0IGZ3ZS1yZWQtaW5wdXRcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFsobmdNb2RlbCldPVwicmVkSW5wdXRcIiAoaW5wdXQpPVwib25SZ2JJbnB1dChyZWRJbnB1dCwgJ3InKVwiIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZ3ZS1pbnB1dC10ZXh0IGZ3ZS1ncmVlbi1pbnB1dFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgWyhuZ01vZGVsKV09XCJncmVlbklucHV0XCIgKGlucHV0KT1cIm9uUmdiSW5wdXQoZ3JlZW5JbnB1dCwgJ2cnKVwiIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZ3ZS1pbnB1dC10ZXh0IGZ3ZS1ibHVlLWlucHV0XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCIgbWF4PVwiMjU1XCIgWyhuZ01vZGVsKV09XCJibHVlSW5wdXRcIiAoaW5wdXQpPVwib25SZ2JJbnB1dChibHVlSW5wdXQsICdiJylcIiAvPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZ3ZS1pbnB1dC10ZXh0IGZ3ZS1hbHBoYS1pbnB1dCBmd2UtbWwtYXV0b1wiICpuZ0lmPVwidXNlQWxwaGFcIj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCIgbWF4PVwiMTAwXCIgWyhuZ01vZGVsKV09XCJhbHBoYUlucHV0XCIgKGlucHV0KT1cIm9uQWxwaGFJbnB1dChhbHBoYUlucHV0KVwiIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmd2UtcGVyY2VudC1jaGFyXCI+JTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZ3ZS1tdC14cyBmd2UtY29sb3ItZ3JpZFwiICpuZ0lmPVwicGFsZXR0ZSAmJiBwYWxldHRlLmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmd2UtcmVtb3ZlLWNvbG9yLWJ1dHRvblwiIChjbGljayk9XCJvblJlbW92ZUNvbG9yKClcIj5cbiAgICAgIDxzdmdcbiAgICAgICAgY2xhc3M9XCJmd2Utbm8tY29sb3ItcGF0dGVyblwiXG4gICAgICAgIHZlcnNpb249XCIxLjFcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcbiAgICAgICAgaWQ9XCJjYW52YXMxXCJcbiAgICAgICAgd2lkdGg9XCIxOFwiXG4gICAgICAgIGhlaWdodD1cIjE4XCJcbiAgICAgID5cbiAgICAgICAgPGRlZnM+XG4gICAgICAgICAgPHBhdHRlcm4gaWQ9XCJid3NxdWFyZTJweFwiIHdpZHRoPVwiNFwiIGhlaWdodD1cIjRcIiBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiBzdHJva2U9XCJub25lXCIgZmlsbD1cIiNmZmZmZmZcIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiBzdHJva2U9XCJub25lXCIgZmlsbD1cIiNlMmU1ZThcIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjBcIiB5PVwiMlwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiBzdHJva2U9XCJub25lXCIgZmlsbD1cIiNlMmU1ZThcIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMlwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjJcIiBzdHJva2U9XCJub25lXCIgZmlsbD1cIiNmZmZmZmZcIiAvPlxuICAgICAgICAgIDwvcGF0dGVybj5cbiAgICAgICAgPC9kZWZzPlxuICAgICAgICA8cmVjdCB4PVwiMFwiIHk9XCIwXCIgcng9XCIwXCIgcnk9XCIwXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgZmlsbD1cInVybCgjYndzcXVhcmUycHgpXCIgc3Ryb2tlLXdpZHRoPVwiMFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICAgIDxpIGNsYXNzPVwiZndlLWljb24gZndlLWljb24tbWVudS1jaGVja1wiIFtjbGFzcy5md2UtY29sb3ItdGV4dF09XCIhY29sb3JcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sb3JJdGVtIG9mIHBhbGV0dGVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmd2UtY29sb3ItaXRlbVwiXG4gICAgICAgIFtjbGFzcy5md2Utd2hpdGUtaXRlbV09XCJjb2xvckl0ZW0udG9VcHBlckNhc2UoKSA9PT0gJyNGRkZGRkYnXCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiY29sb3JJdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cImNvbG9yID0gY29sb3JJdGVtXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJmd2UtaWNvbiBmd2UtaWNvbi1tZW51LWNoZWNrXCIgKm5nSWY9XCJjb2xvckl0ZW0udG9VcHBlckNhc2UoKSA9PT0gY29sb3JcIj48L2k+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|