@ieeesa-npm/presentation 0.13.2 → 0.13.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/assets/constants.json +8 -0
- package/esm2022/lib/components/color-picker/color-picker.component.mjs +157 -0
- package/esm2022/lib/components/data-table/data-table.component.mjs +3 -3
- package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +15 -3
- package/esm2022/lib/components/search/search.component.mjs +1 -1
- package/esm2022/lib/components/select/select.component.mjs +11 -4
- package/esm2022/lib/directives/dynamic-form-field/dynamic-form-field.directive.mjs +10 -2
- package/esm2022/lib/models/color-format.model.mjs +13 -0
- package/esm2022/lib/models/field-config.model.mjs +1 -1
- package/esm2022/lib/models/form-control-types.model.mjs +2 -1
- package/esm2022/lib/models/select-opened-state.model.mjs +2 -0
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/ieeesa-npm-presentation.mjs +204 -10
- package/fesm2022/ieeesa-npm-presentation.mjs.map +1 -1
- package/lib/components/chips/chips.component.d.ts +8 -0
- package/lib/components/color-picker/color-picker.component.d.ts +64 -0
- package/lib/components/dynamic-form/dynamic-form.component.d.ts +10 -1
- package/lib/components/select/select.component.d.ts +3 -1
- package/lib/directives/dynamic-form-field/dynamic-form-field.directive.d.ts +3 -1
- package/lib/models/color-format.model.d.ts +9 -0
- package/lib/models/field-config.model.d.ts +12 -0
- package/lib/models/form-control-types.model.d.ts +2 -1
- package/lib/models/select-opened-state.model.d.ts +4 -0
- package/package.json +3 -2
- package/public-api.d.ts +3 -0
- package/src/lib/assets/constants.json +8 -0
|
@@ -244,5 +244,13 @@
|
|
|
244
244
|
"defaultWelcomeBgColor": "#C0DCED",
|
|
245
245
|
"timePicker": {
|
|
246
246
|
"defaultTimeFormat": 12
|
|
247
|
+
},
|
|
248
|
+
"colorPicker": {
|
|
249
|
+
"selectLabel": "Select",
|
|
250
|
+
"cancelLabel": "Cancel",
|
|
251
|
+
"defaultColor": "#F4F3F3",
|
|
252
|
+
"ariaLabel": "Color Picker",
|
|
253
|
+
"ariaDescription": "Choose background color.",
|
|
254
|
+
"ariaDescribedById": "ariaColorPicker"
|
|
247
255
|
}
|
|
248
256
|
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { NgxColorsModule, NgxColorsTriggerDirective } from 'ngx-colors';
|
|
4
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
6
|
+
import { FormErrorComponent } from '../form-error/form-error.component';
|
|
7
|
+
import { FormControlType } from '../../models/form-control-types.model';
|
|
8
|
+
import { ColorFormat, ColorsAnimation } from '../../models/color-format.model';
|
|
9
|
+
import { FormSupportTextComponent } from '../form-support-text/form-support-text.component';
|
|
10
|
+
import * as constants from '../../assets/constants.json';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "../../services/form-utility.service";
|
|
13
|
+
import * as i2 from "@angular/common";
|
|
14
|
+
import * as i3 from "@angular/forms";
|
|
15
|
+
import * as i4 from "@angular/material/form-field";
|
|
16
|
+
import * as i5 from "ngx-colors";
|
|
17
|
+
export class ColorPickerComponent {
|
|
18
|
+
constructor(
|
|
19
|
+
// eslint-disable-next-line no-unused-vars
|
|
20
|
+
formUtilityService // eslint-disable-next-line no-empty-function
|
|
21
|
+
) {
|
|
22
|
+
this.formUtilityService = formUtilityService;
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
this.colorPickerTexts = constants;
|
|
25
|
+
this.colorPickerChange = new EventEmitter();
|
|
26
|
+
this.colorPickerSliderChange = new EventEmitter();
|
|
27
|
+
this.canShowPalette = false;
|
|
28
|
+
this.overlayClassName = 'ieeesa-color-picker__overlay';
|
|
29
|
+
this.colorFormat = ColorFormat.hex;
|
|
30
|
+
this.colorAnimation = ColorsAnimation.popup;
|
|
31
|
+
this.formControlName = 'colorPicker';
|
|
32
|
+
this.paletteSelectLabel = this.colorPickerTexts?.colorPicker?.selectLabel;
|
|
33
|
+
this.paletteCancelLabel = this.colorPickerTexts?.colorPicker?.cancelLabel;
|
|
34
|
+
this.isColorCodeLabelNeeded = true;
|
|
35
|
+
this.isArrowIconNeeded = true;
|
|
36
|
+
this.canHideTextInput = false;
|
|
37
|
+
this.canHideColorPicker = false;
|
|
38
|
+
}
|
|
39
|
+
ngOnInit() {
|
|
40
|
+
this.group =
|
|
41
|
+
this.group ?? this.formUtilityService.getFormGroup(this.formControlName);
|
|
42
|
+
this.config =
|
|
43
|
+
this.config ??
|
|
44
|
+
this.formUtilityService.getFormFieldConfig(this.formControlName, FormControlType.COLOR_PICKER);
|
|
45
|
+
if (this.config) {
|
|
46
|
+
this.colorPickerLabel = this.config?.label ?? this.colorPickerLabel;
|
|
47
|
+
this.palette = this.config?.palette ?? this.palette;
|
|
48
|
+
this.defaultColor = this.config?.defaultColor ?? this.defaultColor;
|
|
49
|
+
this.colorFormat = this.config?.colorFormat ?? this.colorFormat;
|
|
50
|
+
this.overlayClassName =
|
|
51
|
+
this.config?.overlayClassName ?? this.overlayClassName;
|
|
52
|
+
this.isColorCodeLabelNeeded =
|
|
53
|
+
this.config?.isColorCodeLabelNeeded ?? this.isColorCodeLabelNeeded;
|
|
54
|
+
this.isArrowIconNeeded =
|
|
55
|
+
this.config?.isArrowIconNeeded ?? this.isArrowIconNeeded;
|
|
56
|
+
this.canHideTextInput =
|
|
57
|
+
this.config?.canHideTextInput ?? this.canHideTextInput;
|
|
58
|
+
this.canHideColorPicker =
|
|
59
|
+
this.config?.canHideColorPicker ?? this.canHideColorPicker;
|
|
60
|
+
}
|
|
61
|
+
this.group.get(this.config.controlName)?.setValue(this.defaultColor);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Sets the color to form group control.
|
|
65
|
+
* @memberof ColorPickerComponent
|
|
66
|
+
* @param {string} color
|
|
67
|
+
* @returns {void}
|
|
68
|
+
*/
|
|
69
|
+
inputChange(color) {
|
|
70
|
+
this.defaultColor = color;
|
|
71
|
+
this.group?.get(this.config?.controlName)?.setValue(color);
|
|
72
|
+
this.colorPickerChange.emit(color);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Sets canShowPalette to true when the palette is opened.
|
|
76
|
+
* @memberof ColorPickerComponent
|
|
77
|
+
* @returns {void}
|
|
78
|
+
*/
|
|
79
|
+
onOpenPalette() {
|
|
80
|
+
this.canShowPalette = true;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Sets canShowPalette to false when the palette is closed.
|
|
84
|
+
* @memberof ColorPickerComponent
|
|
85
|
+
* @returns {void}
|
|
86
|
+
*/
|
|
87
|
+
onClosePalette() {
|
|
88
|
+
this.canShowPalette = false;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Gets triggered when the the alpha, hue or Lightness sliders are changed
|
|
92
|
+
* @param {string} color
|
|
93
|
+
*/
|
|
94
|
+
onSliderChange(color) {
|
|
95
|
+
this.colorPickerSliderChange.emit(color);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Toggles the palette panel.
|
|
99
|
+
* @memberof ColorPickerComponent
|
|
100
|
+
* @returns {void}
|
|
101
|
+
*/
|
|
102
|
+
togglePalette() {
|
|
103
|
+
this.canShowPalette = !this.canShowPalette;
|
|
104
|
+
if (this.canShowPalette)
|
|
105
|
+
this.colorPickerDirective?.openPanel();
|
|
106
|
+
else
|
|
107
|
+
this.colorPickerDirective?.closePanel();
|
|
108
|
+
}
|
|
109
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorPickerComponent, deps: [{ token: i1.FormUtilityService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
110
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColorPickerComponent, isStandalone: true, selector: "ieeesa-color-picker", inputs: { defaultColor: "defaultColor", palette: "palette", overlayClassName: "overlayClassName", colorFormat: "colorFormat", colorAnimation: "colorAnimation", formControlName: "formControlName", paletteSelectLabel: "paletteSelectLabel", paletteCancelLabel: "paletteCancelLabel", colorPickerLabel: "colorPickerLabel", isColorCodeLabelNeeded: "isColorCodeLabelNeeded", isArrowIconNeeded: "isArrowIconNeeded", canHideTextInput: "canHideTextInput", canHideColorPicker: "canHideColorPicker" }, outputs: { colorPickerChange: "colorPickerChange", colorPickerSliderChange: "colorPickerSliderChange" }, viewQueries: [{ propertyName: "colorPickerDirective", first: true, predicate: NgxColorsTriggerDirective, descendants: true, static: true }], ngImport: i0, template: "<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.colorPicker?.ariaLabel\"\r\n [ariaDescription]=\"colorPickerTexts?.colorPicker?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.colorPicker?.ariaLabel\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.colorPicker?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n", styles: [".ieeesa-color-picker .preview{border-radius:0!important;box-shadow:none!important;padding:0!important}.ieeesa-color-picker .preview .preview-background{background-image:none!important}.ieeesa-color-picker .preview .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker .preview .circle.colornull{background:linear-gradient(135deg,#ecececb3 0% 45%,#f4f3f3 50%,#ecececb3 55% 100%)}.ieeesa-color-picker__label-left{display:flex}.ieeesa-color-picker__label-top{display:block}.ieeesa-color-picker--selected{border:1px solid #000000;padding:6px 8px 6px 12px;border-radius:2px}.ieeesa-color-picker__toggle-icon{border:none;background:#fff}.ieeesa-color-picker__overlay .opened .colors .circle,.ieeesa-color-picker__overlay .opened .colors .circle .selected{border-radius:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: NgxColorsModule }, { kind: "component", type: i5.NgxColorsComponent, selector: "ngx-colors" }, { kind: "directive", type: i5.NgxColorsTriggerDirective, selector: "[ngx-colors-trigger]", inputs: ["colorsAnimation", "palette", "format", "position", "hideTextInput", "hideColorPicker", "attachTo", "overlayClassName", "colorPickerControls", "acceptLabel", "cancelLabel"], outputs: ["change", "input", "slider", "close", "open"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormErrorComponent, selector: "ieeesa-form-error", inputs: ["formGroup", "config", "submitResponse"] }, { kind: "component", type: FormSupportTextComponent, selector: "ieeesa-form-support-text", inputs: ["formGroup", "config"], outputs: ["supportTextLinkClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
111
|
+
}
|
|
112
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorPickerComponent, decorators: [{
|
|
113
|
+
type: Component,
|
|
114
|
+
args: [{ selector: 'ieeesa-color-picker', standalone: true, imports: [
|
|
115
|
+
CommonModule,
|
|
116
|
+
FormsModule,
|
|
117
|
+
MatFormFieldModule,
|
|
118
|
+
NgxColorsModule,
|
|
119
|
+
ReactiveFormsModule,
|
|
120
|
+
FormErrorComponent,
|
|
121
|
+
FormSupportTextComponent,
|
|
122
|
+
], encapsulation: ViewEncapsulation.None, template: "<div\r\n [formGroup]=\"group\"\r\n [ngClass]=\"\r\n config?.isLabelAlignedLeft\r\n ? 'ieeesa-color-picker__label-left'\r\n : 'ieeesa-color-picker__label-top'\r\n \"\r\n>\r\n <mat-label\r\n class=\"ieeesa-body-sm-14 ieeesa-color-picker__label\"\r\n *ngIf=\"colorPickerLabel\"\r\n >{{ colorPickerLabel }}</mat-label\r\n >\r\n <div class=\"d-flex\">\r\n <ngx-colors\r\n class=\"ieeesa-color-picker\"\r\n ngx-colors-trigger\r\n [acceptLabel]=\"paletteSelectLabel\"\r\n [cancelLabel]=\"paletteCancelLabel\"\r\n [palette]=\"palette\"\r\n (input)=\"inputChange($event)\"\r\n (open)=\"onOpenPalette()\"\r\n (close)=\"onClosePalette()\"\r\n (slider)=\"onSliderChange($event)\"\r\n [overlayClassName]=\"overlayClassName\"\r\n [formControlName]=\"config.controlName\"\r\n [format]=\"colorFormat\"\r\n [hideTextInput]=\"canHideTextInput\"\r\n [colorsAnimation]=\"colorAnimation\"\r\n [hideColorPicker]=\"canHideColorPicker\"\r\n [ariaLabel]=\"colorPickerTexts?.colorPicker?.ariaLabel\"\r\n [ariaDescription]=\"colorPickerTexts?.colorPicker?.ariaDescription\"\r\n >\r\n </ngx-colors>\r\n <button\r\n class=\"ieeesa-color-picker__toggle-icon\"\r\n *ngIf=\"isArrowIconNeeded\"\r\n type=\"button\"\r\n (click)=\"togglePalette()\"\r\n [attr.aria-label]=\"colorPickerTexts?.colorPicker?.ariaLabel\"\r\n [attr.aria-describedby]=\"colorPickerTexts?.colorPicker?.ariaDescribedById\"\r\n >\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"canShowPalette ? 'fa-caret-up' : 'fa-caret-down'\"\r\n ></i>\r\n </button>\r\n <span\r\n class=\"ieeesa-color-picker--selected ieeesa-body-md-14\"\r\n *ngIf=\"isColorCodeLabelNeeded && defaultColor\"\r\n >{{ defaultColor }}</span\r\n >\r\n </div>\r\n <ieeesa-form-error [formGroup]=\"group\" [config]=\"config\"> </ieeesa-form-error>\r\n <ieeesa-form-support-text\r\n [formGroup]=\"group\"\r\n [config]=\"config\"\r\n ></ieeesa-form-support-text>\r\n</div>\r\n", styles: [".ieeesa-color-picker .preview{border-radius:0!important;box-shadow:none!important;padding:0!important}.ieeesa-color-picker .preview .preview-background{background-image:none!important}.ieeesa-color-picker .preview .circle{border-radius:0!important;height:30px!important;width:30px!important}.ieeesa-color-picker .preview .circle.colornull{background:linear-gradient(135deg,#ecececb3 0% 45%,#f4f3f3 50%,#ecececb3 55% 100%)}.ieeesa-color-picker__label-left{display:flex}.ieeesa-color-picker__label-top{display:block}.ieeesa-color-picker--selected{border:1px solid #000000;padding:6px 8px 6px 12px;border-radius:2px}.ieeesa-color-picker__toggle-icon{border:none;background:#fff}.ieeesa-color-picker__overlay .opened .colors .circle,.ieeesa-color-picker__overlay .opened .colors .circle .selected{border-radius:0!important}\n"] }]
|
|
123
|
+
}], ctorParameters: function () { return [{ type: i1.FormUtilityService }]; }, propDecorators: { colorPickerDirective: [{
|
|
124
|
+
type: ViewChild,
|
|
125
|
+
args: [NgxColorsTriggerDirective, { static: true }]
|
|
126
|
+
}], colorPickerChange: [{
|
|
127
|
+
type: Output
|
|
128
|
+
}], colorPickerSliderChange: [{
|
|
129
|
+
type: Output
|
|
130
|
+
}], defaultColor: [{
|
|
131
|
+
type: Input
|
|
132
|
+
}], palette: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], overlayClassName: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], colorFormat: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], colorAnimation: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], formControlName: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], paletteSelectLabel: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], paletteCancelLabel: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], colorPickerLabel: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], isColorCodeLabelNeeded: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}], isArrowIconNeeded: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], canHideTextInput: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], canHideColorPicker: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}] } });
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXNlbnRhdGlvbi9zcmMvbGliL2NvbXBvbmVudHMvY29sb3ItcGlja2VyL2NvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2NvbG9yLXBpY2tlci9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hFLE9BQU8sRUFBYSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUc1RixPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7O0FBaUJ6RCxNQUFNLE9BQU8sb0JBQW9CO0lBdUIvQjtJQUNFLDBDQUEwQztJQUNsQyxrQkFBc0MsQ0FBQyw2Q0FBNkM7O1FBQXBGLHVCQUFr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LElBQUksRUFBRTtnQkFNNUMsaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFDRSxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ3hDb2xvcnNNb2R1bGUsIE5neENvbG9yc1RyaWdnZXJEaXJlY3RpdmUgfSBmcm9tICduZ3gtY29sb3JzJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IEZvcm1FcnJvckNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZXJyb3IvZm9ybS1lcnJvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybS1jb250cm9sLXR5cGVzLm1vZGVsJztcclxuaW1wb3J0IHsgQ29sb3JGb3JtYXQsIENvbG9yc0FuaW1hdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9jb2xvci1mb3JtYXQubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtU3VwcG9ydFRleHRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLXN1cHBvcnQtdGV4dC9mb3JtLXN1cHBvcnQtdGV4dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGaWVsZENvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscy9maWVsZC1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLXV0aWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2llZWVzYS1jb2xvci1waWNrZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBOZ3hDb2xvcnNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgRm9ybUVycm9yQ29tcG9uZW50LFxyXG4gICAgRm9ybVN1cHBvcnRUZXh0Q29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29sb3ItcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbG9yUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKE5neENvbG9yc1RyaWdnZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29sb3JQaWNrZXJEaXJlY3RpdmUhOiBOZ3hDb2xvcnNUcmlnZ2VyRGlyZWN0aXZlO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29sb3JQaWNrZXJUZXh0czogYW55ID0gY29uc3RhbnRzO1xyXG4gIGdyb3VwITogRm9ybUdyb3VwO1xyXG4gIGNvbmZpZyE6IEZpZWxkQ29uZmlnO1xyXG4gIEBPdXRwdXQoKSBjb2xvclBpY2tlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBjb2xvclBpY2tlclNsaWRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRDb2xvciE6IHN0cmluZztcclxuICBjYW5TaG93UGFsZXR0ZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHBhbGV0dGUhOiBzdHJpbmdbXTtcclxuICBASW5wdXQoKSBvdmVybGF5Q2xhc3NOYW1lID0gJ2llZWVzYS1jb2xvci1waWNrZXJfX292ZXJsYXknO1xyXG4gIEBJbnB1dCgpIGNvbG9yRm9ybWF0ID0gQ29sb3JGb3JtYXQuaGV4O1xyXG4gIEBJbnB1dCgpIGNvbG9yQW5pbWF0aW9uID0gQ29sb3JzQW5pbWF0aW9uLnBvcHVwO1xyXG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZSA9ICdjb2xvclBpY2tlcic7XHJcbiAgQElucHV0KCkgcGFsZXR0ZVNlbGVjdExhYmVsID0gdGhpcy5jb2xvclBpY2tlclRleHRzPy5jb2xvclBpY2tlcj8uc2VsZWN0TGFiZWw7XHJcbiAgQElucHV0KCkgcGFsZXR0ZUNhbmNlbExhYmVsID0gdGhpcy5jb2xvclBpY2tlclRleHRzPy5jb2xvclBpY2tlcj8uY2FuY2VsTGFiZWw7XHJcbiAgQElucHV0KCkgY29sb3JQaWNrZXJMYWJlbCE6IHN0cmluZztcclxuICBASW5wdXQoKSBpc0NvbG9yQ29kZUxhYmVsTmVlZGVkID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc0Fycm93SWNvbk5lZWRlZCA9IHRydWU7XHJcbiAgQElucHV0KCkgY2FuSGlkZVRleHRJbnB1dCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNhbkhpZGVDb2xvclBpY2tlciA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGZvcm1VdGlsaXR5U2VydmljZTogRm9ybVV0aWxpdHlTZXJ2aWNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZ3JvdXAgPVxyXG4gICAgICB0aGlzLmdyb3VwID8/IHRoaXMuZm9ybVV0aWxpdHlTZXJ2aWNlLmdldEZvcm1Hcm91cCh0aGlzLmZvcm1Db250cm9sTmFtZSk7XHJcbiAgICB0aGlzLmNvbmZpZyA9XHJcbiAgICAgIHRoaXMuY29uZmlnID8/XHJcbiAgICAgIHRoaXMuZm9ybVV0aWxpdHlTZXJ2aWNlLmdldEZvcm1GaWVsZENvbmZpZyhcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sTmFtZSxcclxuICAgICAgICBGb3JtQ29udHJvbFR5cGUuQ09MT1JfUElDS0VSXHJcbiAgICAgICk7XHJcbiAgICBpZiAodGhpcy5jb25maWcpIHtcclxuICAgICAgdGhpcy5jb2xvclBpY2tlckxhYmVsID0gdGhpcy5jb25maWc/LmxhYmVsID8/IHRoaXMuY29sb3JQaWNrZXJMYWJlbDtcclxuICAgICAgdGhpcy5wYWxldHRlID0gdGhpcy5jb25maWc/LnBhbGV0dGUgPz8gdGhpcy5wYWxldHRlO1xyXG4gICAgICB0aGlzLmRlZmF1bHRDb2xvciA9IHRoaXMuY29uZmlnPy5kZWZhdWx0Q29sb3IgPz8gdGhpcy5kZWZhdWx0Q29sb3I7XHJcbiAgICAgIHRoaXMuY29sb3JGb3JtYXQgPSB0aGlzLmNvbmZpZz8uY29sb3JGb3JtYXQgPz8gdGhpcy5jb2xvckZvcm1hdDtcclxuICAgICAgdGhpcy5vdmVybGF5Q2xhc3NOYW1lID1cclxuICAgICAgICB0aGlzLmNvbmZpZz8ub3ZlcmxheUNsYXNzTmFtZSA/PyB0aGlzLm92ZXJsYXlDbGFzc05hbWU7XHJcbiAgICAgIHRoaXMuaXNDb2xvckNvZGVMYWJlbE5lZWRlZCA9XHJcbiAgICAgICAgdGhpcy5jb25maWc/LmlzQ29sb3JDb2RlTGFiZWxOZWVkZWQgPz8gdGhpcy5pc0NvbG9yQ29kZUxhYmVsTmVlZGVkO1xyXG4gICAgICB0aGlzLmlzQXJyb3dJY29uTmVlZGVkID1cclxuICAgICAgICB0aGlzLmNvbmZpZz8uaXNBcnJvd0ljb25OZWVkZWQgPz8gdGhpcy5pc0Fycm93SWNvbk5lZWRlZDtcclxuICAgICAgdGhpcy5jYW5IaWRlVGV4dElucHV0ID1cclxuICAgICAgICB0aGlzLmNvbmZpZz8uY2FuSGlkZVRleHRJbnB1dCA/PyB0aGlzLmNhbkhpZGVUZXh0SW5wdXQ7XHJcbiAgICAgIHRoaXMuY2FuSGlkZUNvbG9yUGlja2VyID1cclxuICAgICAgICB0aGlzLmNvbmZpZz8uY2FuSGlkZUNvbG9yUGlja2VyID8/IHRoaXMuY2FuSGlkZUNvbG9yUGlja2VyO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncm91cC5nZXQodGhpcy5jb25maWcuY29udHJvbE5hbWUpPy5zZXRWYWx1ZSh0aGlzLmRlZmF1bHRDb2xvcik7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbG9yIHRvIGZvcm0gZ3JvdXAgY29udHJvbC5cclxuICAgKiBAbWVtYmVyb2YgQ29sb3JQaWNrZXJDb21wb25lbnRcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cclxuICBpbnB1dENoYW5nZShjb2xvcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlZmF1bHRDb2xvciA9IGNvbG9yO1xyXG4gICAgdGhpcy5ncm91cD8uZ2V0KHRoaXMuY29uZmlnPy5jb250cm9sTmFtZSk/LnNldFZhbHVlKGNvbG9yKTtcclxuICAgIHRoaXMuY29sb3JQaWNrZXJDaGFuZ2UuZW1pdChjb2xvcik7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgY2FuU2hvd1BhbGV0dGUgdG8gdHJ1ZSB3aGVuIHRoZSBwYWxldHRlIGlzIG9wZW5lZC5cclxuICAgKiBAbWVtYmVyb2YgQ29sb3JQaWNrZXJDb21wb25lbnRcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cclxuICBvbk9wZW5QYWxldHRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW5TaG93UGFsZXR0ZSA9IHRydWU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgY2FuU2hvd1BhbGV0dGUgdG8gZmFsc2Ugd2hlbiB0aGUgcGFsZXR0ZSBpcyBjbG9zZWQuXHJcbiAgICogQG1lbWJlcm9mIENvbG9yUGlja2VyQ29tcG9uZW50XHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgb25DbG9zZVBhbGV0dGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhblNob3dQYWxldHRlID0gZmFsc2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHRoZSBhbHBoYSwgaHVlIG9yIExpZ2h0bmVzcyBzbGlkZXJzIGFyZSBjaGFuZ2VkXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAgICovXHJcbiAgb25TbGlkZXJDaGFuZ2UoY29sb3I6IHN0cmluZykge1xyXG4gICAgdGhpcy5jb2xvclBpY2tlclNsaWRlckNoYW5nZS5lbWl0KGNvbG9yKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlcyB0aGUgcGFsZXR0ZSBwYW5lbC5cclxuICAgKiBAbWVtYmVyb2YgQ29sb3JQaWNrZXJDb21wb25lbnRcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cclxuICB0b2dnbGVQYWxldHRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW5TaG93UGFsZXR0ZSA9ICF0aGlzLmNhblNob3dQYWxldHRlO1xyXG4gICAgaWYgKHRoaXMuY2FuU2hvd1BhbGV0dGUpIHRoaXMuY29sb3JQaWNrZXJEaXJlY3RpdmU/Lm9wZW5QYW5lbCgpO1xyXG4gICAgZWxzZSB0aGlzLmNvbG9yUGlja2VyRGlyZWN0aXZlPy5jbG9zZVBhbmVsKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBbZm9ybUdyb3VwXT1cImdyb3VwXCJcclxuICBbbmdDbGFzc109XCJcclxuICAgIGNvbmZpZz8uaXNMYWJlbEFsaWduZWRMZWZ0XHJcbiAgICAgID8gJ2llZWVzYS1jb2xvci1waWNrZXJfX2xhYmVsLWxlZnQnXHJcbiAgICAgIDogJ2llZWVzYS1jb2xvci1waWNrZXJfX2xhYmVsLXRvcCdcclxuICBcIlxyXG4+XHJcbiAgPG1hdC1sYWJlbFxyXG4gICAgY2xhc3M9XCJpZWVlc2EtYm9keS1zbS0xNCBpZWVlc2EtY29sb3ItcGlja2VyX19sYWJlbFwiXHJcbiAgICAqbmdJZj1cImNvbG9yUGlja2VyTGFiZWxcIlxyXG4gICAgPnt7IGNvbG9yUGlja2VyTGFiZWwgfX08L21hdC1sYWJlbFxyXG4gID5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICA8bmd4LWNvbG9yc1xyXG4gICAgICBjbGFzcz1cImllZWVzYS1jb2xvci1waWNrZXJcIlxyXG4gICAgICBuZ3gtY29sb3JzLXRyaWdnZXJcclxuICAgICAgW2FjY2VwdExhYmVsXT1cInBhbGV0dGVTZWxlY3RMYWJlbFwiXHJcbiAgICAgIFtjYW5jZWxMYWJlbF09XCJwYWxldHRlQ2FuY2VsTGFiZWxcIlxyXG4gICAgICBbcGFsZXR0ZV09XCJwYWxldHRlXCJcclxuICAgICAgKGlucHV0KT1cImlucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAob3Blbik9XCJvbk9wZW5QYWxldHRlKClcIlxyXG4gICAgICAoY2xvc2UpPVwib25DbG9zZVBhbGV0dGUoKVwiXHJcbiAgICAgIChzbGlkZXIpPVwib25TbGlkZXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIFtvdmVybGF5Q2xhc3NOYW1lXT1cIm92ZXJsYXlDbGFzc05hbWVcIlxyXG4gICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbmZpZy5jb250cm9sTmFtZVwiXHJcbiAgICAgIFtmb3JtYXRdPVwiY29sb3JGb3JtYXRcIlxyXG4gICAgICBbaGlkZVRleHRJbnB1dF09XCJjYW5IaWRlVGV4dElucHV0XCJcclxuICAgICAgW2NvbG9yc0FuaW1hdGlvbl09XCJjb2xvckFuaW1hdGlvblwiXHJcbiAgICAgIFtoaWRlQ29sb3JQaWNrZXJdPVwiY2FuSGlkZUNvbG9yUGlja2VyXCJcclxuICAgICAgW2FyaWFMYWJlbF09XCJjb2xvclBpY2tlclRleHRzPy5jb2xvclBpY2tlcj8uYXJpYUxhYmVsXCJcclxuICAgICAgW2FyaWFEZXNjcmlwdGlvbl09XCJjb2xvclBpY2tlclRleHRzPy5jb2xvclBpY2tlcj8uYXJpYURlc2NyaXB0aW9uXCJcclxuICAgID5cclxuICAgIDwvbmd4LWNvbG9ycz5cclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3M9XCJpZWVlc2EtY29sb3ItcGlja2VyX190b2dnbGUtaWNvblwiXHJcbiAgICAgICpuZ0lmPVwiaXNBcnJvd0ljb25OZWVkZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhbGV0dGUoKVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29sb3JQaWNrZXJUZXh0cz8uY29sb3JQaWNrZXI/LmFyaWFMYWJlbFwiXHJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiY29sb3JQaWNrZXJUZXh0cz8uY29sb3JQaWNrZXI/LmFyaWFEZXNjcmliZWRCeUlkXCJcclxuICAgID5cclxuICAgICAgPGlcclxuICAgICAgICBjbGFzcz1cImZhLXNvbGlkXCJcclxuICAgICAgICBbbmdDbGFzc109XCJjYW5TaG93UGFsZXR0ZSA/ICdmYS1jYXJldC11cCcgOiAnZmEtY2FyZXQtZG93bidcIlxyXG4gICAgICA+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8c3BhblxyXG4gICAgICBjbGFzcz1cImllZWVzYS1jb2xvci1waWNrZXItLXNlbGVjdGVkIGllZWVzYS1ib2R5LW1kLTE0XCJcclxuICAgICAgKm5nSWY9XCJpc0NvbG9yQ29kZUxhYmVsTmVlZGVkICYmIGRlZmF1bHRDb2xvclwiXHJcbiAgICAgID57eyBkZWZhdWx0Q29sb3IgfX08L3NwYW5cclxuICAgID5cclxuICA8L2Rpdj5cclxuICA8aWVlZXNhLWZvcm0tZXJyb3IgW2Zvcm1Hcm91cF09XCJncm91cFwiIFtjb25maWddPVwiY29uZmlnXCI+IDwvaWVlZXNhLWZvcm0tZXJyb3I+XHJcbiAgPGllZWVzYS1mb3JtLXN1cHBvcnQtdGV4dFxyXG4gICAgW2Zvcm1Hcm91cF09XCJncm91cFwiXHJcbiAgICBbY29uZmlnXT1cImNvbmZpZ1wiXHJcbiAgPjwvaWVlZXNhLWZvcm0tc3VwcG9ydC10ZXh0PlxyXG48L2Rpdj5cclxuIl19
|